更新时间:2024-11-21 GMT+08:00
分享

准备镜像

镜像版本

本教程中用到基础镜像地址和配套版本关系如下表所示,请提前了解。

表1 基础容器镜像地址

镜像用途

镜像地址

配套版本

基础镜像

swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc3-py_3.9-hce_2.0.2409-aarch64-snt9b-20241112192643-c45ac6b

cann_8.0.rc3

Step1 检查环境

  1. SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。
    npu-smi info                    # 在每个实例节点上运行此命令可以看到NPU卡状态
    npu-smi info -l | grep Total    # 在每个实例节点上运行此命令可以看到总卡数

    如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装NPU设备和驱动,或释放被挂载的NPU。

  2. 检查containerd是否安装。
    containerd -v   # 检查containerd是否安装

    在创建CCE集群时,会选择 containerd 作为容器引擎,并默认给机器安装。如尚未安装,说明机器操作系统安装错误。需要重新纳管机器,重新安装操作系统。

  3. 安装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.5.0-linux-amd64.tar.gz -C /usr/bin/
    
    # 查看是否安装成功
    nerdctl -v
  4. 安装buildkit工具。buildkit是从Docker从公司开源出来的下一代镜像构建工具,支持OCI标准的镜像构建,nerdctl需要结合buildkit一起使用。buildkit由两部分组成:

    buildkitd(服务端):负责镜像构建,目前支持runc和containerd作为镜像构建环境,默认是runc。

    buildkitctl(客户端):负责解析Dockerfile文件,并向服务端buildkitd发出构建请求。

    1. 下载并解压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 -xf buildkit-v0.15.1.linux-amd64.tar.gz -C /usr/local/buildkit
      
      # 授予权限
      chmod -R 777 /usr/local/buildkit
    2. 添加环境变量
      echo 'export PATH=/usr/local/buildkit/bin:$PATH' >> /etc/profile  
      # 注意这里的echo 要使用单引号,单引号会原样输出,双引号会解析变量
      source /etc/profile  # 使刚才配置生效
    3. 创建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
    4. 启动buildkitd的服务
      # 重新加载Unit file
      systemctl daemon-reload
      # 启动服务
      systemctl start buildkitd
      # 开机自启动
      systemctl enable buildkitd
      # 查看状态
      systemctl status buildkitd

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

  1. 解压AscendCloud压缩包及该目录下的推理代码AscendCloud-LLM-6.3.910-xxx.zip,并直接进入到llm_inference/ascend_vllm文件夹下面
    unzip AscendCloud-*.zip -d ./AscendCloud && unzip ./AscendCloud/AscendCloud-OPP-*.zip -d ./AscendCloud/AscendCloud-OPP && unzip ./AscendCloud/AscendCloud-LLM-*.zip -d ./AscendCloud/AscendCloud-LLM && cd ./AscendCloud/AscendCloud-LLM/llm_inference/ascend_vllm/
  1. 执行以下命令制作推理镜像。安装过程需要连接互联网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

相关文档