华为云用户手册

  • 步骤四 制作推理镜像 解压AscendCloud压缩包及该目录下的推理代码AscendCloud-LLM-6.3.910-xxx.zip和算子包AscendCloud-OPP-6.3.910-xxx.zip,并执行build_image.sh脚本制作推理镜像。安装过程需要连接互联网git clone,请确保机器环境可以访问公网。 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/ && sh build_image.sh --base-image=${base_image} --image-name=${image_name} 参数说明: ${base_image}为基础镜像地址。 ${image_name}为推理镜像名称,可自行指定。 运行完后,会生成推理所需镜像。 如果推理需要使用npu加速图片预处理,需要安装torchvision_npu,可放到镜像制作脚本里面。内容如下: 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
  • 步骤一 检查环境 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。 驱动版本要求是23.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
  • 创建专属资源池 ModelArts提供独享的计算资源,可用于Notebook、训练作业、部署模型。专属资源池不与其他用户共享,更加高效。在使用专属资源池之前,您需要先创建一个专属资源池,操作指导请参考创建Standard专属资源池。 配置“网络”时需要选择已打通VPC的网络。如果需要新建网络和打通VPC可以参考配置Standard专属资源池可访问公网。 “规格类型”和“节点数量”根据训练计划使用的资源选择。
  • 购买服务资源 表1 购买服务资源 服务 使用说明 参考文档 弹性文件服务SFS 弹性文件服务默认为按需计费,即按购买的存储容量和时长收费。您也可以购买包年包月套餐,提前规划资源的使用额度和时长。在欠费时,您需要及时(15天之内)续费以避免您的文件系统资源被清空。 购买的SFS可以用于存储数据和代码。 如何购买弹性文件服务? 容器镜像服务 SWR 容器 镜像服务 分为企业版和共享版。共享版计费项包括存储空间和流量费用,目前均免费提供给您。企业版支持按需计费模式。 购买的SWR可以用于上传自定义镜像。 上传镜像 对象存储服务 OBS 对象存储服务提供按需计费和包年包月两种计费模式,用户可以根据实际需求购买OBS服务。 OBS服务支持以下两种存储方式,单机单卡场景使用文件系统,多机多卡场景使用普通OBS桶。 创建普通OBS桶 创建并行文件系统 虚拟私有云VPC 虚拟私有云可以为您构建隔离的、用户自主配置和管理的虚拟网络环境。 通过打通专属资源池的VPC,可以方便用户跨VPC使用资源,提升资源利用率。 创建虚拟私有云和子网 弹性 云服务器ECS 如果您需要在服务器上部署相关业务,较之物理服务器,弹性云服务器的创建成本较低,并且可以在几分钟之内快速获得基于云服务平台的弹性云服务器设施,并且这些基础设施是弹性的,可以根据需求伸缩。 购买的E CS 服务可以用于挂载SFS Turbo存储。 说明: 购买时需注意,ECS需要和SFS买到同一个VPC才能挂载SFS存储。 自定义购买ECS 数据加密 服务DEW 在使用Notebook进行代码调试时,如果要开启“SSH远程开发”功能,需要选择密钥对,便于用户登录弹性云服务器时使用密钥对方式进行身份认证,提升通信安全。密钥对可免费创建。 如何创建密钥对?
  • (可选)工作空间配置 ModelArts支持设置子账号的细粒度权限、不同工作空间之间资源隔离。ModelArts工作空间帮您实现项目资源隔离、多项目分开结算等功能。 如果您开通了企业项目管理服务的权限,可以在创建工作空间的时候绑定企业项目ID,并在企业项目下添加用户组,为不同的用户组设置细粒度权限供组里的用户使用。 如果您未开通企业项目管理服务的权限,也可以在ModelArts创建自己独立的工作空间,但是无法使用跟企业项目相关的功能。 工作空间为白名单功能,使用该功能需要提工单申请开通。
  • 在ECS服务器挂载SFS Turbo存储 在ECS服务器挂载SFS Turbo存储后,支持将训练所需的数据通过ECS上传至SFS Turbo。 检查云服务环境。 ECS服务器和SFS的共享硬盘在相同的VPC或者对应VPC能够互联。 ECS服务器基础镜像用的是Ubuntu 18.04。 ECS服务器和SFS Turbo在同一子网中。 在ECS服务器中设置华为云镜像源。 sudo sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list sudo sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list 安装NFS客户端,挂载对应盘。 sudo apt-get update sudo apt-get install nfs-common 获取SFS Turbo的挂载命令。 进入弹性文件服务SFS管理控制台。 选择“SFS Turbo”进入文件系统列表,单击文件系统名称,进入详情页面。 在“基本信息”页签获取并记录“Linux挂载命令”。 在ECS服务器中挂载NFS存储。 确认对应目录存在后,输入对应指令,命令如下。 mkdir -p /mnt/sfs_turbo mount -t nfs -o vers=3,nolock 192.168.0.169:/ /mnt/sfs_turbo
  • 在ECS中设置ModelArts用户可读权限 在ModelArts训练平台使用自定义镜像时,默认用户为ma-user、默认用户组为ma-group。如果在训练时调用ECS中的文件,需要修改文件权限改为ma-user可读,否则会出现Permission denied错误。 在Terminal中执行以下命令,在ECS中提前创建好ma-user和ma-group。 default_user=$(getent passwd 1000 | awk -F ':' '{print $1}') || echo "uid: 1000 does not exist" && \ default_group=$(getent group 100 | awk -F ':' '{print $1}') || echo "gid: 100 does not exist" && \ if [ ! -z ${default_group} ] && [ ${default_group} != "ma-group" ]; then \ groupdel -f ${default_group}; \ groupadd -g 100 ma-group; \ fi && \ if [ -z ${default_group} ]; then \ groupadd -g 100 ma-group; \ fi && \ if [ ! -z ${default_user} ] && [ ${default_user} != "ma-user" ]; then \ userdel -r ${default_user}; \ useradd -d /home/ma-user -m -u 1000 -g 100 -s /bin/bash ma-user; \ chmod -R 750 /home/ma-user; \ fi && \ if [ -z ${default_user} ]; then \ useradd -d /home/ma-user -m -u 1000 -g 100 -s /bin/bash ma-user; \ chmod -R 750 /home/ma-user; \ fi && \ # set bash as default rm /bin/sh && ln -s /bin/bash /bin/sh 执行以下命令,查看创建的用户信息。 id ma-user 如果出现以下信息则表示创建成功。 uid=1000(ma-user) gid=100(ma-group) groups=100(ma-group)
  • Step5 进入容器安装推理依赖软件 通过容器名称进入容器中。默认使用ma-user用户执行后续命令。 docker exec -it ${container_name} bash 上传代码和权重到宿主机时使用的是root用户,此处需要执行如下命令统一文件属主为ma-user用户。 #统一文件属主为ma-user用户 sudo chown -R ma-user:ma-group ${container_work_dir} # ${container_work_dir}:/home/ma-user/ws 容器内挂载的目录 #例如:sudo chown -R ma-user:ma-group /home/ma-user/ws 解压算子包并将相应算子安装到环境中。 unzip AscendCloud-OPP-*.zip pip install ascend_cloud_ops-1.0.0-py3-none-any.whl pip install cann_ops-1.0.0-py3-none-any.whl 解压软件推理代码并安装依赖包。安装过程需要连接互联网git clone,请确保容器环境可以访问公网。 unzip AscendCloud-LLM-*.zip cd llm_inference/ascend_vllm bash build.sh 运行完后,会安装适配昇腾的vllm-0.4.2版本。
  • Step6 启动推理服务 配置需要使用的NPU卡编号。例如:实际使用的是第1张卡,此处填写“0”。 export ASCEND_RT_VISIBLE_DEVI CES =0 如果启动服务需要使用多张卡,例如:实际使用的是第1张和第2张卡,此处填写为“0,1”,以此类推。 export ASCEND_RT_VISIBLE_DEVICES=0,1 NPU卡编号可以通过命令npu-smi info查询。 配置环境变量。 export DEFER_DECODE=1 # 是否使用推理与Token解码并行;默认值为1表示开启并行,取值为0表示关闭并行。开启该功能会略微增加首Token时间,但可以提升推理吞吐量。 export DEFER_MS=10 # 延迟解码时间,默认值为10,单位为ms。将Token解码延迟进行的毫秒数,使得当次Token解码能与下一次模型推理并行计算,从而减少总推理时延。该参数需要设置环境变量DEFER_DECODE=1才能生效。 export USE_VOCAB_PARALLEL=1 # 是否使用词表并行;默认值为1表示开启并行,取值为0表示关闭并行。对于词表较小的模型(如llama2系模型),关闭并行可以减少推理时延,对于词表较大的模型(如qwen系模型),开启并行可以减少显存占用,以提升推理吞吐量。 export USE_PFA_HIGH_PRECISION_MODE=1 # PFA算子是否使用高精度模式;默认值为0表示不开启。针对Qwen2-7B模型,必须开启此配置,否则精度会异常;其他模型不建议开启,因为性能会有损失。 如果需要增加模型量化功能,启动推理服务前,先参考使用AWQ量化或使用SmoothQuant量化章节对模型做量化处理。 启动服务与请求。此处提供vLLM服务API接口启动和OpenAI服务API接口启动2种方式。详细启动服务与请求方式参考:https://docs.vllm.ai/en/latest/getting_started/quickstart.html。 以下服务启动介绍的是在线推理方式,离线推理请参见https://docs.vllm.ai/en/latest/getting_started/quickstart.html#offline-batched-inference。 方式一:通过OpenAI服务API接口启动服务 在llm_inference/ascend_vllm/vllm-gpu-0.4.2目录下通OpenAI服务API接口启动服务,具体操作命令如下,可以根据参数说明修改配置。 python -m vllm.entrypoints.openai.api_server --model ${container_model_path} \ --max-num-seqs=256 \ --max-model-len=4096 \ --max-num-batched-tokens=4096 \ --dtype=float16 \ --tensor-parallel-size=1 \ --block-size=128 \ --host=${docker_ip} \ --port=8080 \ --gpu-memory-utilization=0.9 \ --trust-remote-code 方式二:通过vLLM服务API接口启动服务 在llm_inference/ascend_vllm/vllm-gpu-0.4.2目录下通过vLLM服务API接口启动服务,具体操作命令如下,API Server的命令相关参数说明如下,可以根据参数说明修改配置。 python -m vllm.entrypoints.api_server --model ${container_model_path} \ --max-num-seqs=256 \ --max-model-len=4096 \ --max-num-batched-tokens=4096 \ --dtype=float16 \ --tensor-parallel-size=1 \ --block-size=128 \ --host=${docker_ip} \ --port=8080 \ --gpu-memory-utilization=0.9 \ --trust-remote-code 推理服务基础参数说明如下: --model ${container_model_path}:模型地址,模型格式是HuggingFace的目录格式。即Step3 上传代码包和权重文件上传的HuggingFace权重文件存放目录。若使用了量化功能,则使用推理模型量化章节转换后的权重。如果使用的是训练后模型转换为HuggingFace格式的地址,还需要有Tokenizer原始文件。 --max-num-seqs:最大同时处理的请求数,超过后拒绝访问。 --max-model-len:推理时最大输入+最大输出tokens数量,输入超过该数量会直接返回。max-model-len的值必须小于config.json文件中的"seq_length"的值,否则推理预测会报错。config.json存在模型对应的路径下,例如:${container_work_dir}/chatglm3-6b/config.json。 --max-num-batched-tokens:prefill阶段,最多会使用多少token,必须大于或等于--max-model-len,推荐使用4096或8192。 --dtype:模型推理的数据类型。支持FP16和BF16数据类型推理。float16表示FP16,bfloat16表示BF16。 --tensor-parallel-size:模型并行数。取值需要和启动的NPU卡数保持一致,可以参考1。此处举例为1,表示使用单卡启动服务。 --block-size:kv-cache的block大小,推荐设置为128。当前仅支持64和128。 --host=${docker_ip}:服务部署的IP,${docker_ip}替换为宿主机实际的IP地址。 --port:服务部署的端口。 --gpu-memory-utilization:NPU使用的显存比例,复用原vLLM的入参名称,默认为0.9。 --trust-remote-code:是否相信远程代码。 高阶参数说明: --enable-prefix-caching:如果prompt的公共前缀较长或者多轮对话场景下推荐使用prefix-caching特性。在推理服务启动脚本中添加此参数表示使用,不添加表示不使用。 --quantization:推理量化参数。当使用量化功能,则在推理服务启动脚本中增加该参数,若未使用量化功能,则无需配置。根据使用的量化方式配置,可选择awq或smoothquant方式。 --speculative-model ${container_draft_model_path}:投机草稿模型地址,模型格式是HuggingFace的目录格式。即Step3 上传代码包和权重文件上传的HuggingFace权重文件存放目录。投机草稿模型为与--model入参同系列,但是权重参数远小于--model指定的模型。若未使用投机推理功能,则无需配置。 --num-speculative-tokens:投机推理小模型每次推理的token数。若未使用投机推理功能,则无需配置。参数--num-speculative-tokens需要和--speculative-model ${container_draft_model_path}同时使用。 --use-v2-block-manager:vllm启动时使用V2版本的BlockSpaceManger来管理KVCache索引,若不使用该功能,则无需配置。注意:若使用投机推理功能,必须开启此参数。 服务启动后,会打印如下类似信息。 server launch time cost: 15.443044185638428 s INFO: Started server process [2878]INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
  • Step4 启动容器镜像 启动容器镜像前请先按照参数说明修改${}中的参数。 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,在宿主机上可通过docker images查询得到。
  • Step3 上传代码包和权重文件 上传安装依赖软件推理代码AscendCloud-LLM-6.3.906-xxx.zip和算子包AscendCloud-OPP-6.3.906-xxx.zip到主机中,包获取路径请参见表2。 将权重文件上传到Server机器中。权重文件的格式要求为Huggingface格式。开源权重文件获取地址请参见表3。 如果使用模型训练后的权重文件进行推理,需要上传训练后的权重文件和开源的原始权重文件。模型训练及训练后的权重文件转换操作可以参考相关文档章节中提供的模型训练文档。
  • Step1 检查环境 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。 驱动版本要求是23.0.5。如果不符合要求请参考安装固件和驱动章节升级驱动。 检查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
  • Step3 上传代码包和权重文件 上传安装依赖软件推理代码AscendCloud-LLM-6.3.908-xxx.zip和算子包AscendCloud-OPP-6.3.908-xxx.zip到主机中,包获取路径请参见表2。 将权重文件上传到Server机器中。权重文件的格式要求为Huggingface格式。开源权重文件获取地址请参见表3。 如果使用模型训练后的权重文件进行推理,模型训练及训练后的权重文件转换操作可以参考相关文档章节中提供的模型训练文档。 权重要求放在磁盘的指定目录,并做目录大小检查,参考命令如下: df -h
  • Step5 启动容器镜像 启动容器镜像前请先按照参数说明修改${}中的参数。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查询得到。
  • Step4 制作推理镜像 解压AscendCloud压缩包及该目录下的推理代码AscendCloud-LLM-6.3.908-xxx.zip和算子包AscendCloud-OPP-6.3.908-xxx.zip。 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/ 修改build.sh,增加如下命令: pip install outlines==0.0.46 图1 修改build.sh 执行build_image.sh脚本制作推理镜像。安装过程需要连接互联网git clone,请确保机器环境可以访问公网。 sh build_image.sh --base-image=${base_image} --image-name=${image_name} 参数说明: ${base_image}为基础镜像地址。 ${image_name}为推理镜像名称,可自行指定。 运行完后,会生成推理所需镜像。
  • Step1 检查环境 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。 驱动版本要求是23.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
  • Step2 准备权重文件 将OBS中的模型权重上传到Notebook的工作目录/home/ma-user/work/下。上传代码参考如下。 import moxing as mox obs_dir = "obs://${bucket_name}/${folder-name}" local_dir = "/home/ma-user/work/qwen-14b" mox.file.copy_parallel(obs_dir, local_dir) 实际操作如下图所示。 图1 上传OBS文件到Notebook的代码示例
  • 步骤三 上传代码包和权重文件 上传安装依赖软件推理代码AscendCloud-LLM-6.3.909-xxx.zip和算子包AscendCloud-OPP-6.3.909-xxx.zip到主机中,包获取路径请参见表2。 将权重文件上传到Server机器中。权重文件的格式要求为Huggingface格式。开源权重文件获取地址请参见表3。 如果使用模型训练后的权重文件进行推理,模型训练及训练后的权重文件转换操作可以参考相关文档章节中提供的模型训练文档。 权重要求放在磁盘的指定目录,并做目录大小检查,参考命令如下。 df -h
  • 步骤四 制作推理镜像 解压AscendCloud压缩包及该目录下的推理代码AscendCloud-LLM-6.3.909-xxx.zip和算子包AscendCloud-OPP-6.3.909-xxx.zip,并执行build_image.sh脚本制作推理镜像。安装过程需要连接互联网git clone,请确保机器环境可以访问公网。 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/ && sh build_image.sh --base-image=${base_image} --image-name=${image_name} 参数说明: ${base_image}为基础镜像地址。 ${image_name}为推理镜像名称,可自行指定。 运行完后,会生成推理所需镜像。
  • 步骤五 启动容器镜像 启动容器镜像前请先按照参数说明修改${}中的参数。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查询得到。
  • 步骤一 检查环境 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。 驱动版本要求是23.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
  • Step2 准备权重文件 将OBS中的模型权重上传到Notebook的工作目录/home/ma-user/work/下。上传代码参考如下。 import moxing as mox obs_dir = "obs://${bucket_name}/${folder-name}" local_dir = "/home/ma-user/work/qwen-14b" mox.file.copy_parallel(obs_dir, local_dir) 实际操作如下图所示。 图1 上传OBS文件到Notebook的代码示例
  • Step4 创建pod 在节点自定义目录${node_path}下执行如下命令创建pod。 kubectl apply -f config.yaml 检查pod启动情况,执行下述命令。如果显示“1/1 running”状态代表启动成功。 kubectl get pod -A 图1 启动pod成功 执行如下命令查看pod日志,如果打印类似下图信息表示服务启动成功。 kubectl logs -f ${pod_name} 参数说明: ${pod_name}:pod名,例如图1${pod_name}为yourapp-87d9b5b46-c46bk。 图2 启动服务成功
  • Step2 配置pod 在节点自定义目录${node_path}下创建config.yaml文件 apiVersion: apps/v1 kind: Deployment metadata: name: yourapp labels: app: infers spec: replicas: 1 selector: matchLabels: app: infers template: metadata: labels: app: infers spec: schedulerName: volcano nodeSelector: accelerator/huawei-npu: ascend-1980 containers: - image: ${image_name} # 推理镜像名称 imagePullPolicy: IfNotPresent name: ${container_name} securityContext: runAsUser: 0 ports: - containerPort: 8080 command: ["/bin/bash", "-c"] args: ["${node-path}/run_vllm.sh"] # 节点自定义目录,该目录下包含pod配置文件config.yaml和推理服务启动脚本run_vllm.sh resources: requests: huawei.com/ascend-1980: "8" # 需求卡数,key保持不变。 limits: huawei.com/ascend-1980: "8" # 限制卡数,key保持不变。 volumeMounts: # 容器内部映射路径 - name: ascend-driver #驱动挂载,保持不动 mountPath: /usr/local/Ascend/driver - name: ascend-add-ons #驱动挂载,保持不动 mountPath: /usr/local/Ascend/add-ons - name: hccn #驱动hccn配置,保持不动 mountPath: /etc/hccn.conf - name: localtime mountPath: /etc/localtime - name: npu-smi # npu-smi mountPath: /usr/local/sbin/npu-smi - name: model-path # 模型权重路径 mountPath: ${model-path} - name: node-path mountPath: ${node-path} volumes: # 物理机外部路径 - name: ascend-driver hostPath: path: /usr/local/Ascend/driver - name: ascend-add-ons hostPath: path: /usr/local/Ascend/add-ons - name: hccn hostPath: path: /etc/hccn.conf - name: localtime hostPath: path: /etc/localtime - name: npu-smi hostPath: path: /usr/local/sbin/npu-smi - name: model-path hostPath: path: ${model-path} - name: node-path hostPath: path: ${node-path} 参数说明: ${container_name}:容器名称,此处可以自己定义一个容器名称,例如ascend-vllm。 ${image_name}:Step3 制作推理镜像构建的推理镜像名称。 ${node-path}:节点自定义目录,该目录下包含pod配置文件config.yaml和推理服务启动脚本run_vllm.sh,run_vllm.sh内容见Step3 创建服务启动脚本。 ${model-path}:Step1 上传权重文件中上传的模型权重路径。
  • 步骤四:开启训练故障自动重启功能 创建训练作业时,可开启自动重启功能。当环境问题导致训练作业异常时,系统将自动修复异常或隔离节点,并重启训练作业,提高训练成功率。为了避免丢失训练进度、浪费算力。此功能已适配断点续训练。 图5 开启故障重启 断点续训练是通过checkpoint机制实现。checkpoint机制是在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。即便模型训练中断,也可以基于checkpoint继续训练。 当训练作业发生故障中断本次作业时,代码可自动从训练中断的位置接续训练,加载中断生成的checkpoint,中间不需要改动任何参数。MindSpeed-LLM可通过save-interval参数、Llama-Factory可通过save_steps参数,指定间隔多少step保存checkpoint。 如果要使用自动重启功能,资源规格必须选择八卡规格且超参配置有限制。 MindSpeed-LLM:train_auto_resume参数必须为true,默认为fasle。 Llama-Factory:overwrite_output_dir参数必须为false,默认为true。 训练作业中的训练故障自动恢复功能包括: 训练容错检查(自动重启),帮助用户隔离故障节点,优化用户训练体验。详细可了解:训练容错检查 无条件自动重启,不管什么原因系统都会自动重启训练作业,提高训练成功率和提升作业的稳定性。详细可了解:无条件自动重启。
  • 步骤二:配置数据输入和输出【OBS方式】 此小节根据实际选择训练框架不同,设置输入、输出参数不同,根据实际选择,该小节仅为使用OBS桶存储所需,如使用SFS Turbo共享盘忽略此小节。 单击“增加训练输入”和“增加训练输出”,用于配置训练作业开始时需要输入数据的路径和训练结束后输出数据的路径。 图2 增加训练输入输出 在“输入”框内设置超参key值,选择训练框架不同填入不同参数,根据实际选择填入超参。 MindSpeed-LLM 输入数据集参数:是否使用已处理好数据集; 是,添加processed_data_dir:已处理好数据路径目录 否,使用原始数据集,添加dataset:训练时指定的输入原始数据集路径。 输入权重词表超参(tokenizer):添加model_name_or_path:加载tokenizer与Hugging Face权重对应存放目录地址。 是否使用已转换Megatron格式权重或训练输出结果权重目录; 是,添加user_converted_ckpt_path:已转换Megatron格式权重目录或训练输出结果权重目录,一般搭配断点续训或增量训练,详见断点续训和故障快恢说明 否,忽略此步骤 Llama-Factory 输入数据集参数:dataset_dir:训练时指定的输入数据集路径,一般只有使用自定义数据时需设置,地址为代码包AscendFactory/data目录下 输入权重词表参数:model_name_or_path:加载tokenizer与Hugging Face权重时,对应的存放地址。 adapter_name_or_path:基于lora训练完成后生成的lora产物未合并时的权重文件(基于lora微调后模型进行增量训练时传入) 在“输出”框内设置超参key,选择训练框架不同填入不同参数,根据实际选择填入超参。 MindSpeed-LLM 设置output_dir参数:训练完成后指定的输出模型路径 设置hf_save_dir参数:训练完成的权重文件自动转换为Hugging Face格式权重输出的路径(确保convert_mg2hf_at_last设置为True,默认为True) Llama-Factory 设置output_dir参数:训练完成后指定的输出模型路径。 分别单击“输入”和“输出”的数据存储位置,选择相应OBS路径地址。 “输出”中的预下载至本地目标选择:下载,此时输出路径中的数据则会下载至OBS中。 图3 设置输入、输出值样例
  • 问题六 Llama-Factory框架训练过程中训练至某一步卡死现象 【问题现象】 多节点训练任务,运行至某一个steps时训练任务卡死2H,导致任务超时 【问题根因】 ascend_trace线程抓取调用栈时对相关资源加锁,dataloader_worker进程在被fork拉起时继承了锁状态,导致dataloader_worker进程因无法获取到锁而卡死。 【解决措施】 训练作业前,先通过加载环境变量export ASCEND_COREDUMP_SIGNAL=none关闭ascend的堆栈跟踪。 export ASCEND_COREDUMP_SIGNAL=none
  • 问题八 MindSpeed-LLM蒸馏模型训练精度问题 【问题根因】 MindSpeed-LLM框架中某些参数值为固定值,与蒸馏后模型配置不一致,导致训练结果精度问题。 【解决措施】 训练前修改代码包目录下scripts_modellink/{model}/3_training.sh文件参数值与蒸馏模型权重目录下config.json参数值保持一致,参数表格如下: 表1 3_training.sh参数修改值 蒸馏模型 原模型 3_training.sh文件参数 DeepSeek-R1-Distill-Qwen-7B qwen2.5-7b --rotary-base 10000 DeepSeek-R1-Distill-Qwen-14B/32B qwen2.5-14b/32b --norm-epsilon 1e-5
  • 问题七 Llama-Factory环境,运行DockerFile或install.sh中的setup.py失败 【问题现象】 执行Llama-Factory代码目录下setup.py失败,报错:“SetuptoolsDeprecationWarning: License classifiers are deprecated.” 图3 setup.py报错提示 【问题根因】 pip依赖包版本过低导致与其他依赖包冲突。 【解决措施】 修改添加pip install --upgrade pip命令至AscendFactory/install.sh文件,如图所示: 重新执行DockerFile或install.sh。
  • 问题五 Llama-Factory框架数据预处理过大数据集超时 【问题根因】 Llama-Factory框架处理数据默认先处理0卡,再依次处理1~7卡,串行处理数据导致时间占用过大导致超时。 【解决措施】 方案A:修改LLamaFactory barrier策略,将0卡先处理,1~7卡再处理方案修改为0~7卡同步处理,训练前执行以下命令: export DISABLE_MAIN_PROCESS_FIRST = True 方案B:默认处理策略不变,将训练作业运行超时时间修改为2小时,训练前执行以下命令: export ACL_DEVICE_SYNC_TIMEOUT=7200 方案B操作简单,但数据集过大时,有可能2个小时也会超时,可以继续修改延长超时时间。
共100000条
提示

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