华为云用户手册

  • 用户自定义执行权重转换参数修改说明 同样以 llama2 为例,用户可直接编辑 scripts/llama2/2_convert_mg_hf.sh 脚本,自定义环境变量的值,并运行该脚本。其中环境变量详细介绍如下: 如果用户要自定义数据处理脚本并且单独执行,同样以 llama2 为例。注意脚本中的python命令分别有Hugging Face 转 Megatron格式,以及Megatron 转 Hugging Face格式,而脚本使用hf2hg、mg2hf参数传递来区分。 方法一:用户可打开scripts/llama2/2_convert_mg_hf.sh脚本,将执行的python命令复制下来,修改环境变量的值。进入到 /home/ma-user/ws/llm_train/AscendSpeed/ModelLink 路径中,再执行python命令。 方法二:用户直接编辑scripts/llama2/2_convert_mg_hf.sh脚本,自定义环境变量的值,并在脚本的首行中添加 cd /home/ma-user/ws/llm_train/AscendSpeed/ModelLink 命令,随后运行该脚本。 其中环境变量详细介绍如下: 表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/ws/model/Llama2-13B 原始Hugging Face模型路径 CONVERT_MODEL_PATH /home/ma-user/ws/llm_train/processed_for_ma_input/llama2-13b/converted_weights_TP8PP1 权重转换完成之后保存路径 TOKENIZER_PATH /home/ma-user/ws/tokenizers/Llama2-13B tokenizer路径,即:原始Hugging Face模型路径 MODEL_SAVE_PATH /home/ma-user/ws/llm_train/saved_dir_for_output/llama2-13b 训练完成后保存的权重路径。
  • Step4 开启训练故障自动重启功能 创建训练作业时,可开启自动重启功能。当环境问题导致训练作业异常时,系统将自动修复异常或隔离节点,并重启训练作业,提高训练成功率。为了避免丢失训练进度、浪费算力。此功能已适配断点续训练。 图3 开启故障重启 断点续训练是通过checkpoint机制实现。checkpoint机制是在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。即便模型训练中断,也可以基于checkpoint继续训练。 当训练作业发生故障中断本次作业时,代码可自动从训练中断的位置接续训练,加载中断生成的checkpoint,中间不需要改动任何参数。可以通过训练脚本中的SAVE_INTERVAL参数来指定间隔多少step保存checkpoint。 如果要使用自动重启功能,资源规格必须选择八卡规格。 当前功能还处于试验阶段,只有llama3-8B/70B适配。
  • Step1 创建训练任务 创建训练作业,并自定义名称、描述等信息。选择自定义算法,启动方式自定义,以及选择上传的镜像。 代码目录选择:OBS桶路径下的llm_train/AscendSpeed代码目录。 图1 创建训练作业 如果镜像使用使用基础镜像中的基础镜像时,训练作业启动命令中输入: cd /home/ma-user/modelarts/user-job-dir/AscendSpeed; sh ./scripts/install.sh; sh ./scripts/obs_pipeline.sh 如果镜像使用E CS 中构建新镜像构建的新镜像时,训练作业启动命令中输入: cd /home/ma-user/modelarts/user-job-dir/AscendSpeed; sh ./scripts/obs_pipeline.sh
  • Step2 配置数据输入和输出 单击“增加训练输入”和“增加训练输出”,用于配置训练作业开始时需要输入数据的路径和训练结束后输出数据的路径。 在“输入”的输入框内设置变量:ORIGINAL_TRAIN_DATA_PATH、ORIGINAL_HF_WEIGHT。 ORIGINAL_TRAIN_DATA_PATH:训练时指定的输入数据集路径。 ORIGINAL_HF_WEIGHT:加载tokenizer与Hugging Face权重时,对应的存放地址。 在“输出”的输入框内设置变量:OUTPUT_SAVE_DIR、HF_SAVE_DIR。 OUTPUT_SAVE_DIR:训练完成后指定的输出模型路径。 HF_SAVE_DIR:训练完成的权重文件自动转换为Hugging Face格式权重输出的路径(确保添加CONVERT_MG2HF环境变量并设置为True)。 分别单击“输入”和“输出”的数据存储位置,如图所示,选择OBS桶中指定的目录。ORIGINAL_TRAIN_DATA_PATH中则直接选中数据集文件。 “输入”和“输出”中的获取方式全部选择为:环境变量。 “输出”中的预下载至本地目标选择:下载,此时输出路径中的数据则会下载至OBS中。
  • 上传数据到指定目录 将下载的原始数据存放在/mnt/sfs_turbo/training_data目录下。具体步骤如下: 进入到/mnt/sfs_turbo/目录下。 创建目录“training_data”,并将原始数据放置在此处。 mkdir training_data 数据存放参考目录结构如下: ${workdir} |── training_data |── train-00000-of-00001-a09b74b3ef9c3b56.parquet # 训练原始数据集 |── alpaca_gpt4_data.json # 微调数据文件
  • Alpaca数据集 本教程使用Alpaca数据集,数据集的介绍及下载链接如下。 Alpaca数据集是由OpenAI的text-davinci-003引擎生成的包含52k条指令和演示的数据集。这些指令数据可以用来对语言模型进行指令调优,使语言模型更好地遵循指令。 预训练使用的Alpaca数据集下载:https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet,数据大小:24M左右。 SFT和LoRA微调使用的Alpaca数据集下载:https://huggingface.co/datasets/QingyiSi/Alpaca-CoT/blob/main/alpacaGPT4/alpaca_gpt4_data.json,数据大小:43.6 MB。
  • 查看性能 训练性能主要通过训练日志中的2个指标查看,吞吐量和loss收敛情况。 吞吐量(tokens/s/p):global batch size*seq_length/(总卡数*elapsed time per iteration)*1000,其global batch size(GBS)、seq_len(SEQ_LEN)为训练时设置的参数,具体参数查看表1。 loss收敛情况:日志里存在lm loss参数 ,lm loss参数随着训练迭代周期持续性减小,并逐渐趋于稳定平缓。也可以使用可视化工具TrainingLogParser查看loss收敛情况,如图2所示。 单节点训练:训练过程中的loss直接打印在窗口上。 多节点训练:训练过程中的loss打印在最后一个节点上。 图2 Loss收敛情况(示意图)
  • 获取模型软件包和权重文件 本方案支持的模型对应的软件和依赖包获取地址如表1所示,模型列表、对应的开源权重获取地址如表1所示。 表1 模型对应的软件包和依赖包获取地址 代码包名称 代码说明 下载地址 AscendCloud-6.3.909-xxx.zip 说明: 软件包名称中的xxx表示时间戳。 包含了本教程中使用到的模型训练代码、推理部署代码和推理评测代码。代码包具体说明请参见模型软件包结构说明。 获取路径:Support-E 请联系您所在企业的华为方技术支持下载获取。
  • 模型软件包结构说明 本教程需要使用到的AscendCloud-6.3.909中的AscendCloud-LLM-xxx.zip软件包和算子包AscendCloud-OPP,AscendCloud-LLM关键文件介绍如下。 |——AscendCloud-LLM |──llm_train # 模型训练代码包 |──AscendSpeed # 基于AscendSpeed的训练代码 |──ascendcloud_patch/ # 针对昇腾云平台适配的功能补丁包 |──scripts/ # 训练需要的启动脚本 |──llama2 # llama2系列模型执行脚本的文件夹 |──llama3 # llama3系列模型执行脚本的文件夹 |──qwen # Qwen系列模型执行脚本的文件夹 |──qwen1.5 # Qwen1.5系列模型执行脚本的文件夹 |── ... |── dev_pipeline.sh # 系列模型共同调用的多功能的脚本 |── install.sh # 环境部署脚本 |——src/ # 启动命令行封装脚本,在install.sh里面自动构建 |──llm_inference # 推理代码包 |──llm_tools # 推理工具
  • 工作目录介绍 详细的工作目录参考如下,建议参考以下要求设置工作目录。训练脚本以分类的方式集中在 scripts 文件夹中。 ${workdir}(例如使用SFS Turbo的路径:/mnt/sfs_turbo/) |──llm_train #解压代码包后自动生成的代码目录,无需用户创建 |── AscendSpeed # 代码目录 |──ascendcloud_patch/ # 针对昇腾云平台适配的功能代码包 |──scripts/ # 各模型训练需要的启动脚本,训练脚本以分类的方式集中在scripts文件夹中。 # 自动生成数据目录结构 |── processed_for_input #目录结构会自动生成,无需用户创建 |── ${model_name} # 模型名称 |── data # 预处理后数据 |── pretrain # 预训练加载的数据 |── finetune # 微调加载的数据 |──converted_weights # HuggingFace格式转换megatron格式后权重文件 |── saved_dir_for_output # 训练输出保存权重,目录结构会自动生成,无需用户创建 |── ${model_name} # 模型名称 |── logs # 训练过程中日志(loss、吞吐性能) |—— saved_models |── lora # lora微调输出权重 |── sft # 增量训练输出权重 |── pretrain # 预训练输出权重 |── tokenizers #tokenizer目录,需要用户手动创建,后续操作步骤中会提示 |── Llama2-70B |── models #原始权重与tokenizer目录,需要用户手动创建,后续操作步骤中会提示 |── Llama2-70B |── training_data #原始数据目录,需要用户手动创建,后续操作步骤中会提示 |── train-00000-of-00001-a09b74b3ef9c3b56.parquet #原始数据文件 |── alpaca_gpt4_data.json #微调数据文件
  • 上传代码和权重文件到工作环境 使用root用户以SSH的方式登录服务器。 将AscendCloud代码包AscendCloud-xxx-xxx.zip上传到${workdir}目录下并解压缩,如SFS Turbo的路径:/mnt/sfs_turbo目录下,以下都以/mnt/sfs_turbo为例,请根据实际修改。 unzip AscendCloud-*.zip 上传tokenizers文件到工作目录中的/mnt/sfs_turbo/tokenizers/Llama2-{MODEL_TYPE}目录,如Llama2-70B。 具体步骤如下: 进入到${workdir}目录下,如:/mnt/sfs_turbo,创建tokenizers文件目录将权重和词表文件放置此处,以Llama2-70B为例。 cd /mnt/sfs_turbo mkdir -p tokenizers/Llama2-70B
  • 精度问题概述 随着ChatGPT的推出,大模型迅速成为AI界热点。大模型训练需要强大的算力支撑,涉及数据、模型、框架、算子、硬件等诸多环节。由于规模巨大,训练过程复杂,经常出现loss不收敛的情况(模型精度问题),主要表现为loss曲线起飞或者毛刺等,且模型的下游任务评测效果变差。影响大模型loss收敛的原因是多方面的:首先,数据问题可能导致不收敛,比如数据预处理不完善;其次,模型的训练超参数也同样会导致类似的情况;再者,模型本身的算法设计过程也可能会引入不收敛情况;最后,则是由计算过程导致的模型收敛问题。 模型精度(以模型评测结果衡量的各种指标,广义的Model Accuracy),是多种因素共同作用的结果,出现问题的主要表现是训练过程的Loss不收敛或者收敛出问题或者loss收敛却评测集上表现不佳。而计算的数值精度问题,(Computational Precision,Floating-Point Arithmetic Precision等),则是由于浮点数计算过程的有限字长效应及计算序所带来的近似误差,包括各种计算的数学表达,都会带来结果的近似性。二者是完全不同的两个问题, 不能混为一谈。计算数值的近似性一定概率上会影响模型的收敛性,但是影响大模型收敛的原因是复杂且多样的,大模型本身也对计算差异有一定韧性,所以,不能简认地为计算过程的差异一定会导致模型收敛出现问题。算子的数值精度是计算过程的基础,通常认为算子精度问题是大模型精度问题的来源之一,从实际经验看,算子数值精度不足(除去计算错误等BUG问题)所导致的模型收敛问题在整个模型收敛比例里面较低,但其影响会较大,所以,该问题需要引起重视。 而且,由于实现过程差异,不同硬件对于同样的计算过程,数值计算结果通常会有差异,比如GPU和CPU之间,GPU各版本之间,数值计算结果都有一定差异,在特定的容限范围内,不会影响模型的最终收敛。所以,计算的数值差异是很常规的现象,并非错误。 为了更好地了解这种计算差异,并且能够正确区分正常计算差异和引起模型精度问题的异常差异,本指南提供了算子问题定位工具集详细的使用场景和使用步骤,方便用户自行或在支持下排查可能的数值计算精度问题。 当用户将大语言模型或者其他类型深度神经网络的训练从GPU迁移到昇腾AI处理器时,可能出现以下不同现象的模型精度问题。一般包括: Loss曲线与CPU/GPU差异不符合预期。 验证准确度与CPU/GPU差异不符合预期。 在迁移到NPU环境下训练发现以上问题时,说明精度可能存在偏差,需要进一步做精度调优。下文将分别阐述精度诊断的整体思路和如何借助精度工具进行精度问题的定位。 父主题: PyTorch迁移精度调优
  • 步骤五:CogVideo微调 下载模型权重 下载CogVideoX1.5 5b模型,huggingface地址如下 https://huggingface.co/THUDM/CogVideoX1.5-5B 准备数据集 数据集可参考使用如下数据集 https://huggingface.co/datasets/Wild-Heart/Tom-and-Jerry-VideoGeneration-Dataset 进行data cache 由于CogVideoX1.5对显存需求较大,直接训练显存不足,训练采用data cache,将text encoder和vae两个不参与训练的模型对数据集进行预编码处理。 cd /home/ma-user/finetrainers 对/home/ma-user/finetrainers/prepare_dataset.sh文件进行修改,配置对应的参数: MODEL_ID="path/CogVideoX1.5-5B" # 模型路径 DATA_ROOT="path/Tom-and-Jerry-VideoGeneration-Dataset" # 数据集路径 CAPTION_COLUMN="captions.txt" # 数据集提示词文件名 VIDEO_COLUMN="videos.txt" # 数据集视频名文件名 OUTPUT_DIR="path/preprocessed-Tom-dataset" # 预编码处理的tensor数据集输出路径 修改后,执行prepare_dataset.sh脚本 bash prepare_dataset.sh 进行模型训练 cd /home/ma-user/finetrainers 对finetrainers/train_text_to_video_sft.sh文件进行修改,配置训练使用的超参数: MAX_TRAIN_STEPS=("20000") # 最大训练步数 DATA_ROOT="path/preprocessed-Tom-dataset" # 预编码处理的tensor数据集路径,即data cache的输出路径 CAPTION_COLUMN="prompts.txt" # 数据集提示词文件名 VIDEO_COLUMN="videos.txt" # 数据集视频名文件名 MODEL_PATH="THUDM/CogVideoX1.5-5B" # 模型路径 output_dir="/path/to/my/models/cogvideox-sft # 模型输出路径 修改后,执行train_text_to_video_sft.sh脚本 bash train_text_to_video_sft.sh 以上微调文档提示来自官方文档,有关可用微调脚本参数及其功能的全面文档,您可以参考官方finetrainers中CogVideo训练文档。
  • 步骤三:启动容器镜像 启动容器镜像。启动前请先按照参数说明修改${}中的参数。 export work_dir="自定义挂载的工作目录" export container_work_dir="自定义挂载到容器内的工作目录" export container_name="自定义容器名称" export image_name="镜像名称或ID" // 启动一个容器去运行镜像 docker run -itd --net=bridge \ --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 \ --shm-size=256g \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /var/log/npu/:/usr/slog \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v ${work_dir}:${container_work_dir} \ --name ${container_name} \ ${image_name} \ /bin/bash 参数说明: -v ${work_dir}:${container_work_dir}:代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。work_dir为宿主机中工作目录,目录下可存放项目所需代码、数据等文件。container_work_dir为要挂载到的容器中的目录。为方便两个地址可以相同。 容器不能挂载到/home/ma-user目录,此目录为ma-user用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。 driver及npu-smi需同时挂载至容器。 --name ${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。 ${image_name}:容器镜像的名称。 --device=/dev/davinci0 :挂载对应卡到容器,当需要挂载多卡,请依次添加多项该配置 通过容器名称进入容器中。默认使用ma-user用户,后续所有操作步骤都在ma-user用户下执行。 docker exec -it ${container_name} bash
  • 获取软件和镜像 表2 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.3.912-xxx.zip软件包中的AscendCloud-AIGC-6.3.912-xxx.zip 说明: 包名中的xxx表示具体的时间戳,以包名的实际时间为准。 获取路径:Support-E,在此路径中查找下载ModelArts 6.3.912 版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像 西南-贵阳一: 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资源开通,购买Server资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问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
  • 步骤四:安装依赖和软件包 git clone和git lfs下载大模型可以参考如下操作。 由于欧拉源上没有git-lfs包,所以需要从压缩包中解压使用,在浏览器中输入如下地址下载git-lfs压缩包并上传到容器的/home/ma-user目录下。 https://github.com/git-lfs/git-lfs/releases/download/v3.2.0/git-lfs-linux-arm64-v3.2.0.tar.gz 或直接下载到容器,这样在容器中可以直接使用。 cd /home/ma-user wget https://github.com/git-lfs/git-lfs/releases/download/v3.2.0/git-lfs-linux-arm64-v3.2.0.tar.gz 进入容器,执行安装git lfs命令。 cd /home/ma-user tar -zxvf git-lfs-linux-arm64-v3.2.0.tar.gz cd git-lfs-3.2.0 sudo sh install.sh 设置git配置去掉ssl校验。 git config --global http.sslVerify false 从github拉取finetrainers代码。 cd /home/ma-user git clone https://github.com/a-r-r-o-w/finetrainers.git cd /home/ma-user/finetrainers git checkout 80d1150a0e233a1 若进行训练微调需依赖decord包,arm版本可参考附录安装编译。 由于当前CogVideoX1.5版本依赖的diffuser暂未合入主线,需安装分支版本diffuser cd /home/ma-user git clone https://github.com/zRzRzRzRzRzRzR/diffusers cd /home/ma-user/diffusers/ git checkout cogvideox1.1-5b git checkout ea166f85ad0090d182ec5f0 pip install -e . 安装CogVideo Ascend软件包。 将获取到的CogVideo Ascend软件包AscendCloud-AIGC-*.zip文件上传到容器的/home/ma-user目录下。获取路径参见获取软件和镜像。 解压AscendCloud-AIGC-*.zip文件,解压后将里面指定文件与对应CogVideo文件进行替换,执行以下命令即可。 cd /home/ma-user unzip AscendCloud-AIGC-*.zip -d ./AscendCloud cd AscendCloud/multimodal_algorithm/CogVideoX_1_5/ dos2unix install.sh bash install.sh AscendCloud-AIGC-*.zip后面的*表示时间戳,请按照实际替换。 CogVideo Ascend软件包内容如下: . |---- install.sh 安装torch-npu适配修改脚本 |---- modify.patch 适配CogVideo训练代码git patch文件 |---- README.md 适配文档基于官方代码commit id说明 |---- requirements.txt python依赖包
  • 上传数据到指定目录 将下载的原始数据存放在/home/ma-user/ws/training_data目录下。具体步骤如下: 进入到/home/ma-user/ws/目录下。 创建目录“training_data”,并将原始数据放置在此处。 mkdir training_data 数据存放参考目录结构如下: ${workdir}(例如/home/ma-user/ws ) |── training_data |── train-00000-of-00001-a09b74b3ef9c3b56.parquet # 训练原始数据集 |── alpaca_gpt4_data.json # 微调数据文件 多机情况下,只有在rank_0节点进行数据预处理,转换权重等工作,所以原始数据集和原始权重,包括保存结果路径,都应该在共享目录下。
  • 模型软件包结构说明 本教程需要使用到的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_ascend # 量化代码 ├── 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评测配置脚本名字
  • Alpaca数据集 本教程使用Alpaca数据集,数据集的介绍及下载链接如下。 Alpaca数据集是由OpenAI的text-davinci-003引擎生成的包含52k条指令和演示的数据集。这些指令数据可以用来对语言模型进行指令调优,使语言模型更好地遵循指令。 预训练使用的Alpaca数据集下载:https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet,数据大小:24M左右。 SFT和LoRA微调使用的Alpaca数据集下载:https://huggingface.co/datasets/QingyiSi/Alpaca-CoT/blob/main/alpacaGPT4/alpaca_gpt4_data.json,数据大小:43.6 MB。
  • 支持的模型列表和权重文件 本方案支持vLLM的v0.6.0版本。不同vLLM版本支持的模型列表有差异,具体如表3所示。 表3 支持的模型列表和权重获取地址 序号 模型名称 是否支持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 qwen2.5-0.5b √ √ √ √ x https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct 30 qwen2.5-1.5b √ √ √ √ x https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct 31 qwen2.5-3b √ √ √ √ x https://huggingface.co/Qwen/Qwen2.5-3B-Instruct 32 qwen2.5-7b √ √ x √ x https://huggingface.co/Qwen/Qwen2.5-7B-Instruct 33 qwen2.5-14b √ √ √ √ x https://huggingface.co/Qwen/Qwen2.5-14B-Instruct 34 qwen2.5-32b √ √ √ √ x https://huggingface.co/Qwen/Qwen2.5-32B-Instruct 35 qwen2.5-72b √ √ √ √ x https://huggingface.co/Qwen/Qwen2.5-72B-Instruct 36 baichuan2-7b √ x x √ x https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat 37 baichuan2-13b √ x x √ x https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat 38 gemma-2b √ x x x x https://huggingface.co/google/gemma-2b 39 gemma-7b √ x x x x https://huggingface.co/google/gemma-7b 40 chatglm2-6b √ x x x x https://huggingface.co/THUDM/chatglm2-6b 41 chatglm3-6b √ x x x x https://huggingface.co/THUDM/chatglm3-6b 42 glm-4-9b √ x x x x https://huggingface.co/THUDM/glm-4-9b-chat 43 mistral-7b √ x x x x https://huggingface.co/mistralai/Mistral-7B-v0.1 44 mixtral-8x7b √ x x x x https://huggingface.co/mistralai/Mixtral-8x7B-Instruct-v0.1 45 falcon-11b √ x x x x https://huggingface.co/tiiuae/falcon-11B/tree/main 46 qwen2-57b-a14b √ x x x x https://huggingface.co/Qwen/Qwen2-57B-A14B-Instruct 47 llama3.1-8b √ √ √ √ x https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct 48 llama3.1-70b √ √ √ √ x https://huggingface.co/meta-llama/Meta-Llama-3.1-70B-Instruct 49 llama-3.1-405B √ √ x x x https://huggingface.co/hugging-quants/Meta-Llama-3.1-405B-Instruct-AWQ-INT4 50 llama-3.2-1B √ x x x x Llama-3.2-1B-Instruct · 模型库 (modelscope.cn) 51 llama-3.2-3B √ x x x x Llama-3.2-3B-Instruct · 模型库 (modelscope.cn) 52 llava-1.5-7b √ x x x x https://huggingface.co/llava-hf/llava-1.5-7b-hf/tree/main 53 llava-1.5-13b √ x x x x https://huggingface.co/llava-hf/llava-1.5-13b-hf/tree/main 54 llava-v1.6-7b √ x x x x https://huggingface.co/llava-hf/llava-v1.6-vicuna-7b-hf/tree/main 55 llava-v1.6-13b √ x x x x https://huggingface.co/llava-hf/llava-v1.6-vicuna-13b-hf/tree/main 56 llava-v1.6-34b √ x x x x llava-hf/llava-v1.6-34b-hf at main (huggingface.co) 57 internvl2-8B √ x x x x OpenGVLab/InternVL2-8B at main (huggingface.co) 58 internvl2-26B √ x x x x OpenGVLab/InternVL2-26B at main (huggingface.co) 59 internvl2-40B √ x x x x OpenGVLab/InternVL2-40B at main (huggingface.co) 60 MiniCPM-v2.6 √ x x x x https://huggingface.co/openbmb/MiniCPM-V-2_6/tree/main 61 deepseek-v2-236b x x √ x x https://huggingface.co/deepseek-ai/DeepSeek-V2 62 deepseek-v2-lite-16b √ x √ x x https://huggingface.co/deepseek-ai/DeepSeek-V2-Lite 63 qwen2-vl-7B √ x x x x Qwen/Qwen2-VL-7B-Instruct at main (huggingface.co) 注意:Qwen2-VL 开源vllm依赖特定transformers版本, 请手动安装: pip install git+https://github.com/huggingface/transformers.git@21fac7abba2a37fae86106f87fcf9974fd1e3830 64 qwen-vl √ x x x x https://huggingface.co/Qwen/Qwen-VL 65 qwen-vl-chat √ x x x x https://huggingface.co/Qwen/Qwen-VL-Chat 66 MiniCPM-v2 √ x x x x https://huggingface.co/HwwwH/MiniCPM-V-2 注意:需要修改源文件site-packages/timm/layers/pos_embed.py,在第46行上面新增一行代码,如下: posemb = posemb.contiguous() #新增 posemb = F.interpolate(posemb, size=new_size, mode=interpolation, antialias=antialias) 各模型支持的卡数请参见附录:基于vLLM不同模型推理支持最小卡数和最大序列说明章节。
  • 镜像版本 本教程中用到基础镜像地址和配套版本关系如下表所示,请提前了解。 表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
  • 资源规格要求 本文档中的模型运行环境是ModelArts Lite的Server。推荐使用“西南-贵阳一”Region上的资源和Ascend Snt9B。 如果使用Server资源,请参考Lite Server资源开通,购买Server资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。
  • 软件配套版本 本方案支持的软件配套版本和依赖包获取地址如表2所示。 表2 软件配套版本和获取地址 软件名称 说明 下载地址 AscendCloud-6.3.910-xxx.zip 说明: 软件包名称中的xxx表示时间戳。 包含了本教程中使用到的推理部署代码和推理评测代码、推理依赖的算子包。代码包具体说明请参见模型软件包结构说明。 获取路径:Support-E,在此路径中查找下载ModelArts 6.3.910 版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。
  • 约束限制 本方案目前仅适用于部分企业客户。 本文档适配昇腾云ModelArts 6.3.910版本,请参考软件配套版本获取配套版本的软件包,请严格遵照版本配套关系使用本文档。 资源规格推荐使用“西南-贵阳一”Region上的Server和昇腾Snt9B资源。 推理部署使用的服务框架是vLLM。vLLM支持v0.6.0版本。 支持FP16和BF16数据类型推理。 适配的CANN版本是cann_8.0.rc3。 Server驱动版本要求23.0.6。
  • Megatron转HuggingFace参数说明 训练完成的权重文件默认不会自动转换为Hugging Face格式权重。若用户需要自动转换,则在运行脚本,例如0_pl_pretrain_13b.sh中,添加变量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。 输出转换后权重文件保存路径: 权重转换完成后,在/home/ma-user/work/llm_train/saved_dir_for_output/llama2-13b/saved_models/pretrain_hf/目录下查看转换后的权重文件。
  • 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路径。
  • 用户自定义执行权重转换参数修改说明 同样以 llama2 为例,用户可在Notebook直接编辑scripts/llama2/2_convert_mg_hf.sh脚本,自定义环境变量的值,并在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 训练完成后保存的权重路径。
  • 步骤二 修改训练yaml文件配置 LlamaFactroy配置文件为Yaml文件,启动训练前需修改Yaml配置文件,Yaml配置文件在代码目录下的{work_dir}/llm_train/LLaMAFactory/demo.yaml。修改详细步骤如下所示。 选择训练阶段类型。 指令监督微调,复制tune_yaml样例模板内容覆盖demo.yaml文件内容。 DPO偏好训练,复制dpo_yaml样例模板内容覆盖demo.yaml文件内容。 PPO强化训练,先进行RM奖励训练任务后,复制ppo_yaml样例模板内容覆盖demo.yaml内容。 RM奖励训练,复制rm_yaml样例模板内容覆盖demo.yaml文件内容。 1、DPO偏好训练、Reward奖励模型训练、PPO强化学习目前仅限制支持于llama3系列 2、PPO训练暂不支持 ZeRO-3存在通信问题,如llama3-70B使用ZeRO-3暂不支持 训练策略类型 全参full,配置如下: finetuning_type: full lora,如dpo仅支持此策略;配置如下: finetuning_type: lora lora_target: all 修改yaml文件(demo.yaml)的参数如表1所示。 表1 修改重要参数 参数 示例值 参数说明 model_name_or_path /home/ma-user/ws/tokenizers/Qwen2-72B 必须修改。加载tokenizer与Hugging Face权重时存放目录绝对或相对路径。请根据实际规划修改。 template qwen 必须修改。用于指定模板。如果设置为"qwen",则使用Qwen模板进行训练,模板选择可参照表1中的template列 output_dir /home/ma-user/ws/Qwen2-72B/sft-4096 必须修改。指定输出目录。训练过程中生成的模型参数和日志文件将保存在这个目录下。用户根据自己实际要求适配。 per_device_train_batch_size 1 指定每个设备的训练批次大小 gradient_accumulation_steps 8 可修改。指定梯度累积的步数,这可以增加批次大小而不增加内存消耗。可根据自己要求适配。取值可参考表1中梯度累积值列。 num_train_epochs 5 表示训练轮次,根据实际需要修改。一个Epoch是将所有训练样本训练一次的过程。可根据自己要求适配 cutoff_len 4096 文本处理时的最大长度,此处为4096,用户可根据自己要求适配 dataset 指令监督微调/ppo:alpaca_en_demo rm/dpo:dpo_en_demo 多模态数据集(图像):mllm_demo,identity 【可选】注册在dataset_info.json文件数据集名称。如选用定义数据请参考准备数据(可选)配置dataset_info.json文件,并将数据集存放于dataset_info.json同目录下。 dataset_dir /home/ma-user/ws/LLaMAFactory/LLaMA-Factory/data 【可选】dataset_info.json配置文件所属的绝对路径;如使用自定义数据集,yaml配置文件需添加此参数。 是否选择加速深度学习训练框架Deepspeed,可参考表1选择不同的框架。 是,选用ZeRO (Zero Redundancy Optimizer)优化器。 ZeRO-0,配置以下参数 deepspeed: examples/deepspeed/ds_z0_config.json ZeRO-1,配置以下参数,并复制ds_z1_config.json样例模板至工作目录/home/ma-user/LLaMAFactory/LLaMA-Factory/examples/deepspeed deepspeed: examples/deepspeed/ds_z1_config.json ZeRO-2,配置以下参数 deepspeed: examples/deepspeed/ds_z2_config.json ZeRO-3,配置以下参数 deepspeed: examples/deepspeed/ds_z3_config.json ZeRO-3-Offload,配置以下参数 deepspeed: examples/deepspeed/ds_z3_offload_config.json 否,默认选用Accelerate加速深度学习训练框架,注释掉deepspeed参数。 是否开启NPU FlashAttention融合算子,具体约束详见NPU_Flash_Attn融合算子约束 是,配置以下参数。 flash_attn: sdpa 否,配置以下参数关闭。 flash_attn: disabled 是否使用固定句长。 是,配置以下参数 packing: true 否,默认使用动态句长,注释掉packing参数。 选用数据精度格式bf16或fp16二者选一,两者区别可查看BF16和FP16说明。 bf16,配置以下参数。 bf16: true fp16,相比bf16还需配置loss scale参数,配置如下。 设置fp16为True。 fp16: true 修改deepspeed的"loss_scale"参数,配置如下。 修改ZeRO优化器配置文件,如ZeRO2命令如下。 cd /home/ma-user/LLaMAFactory/LLaMA-Factory/examples/deepspeed vim ds_z2_config.json 使用fp16容易出现数值溢出,因此配置loss scale建议配置4096或4096以上: "loss_scale": 4096, 是否使用自定义数据集。 是,参考准备数据(可选)后,以指令监督微调数据集为例,配置以下参数:参考表1dataset_dir和dataset参数说明;如alpaca_gpt4_data.json数据集前缀则为alpaca_gpt4_data。 dataset: alpaca_gpt4_data dataset_dir: /home/ma-user/ws/llm_train/LLaMAFactory/LLaMA-Factory/data 否,使用代码包自带数据集,注释掉dataset_dir参数,配置参数如下。 指令监督微调/PPO数据集 dataset: identity,alpaca_en_demo 多模态数据集,如qwen2_vl系列模型 dataset: mllm_demo,identity RM/DPO,目前仅支持llama3系列模型 dataset: dpo_en_demo 是否使用falcon-11b、qwen2_vl系列、glm4-9b模型。 是,更新配置或命令。 falcon-11b,参考falcon-11B模型替换文件。 glm4-9b,参考glm4-9b模型修改文件内容。 qwen2_vl系列,数据集为多模态数据集,若前面步骤已配置请忽略。具体配置如下: 数据集dataset配置: dataset: mllm_demo,identity 否,忽略此步骤,执行下一步。 如需其他配置参数,可参考表1按照实际需求修改。
  • Step2 创建SFT全参微调训练任务 创建训练作业,并自定义名称、描述等信息。选择自定义算法,启动方式自定义,以及上传的镜像。训练脚本中会自动执行训练前的权重转换操作和数据处理操作。 图1 选择镜像 如果镜像使用使用基础镜像中的基础镜像时,训练作业启动命令中输入: cd /home/ma-user/work/llm_train/AscendSpeed; sh ./scripts/install.sh; sh ./scripts/llama2/0_pl_sft_13b.sh 如果镜像使用ECS中构建新镜像构建的新镜像时,训练作业启动命令中输入: cd /home/ma-user/work/llm_train/AscendSpeed; sh ./scripts/llama2/0_pl_sft_13b.sh 创建训练作业时,可开启自动重启功能。当环境问题导致训练作业异常时,系统将自动修复异常或隔离节点,并重启训练作业,提高训练成功率。为了避免丢失训练进度、浪费算力。此功能已适配断点续训练。 图2 开启故障重启 断点续训练是通过checkpoint机制实现。checkpoint机制是在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。即便模型训练中断,也可以基于checkpoint继续训练。 当训练作业发生故障中断本次作业时,代码可自动从训练中断的位置继续训练,加载中断生成的checkpoint,中间不需要改动任何参数。可以通过训练脚本中的SAVE_INTERVAL参数来指定间隔多少step保存checkpoint。
共100000条
提示

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