2024-11-21 一站式 AI 平台生日大派对!2024-11-21 一站式 AI 平台生日大派对! 无问芯穹特别推出多项超值福利!立即参与
Skip to content
回到全部文章

在 AIStudio 开发机中安装 Xinference

Xorbits Inference (Xinference) 是一个开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并创建强大的 AI 应用。Xinference 支持 vllm/sglang/llama.cpp/transformers 推理引擎,并支持根据不同的模型指定不同的引擎。

本教程将指导您在 AIStudio 开发机上安装多推理引擎版本的 Xinference。

Xinference 官方镜像

部分用户参照 Xinference 官方文档的指导,尝试使用官方 Docker 镜像 在 AIStudio 中启动 4090 机型的开发机,发现存在异常报错。错误信息如下:

shell
2024-11-01 18:39:10  /usr/local/lib/python3.10/dist-packages/torch/cuda/__init__.py:128: UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount(). Did you run some cuda functions before calling NumCudaDevices() that might have already set an error? Error 804: forward compatibility was attempted on non supported HW (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.)

以上错误可能是因为 Nvidia Driver 兼容性的问题,可尝试更换为 A100 机型可解决该问题。但考虑到 Xinference 官方镜像不一定适用于所有环境,且 A100 并非您预期使用的推理芯片,建议不要使用 Xinference 官方镜像。

本教程将描述如何在 AIStudio 开发机中安装 Xinference 及其依赖,您可以更精确控制依赖版本,便于在 AIStudio 平台上进行定制化配置和问题排查。

环境准备

  • 基础镜像:使用 Ubuntu Ubuntu 22.04 为基础镜像:cr.infini-ai.com/infini-ai/ubuntu:22.04-20240429
  • Python 3: 以上镜像中已经预装 Python 3.10.12,符合 Xinference 官方要求
  • Pip 3: 使用 Python 3 自带的 pip,但需要遵循教程手动升级

第一部分: 安装系统级 CUDA 环境

Xinference 官方安装指南描述,如果希望能够推理所有支持的模型,可以使用 pip install "xinference[all]" 命令安装所有需要的依赖。实测由于 Llama.cpp 引擎 依赖系统级 CUDA 环境,因此需要事先安装 CUDA 环境。

NOTE

如果您不清楚什么是系统级 CUDA,请查看教程 NVIDIA CUDA Toolkit 与 PyTorch 安装中的 CUDA 的区别

Step 0 安装 NVIDIA CUDA ToolKit

推荐以 Runfile 的方式安装 NVIDIA CUDA ToolKit。

下载 Runfile 文件

进入 NVIDIA 历史版本 CUDA Toolkit 下载页:

https://developer.nvidia.com/cuda-toolkit-archive

选择 CUDA Toolkit 12.2.2,依次筛选得到 Linux Ubuntu 22.04 x86_64 的下载和安装命令。

shell
wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run

NOTE

为什么选择 CUDA Toolkit 12.2.2?

AIStudio 开发机已预装 NVIDIA Driver,使用 nvidia-smi 可查询当前 NVIDIA Driver 支持的最高 CUDA 版本(nvidia-smi 输出右上角)。

安装 CUDA Toolkit

执行安装脚本:

shell
sudo sh cuda_12.2.2_535.104.05_linux.run

稍等片刻,会提示接受 EULA 协议。输入 accept 接受协议。

┌──────────────────────────────────────────────────────────────────────────────┐
│  End User License Agreement                                                  │
│  --------------------------                                                  │
│                                                                              │
│  NVIDIA Software License Agreement and CUDA Supplement to                    │
│  Software License Agreement. Last updated: October 8, 2021                   │
│                                                                              │
│  The CUDA Toolkit End User License Agreement applies to the                  │
│  NVIDIA CUDA Toolkit, the NVIDIA CUDA Samples, the NVIDIA                    │
│  Display Driver, NVIDIA Nsight tools (Visual Studio Edition),                │
│  and the associated documentation on CUDA APIs, programming                  │
│  model and development tools. If you do not agree with the                   │
│  terms and conditions of the license agreement, then do not                  │
│  download or use the software.                                               │
│                                                                              │
│  Last updated: October 8, 2021.                                              │
│                                                                              │
│                                                                              │
│  Preface                                                                     │
│  -------                                                                     │
│                                                                              │
│──────────────────────────────────────────────────────────────────────────────│
│ Do you accept the above EULA? (accept/decline/quit):                         │
│ accept                                                                       │
└──────────────────────────────────────────────────────────────────────────────┘

