银河麒麟V10上离线安装nvidia-container-toolkit
1.在线安装 nvidia-container-toolkit 并制作离线安装包
准备一台能够联网的并且安装了 银河麒麟V10
系统的电脑,依次执行如下命令
#配置生产存储库:
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
#安装 NVIDIA Container Toolkit 软件包,若只是在联网环境使用,到这一步就可以了。
sudo yum install -y nvidia-container-toolkit
#创建一个文件夹
mkdir nvidia-container-toolkit
#进入文件夹
cd nvidia-container-toolkit
# 下载所有依赖到创建的文件夹中
repotrack nvidia-container-toolkit
#返回上级文件夹
cd ..
#将下载好的依赖打包并导出
tar -czvf nvidia-container-toolkit.tar.gz nvidia-container-toolkit
2.离线安装nvidia-container-toolkit
将打包好的依赖导入内网的麒麟V10系统
# 解压
tar -xzvf nvidia-container-toolkit.tar.gz
cd nvidia-container-toolkit
# 安装
rpm -ivh *.rpm --nodeps
#执行nvidia-ctk命令查看是否成功安装nvidia-container-toolkit,若没有,则依次执行如下四个安装包
#若安装下列安装包时提示需依赖某个库,可直根据提示依次安装即可
nvidia-container-toolkit-base-1.17.4-1.x86_64.rpm
nvidia-container-toolkit-1.17.4-1.x86_64.rpm
libnvidia-container-tools-1.17.4-1.x86_64.rpm
libnvidia-container1-1.17.4-1.x86_64.rpm
# 执行如下命令生成默认配置文件,,文件名及目录:etc/docker/daemon.json
nvidia-ctk runtime configure
#查看etc/nvidia-container-runtime/config.toml 中的内容
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}
}
#为libnvidia-container.so.1.17.4和libnvidia-container-go.so.1.17.4共享库创建软连接, 软连接可通过在联网计算机的/lib
64中找到并导入
ln -s /lib64/libnvidia-container.so.1.17.4 /lib64/libnvidia-container.so.1
ln -s /lib64/libnvidia-container-go.so.1.17.4 /lib64/libnvidia-container-go.so
# 重启配置
systemctl daemon-reload
# 重启docker服务
systemctl restart docker
离线部署xinference为例
准备工作
- Xinference 使用 GPU 加速推理,该镜像需要在有 GPU 显卡并且安装 CUDA 的机器上运行。
- 保证 CUDA 在机器上正确安装。可以使用
nvidia-smi
检查是否正确运行。 - 镜像中的 CUDA 版本为
12.4
。为了不出现预期之外的问题,请将宿主机的 CUDA 版本和 NVIDIA Driver 版本分别升级到12.4
和550
以上。
Docker 镜像
当前,可以通过两个渠道拉取 Xinference 的官方镜像。1. 在 Dockerhub 的 xprobe/xinference
仓库里。2. Dockerhub 中的镜像会同步上传一份到阿里云公共镜像仓库中,供访问 Dockerhub 有困难的用户拉取。拉取命令:docker pull registry.cn-hangzhou.aliyuncs.com/xprobe_xinference/xinference:<tag>
。目前可用的标签包括:
nightly-main
: 这个镜像会每天从 GitHub main 分支更新制作,不保证稳定可靠。v<release version>
: 这个镜像会在 Xinference 每次发布的时候制作,通常可以认为是稳定可靠的。latest
: 这个镜像会在 Xinference 发布时指向最新的发布版本- 对于 CPU 版本,增加
-cpu
后缀,如nightly-main-cpu
自定义镜像
如果需要安装额外的依赖,可以参考 xinference/deploy/docker/Dockerfile 。请确保使用 Dockerfile 制作镜像时在 Xinference 项目的根目录下。比如:
git clone https://github.com/xorbitsai/inference.git
cd inference
docker build --progress=plain -t test -f xinference/deploy/docker/Dockerfile .
使用镜像
你可以使用如下方式在容器内启动 Xinference,同时将 9997
docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:v<your_version> xinference-local -H 0.0.0.0 --log-level debug
--gpus
必须指定,正如前文描述,镜像必须运行在有 GPU 的机器上,否则会出现错误。-H 0.0.0.0
也是必须指定的,否则在容器外无法连接到 Xinference 服务。- 可以指定多个
-e
选项赋值多个环境变量。
挂载模型目录
默认情况下,镜像中不包含任何模型文件,使用过程中会在容器内下载模型。如果需要使用已经下载好的模型,需要将宿主机的目录挂载到容器内。这种情况下,需要在运行容器时指定本地卷,并且为 Xinference 配置环境变量。
docker run -v </on/your/host>:</on/the/container> -e XINFERENCE_HOME=</on/the/container> -p 9998:9997 --gpus all xprobe/xinference:v<your_version> xinference-local -H 0.0.0.0
上述命令的原理是将主机上指定的目录挂载到容器中,并设置 XINFERENCE_HOME
环境变量指向容器内的该目录。这样,所有下载的模型文件将存储在您在主机上指定的目录中。您无需担心在 Docker 容器停止时丢失这些文件,下次运行容器时,您可以直接使用现有的模型,无需重复下载。
如果你在宿主机使用的默认路径下载的模型,由于 xinference cache 目录是用的软链的方式存储模型,需要将原文件所在的目录也挂载到容器内。例如你使用 huggingface 和 modelscope 作为模型仓库,那么需要将这两个对应的目录挂载到容器内,一般对应的 cache 目录分别在 <home_path>/.cache/huggingface 和 <home_path>/.cache/modelscope,使用的命令如下:
docker run \
-v -e XINFERENCE_HOME=</on/the/container> \
-v </your/home/path>/.xinference:/root/.xinference \
-v </your/home/path>/.cache/huggingface:/root/.cache/huggingface \
-v </your/home/path>/.cache/modelscope:/root/.cache/modelscope \
-p 9997:9997 \
--gpus all \
xprobe/xinference:v<your_version> \
xinference-local -H 0.0.0.0
使用官方 Docker 映像时,RayWorkerVllm 因 OOM 而死亡,导致模型无法加载
Docker 的 --shm-size
参数可以用来设置共享内存的大小。共享内存(/dev/shm)的默认大小是 64MB,对于 vLLM 后端来说可能不够。
你可以通过设置参数 --shm-size
来增加它的大小:
docker run --shm-size=128g ...
环境变量
XINFERENCE_MODEL_SRC
配置模型下载仓库。默认下载源是 “huggingface”,也可以设置为 “modelscope” 作为下载源。
XINFERENCE_HOME
Xinference 默认使用 <HOME>/.xinference
作为默认目录来存储模型以及日志等必要的文件。其中 <HOME>
是当前用户的主目录。可以通过配置这个环境变量来修改默认目录。
外部系统无法通过 <IP>:9997
访问 Xinference 服务
在启动 Xinference 时记得要加上 -H 0.0.0.0
参数:
xinference-local -H 0.0.0.0
那么 Xinference 服务将监听所有网络接口(而不仅限于 127.0.0.1
或 localhost
)。
如果使用的是 Docker 镜像,请在 Docker 运行命令中 加上 -p <PORT>:9997
,,你就可以通过本地机器的 <IP>:<PORT>
进行访问。
离线环境启动问题
因为拉取的镜像是使用GPU运行的,所以在启动容器时会用到 --gpus all 命令,若本地没有安装nvidia-container-toolkit,则会报"docker: Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]."错误。此时就需要考虑离线安装nvidia-container-toolkit了。离线安装请参照前文中的步骤。
安装nvidia-container-toolkit 后在执行启动容器。如果报”/usr/bin/nvidia-container-cli:error while loading shared libraries:libnvidia-container.so.1:cannot open shared object file: No such file or directory: unknown.“错误,则将联网环境中/lib64 目录下的libnvidia-container.so.1.17.4的共享库拷入内网环境,后为此共享库创建软连接。共享库加载错误均可参考次流程
加载本地模型
#进入部署的容器
docker exec -it xinference /bin/bash
#查看容器中是否有如下目录,若没有,则创建此目录
/home/xinference/cache/modelscop
# 打开一个新的窗口 将主机中的模型文件导入到容器内部
docker cp modelscope/* xinference:/home/xinference/cache/modelscop
*注意:报错模型的文件目录
home/xinference/cache/modelscop/hub/Xorbits/<your_model>
加载本地模型流程
1.注册模型,注册模型请参照网上资料进行操作。
2.启动模型,在启动模型中的自定义模型中启动已注册的本地模型。启动本地模型是使用模型路径进行加载模型,home/xinference/cache/modelscop/hub/Xorbits/<your_model>