华为云用户手册

  • 网卡名称错误 当训练开始时提示网卡名称错误。或者通信超时。可以使用ifconfig命令检查网卡名称配置是否正确。 比如,ifconfig看到当前机器IP对应的网卡名称为enp67s0f5,则可以设置环境变量指定该值。 图1 网卡名称错误 export GLOO_SOCKET_IFNAME=enp67s0f5 # 多机之间使用gloo通信时需要指定网口名称, export TP_SOCKET_IFNAME=enp67s0f5 # 多机之间使用TP通信时需要指定网口名称 export HCCL_SOCKET_IFNAME=enp67s0f5 # 多机之间使用HCCL通信时需要指定网口名称 关于环境变量的解释可以参考:Distributed communication package - torch.distributed — PyTorch 2.3 documentation 父主题: 常见错误原因和解决方法
  • 模型最小卡数配置 不同模型推荐的训练参数和计算规格要求如表1所示, 目前仅提供微调(SFT)及训练(PT)阶段卡数配置。一般snt9B规格为单节点8卡,Snt9B23规格为单机8卡=16*DIE,其中1*DIE等效于Snt9B中的1卡,Snt9B23规格实际训练过程中设置并行策略时2*DIE为最小单位。 * 表格中“-”代表不支持,规格与卡数中的 4*Ascend表示4卡在Snt9B中表示4卡,Snt9B23表示4*DIE,以此类推。 表1 模型最小卡数配置 支持模型参数量 训练策略类型 序列长度SEQ_LEN MindSpeed-LLM规格卡数/DIE Snt9B Snt9B23 llama3.1-8b full 4096/8192 4*Ascend lora 4*Ascend llama3.1-70b full 4096 32*Ascend lora 16*Ascend full 8192 64*Ascend lora 16*Ascend llama3.2-1b full/lora 4096/8192 1*Ascend 2*Ascend llama3.2-3b full 4096/8192 2*Ascend lora 1*Ascend 2*Ascend qwen2-0.5b full/lora 4096/8192 1*Ascend 2*Ascend qwen2-1.5b full/lora 4096/8192 1*Ascend 2*Ascend qwen2-7b full 4096 4*Ascend lora 2*Ascend full 8192 8*Ascend lora 2*Ascend qwen2-72b full 4096 32*Ascend lora 16*Ascend full 8192 64*Ascend lora 16*Ascend qwen2.5-0.5b full/lora 4096/8192 1*Ascend 2*Ascend qwen2.5-7b full 4096 2*Ascend lora 2*Ascend full 8192 2*Ascend lora 2*Ascend qwen2.5-14b full 4096 8*Ascend lora 4*Ascend full 8192 8*Ascend lora 8*Ascend qwen2.5-32b full 4096 16*Ascend lora 16*Ascend full 8192 16*Ascend lora 16*Ascend qwen2.5-72b full 4096 32*Ascend lora 16*Ascend full 8192 64*Ascend lora 16*Ascend glm4-9b full 4096/8192 8*Ascend lora 4096/8192 2*Ascend mixtral-8x7b full 4096/8192 16*Ascend DeepSeek-V3/R1 full 4096 512*Ascend lora 64*Ascend 1. 当mindspeed-llm上开启分布式优化器并行时,优化器参数会在集群所有机器上切分共享,因此最优配置会和卡数相关; 2. 当前benchmark是综合考虑了最小可运行卡数和最优性能平衡情况下测试出的配置,实际情况中可以根据集群规模大小和性能取舍进行参数调整; 父主题: 训练脚本说明参考
  • 步骤三:开始推理 进入容器中/home/ma-user/Janus路径下。 cd /home/ma-user/Janus 使用Janus-Pro-7B模型进行推理。 启动文生图的推理脚本,生成的图像在Janus路径下的/home/ma-user/Janus/generated_samples文件夹中。 python generation_inference.py 启动理解任务的推理脚本,结果输出在终端中。 python inference.py 使用Janus-Pro-1B模型进行推理。 将generation_inference.py,inference.py文件中model的路径都改为“deepseek-ai/Janus-Pro-1B”。 model_path = "deepseek-ai/Janus-Pro-1B" 启动文生图的推理脚本,生成的图像在Janus路径下的/home/ma-user/Janus/generated_samples文件夹中。 python generation_inference.py 启动理解任务的推理脚本,结果输出在终端中。 python inference.py 文生图推理任务的生成的图像在/home/ma-user/Janus/generated_samples文件夹中,结果展示如下。 图4 推理任务生成图像示例 理解任务的结果在终端打印。 图5 理解任务结果
  • 获取软件和镜像 表2 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.5.902软件包中的AscendCloud-AIGC-6.5.902-xxx.zip 文件名中的xxx表示具体的时间戳,以包名发布的实际时间为准。 获取路径:Support-E,在此路径中查找下载ModelArts 6.5.902版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像包 swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.0-py_3.10-hce_2.0.2412-aarch64-snt9b-20250207103006-97ebd68 SWR上拉取。
  • 步骤二:上传代码、权重和数据集到容器中 安装插件代码包。将获取到的插件代码包AscendCloud-AIGC-6.5.902-xxx.zip文件上传到容器的/home/ma-user目录下,并解压。 cd /home/ma-user unzip AscendCloud-AIGC-6.5.902-*.zip #解压 下载代码,安装依赖。 /home/ma-user/anaconda3/envs/PyTorch-2.1.0/bin/python3.10 -m pip install --upgrade pip git -c http.sslVerify=false clone https://github.com/deepseek-ai/Janus.git cd Janus git checkout 1daa72fa409002d40931bd7b36a9280362469ead pip install -e . 复制插件包中Janus-Pro的adaptor.py,generation_inference.py,inference.py到Janus路径下 cd /home/ma-user cp -f multimodal_algorithm/Janus-Pro/* Janus 下载模型权重,该模型要下载两个权重,为Janus-Pro-1B,Janus-Pro-7B。权重下载地址: Janus-Pro-1B:https://huggingface.co/deepseek-ai/Janus-Pro-1B/tree/main Janus-Pro-7B:https://huggingface.co/deepseek-ai/Janus-Pro-7B/tree/main 下载如图1和图2所示所有文件。 图1 下载Janus-Pro-1B权重 图2 下载Janus-Pro-7B权重 下载好的权重目录结构如下图,将deepseek-ai文件夹上传到容器/home/ma-user/Janus路径下。 图3 权重目录结构
  • 步骤一:检查环境 请参考Lite Server资源开通,购买Lite Server资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 购买Lite Server资源时如果无可选资源规格,需要联系华为云技术支持申请开通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 SSH登录机器后,检查NPU卡状态。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的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 获取基础镜像。建议使用官方提供的镜像部署推理服务。镜像地址{image_url}参见表2 获取软件和镜像。 docker pull {image_url} 启动容器镜像。启动前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。 export work_dir="自定义挂载的工作目录" export container_work_dir="自定义挂载到容器内的工作目录" export container_name="自定义容器名称" export image_name="镜像名称或ID" docker run -itd \ --name ${container_name} \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v /etc/localtime:/etc/localtime \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ -v ${work_dir}:${container_work_dir} \ --shm-size 60g \ --device=/dev/davinci0 \ --device=/dev/davinci_manager \ --device=/dev/hisi_hdc \ --device=/dev/devmm_svm \ --network=bridge \ ${image_name} bash 参数说明: --name ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如Janus。 --device=/dev/davinci0 :挂载对应卡到容器,当需要挂载多卡,请依次添加多项该配置,本推理任务仅需要一张卡。 -v ${work_dir}:${container_work_dir}:代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。work_dir为宿主机中工作目录,目录下可存放项目所需代码、数据等文件。container_work_dir为要挂载到的容器中的目录。为方便两个地址可以相同 进入容器。需要将${container_name}替换为实际的容器名称。 docker exec -it ${container_name} bash
  • 约束与限制 只有主账号可以使用委托授权,可以为当前账号授权,也可以为当前账号下的所有 IAM 用户授权。 多个IAM用户或账号,可使用同一个委托。 一个账号下,最多可创建50个委托。 对于首次使用ModelArts新用户,请直接新增委托即可。一般用户新增普通用户权限即可满足使用要求。如果有精细化权限管理的需求,可以自定义权限按需设置。 如果未获得委托授权,当打开“访问授权”页面时,ModelArts会提醒您当前用户未配置授权,需联系此IAM用户的管理员账号进行委托授权。
  • Step3 安装Docker 检查docker是否安装。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker 配置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
  • Step9 通过openssl创建SSL pem证书 在E CS 中执行如下命令,会在当前目录生成cert.pem和key.pem,并将生成的pem证书上传至OBS。证书用于后续在推理生产环境中部署HTTPS推理服务。 openssl genrsa -out key.pem 2048 openssl req -new -x509 -key key.pem -out cert.pem -days 1095
  • 镜像版本 本教程中用到基础镜像地址和配套版本关系如下表所示,请提前了解。 表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:cann_8.0.rc3
  • 步骤四:下载测试数据集 在/home/ma-user/aigc_train/torch_npu/sd35/diffusers/examples/dreambooth目录下,创建python脚本download_dataset.py,用于下载测试数据集。 cd /home/ma-user/aigc_train/torch_npu/sd35/diffusers/examples/dreambooth vim download_dataset.py 脚本download_dataset.py的内容如下: import torch import torch_npu from torch_npu.contrib import transfer_to_npu from huggingface_hub import snapshot_download local_dir = "./dog" snapshot_download( "diffusers/dog-example", local_dir=local_dir, repo_type="dataset", ignore_patterns=".gitattributes", ) 注意:local_dir代表数据集保存路径,默认在当前目录下创建dog目录作为数据集路径。 保存后执行如下命令。 python3 download_dataset.py
  • 步骤五:Finetune训练 使用start.sh脚本开始Finetune训练。脚本参数说明如下: MODEL_NAME代表模型权重。 INSTANCE_DIR代表数据集路径,与步骤四:下载测试数据集中的测试数据集路径保持一致。 bs,step,resolution分别为批次大小、训练步数、图片分辨率。 图1 Finetune训练 执行如下命令启动Finetune训练。 cd /home/ma-user/aigc_train/torch_npu/sd35/diffusers/examples/dreambooth bash start.sh 训练成功如下图所示。
  • 获取软件和镜像 表2 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.5.901软件包中的AscendCloud-AIGC-6.5.901-xxx.zip 文件名中的xxx表示具体的时间戳,以包名发布的实际时间为准。 获取路径:Support-E,在此路径中查找下载ModelArts 6.5.901 版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像包 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-20241213131522-aafe527 SWR上拉取。
  • 步骤一:检查环境 请参考Lite Server资源开通,购买Lite Server资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 购买Lite Server资源时如果无可选资源规格,需要联系华为云技术支持申请开通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 SSH登录机器后,检查NPU卡状态。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的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 获取基础镜像。建议使用官方提供的镜像部署推理服务。镜像地址{image_url}参见表2 获取软件和镜像。 docker pull {image_url} 启动容器镜像。启动前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。 export work_dir="自定义挂载的工作目录" export container_work_dir="自定义挂载到容器内的工作目录" export container_name="自定义容器名称" export image_name="镜像名称或ID" 参数说明: --name ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如sdxl-diffusers。 --device=/dev/davinci1:挂载主机的/dev/davinci1到容器的/dev/davinci1。可以使用npu-smi info查看空闲卡号,修改davinci后数字可以更改挂载卡。 -v ${work_dir}:${container_work_dir}:代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。work_dir为宿主机中工作目录,目录下可存放项目所需代码、数据等文件。container_work_dir为要挂载到的容器中的目录。为方便两个地址可以相同 docker run -itd \ --name ${container_name} \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v /etc/localtime:/etc/localtime \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ -v ${work_dir}:${container_work_dir} \ --shm-size 60g \ --device=/dev/davinci_manager \ --device=/dev/hisi_hdc \ --device=/dev/devmm_svm \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ --network=bridge \ ${image_name} bash 进入容器。需要将${container_name}替换为实际的容器名称。 docker exec -it ${container_name} bash
  • 步骤二:上传代码、权重和数据集到容器中 安装插件代码包。将获取到的插件代码包AscendCloud-AIGC-6.5.901-xxx.zip文件上传到容器的/home/ma-user目录下,并解压。 cd /home/ma-user unzip AscendCloud-AIGC-6.5.901-*.zip #解压 下载模型权重,上传到容器的/home/ma-user目录下,官网下载地址: https://huggingface.co/stabilityai/stable-diffusion-3.5-medium/tree/main(需登录) https://huggingface.co/stabilityai/stable-diffusion-3.5-large/tree/main(需登录)
  • 步骤三:安装依赖 进入容器中/home/ma-user/aigc_train/torch_npu/sd35路径下。 cd /home/ma-user/aigc_train/torch_npu/sd35 安装依赖。 # 拉取diffusers源码并进入目录 git clone https://github.com/huggingface/diffusers cd diffusers git checkout v0.31.0 cp ../install.sh . # 安装依赖 bash install.sh
  • 软件包结构说明 本方案需要使用到的软件配套版本和依赖包获取地址如下表所示。 表1 模型对应的软件包获取地址 代码包名称 代码说明 下载地址 AscendCloud-6.5.902-xxx.zip 说明: 软件包名称中的xxx表示时间戳。 本方案需要使用到的AscendCloud-6.5.902中的AscendCloud-LLM-xxx.zip软件包。代码包具体说明请参见AscendCloud-LLM代码包说明。 获取路径:Support-E,在此路径中查找下载ModelArts 6.5.902 版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 AscendCloud-LLM代码包关键训练文件介绍如下: |——AscendCloud-LLM |──llm_train # 模型训练代码包 |──AscendFactory |──examples/ # config配置文件目录 |──config/modellink_performance_cfgs.yaml #mindspeed-llm参数文件 |──data.tgz # 样例数据压缩包 |──third-party/ # patch包 |──src/acs_train_solution/ # 训练运行包 |──intall.sh # 需要的依赖包 |──scripts_llamafactory/ # llamafactory兼容旧版本启动方式目录 |──scripts_modellink/ # mindspeed-llm兼容旧版本启动方式目录 |──Dockerfile |──dependences.yaml # 开源社区代码版本yaml文件
  • 镜像版本说明 本教程中用到的训练基础镜像地址和配套版本关系如下表所示,请提前了解。 表2 基础容器镜像地址 镜像用途 镜像地址 基础镜像 Snt9B swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_3_ascend:pytorch_2.3.1-cann_8.0.rc3-py_3.10-hce_2.0.2409-aarch64-snt9b-20241213131522-aafe527 基础镜像 Snt9B23 MindSpeed-LLM swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc3-py_3.10-hce_2.0.2412-aarch64-snt9b23-20250315172739-f66f096 表3 模型镜像版本 机型 模型 版本 Snt9B CANN cann_8.0.rc3 驱动 24.1.0.6 PyTorch 2.3.1 Snt9B23 CANN cann_8.0.rc3 驱动 24.1.RC3 PyTorch 2.1
  • 步骤三:上传代码包和权重文件 上传安装依赖软件推理代码AscendCloud-LLM-xxx.zip和算子包AscendCloud-OPP-xxx.zip到主机中,包获取路径请参见表2。 将权重文件上传到Lite Server机器中。权重文件的格式要求为Huggingface格式。开源权重文件获取地址请参见支持的模型列表。 如果使用模型训练后的权重文件进行推理,模型训练及训练后的权重文件转换操作可以参考大模型训练相关文档。 权重要求放在磁盘的指定目录,并做目录大小检查,参考命令如下。 df -h
  • 步骤五:启动容器 启动容器镜像前请先按照参数说明修改${}中的参数。docker启动失败会有对应的error提示,启动成功会有对应的docker id生成,并且不会报错。 docker run -itd \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ -v /etc/localtime:/etc/localtime \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /etc/ascend_install.info:/etc/ascend_install.info \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ -v /var/log/npu/:/usr/slog \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v ${dir}:${container_work_dir} \ --net=host \ --name ${container_name} \ ${image_id} \ /bin/bash 参数说明: --device=/dev/davinci0,..., --device=/dev/davinci7:挂载NPU设备,示例中挂载了8张卡davinci0~davinci7。 -v ${dir}:${container_work_dir} 代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的大文件系统,dir为宿主机中文件目录,${container_work_dir}为要挂载到的容器中的目录。为方便两个地址可以相同。 容器不能挂载到/home/ma-user目录,此目录为ma-user用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。 driver及npu-smi需同时挂载至容器。 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。 --name ${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。 {image_id} 为docker镜像的ID,即第四步中生成的新镜像id,在宿主机上可通过docker images查询得到。
  • 步骤六:进入容器 进入容器。 docker exec -it -u ma-user ${container_name} /bin/bash 评估推理资源。运行如下命令,返回NPU设备信息可用的卡数。 npu-smi info # 启动推理服务之前检查卡是否被占用、端口是否被占用,是否有对应运行的进程 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。 驱动版本要求是24.1.0.6。如果不符合要求请参考安装固件和驱动章节升级驱动。启动后容器默认端口是8080。 配置需要使用的NPU卡为容器中的第几张卡。例如:实际使用的是容器中第1张卡,此处填写“0”。 export ASCEND_RT_VISIBLE_DEVI CES =0 如果启动服务需要使用多张卡,则按容器中的卡号依次编排。例如:实际使用的是容器中第1张和第2张卡,此处填写为“0,1”,以此类推。 export ASCEND_RT_VISIBLE_DEVICES=0,1 可以通过命令npu-smi info查询NPU卡为容器中的第几张卡。例如下图查询出两张卡,如果希望使用第一和第二张卡,则“export ASCEND_RT_VISIBLE_DEVICES=0,1”,注意编号不是填4、5。 图1 查询结果 启动推理服务的具体操作步骤请参见启动推理服务(大语言模型)或启动推理服务(多模态模型)。
  • 步骤四:制作推理镜像 解压AscendCloud压缩包及该目录下的推理代码AscendCloud-LLM-xxx.zip和算子包AscendCloud-OPP-xxx.zip,并执行build_image.sh脚本制作推理镜像。安装过程需要连接互联网git clone,请确保机器环境可以访问公网。 unzip AscendCloud-*.zip -d ./AscendCloud && cd ./AscendCloud && unzip AscendCloud-OPP-*.zip && unzip AscendCloud-OPP-*-torch-2.1.0-py310-*.zip -d ./AscendCloud-OPP && cd .. && unzip ./AscendCloud/AscendCloud-LLM-*.zip -d ./AscendCloud/AscendCloud-LLM && cd ./AscendCloud/AscendCloud-LLM/llm_inference/ascend_vllm/ && sh build_image.sh --base-image=${base_image} --image-name=${image_name} 参数说明: ${base_image}为基础镜像地址。 ${image_name}为推理镜像名称,可自行指定。 运行完后,会生成推理所需镜像。
  • 步骤一:检查环境 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。 驱动版本要求是24.1.0.6。如果不符合要求请参考安装固件和驱动章节升级驱动。 检查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
  • 查看性能 训练性能主要通过训练日志中的2个指标查看,吞吐量和loss收敛情况。 吞吐量(tokens/s/p):global batch size*seq_length/(总卡数*elapsed time per iteration)*1000,其global batch size(GBS)、seq_len(SEQ_LEN)为训练时设置的参数,训练日志中有打印。 loss收敛情况:日志里存在lm loss参数 ,lm loss参数随着训练迭代周期持续性减小,并逐渐趋于稳定平缓。也可以使用可视化工具TrainingLogParser查看loss收敛情况,如图2所示。 单节点训练:训练过程中的loss直接打印在窗口上。 多节点训练:训练过程中的loss打印在最后一个节点上。 图2 Loss收敛情况(示意图)
  • 详细步骤 购买专属资源池:具体步骤请参考创建资源池。 创建OBS桶:请参考创建OBS桶,例如桶名:standard-llama2-13b。由于ModelArts创建训练作业时,需要将系统作业日志输出至OBS桶中,因此创建OBS桶为必选项。用户可通过OBS Browser+、obsutil等工具访问和管理OBS桶,将代码、模型文件、数据集等数据上传或下载进行备份 创建ECS服务器:方便上传镜像 弹性云服务器(Elastic Cloud Server,ECS)是由CPU、内存、操作系统、云硬盘组成的一种可随时获取、弹性可扩展的云服务器。具体过程请参考ECS文档购买一个Linux弹性云服务器。创建完成后,单击“远程登录”,可直接访问ECS服务器。 CPU架构必须选择鲲鹏计算;镜像推荐选择EulerOS;ECS服务器确保可以访问公网,用于获取镜像和构建镜像。 图1 购买ECS (可选资源)选择SFS Turbo存储则还需执行以下步骤; 创建VPC: 虚拟私有云(Virtual Private Cloud)可以为您构建隔离的、用户自主配置和管理的虚拟网络环境,操作指导请参考创建虚拟私有云和子网。 创建SFS Turbo: SFS Turbo HPC型文件系统为用户提供一个完全托管的共享文件存储。SFS Turbo文件系统支持无缝访问存储在OBS对象存储桶中的对象,用户可以指定SFS Turbo内的目录与OBS对象存储桶进行关联,然后通过创建导入导出任务实现数据同步。通过OBS与SFS Turbo存储联动,可以将最新的训练数据导入到SFS Turbo,然后在训练作业中挂载SFS Turbo到容器对应ckpt目录,实现分布式读取训练数据文件。 创建SFS Turbo文件系统前提条件: 创建SFS Turbo文件系统前,确认已有可用的VPC。 需要由IAM用户设置SFS Turbo FullAccess权限,用于授权ModelArts云服务使用SFS Turbo。 详细操作指导请参考创建SFS Turbo文件系统。 图2 创建SFS Turbo 其中,文件系统类型推荐选用500MB/s/TiB或1000MB/s/TiB,应用于AI大模型场景中。存储容量推荐使用 6.0~10.8TB ,以存储更多模型文件。 图3 SFS类型和容量选择 ECS服务器挂载SFS Turbo: ECS服务器中手动挂载SFS Turbo步骤如下: 用户可通过CloudShell或SSH等方式登录并访问ECS服务器,进入ECS终端界面。创建/mnt/sfs_turbo目录作为挂载目录 ,命令为:mkdir /mnt/sfs_turbo。 单击用户创建的SFS Turbo,查看基本信息图4,找到并复制挂载命令。 在ECS的终端中粘贴SFS Turbo挂载命令,完成挂载。 挂载完成后,可通过后续的步骤获取到代码和数据,并上传至/mnt/sfs_turbo路径下。 图4 SFS Turbo基本信息 ModelArts网络关联SFS Turbo OBS-SFS Turbo联动方案涉及VPC、SFS Turbo HPC型文件系统、OBS 对象存储服务 和ModelArts资源池。如果要使用训练作业挂载SFS Turbo功能,则需要配置ModelArts和SFS Turbo间网络直通,以及配置ModelArts网络关联SFS Turbo。 如果ModelArts网络关联SFS Turbo失败,则需要授权ModelArts云服务使用SFS Turbo,具体操作请参见配置ModelArts和SFS Turbo间网络直通。 图5 ModelArts网络关联SFS Turbo SFS Turbo模式下执行流程
  • 静态benchmark验证 本章节介绍如何进行静态benchmark验证。 已经上传benchmark验证脚本到推理容器中。如果在步骤三:上传代码包和权重文件中已经上传过AscendCloud-LLM-x.x.x.zip并解压,无需重复执行。 进入benchmark_tools目录下,运行静态benchmark验证。 cd benchmark_tools 多模态模型脚本相对路径是llm_tools/llm_evaluation/benchmark_tools/modal_benchmark/modal_benchmark_parallel.py,具体操作命令如下,可以根据参数说明修改参数。 python modal_benchmark_parallel.py \ --host ${docker_ip} \ --port ${port} \ --tokenizer /path/to/tokenizer \ --epochs 5 \ --parallel-num 1 4 8 16 32 \ --prompt-tokens 1024 2048 \ --output-tokens 128 256 \ --height ${height} \ --width ${width} \ --benchmark-csv benchmark_parallel.csv 参数说明 --host:服务部署的IP,${docker_ip}替换为宿主机实际的IP地址。 --port:推理服务端口。 --tokenizer:tokenizer路径,HuggingFace的权重路径。 --epochs:测试轮数,默认取值为5 --parallel-num:每轮并发数,支持多个,如 1 4 8 16 32。 --prompt-tokens:输入长度,支持多个,如 128 128 2048 2048,数量需和--output-tokens的数量对应。 --output-tokens:输出长度,支持多个,如 128 2048 128 2048,数量需和--prompt-tokens的数量对应。 --benchmark-csv:结果保存文件,如benchmark_parallel.csv。 --height: 图片长度(分辨率相关参数)。 --width: 图片宽度(分辨率相关参数)。 --served-model-name: 选择性添加,在接口中使用的模型名;如果没有配置,则默认为tokenizer。 脚本运行完成后,测试结果保存在benchmark_parallel.csv中。
  • 使用MME精度测评工具进行多模态模型精度评测 MME数据集获取。 请用户自行获取MME评估集,将MME评估集上传至llm_tools/llm_evaluation/mme_eval/data/eval/目录中。 获取精度测试代码。精度测试代码存放在代码包AscendCloud-LLM的llm_tools/llm_evaluation/mme_eval目录中,代码目录结构如下。 mme_eval ├──metric.py #MME精度测试脚本 ├──MME.sh #运行MME脚本 启动MME精度测试脚本。 export MODEL_PATH=/data/nfs/model/InternVL2_5-38B export MME_PATH=/llm_tools/llm_evaluation/mme_eval/data/eval/MME export MODEL_TYPE=internvl2_5 export OUTPUT_NAME=InternVL2_5-38B export ASCEND_RT_VISIBLE_DEVICES="0,1,2,3,4,5,6,7" bash MME.sh 参数说明: MODEL_PATH:模型权重路径,默认为空。 MME_PATH:MME数据集路径,默认当前路径。 MODEL_TYPE:模型类型。当前可选模型类型包括:internvl2_5、qwen2.5-vl。 OUTPUT_NAME:输出结果文件名称, 默认llava。 ASCEND_RT_VISIBLE_DEVICES:表示支持多个模型服务实例,同时支持模型并行,如 0,1:2,3,以冒号切分,表示0卡和1卡跑一个模型服务实例,2卡和3卡跑一个模型服务实例。默认为0卡只跑一个模型服务实例。 QUANTIZATION:为量化选项,不传入默认为None即不启用量化;支持w4a16,需配套对应的权重使用。 GPU_MEMORY_UTILIZATION:NPU使用的显存比例,复用原vLLM的入参名称,默认为0.9。 DISTRIBUTED_EXECUTOR_BACKEND:分布式服务使用的后端,默认为 None,表示"mp"(多进程)。可设为"ray"。 脚本运行完成后,测试结果输出在终端。
  • 使用Lm-eval精度测评工具进行大语言模型精度评测 使用lm-eval工具暂不支持pipeline_parallel方式。 安装精度评测工具。在启动推理服务的环境,进入到一个固定目录下,执行如下命令。 rm -rf lm-evaluation-harness/ git clone https://github.com/EleutherAI/lm-evaluation-harness.git cd lm-evaluation-harness git checkout 383bbd54bc621086e05aa1b030d8d4d5635b25e6 pip install -e . 执行如下精度测试命令,可以根据参数说明修改参数。 lm_eval --model vllm --model_args pretrained=${vllm_path},dtype=auto,tensor_parallel_size=${tensor_parallel_size},gpu_memory_utilization=${gpu_memory_utilization},add_bos_token=True,max_model_len=${max_model_len},quantization=${quantization},distributed_executor_backend='ray' \ --tasks ${task} --batch_size ${batch_size} --log_samples --cache_requests true --trust_remote_code --output_path ${output_path} 参数说明: model_args:标志向模型构造函数提供额外参数,比如指定运行模型的数据类型; vllm_path是模型权重路径; max_model_len是最大模型长度,默认设置为4096; gpu_memory_utilization是gpu利用率,如果模型出现oom报错,调小参数; tensor_parallel_size是使用的卡数; quantization是量化参数,使用非量化权重,去掉quantization参数;如果使用awq、smoothquant或者gptq加载的量化权重,根据量化方式选择对应参数,可选awq,smoothquant,gptq。 distributed_executor_backend是开启多进程服务方式,选择ray开启。 model:模型启动模式,可选vllm,openai或hf,hf代表huggingface。 tasks:评测数据集任务,比如openllm。 batch_size:输入的batch_size大小,不影响精度,只影响得到结果速度,默认使用auto,代表自动选择batch大小。 output_path:结果保存路径。 以QwQ-32B模型的权重为例,在加载非量化场景下使用lm-eval,参考命令如下。 lm_eval --model vllm --model_args pretrained="/data/nfs/model/QwQ-32B/",dtype=auto,tensor_parallel_size=1,gpu_memory_utilization=0.7,add_bos_token=True,max_model_len=4096,distributed_executor_backend='ray' \ --tasks openllm --batch_size auto --log_samples --cache_requests true --trust_remote_code --output_path ./
  • 步骤五:Wan2.1文生视频推理 下载模型权重 下载权重文件至容器目录,需要用到的模型地址如下。 Wan-AI/Wan2.1-T2V-14B-Diffusers,地址:https://huggingface.co/Wan-AI/Wan2.1-T2V-14B-Diffusers Wan-AI/Wan2.1-T2V-1.3B-Diffusers, 地址:https://huggingface.co/Wan-AI/Wan2.1-T2V-1.3B-Diffusers 进行推理 修改inference.sh参数,使用此脚本开始推理任务。 cd /home/ma-user/Wan2_1 bash inference.sh inference.sh脚本参数介绍如下。 # If using T2V-1.3B, set this variable 'RESIDUAL_DIFF_THRESHOLD' to 0.03, default 0.04 export RESIDUAL_DIFF_THRESHOLD=0.04 export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 N_GPUS=8 torchrun --nproc_per_node=$N_GPUS infer.py --ckpt_dir Wan-AI/Wan2.1-T2V-14B-Diffusers --output_path ./output.mp4 --size 720*1280 RESIDUAL_DIFF_THRESHOLD: 为残差阈值,默认为0.04。使用T2V-14B推理时,修改为0.04,当使用T2V-1.3B模型进行推理时,修改为0.03,视频效果更好。 ASCEND_RT_VISIBLE_DEVICES : 使用的卡号。 N_GPUS : 使用卡数量。T2V-14B支持8卡推理,T2V-1.3B支持4卡推理。 --ckpt_dir :为模型权重路径。 --output_path :视频结果输出目录地址。 --size:生成视频的尺寸(高*宽)。使用T2V-14B推理时,尺寸设置为720*1280,当使用T2V-1.3B进行推理时,尺寸设置为480*832。 推理成功结果参考如下图:
  • 获取软件和镜像 表2 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.5.902-xxx.zip软件包中的AscendCloud-AIGC-6.5.902-xxx.zip 说明: 包名中的xxx表示具体的时间戳,以包名的实际时间为准。 获取路径:Support-E,在此路径中查找下载ModelArts 6.5.902 版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像 西南-贵阳一: swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.0-py_3.10-hce_2.0.2412-aarch64-snt9b-20250207103006-97ebd68 从SWR拉取。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全