同意协议后,按照提示进行安装,选择自定义安装,请务必取消选中 Driver,随后选择 Install

┌──────────────────────────────────────────────────────────────────────────────┐
│ CUDA Installer                                                               │
│ - [ ] Driver                                                                 │
│      [ ] 535.104.05                                                          │
│ + [X] CUDA Toolkit 12.2                                                      │
│   [X] CUDA Demo Suite 12.2                                                   │
│   [X] CUDA Documentation 12.2                                                │
│ - [ ] Kernel Objects                                                         │
│      [ ] nvidia-fs                                                           │
│   Options                                                                    │
│   Install                                                                    │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│ Up/Down: Move | Left/Right: Expand | 'Enter': Select | 'A': Advanced options │
└──────────────────────────────────────────────────────────────────────────────┘

安装完成后,输出如下:

shell
===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-12.2/

Please make sure that
 -   PATH includes /usr/local/cuda-12.2/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-12.2/lib64, or, add /usr/local/cuda-12.2/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-12.2/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 535.00 is required for CUDA 12.2 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
    sudo <CudaInstaller>.run --silent --driver

Logfile is /var/log/cuda-installer.log

此时 nvcc 仍不可用,需要配置 CUDA 环境变量。

配置 CUDA 环境变量

设置 PATHLD_LIBRARY_PATHCUDA_HOME(通用路径和 CUDA 12.2 特定路径):

shell
echo 'export PATH=/usr/local/cuda/bin:/usr/local/cuda-12.2/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda-12.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
echo 'export CUDA_HOME=/usr/local/cuda' >> ~/.bashrc

将 CUDA 库路径添加到 /etc/ld.so.conf

shell
echo '/usr/local/cuda/lib64' | sudo tee -a /etc/ld.so.conf
echo '/usr/local/cuda-12.2/lib64' | sudo tee -a /etc/ld.so.conf

运行 ldconfig

shell
sudo ldconfig

应用更改到当前会话:

shell
source ~/.bashrc

验证设置:

shell
echo $PATH | grep -E "cuda|cuda-12.2"
echo $LD_LIBRARY_PATH | grep -E "cuda|cuda-12.2"
echo $CUDA_HOME
ldconfig -p | grep "libcudart"

NOTE

通用路径 (/usr/local/cuda) 通常是指向最新安装版本的符号链接。

验证 nvcc 可用:

shell
nvcc --version

输出:

shell
root@is-c76fxbatxfq26ehn-devmachine-0:~# nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Aug_15_22:02:13_PDT_2023
Cuda compilation tools, release 12.2, V12.2.140
Build cuda_12.2.r12.2/compiler.33191640_0

NOTE

另一种方式是直接使用 nvidia/cuda 镜像仓库12.2.2-devel-ubuntu22.04 镜像,该同时包含 CUDA Toolkit 和 cuDNN。但由于运营商网络限制,您需要自行从 Docker Hub 下载镜像。

Step 1 安装 cuDNN

cuDNN(CUDA Deep Neural Network library)不随 CUDA Toolkit 分发,因此需要单独下载和安装。

依据 Nvidia 官方文档 Installing cuDNN on Linux 在 Ubuntu 系统中安装 cudnn9:

首先,更新系统包并安装 zlib:

bash
apt-get update
apt-get install zlib1g

使用 Ubuntu/Debian Network Installation 方法,安装 cuda-keyring package。

shell
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb

安装 cuDNN 9:

bash
sudo apt-get -y install cudnn9-cuda-12

验证 cuDNN 安装:

bash
# 检查 cuDNN 头文件
ls /usr/include/cudnn*.h

第二部分:手动处理 Llama.cpp 引擎的依赖

根据 Xinference 官方文档,Xinference 通过 llama-cpp-python 支持 gguf 格式的模型。建议根据当前使用的硬件手动安装依赖,从而获得最佳的加速效果。

