银河麒麟V10上离线安装nvidia-container-toolkit

银河麒麟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.4550 以上。
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.1localhost)。

如果使用的是 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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值