准备镜像
镜像版本
本教程中用到基础镜像地址和配套版本关系如下表所示,请提前了解。
Step1 检查环境
- SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。
npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数
如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装NPU设备和驱动,或释放被挂载的NPU。
- 检查containerd是否安装。
containerd -v # 检查containerd是否安装
在创建CCE集群时,会选择 containerd 作为容器引擎,并默认给机器安装。如尚未安装,说明机器操作系统安装错误。需要重新纳管机器,重新安装操作系统。
- 安装nerdctl工具。nerdctl是containerd的一个客户端命令行工具,使用方式和docker命令基本一致,可用于后续镜像构建步骤中。
# 下载 nerdctl 工具,注意使用的是1.7.6 arm64版本 wget https://github.com/containerd/nerdctl/releases/download/v1.7.6/nerdctl-1.7.6-linux-arm64.tar.gz # 将程序解压至运行目录中 tar -zxf nerdctl-1.7.6-linux-arm64.tar.gz -C /usr/bin/ # 查看是否安装成功 nerdctl -v
- 安装buildkit工具。buildkit是从Docker从公司开源出来的下一代镜像构建工具,支持OCI标准的镜像构建,nerdctl需要结合buildkit一起使用。buildkit由两部分组成:
buildkitd(服务端):负责镜像构建,目前支持runc和containerd作为镜像构建环境,默认是runc。
buildkitctl(客户端):负责解析Dockerfile文件,并向服务端buildkitd发出构建请求。
- 下载并解压buildkit程序。
# 下载 buildkit 工具,注意使用的是0.15.1 arm64版本 wget https://github.com/moby/buildkit/releases/download/v0.15.1/buildkit-v0.15.1.linux-arm64.tar.gz # 创建解压的目录 mkdir /usr/local/buildkit # 解压到指定的目录 tar -zxf buildkit-v0.15.1.linux-arm64.tar.gz -C /usr/local/buildkit # 授予权限 chmod -R 777 /usr/local/buildkit
- 添加环境变量
echo 'export PATH=/usr/local/buildkit/bin:$PATH' >> /etc/profile # 注意这里的echo 要使用单引号,单引号会原样输出,双引号会解析变量 source /etc/profile # 使刚才配置生效
- 创建buildkitd的启动服务。其中都是buildkitd.service的内容。复制以下全部命令并运行即可。
cat <<EOF > /usr/lib/systemd/system/buildkitd.service [Unit] Description=buildkitd After=network.target [Service] ExecStart=/usr/local/buildkit/bin/buildkitd [Install] WantedBy=multi-user.target EOF
- 启动buildkitd的服务
# 重新加载Unit file systemctl daemon-reload # 启动服务 systemctl start buildkitd # 开机自启动 systemctl enable buildkitd # 查看状态 systemctl status buildkitd
- 如果buildkitd的服务运行状态如下图所示,则表示服务运行成功。使用Ctrl+C即可退出查看状态。
- 下载并解压buildkit程序。
Step2 获取推理镜像
建议使用官方提供的镜像部署推理服务。镜像地址{image_url}获取请参见表1。
containerd 容器引擎有命名空间的概念。Kubernetes 下使用的 containerd 默认命名空间是 k8s.io。所以在导入镜像时需要指定命令空间为 k8s.io,否则使用 crictl images 无法查询到。以下命令可选其一进行镜像拉取:
- 使用 containerd 自带的工具 ctr 进行镜像拉取。
ctr -n k8s.io images pull {image_url}
- 使用 nerdctl 工具进行镜像拉取。
nerdctl --namespace k8s.io pull {image_url}
注意:集群有多个节点,要确保每个节点都拥有镜像。
# ctr 工具查看 ctr -n k8s.io image list # 或 crictl image # nerdctl 工具查看 nerdctl --namespace k8s.io image list
Step3 制作推理镜像
获取模型软件包,并上传到机器SFS Turbo的目录下(可自定义路径),获取地址参考表1。
- 解压AscendCloud压缩包及该目录下的推理代码AscendCloud-LLM-6.3.911-xxx.zip和算子包AscendCloud-OPP-6.3.911-xxx.zip,并直接进入到llm_inference/ascend_vllm文件夹下面
unzip AscendCloud-*.zip -d ./AscendCloud && cd ./AscendCloud && unzip AscendCloud-OPP-*.zip && unzip AscendCloud-OPP-*-torch-2.1.0*.zip -d ./AscendCloud-OPP && cd .. && unzip ./AscendCloud/AscendCloud-LLM-*.zip -d ./AscendCloud/AscendCloud-LLM && cd ./AscendCloud/AscendCloud-LLM/llm_inference/ascend_vllm/
- 执行以下命令制作推理镜像。安装过程需要连接互联网git clone,请确保机器可以访问公网。
nerdctl --namespace k8s.io build -t <镜像名称>:<版本名称> --build-arg BASE_IMAGE=${base_image} .
注意:nerdctl build会去镜像仓库拉取镜像,不会直接使用本地镜像。构建前可以使用nerdctl pull命令拉取测试镜像,查看是否能拉取成功。- <镜像名称>:<版本名称>:定义镜像名称。示例:pytorch_2_1_ascend:20240606。
- ${base_image}为基础镜像地址。
如果推理需要使用NPU加速图片预处理,适配了llava-1.5模型,启动时需要设置export ENABLE_USE_DVPP=1,需要安装torchvision_npu,可放到镜像制作脚本./AscendCloud/AscendCloud-LLM/llm_inference/ascend_vllm/Dockfile中。内容如下:
git clone https://gitee.com/ascend/vision.git vision_npu cd vision_npu git checkout v0.16.0-6.0.rc3 # 安装依赖库 pip3 install -r requirement.txt # 编包 python setup.py bdist_wheel # 安装 cd dist pip install torchvision_npu-0.16.*.whl