准备镜像
步骤一:检查环境
- SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。
npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数,用来确认对应卡数已经挂载 npu-smi info -t board -i 1 | egrep -i "software|firmware" #查看驱动和固件版本
如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。
- 检查docker是否安装。
docker -v #检查docker是否安装
如尚未安装,运行以下命令安装docker。
yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64
- 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项,如果配置项存在且值为1,可跳过此步骤。
sysctl -p | grep net.ipv4.ip_forward
如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward
如果net.ipv4.ip_forward配置项不存在,执行以下命令配置IP转发。sed -i '$a\net.ipv4.ip_forward=1' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward
- 检查Super Pod ID一致,执行以下命令。
for i in {0..7}; do npu-smi info -i $i -c 0 -t spod-info;done # 查看Super Pod ID
图1 检查Super Pod ID
步骤二:获取基础镜像
建议使用官方提供的镜像部署训练服务。镜像地址{image_url}参见表4获取。
docker pull {image_url}
步骤三:制作训练镜像
进入解压后代码包目录下的Dockerfile文件同级目录(见软件包结构中的"AscendCloud-LLM代码包关键训练文件"),通过DockerFile文件构建训练镜像制作训练镜像。
安装过程需要连接互联网git clone,请确保机器环境可以访问公网。
- 进入代码包Dockerfile文件同级目录,${work_dir}指宿主机存放解压后的AscendCloud-LLM代码目录,根据实际修改。
cd ${work_dir}/llm_train/AscendFactory
- 构建新镜像。
docker build --build-arg install_type=xxx -t <镜像名称> .
如无法访问公网则需配置代理,增加`--build-arg`参数指定代理地址确保访问公网。docker build --build-arg "https_proxy=http://xxx.xxx.xxx.xxx" --build-arg "http_proxy=http://xxx.xxx.xxx.xxx" --network=host --build-arg install_type=xxx -t <镜像名称> .
<镜像名称>:定义镜像名称。示例:pytorch_2_3_ascend:20241106
install_type:安装类型,可选mindspeed-llm、llamafactory、verl、mindspeed-rl、mindspeed-mm,根据实际要求选择。
步骤四:启动容器镜像
- 启动容器镜像前请先按照参数说明修改${}中的参数,可以根据实际需要增加修改参数,启动容器命令如下:
export work_dir="自定义挂载的工作目录" # 容器内挂载的目录,如果挂载SFS可使用挂载目录 export container_work_dir="自定义挂载到容器内的工作目录" export container_name="自定义容器名称" export image_name="镜像名称" docker run -itd \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ -e ASCEND_VISIBLE_DEVICES=0-15 \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ --cpus 320 \ --memory 2048g \ --shm-size 1024g \ --net=host \ -v ${work_dir}:${container_work_dir} \ --name ${container_name} \ $image_name \ /bin/bash
参数说明:
- --name ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如ascendspeed。
- -v ${work_dir}:${container_work_dir} 代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。work_dir为宿主机中工作目录,目录下存放着训练所需代码、数据等文件。container_work_dir为要挂载到的容器中的目录。为方便两个地址可以相同。
- 容器不能挂载/home/ma-user目录,此目录为ma-user用户家目录。
- driver及npu-smi需同时挂载至容器。
- 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。
- ${image_name} 为docker镜像的ID,在宿主机上可通过docker images查询得到
- --shm-size:表示共享内存,用于多进程间通信。由于需要转换较大内存的模型文件,因此大小要求1024g及以上。
- --cpus:宿主机的 CPU 核心数,一般Snt9b机型设置为192,Snt9b23机型设置为320。
- --e ASCEND_VISIBLE_DEVICES=0-7 :设置卡号ID,一般Snt9b机型设置0-7,Snt9b23机型设置为0-15。
- --memory:一般Snt9b机型设置为1024g,Snt9b23机型设置为2048g
- 通过容器名称进入容器中。启动容器时默认用户为ma-user用户。
docker exec -it ${container_name} bash