为了避免 pip 的一个已知问题,先对 pip 进行升级:

shell
sudo python3 -m pip install --upgrade pip

安装支持 CUDA 的 llama-cpp-python

shell
CMAKE_ARGS="-DGGML_CUDA=on" python3 -m pip install llama-cpp-python

WARNING

Xinference 官方文档中的 llama-cpp-python 安装方式使用了 CMAKE_ARGS="-DLLAMA_CUBLAS=on" 可能有误,此处遵循 llama-cpp-python 官方的安装方式。

第三部分:安装 Xinference

如果您已顺利完成上述所有步骤,可以用以下命令安装 Xinference。该方式将安装推理所有支持的模型需要的依赖:

shell
python3 -m pip install "xinference[all]"

安装完毕后,新开 tmux 会话,设置必要的环境变量,然后启动 Xinference 服务:

shell
# 指定从 ModelScope 中下载模型:
export XINFERENCE_MODEL_SRC=modelscope
# 指定 HuggingFace 镜像网站
export HF_ENDPOINT=https://hf-mirror.com
# 默认情况下,Xinference 会使用 <HOME>/.xinference 作为主目录来存储一些必要的信息,比如日志文件和模型文件,其中 <HOME> 就是当前用户的主目录。
# 由于 AIStudio 开发机本地 rootfs 容量为 50GiB,如果已购买共享文件存储,或开发机已挂载大容量云盘或,建议修改主目录
# 比如修改主目录指向共享文件存储中的特定目录(请提前创建目录)
export XINFERENCE_HOME=/mnt/public/xinference
# 又或者修改主目录指向云盘的特定目录(请提前创建目录)
export XINFERENCE_HOME=/datadisk/xinference

启动 Xinference

shell
xinference-local --host 0.0.0.0 --port 9997

恭喜!您已经在本地拉起了 Xinference 服务。一旦 Xinference 服务运行起来,即可加载模型,提供 API 服务。

根据 Xinference 官方提供的模型列表,尝试启动一个 JINA AI 向量嵌入模型 jina-embeddings-v2-base-zh

CTRL+B + D 分离 tmux 会话,执行以下命令:

shell
xinference launch --model-name jina-embeddings-v2-base-zh --model-type embedding

输出如下:

shell
root@is-dacvkncuymixgg4v-devmachine-0:~# xinference launch --model-name jina-embeddings-v2-base-zh --model-type embedding
Launch model name: jina-embeddings-v2-base-zh with kwargs: {}
Model uid: jina-embeddings-v2-base-zh

后续步骤

  • 您可以遵循 Xinference 官方文档的使用方式来使用 Xinference API,包括使用网页、cURL 命令、命令行或者是 Xinference 的 Python SDK。
  • 使用开发机的预览 Web 应用功能,直接从智算云平台打开预览页面。详见预览开发机上运行的 Web 应用
  • 利用开发机提供的 SSH 服务和 SSH 端口转发功能,将开发机内网端口映射到本地电脑,从而实现从公网直接访问开发机内部服务。 配置方法详见 SSH 端口转发:公网访问开发机内 HTTP 服务
  • 您可以将开发机保存为镜像,以便后续使用该镜像创建开发机、推理服务等。请访问 AIStudio 平台镜像中心,在上方页面点击构建镜像按钮,选择基于运行中的开发机构建镜像。

编外

如果您只想安装必要的引擎,可以直接从 AIStudio 平台镜像中心在线构建自定义镜像。

例如,PyTorch(transformers) 引擎支持几乎所有的最新模型。在上方页面点击构建镜像按钮,选择基于 Dockerfile 构建一个只包含 Transformer 引擎的 Xinference 镜像:

dockerfile
FROM cr.infini-ai.com/infini-ai/ubuntu:22.04-20240429

RUN python3 -m pip install --upgrade pip && \
    python3 -m pip install --no-cache-dir "xinference[transformers]" sentence-transformers

等待自定义镜像构建完成,即可在 AIStudio 平台使用该镜像创建开发机、推理服务等。相比于基于运行中的开发机构建的镜像,使用 Dockerfile 构建的镜像体积将更加小,启动速度更快。

参考资料