在 AIStudio 开发机中安装 Xinference
Xorbits Inference (Xinference) 是一个开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并创建强大的 AI 应用。Xinference 支持 vllm
/sglang
/llama.cpp
/transformers
推理引擎,并支持根据不同的模型指定不同的引擎。
本教程将指导您在 AIStudio 开发机上安装多推理引擎版本的 Xinference。
Xinference 官方镜像
部分用户参照 Xinference 官方文档的指导,尝试使用官方 Docker 镜像 在 AIStudio 中启动 4090 机型的开发机,发现存在异常报错。错误信息如下:
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 的下载和安装命令。
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
执行安装脚本:
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 │
└──────────────────────────────────────────────────────────────────────────────┘
安装完成后,输出如下:
===========
= 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 环境变量
设置 PATH
、LD_LIBRARY_PATH
和 CUDA_HOME
(通用路径和 CUDA 12.2 特定路径):
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
:
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
:
sudo ldconfig
应用更改到当前会话:
source ~/.bashrc
验证设置:
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
可用:
nvcc --version
输出:
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:
apt-get update
apt-get install zlib1g
使用 Ubuntu/Debian Network Installation 方法,安装 cuda-keyring package。
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:
sudo apt-get -y install cudnn9-cuda-12
验证 cuDNN 安装:
# 检查 cuDNN 头文件
ls /usr/include/cudnn*.h
第二部分:手动处理 Llama.cpp 引擎的依赖
根据 Xinference 官方文档,Xinference 通过 llama-cpp-python
支持 gguf 格式的模型。建议根据当前使用的硬件手动安装依赖,从而获得最佳的加速效果。
为了避免 pip 的一个已知问题,先对 pip 进行升级:
sudo python3 -m pip install --upgrade pip
安装支持 CUDA 的 llama-cpp-python:
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。该方式将安装推理所有支持的模型需要的依赖:
python3 -m pip install "xinference[all]"
安装完毕后,新开 tmux
会话,设置必要的环境变量,然后启动 Xinference 服务:
# 指定从 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
xinference-local --host 0.0.0.0 --port 9997
恭喜!您已经在本地拉起了 Xinference 服务。一旦 Xinference 服务运行起来,即可加载模型,提供 API 服务。
根据 Xinference 官方提供的模型列表,尝试启动一个 JINA AI 向量嵌入模型 jina-embeddings-v2-base-zh。
先 CTRL+B
+ D
分离 tmux 会话,执行以下命令:
xinference launch --model-name jina-embeddings-v2-base-zh --model-type embedding
输出如下:
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 镜像:
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 构建的镜像体积将更加小,启动速度更快。