华为云用户手册

  • Step1 检查环境 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
  • Step3 启动容器镜像 启动容器镜像前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。启动容器命令如下。 export work_dir="自定义挂载的工作目录" #容器内挂载的目录,例如/home/ma-user/ws export container_work_dir="自定义挂载到容器内的工作目录" export container_name="自定义容器名称" export image_name="镜像名称" 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 \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ -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 192 \ --memory 1000g \ --shm-size 200g \ --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:表示共享内存,用于多进程间通信。由于需要转换较大内存的模型文件,因此大小要求200g及以上。 通过容器名称进入容器中。启动容器时默认用户为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 使用ma-user用户安装依赖包。 #进入scripts目录换 cd /home/ma-user/ws/llm_train/AscendSpeed #执行安装命令 sh scripts/install.sh 通过运行install.sh脚本,还会git clone下载Megatron-LM、MindSpeed、ModelLink源码(install.sh中会自动下载配套版本,如果手动下载源码还需修改版本)至llm_train/AscendSpeed文件夹中。下载的源码文件结构如下: AscendSpeed/ |──ascendcloud_patch/ # 针对昇腾云平台适配的功能补丁包 |──scripts/ # 训练需要的启动脚本 |——src/ # 启动命令行封装脚本,在install.sh里面自动构建 |──Megatron-LM/ # 适配昇腾的Megatron-LM训练框架 |──MindSpeed/ # MindSpeed昇腾大模型加速库 |──ModelLink/ # ModelLink端到端的大语言模型方案 |——megatron/ # 注意:该文件夹从Megatron-LM中复制得到 |——... 如果git下载代码时报错,请参见Git下载代码时报错解决。
  • 镜像地址 本教程中用到的训练和推理的基础镜像地址和配套版本关系如下表所示,请提前了解。 表1 基础容器镜像地址 镜像用途 镜像地址 基础镜像 swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc2-py_3.9-hce_2.0.2312-aarch64-snt9b-20240727152329-0f2c29a 表2 模型镜像版本 模型 版本 CANN cann_8.0.rc2 驱动 23.0.5 PyTorch 2.1.0
  • 操作流程 图1 操作流程图 表2 操作任务流程说明 阶段 任务 说明 准备工作 准备资源 本教程案例是基于ModelArts Standard运行,需要购买ModelArts专属资源池。 准备权重 准备对应模型的权重文件。 准备代码 准备AscendCloud-6.3.908-xxx.zip。 准备镜像 准备推理模型适用的容器镜像。 准备Notebook 本案例在Notebook上部署推理服务进行调试,因此需要创建Notebook。 部署推理服务 在Notebook调试环境中部署推理服务 介绍如何在Notebook中配置NPU环境,部署并启动推理服务,完成精度测试和性能测试。 如果需要部署量化模型,需在Notebook中进行模型权重转换后再部署推理服务。 在推理生产环境中部署推理服务 介绍如何在创建AI应用,部署并启动推理服务,在线预测在线服务。
  • 支持的模型列表和权重文件 本方案支持vLLM的v0.5.0版本。不同vLLM版本支持的模型列表有差异,具体如表1所示。 表1 支持的模型列表和权重获取地址 序号 模型名称 是否支持fp16/bf16推理 是否支持W4A16量化 是否支持W8A8量化 是否支持W8A16量化 是否支持 kv-cache-int8量化 开源权重获取地址 1 llama-7b √ √ √ √ √ https://huggingface.co/huggyllama/llama-7b 2 llama-13b √ √ √ √ √ https://huggingface.co/huggyllama/llama-13b 3 llama-65b √ √ √ √ √ https://huggingface.co/huggyllama/llama-65b 4 llama2-7b √ √ √ √ √ https://huggingface.co/meta-llama/Llama-2-7b-chat-hf 5 llama2-13b √ √ √ √ √ https://huggingface.co/meta-llama/Llama-2-13b-chat-hf 6 llama2-70b √ √ √ √ √ https://huggingface.co/meta-llama/Llama-2-70b-hf https://huggingface.co/meta-llama/Llama-2-70b-chat-hf (推荐) 7 llama3-8b √ √ √ √ √ https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct 8 llama3-70b √ √ √ √ √ https://huggingface.co/meta-llama/Meta-Llama-3-70B-Instruct 9 yi-6b √ √ √ √ √ https://huggingface.co/01-ai/Yi-6B-Chat 10 yi-9b √ √ √ √ √ https://huggingface.co/01-ai/Yi-9B 11 yi-34b √ √ √ √ √ https://huggingface.co/01-ai/Yi-34B-Chat 12 deepseek-llm-7b √ x x x x https://huggingface.co/deepseek-ai/deepseek-llm-7b-chat 13 deepseek-coder-33b-instruct √ x x x x https://huggingface.co/deepseek-ai/deepseek-coder-33b-instruct 14 deepseek-llm-67b √ x x x x https://huggingface.co/deepseek-ai/deepseek-llm-67b-chat 15 qwen-7b √ √ √ √ x https://huggingface.co/Qwen/Qwen-7B-Chat 16 qwen-14b √ √ √ √ x https://huggingface.co/Qwen/Qwen-14B-Chat 17 qwen-72b √ √ √ √ x https://huggingface.co/Qwen/Qwen-72B-Chat 18 qwen1.5-0.5b √ √ √ √ x https://huggingface.co/Qwen/Qwen1.5-0.5B-Chat 19 qwen1.5-7b √ √ √ √ x https://huggingface.co/Qwen/Qwen1.5-7B-Chat 20 qwen1.5-1.8b √ √ √ √ x https://huggingface.co/Qwen/Qwen1.5-1.8B-Chat 21 qwen1.5-14b √ √ √ √ x https://huggingface.co/Qwen/Qwen1.5-14B-Chat 22 qwen1.5-32b √ √ √ √ x https://huggingface.co/Qwen/Qwen1.5-32B/tree/main 23 qwen1.5-72b √ √ √ √ x https://huggingface.co/Qwen/Qwen1.5-72B-Chat 24 qwen1.5-110b √ √ √ √ x https://huggingface.co/Qwen/Qwen1.5-110B-Chat 25 qwen2-0.5b √ √ √ √ x https://huggingface.co/Qwen/Qwen2-0.5B-Instruct 26 qwen2-1.5b √ √ √ √ x https://huggingface.co/Qwen/Qwen2-1.5B-Instruct 27 qwen2-7b √ √ x √ x https://huggingface.co/Qwen/Qwen2-7B-Instruct 28 qwen2-72b √ √ √ √ x https://huggingface.co/Qwen/Qwen2-72B-Instruct 29 baichuan2-7b √ x x √ x https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat 30 baichuan2-13b √ x x √ x https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat 31 gemma-2b √ x x x x https://huggingface.co/google/gemma-2b 32 gemma-7b √ x x x x https://huggingface.co/google/gemma-7b 33 chatglm2-6b √ x x x x https://huggingface.co/THUDM/chatglm2-6b 34 chatglm3-6b √ x x x x https://huggingface.co/THUDM/chatglm3-6b 35 glm-4-9b √ x x x x https://huggingface.co/THUDM/glm-4-9b-chat 36 mistral-7b √ x x x x https://huggingface.co/mistralai/Mistral-7B-v0.1 37 mixtral-8x7b √ x x x x https://huggingface.co/mistralai/Mixtral-8x7B-Instruct-v0.1 38 falcon-11b √ x x x x https://huggingface.co/tiiuae/falcon-11B/tree/main 39 qwen2-57b-a14b √ x x x x https://huggingface.co/Qwen/Qwen2-57B-A14B-Instruct 40 llama3.1-8b √ x x √ x https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct 41 llama3.1-70b √ x x √ x https://huggingface.co/meta-llama/Meta-Llama-3.1-70B-Instruct 43 llava-1.5-7b √ x x x x https://huggingface.co/llava-hf/llava-1.5-7b-hf/tree/main 44 llava-1.5-13b √ x x x x https://huggingface.co/llava-hf/llava-1.5-13b-hf/tree/main 45 llava-v1.6-7b √ x x x x https://huggingface.co/llava-hf/llava-v1.6-vicuna-7b-hf/tree/main 46 llava-v1.6-13b √ x x x x https://huggingface.co/llava-hf/llava-v1.6-vicuna-13b-hf/tree/main 47 llava-v1.6-34b √ x x x x llava-hf/llava-v1.6-34b-hf at main (huggingface.co) 说明:当前版本中yi-34b、qwen1.5-32b模型暂不支持单卡启动,glm4-9b模型仅支持单卡启动。
  • 约束限制 本方案目前仅适用于部分企业客户。 本文档适配昇腾云ModelArts 6.3.908版本,请参考软件配套版本获取配套版本的软件包,请严格遵照版本配套关系使用本文档。 推理部署使用的服务框架是vLLM。vLLM支持v0.5.0版本。 仅支持FP16和BF16数据类型推理。 本案例仅支持在专属资源池上运行。 专属资源池驱动版本要求23.0.6。 适配的CANN版本是cann_8.0.rc3。
  • 上传自定义数据到指定目录 将下载的原始数据存放在{work_dir}/llm_train/LLaMAFactory/LLaMA-Factory/data目录下。具体步骤如下: 进入到/home/ma-user/ws/llm_train/LLaMAFactory/LLaMA-Factory/data目录下。 cd /home/ma-user/ws/llm_train/LLaMAFactory/LLaMA-Factory/data 将自定义原始数据(指令监督微调样例数据集:alpaca_gpt4_data.json)按照下面的数据存放目录要求放置。 指令微调样例数据集alpaca_gpt4_data.json的下载链接:https://huggingface.co/datasets/QingyiSi/Alpaca-CoT/blob/main/alpacaGPT4/alpaca_gpt4_data.json 数据存放参考目录结构如下: ${workdir}(例如/home/ma-user/ws/llm_train ) |── LLaMAFactory/data |── alpaca_en_demo.json # 代码原有数据集 |── identity.json # 代码原有数据集 ... |── alpaca_gpt4_data.json # 自定义数据集 更新代码目录下data/dataset_info.json文件。如使用以下示例数据集则命令如下。关于数据集文件格式及配置,更多样例格式信息请参考data/README_zh.md 的内容。 vim dataset_info.json 新加配置参数如下: "alpaca_gpt4_data": { "file_name": "alpaca_gpt4_data.json" }, 样例截图:
  • 创建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文件系统。 图1 创建SFS Turbo 其中,文件系统类型推荐选用500MB/s/TiB或1000MB/s/TiB,应用于AI大模型场景中。存储容量推荐使用 6.0~10.8TB ,以存储更多模型文件。 图2 SFS类型和容量选择
  • 创建E CS 服务器 弹性云服务器(Elastic Cloud Server,ECS)是由CPU、内存、操作系统、云硬盘组成的一种可随时获取、弹性可扩展的云服务器。具体过程请参考ECS文档购买一个Linux弹性云服务器。创建完成后,单击“远程登录”,可直接访问ECS服务器。 注意:CPU架构必须选择鲲鹏计算;镜像推荐选择EulerOS;ECS服务器确保可以访问公网,用于获取镜像和构建镜像。 图3 购买ECS
  • ECS服务器挂载SFS Turbo ECS服务器中手动挂载SFS Turbo步骤如下: 用户可通过CloudShell或SSH等方式登录并访问ECS服务器,进入ECS终端界面。创建/mnt/sfs_turbo目录作为挂载目录 ,命令为:mkdir /mnt/sfs_turbo。 单击用户创建的SFS Turbo,查看SFS Turbo基本信息,找到并复制挂载命令。 在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
  • 创建OBS桶 ModelArts使用对象存储服务(Object Storage Service,简称OBS)进行数据存储以及模型的备份和快照,实现安全、高可靠和低成本的存储需求。因此,在使用ModelArts之前通常先创建一个OBS桶,然后在OBS桶中创建文件夹用于存放数据。 本文档也以将运行代码以及输入输出数据存放OBS为例,请参考创建OBS桶,例如桶名: standard-qwenvl-7b。并在该桶下创建文件夹目录用于后续存储代码使用,例如:training_data。
  • 支持的模型列表 本方案支持以下模型的训练,如表1所示。 表1 代码包中适配的模型 序号 支持模型 支持模型参数量 权重文件获取地址 1 Llama2 llama2-7b https://huggingface.co/meta-llama/Llama-2-7b-chat-hf 2 llama2-13b https://huggingface.co/meta-llama/Llama-2-13b-chat-hf 3 llama2-70b https://huggingface.co/meta-llama/Llama-2-70b-hf https://huggingface.co/meta-llama/Llama-2-70b-chat-hf (推荐) 4 Llama3 llama3-8b https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct 5 llama3-70b https://huggingface.co/meta-llama/Meta-Llama-3-70B-Instruct 6 Qwen qwen-7b https://huggingface.co/Qwen/Qwen-7B-Chat 7 qwen-14b https://huggingface.co/Qwen/Qwen-14B-Chat 8 qwen-72b https://huggingface.co/Qwen/Qwen-72B-Chat 9 Qwen1.5 qwen1.5-7b https://huggingface.co/Qwen/Qwen1.5-7B-Chat 10 qwen1.5-14b https://huggingface.co/Qwen/Qwen1.5-14B-Chat 11 qwen1.5-32b https://huggingface.co/Qwen/Qwen1.5-32B-Chat 12 qwen1.5-72b https://huggingface.co/Qwen/Qwen1.5-72B-Chat 13 Yi yi-6b https://huggingface.co/01-ai/Yi-6B-Chat 14 yi-34b https://huggingface.co/01-ai/Yi-34B-Chat 15 ChatGLMv3 glm3-6b https://huggingface.co/THUDM/chatglm3-6b 16 Baichuan2 baichuan2-13b https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat
  • 操作流程 图1 操作流程图 表2 操作任务流程说明 阶段 任务 说明 准备工作 准备资源 本教程案例是基于ModelArts Standard运行的,需要购买并开通ModelArts专属资源池和OBS桶。 准备数据 准备训练数据,可以用本案使用的数据集,也可以使用自己准备的数据集。 准备权重 准备所需的权重文件。 准备代码 准备AscendSpeed训练代码。 准备镜像 准备训练模型适用的容器镜像。 准备Notebook 本案例需要创建一个Notebook,以便能够通过它访问SFS Turbo服务。随后,通过Notebook将OBS中的数据上传至SFS Turbo,并对存储在SFS Turbo中的数据执行编辑操作。 预训练 预训练 介绍如何进行预训练,包括训练数据处理、超参配置、创建训练任务及性能查看。 微调训练 SFT全参微调 介绍如何进行SFT全参微调,包括训练数据处理、超参配置、创建训练任务及性能查看。 LoRA微调训练 介绍如何进行LoRA微调训练,包括训练数据处理、超参配置、创建训练任务及性能查看。
  • 获取模型软件包和权重文件 本方案支持的模型对应的软件和依赖包获取地址如表1所示,模型列表、对应的开源权重获取地址如表1所示。 表1 模型对应的软件包和依赖包获取地址 代码包名称 代码说明 下载地址 AscendCloud-6.5.901-xxx.zip 说明: 软件包名称中的xxx表示时间戳。 包含了本教程中使用到的模型训练代码、推理部署代码和推理评测代码。代码包具体说明请参见模型软件包结构说明。 AscendFactory是用于模型并行计算的框架,其中包含了许多模型的输入处理方法。 获取路径:Support-E,在此路径中查找下载ModelArts 6.5.901 版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。
  • 工作目录介绍 详细的工作目录参考如下,根据实际要求设置。 ${workdir}(例如/home/ma-user/ws) |──llm_train # 模型训练代码包 |──AscendFactory |──examples/ # config配置文件目录 |──config/ # 配置文件 |──deepspeed/ # deepspeed配置json文件 |──performance_cfgs.yaml # 微调性能配置json文件 |──llama_factory_performance_cfgs_VL.yaml # qwen2vl微调json文件 |──accuracy_cfgs.yaml # 训练精度配置json文件 |──....... |──data.tgz # 样例数据压缩包 |──intall.sh # 需要的依赖包 |──scripts_llamafactory/ # 兼容旧版本启动方式目录 |──tools/ # 针对昇腾云平台适配的功能补丁包 |──demo.yaml # 样例yaml配置文件 |──demo.sh # 训练启动shell脚本 |──merge_lora_cli.sh # lora权重合并脚本 |──third-party/ # patch包 |──src/acs_train_solution/ # 训练运行包 |──ascendcloud_patch/ # patch补丁包 |──benchmark/ #工具包,存放数据集及基线数据 |──trainer.py # 训练启动脚本 |──performance.py # 训练性能比较启动脚本 |──accuracy.py # 训练精度启动脚本 |──model/Qwen2-7B/ # 权重词表文件目录,如Qwen2-7B |──saves/qwen2-7b/sft_lora/ # 训练完成生成目录Qwen2-7B,自动生成
  • 上传代码和权重文件到工作环境 使用root用户以SSH的方式登录DevServer。 将AscendCloud代码包AscendCloud-xxx-xxx.zip上传到${workdir}目录下并解压缩,如:/home/ma-user/ws目录下,以下都以/home/ma-user/ws为例,请根据实际修改。 unzip AscendCloud-*.zip unzip AscendCloud-LLM-*.zip 上传tokenizers文件到工作目录中的/home/ma-user/ws/model/{Model_Name}目录,用户根据自己实际规划路径修改;如Qwen2-72B。 具体步骤如下: 进入到${workdir}目录下,如:/home/ma-user/ws,创建tokenizers文件目录将权重和词表文件放置此处,以Qwen2-72B为例。 cd /home/ma-user/ws mkdir -p model/Qwen2-72B 修改权重文件:以下模型需修改,根据所选框架及模型修改相应文件,详情参考各个模型训练前文件替换 Llama-Factory:falcon-11B、GLMv4-9B、MiniCPM-2B、MiniCPM3-4B
  • 模型软件包结构说明 本教程需要使用到的AscendCloud-6.5.901中的AscendCloud-LLM-xxx.zip软件包和算子包AscendCloud-OPP,AscendCloud-LLM关键文件介绍如下。 |——AscendCloud-LLM |──llm_train # 模型训练代码包 |──AscendFactory |──examples/ # config配置文件目录 |──data.tgz # 样例数据压缩包 |──third-party/ # patch包 |──src/acs_train_solution/ # 训练运行包 |──intall.sh # 需要的依赖包 |──scripts_llamafactory/ # llamafactory兼容旧版本启动方式目录 |──scripts_modellink/ # modelLink兼容旧版本启动方式目录 |──Dockerfile
  • 附录:大模型推理常见问题 问题1:在推理预测过程中遇到NPU out of memory。 解决方法:调整推理服务启动时的显存利用率,将--gpu-memory-utilization的值调小。 问题2:在推理预测过程中遇到ValueError:User-specified max_model_len is greater than the drived max_model_len。 解决方法:修改config.json文件中的"seq_length"的值,"seq_length"需要大于等于 --max-model-len的值。config.json存在模型对应的路径下,例如:/data/nfs/benchmark/tokenizer/chatglm3-6b/config.json 问题3:使用离线推理时,性能较差或精度异常。 解决方法:将block_size大小设置为128。 from vllm import LLM, SamplingParams llm = LLM(model="facebook/opt-125m", block_size=128) 问题4:使用llama3.1系模型进行推理时,报错:ValueError: 'rope_scaling' must be a dictionary with two fields, 'type' and 'factor', got {'factor': 8.0, 'low_freq_factor': 1.0, 'high_freq_factor': 4.0, 'original_max_position_embeddings': 8192, 'rope_type': 'llama3'} 解决方法:升级transformers版本到4.43.1:pip install transformers --upgrade 问题5:使用SmoothQuant进行W8A8进行模型量化时,报错:AttributeError: type object 'LlamaAttention' has no attribute '_init_rope' 解决方法:降低transformers版本到4.42:pip install transformers==4.42 --upgrade 问题6:使用AWQ转换llama3.1系列模型权重出现报错ValueError: `rope_scaling` must be a dictionary with two fields, `type` and `factor`, 解决方法:该问题通过将transformers升级到4.44.0,修改对应transformers中的transformers/models/llama/modeling_llama.py,在class LlamaRotaryEmbedding中的forward函数中增加self.inv_freq = self.inv_freq.npu() 问题7:使用Qwen2-7B、Qwen2-72B模型有精度问题,重复输出感叹号 检查【配置环境变量】章节中,高精度模式的环境变量是否开启 父主题: 主流开源大模型基于Lite Server适配PyTorch NPU推理指导(6.3.908)
  • ChatGLMv3-6B 在训练开始前,针对ChatGLMv3-6B模型中的tokenizer文件,需要修改代码。修改文件chatglm3-6b/tokenization_chatglm.py 。 文件最后几处代码中需要修改,具体位置可根据上下文代码信息进行查找,修改后如图2所示。 图2 修改ChatGLMv3-6B tokenizer文件 图3 修改ChatGLMv3-6B tokenizer文件
  • Yi模型 在使用Yi模型的chat版本时,由于transformer 4.38版本的bug,导致在读取tokenizer文件时,加载的vocab_size出现类似如下尺寸不匹配的问题。 RuntimeError: Error(s) in loading state_dict for VocabParallelEmbedding: size mismatch for weight: copying a param with shape torch.Size([64000, 4096]) from checkpoint, the shape in current model is torch.Size([63992, 4096]). 需要在训练开始前,修改llm_train/AscendSpeed/yi/3_training.sh文件,并添加--tokenizer-not-use-fast参数。修改后如图1所示。 图1 修改Yi 模型3_training.sh文件
  • 用户自定义执行权重转换参数修改说明 如果用户要自定义数据处理脚本并且单独执行,同样以 llama2 为例。注意脚本中的python命令分别有Hugging Face 转 Megatron格式,以及Megatron 转 Hugging Face格式,而脚本使用hf2hg、mg2hf参数传递来区分。 方法一:用户可打开scripts/llama2/2_convert_mg_hf.sh脚本,将执行的python命令复制下来,修改环境变量的值。在Notebook进入到 /home/ma-user/work/llm_train/AscendSpeed/ModelLink 路径中,再执行python命令。 方法二:用户在Notebook直接编辑scripts/llama2/2_convert_mg_hf.sh脚本,自定义环境变量的值,并在脚本的首行中添加 cd /home/ma-user/work/llm_train/AscendSpeed/ModelLink 命令,随后在Notebook中运行该脚本。 其中环境变量详细介绍如下: 表1 权重转换脚本中的环境变量 参数 示例 参数说明 $1 hf2hg、mg2hf 运行 2_convert_mg_hf.sh 时,需要附加的参数值。如下: hf2hg:用于Hugging Face 转 Megatron mg2hf:用于Megatron 转 Hugging Face TP 8 张量并行数,一般等于单机卡数 PP 1 流水线并行数,一般等于节点数量 ORIGINAL_HF_WEIGHT /home/ma-user/work/model/Llama2-13B 原始Hugging Face模型路径 CONVERT_MODEL_PATH /home/ma-user/work/llm_train/processed_for_ma_input/llama2-13b/converted_weights_TP8PP1 权重转换完成之后保存路径 TOKENIZER_PATH /home/ma-user/work/model/llama-2-13b-chat-hf tokenizer路径,即:原始Hugging Face模型路径 MODEL_SAVE_PATH /home/ma-user/work/llm_train/saved_dir_for_output/llama2-13b 训练完成后保存的权重路径。
  • HuggingFace转Megatron参数说明 --model-type:模型类型。 --loader:选择对应加载模型脚本的名称。 --saver:选择模型保存脚本的名称。 --tensor-model-parallel-size:${TP}张量并行数,需要与训练脚本中的TP值配置一样。 --pipeline-model-parallel-size:${PP}流水线并行数,需要与训练脚本中的PP值配置一样。 --load-dir:加载转换模型权重路径。 --save-dir : 权重转换完成之后保存路径。 --tokenizer-model : tokenizer路径。
  • Megatron转HuggingFace参数说明 如果用户需要自动转换,则在训练作业中,添加变量CONVERT_MG2HF并赋值True。如果用户后续不需要自动转换,则在环境变量中必须删除CONVERT_MG2HF变量。 Megatron转HuggingFace脚本具体参数如下: --model-type:模型类型。 --save-model-type:输出后权重格式。 --load-dir:训练完成后保存的权重路径。 --save-dir:需要填入原始HF模型路径,新权重会存于../Llama2-13B/mg2hg下。 --target-tensor-parallel-size:任务不同调整参数target-tensor-parallel-size,默认为1。 --target-pipeline-parallel-size :任务不同调整参数target-pipeline-parallel-size,默认为1。 权重转换完成后,需要将转换后的文件与原始Hugging Face模型中的文件进行对比,查看是否缺少如tokenizers.json、tokenizer_config.json、special_tokens_map.json等tokenizer文件或者其他json文件。如果缺少则需要直接复制至权重转换后的文件夹中,否则不能直接用于推理。
  • 步骤三:设置DNS代理和调用公网地址 在自定义模型镜像时设置代理指向代理服务器私有IP和端口,如下所示。 proxies = { "http": "http://{proxy_server_private_ip}:3128", "https": "http://{proxy_server_private_ip}:3128" } 代理服务器IP即步骤二:使用Docker安装和配置正向代理中创建的ECS私有IP,获取方式请见查看弹性云服务器详细信息。 图4 ECS私有IP 调用公网地址时,使用服务URL进行业务请求,如: https://e8a048ce25136addbbac23ce6132a.apig.cn-east-3.huaweicloudapis.com
  • 步骤二:使用Docker安装和配置正向代理 购买弹性 云服务器ECS ,详情请见购买ECS。镜像可选择Ubuntu最新版本。虚拟私有云选择提前创建好的VPC。 申请弹性公网IP EIP,详情请见申请弹性公网IP。 将弹性公网IP绑定到ECS,详情请见将弹性公网IP绑定至实例。 登录ECS,执行如下命令进行Docker安装。如已安装,请直接进入下一步。 curl -sSL https://get.daocloud.io/docker | sh 执行如下命令安装Squid容器。 docker pull ubuntu/squid 创建主机目录。 mkdir –p /etc/squid/ 打开并配置whitelist.conf文件。 vim whitelist.conf 配置内容为安全控制可访问的地址,支持配置通配符,例如: .apig.cn-east-3.huaweicloudapis.com 如果地址访问不通,请在浏览器配置访问 域名 。 打开并配置squid.conf文件。 vim squid.conf 配置内容如下。 # An ACL named 'whitelist' acl whitelist dstdomain '/etc/squid/whitelist.conf' # Allow whitelisted URLs through http_access allow whitelist # Block the rest http_access deny all # Default port http_port 3128 设置主机目录和配置文件权限如下。 chmod 640 -R /etc/squid 执行如下命令启动Squid实例。 docker run -d --name squid -e TZ=UTC -v /etc/squid:/etc/squid -p 3128:3128 ubuntu/squid:latest 进入docker刷新Squid。 docker exec –it squid bash root@{container_id}:/# squid -k reconfigure
  • 软件配套版本 本方案支持的软件配套版本和依赖包获取地址如表1所示。 表1 软件配套版本和获取地址 软件名称 说明 下载地址 AscendCloud-6.3.910-xxx.zip 说明: 软件包名称中的xxx表示时间戳。 包含了本教程中使用到的推理部署代码和推理评测代码、推理依赖的算子包。代码包具体说明请参见模型软件包结构说明。 获取路径:Support-E,在此路径中查找下载ModelArts 6.3.910 版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。
  • 模型软件包结构说明 本教程需要使用到的AscendCloud-6.3.910中的AscendCloud-LLM-xxx.zip软件包和算子包AscendCloud-OPP,AscendCloud-LLM关键文件介绍如下。 |——AscendCloud-LLM ├──llm_inference # 推理代码 ├──ascend_vllm ├── vllm_npu # 推理源码 ├── ascend_vllm-0.6.0-py3-none-any.whl # 推理安装包 ├── build.sh # 推理构建脚本 ├── vllm_install.patch # 社区昇腾适配的补丁包 ├── Dockerfile # 推理构建镜像dockerfile ├── build_image.sh # 推理构建镜像启动脚本 ├──llm_tools # 推理工具包 ├──AutoSmoothQuant # W8A8量化工具 ├── ascend_autosmoothquant_adapter # 昇腾量化使用的算子模块 ├── autosmoothquant # 量化代码 ├── build.sh # 安装量化模块的脚本 ├──AutoAWQ # W4A16量化工具 ├──convert_awq_to_npu.py # awq权重转换脚本 ├──quantize.py # 昇腾适配的量化转换脚本 ├──build.sh # 安装量化模块的脚本 ├──llm_evaluation # 推理评测代码包 ├──benchmark_tools #性能评测 ├── benchmark.py # 可以基于默认的参数跑完静态benchmark和动态benchmark ├── benchmark_parallel.py # 评测静态性能脚本 ├── benchmark_serving.py # 评测动态性能脚本 ├── benchmark_utils.py # 抽离的工具集 ├── generate_datasets.py # 生成自定义数据集的脚本 ├── requirements.txt # 第三方依赖 ├──benchmark_eval #精度评测 ├──opencompass.sh #运行opencompass脚本 ├──install.sh #安装opencompass脚本 ├──vllm_api.py #启动vllm api服务器 ├──vllm.py #构造vllm评测配置脚本名字
  • 代码上传至SFS Turbo 将AscendFactory代码包AscendCloud-LLM-xxx.zip直接上传至ECS服务器中的SFS Turbo中,例如存放在/mnt/sfs_turbo/AscendCloud-LLM-xxx.zip目录下并解压缩。 unzip AscendCloud-*.zip unzip AscendCloud-LLM-*.zip Yi-34B、Qwen1.5系列、GLM4-9B模型执行lora微调策略任务如产生mc2融合算子错误,可参考mc2融合算子报错 结合准备数据、准备权重、准备代码,将数据集、原始权重、代码文件都上传至SFS Turbo后,目录结构如下。 /mnt/sfs_turbo/ |──llm_train # 模型训练代码包 |──AscendFactory |──config/ # 配置文件 |──deepspeed/ # deepspeed配置json文件 |──modellink_performance_cfgs.yaml # ModelLink训练配置json文件 |──....... |──data.tgz #样例数据压缩包 |──intall.sh # 需要的依赖包 |──scripts_modellink/ # modelLink兼容旧版本启动方式目录 |──llama3 # llama3系列模型执行脚本的文件夹 |──qwen2.5 # Qwen2.5系列模型执行脚本的文件夹 |── ... |── dev_pipeline.sh # 系列模型共同调用的多功能的脚本 |──third-party/ # patch包 |──src/acs_train_solution/ # 训练运行包 |──ascendcloud_patch/ # patch补丁包 |──benchmark/ #工具包,存放数据集及基线数据 |──trainer.py # 训练启动脚本 |──performance.py # benchmark训练性能比较启动脚本 |──accuracy.py # benchmark训练精度启动脚本 |──model/Qwen2-7B/ # 权重词表文件目录,如Qwen2-7B |──training_data # 原始数据目录 |──alpaca_gpt4_data.json # 微调数据 |──train-00000-of-00001-a09b74b3ef9c3b56.parquet #预训练数据 |──{output_dir} #{OUTPUT_SAVE_DIR}或yaml文件{output_dir}参数设置值 # 自动生成数据目录结构 |── preprocessed_data |──converted_hf2mg_weight_TP${TP}PP${PP} |──checkpoint # 训练完成生成目录Qwen2-7B,自动生成
  • 模型软件包结构说明 AscendCloud-6.3.912代码包中AscendCloud-LLM代码包结构介绍如下,训练脚本以分类的方式集中在scripts_modellink文件夹中: |——AscendCloud-LLM |──llm_train # 模型训练代码包 |──AscendFactory |──examples/ # config配置文件目录 |──data.tgz # 样例数据压缩包 |──third-party/ # patch包 |──src/acs_train_solution/ # 训练运行包 |──intall.sh # 需要的依赖包 |──scripts_llamafactory/ # llamafactory兼容旧版本启动方式目录 |──scripts_modellink/ # modelLink兼容旧版本启动方式目录 |──Dockerfile
共100000条
提示

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