华为云用户手册

  • Alpaca数据处理说明 数据预处理脚本preprocess_data.py存放在代码包的“llm_train/AscendSpeed/ModelLink/tools/”目录中,脚本具体内容如下。 #数据预处理 python ./tools/preprocess_data.py \ --input {work_dir}/training_data/train-00000-of-00001-a09b74b3ef9c3b56.parquet \ --tokenizer-name-or-path {work_dir}/tokenizers/BaiChuan2-13B \ --output-prefix {work_dir}/processed_for_ma_input/BaiChuan2-13B/data/pretrain/alpaca \ --workers 8 \ --log-interval 1000 \ --seq-length 4096 \ --tokenizer-type PretrainedFromHF 参数说明: ${work_dir}的路径指容器工作路径:如/home/ma-user/ws/ 。 - input:原始数据集的存放路径 - output-prefix:处理后的数据集保存路径+数据集名称前缀(例如: alpaca) - tokenizer-type:tokenizer的类型,可选项有['BertWordPieceLowerCase','BertWordPieceCase','GPT2BPETokenizer','PretrainedFromHF'],一般为PretrainedFromHF。 - tokenizer-name-or-path:tokenizer的存放路径 -workers:设置数据处理使用执行卡数量 -log-interval:是一个用于设置日志输出间隔的参数,表示输出日志的频率。在训练大规模模型时,可以通过设置这个参数来控制日志的输出 seq-length:是一个用于计算序列长度的函数。它接收一个序列作为输入,并返回序列的长度,需和训练时参数保持一致。 数据预处理后输出的训练数据如下: alpaca_text_document.bin alpaca_text_document.idx
  • 镜像地址 本教程中用到的基础镜像地址和配套版本关系如下表所示,请提前了解。 表1 基础容器镜像地址 镜像用途 镜像地址 基础镜像(训练和推理通用) 西南-贵阳一:swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc1-py_3.9-hce_2.0.2312-aarch64-snt9b-20240516142953-ca51f42 表2 模型镜像版本 模型 版本 CANN cann_8.0.rc1 PyTorch pytorch_2.1.0
  • Step1 检查环境 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info 如出现错误,可能是机器上的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 执行如下命令统一文件属组。启动容器时默认用户为ma-user用户,使用其他属组如root用户上传的数据和文件等,可能会存在权限不足的问题,因此需要执行如下命令统一文件属主。 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
  • Step3 启动容器镜像 启动容器镜像前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。启动容器命令如下。 container_work_dir="/home/ma-user/ws" # 容器内挂载的目录 work_dir="/home/ma-user/ws" # 宿主机挂载目录,存放了代码、数据、权重 container_name="ascendspeed" # 启动的容器名称 image_name="${container_name} " # 启动的镜像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 \ --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 32g \ --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用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。 driver及npu-smi需同时挂载至容器。 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。 ${image_name} 为docker镜像的ID,在宿主机上可通过docker images查询得到。 通过容器名称进入容器中。 docker exec -it ${container_name} bash 安装依赖包。 #进入scriptsscripts目录 cd /home/ma-user/ws/6.3.904-Ascend/llm_train/AscendSpeed/scripts #执行安装命令 pip install -r requirements.txt
  • 自定义数据 用户也可以自行准备训练数据。数据要求如下: 使用标准的.json格式的数据,通过设置--json-key来指定需要参与训练的列。 请注意huggingface中的数据集具有如下this格式。可以使用–json-key标志更改数据集文本字段的名称,默认为text。在维基百科数据集中,它有四列,分别是id、url、title和text。可以指定–json-key 标志来选择用于训练的列。 { 'id': '1', 'url': 'https://simple.wikipedia.org/wiki/April', 'title': 'April', 'text': 'April is the fourth month...' } 经下载的原始数据存放在/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数据 本教程使用到的训练数据集是Alpaca数据集。Alpaca是由OpenAI的text-davinci-003引擎生成的包含52k条指令和演示的数据集。这些指令数据可以用来对语言模型进行指令调优,使语言模型更好地遵循指令。 训练数据集下载:https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet,数据大小:24M左右。
  • 权重和词表文件介绍 下载完毕后的HuggingFace原始权重文件包含以下内容,此处以baichuan2-13B为例。 baichuan2-13B ├── config.json ├── configuration_baichuan.py ├── generation_config.json ├── generation_utils.py ├── handler.py ├── modeling_baichuan.py ├── pytorch_model-00001-of-00003.bin ├── pytorch_model-00002-of-00003.bin ├── pytorch_model-00003-of-00003.bin ├── pytorch_model.bin.index.json ├── quantizer.py ├── README.md ├── special_tokens_map.json ├── tokenization_baichuan.py ├── tokenizer_config.json ├── tokenizer.model ├── transform.ckpt ├── transformed.ckpt
  • 上传代码到工作环境 使用root用户以SSH的方式登录DevServer。 将AscendSpeed代码包AscendCloud-3rdLLM-xxx-xxx.zip上传到${workdir}目录下并解压缩,如:/home/ma-user/ws目录下,以下都以/home/ma-user/ws为例。 unzip AscendCloud-3rdLLM-xxx-xxx.zip #解压缩,-xxx-xxx表示软件包版本号和时间戳 上传tokenizers文件到工作目录中的/home/ma-user/ws/tokenizers/BaiChuan2-13B目录。 具体步骤如下: 进入到${workdir}目录下,如:/home/ma-user/ws。 cd /home/ma-user/ws mkdir -p tokenizers/BaiChuan2-13B 将 权重和词表文件 文件放置此处。 修改tokenizer目录下tokenization_baichuan.py中约71行内容。 调整 super().__init__()位置:将super().__init__()放置def __init__()方法最底层,如下图所示。 图1 修改tokenization_baichuan.py
  • 获取数据及代码 表1 准备代码 代码包名称 代码说明 下载地址 AscendCloud-3rdLLM-6.3.904-xxx.zip 说明: 软件包名称中的xxx表示时间戳。 包含了本教程中使用到的模型训练代码、推理部署代码和推理评测代码。代码包具体说明请参见代码目录介绍。 AscendSpeed是用于模型并行计算的框架,其中包含了许多模型的输入处理方法。 获取路径:Support网站 说明: 如果没有下载权限,请联系您所在企业的华为方技术支持下载获取。 权重和词表文件 包含了本教程使用到的HuggingFace原始权重文件和Tokenizer。 标记器(Tokenizer)是NLP管道的核心组件之一。它们有一个目的:将文本转换为模型可以处理的数据。模型只能处理数字,因此标记器(Tokenizer)需要将文本输入转换为数字数据。 baichuan2-13b-chat 这个路径下既有权重,也有Tokenizer,全部下载。具体内容参见权重和词表文件介绍。
  • 代码目录介绍 AscendCloud-3rdLLM代码包结构介绍如下: xxx-Ascend #xxx表示版本号 ├──llm_evaluation #推理评测代码包 ├──benchmark_eval #精度评测 ├──benchmark_tools #性能评测 ├──llm_train #模型训练代码包 ├──AscendSpeed #基于AscendSpeed的训练代码 ├──AscendSpeed #加速库 ├──ModelLink #基于ModelLink的训练代码 ├──scripts/ #训练需要的启动脚本 本教程需要使用到的训练相关代码存放在llm_train/AscendSpeed目录下,具体文件介绍如下: ├──llm_train #模型训练代码包 ├──AscendSpeed #基于AscendSpeed的训练代码 ├──AscendSpeed #加速库 ├──ModelLink #基于ModelLink的训练代码,数据预处理脚本 ├──scripts/ #训练需要的启动脚本,调用ModelLink ├──baichuan2 #Baichuan2的训练代码 ├──baichuan2.sh #Baichuan2训练脚本
  • 操作流程 图1 操作流程图 表1 操作任务流程说明 阶段 任务 说明 准备工作 准备环境 本教程案例是基于ModelArts Lite DevServer运行的,需要购买并开通DevServer资源。 准备代码 准备AscendSpeed训练代码、分词器Tokenizer和推理代码。 准备数据 准备训练数据,可以用Alpaca数据集,也可以使用自己准备的数据集。 准备镜像 准备训练模型适用的容器镜像。 预训练 预训练 介绍如何进行预训练,包括训练数据处理、超参配置、训练任务、断点续训及性能查看。 微调训练 SFT全参微调 介绍如何进行SFT全参微调。 LoRA微调训练 介绍如何进行LoRA微调训练。 推理前的权重转换 - 模型训练完成后,可以将训练产生的权重文件用于推理。推理前参考本章节,将训练后生成的多个权重文件合并,并转换成Huggingface格式的权重文件。 如果无推理任务或者使用开源Huggingface权重文件进行推理,可以忽略此章节。和本文档配套的推理文档请参考《开源大模型基于DevServer的推理通用指导》。
  • 权重文件格式转换 任意并行切分策略的Megatron权重格式转化为HuggingFace权重(该场景一般用于将训练好的megatron模型:预训练、lora、sft 重新转回HuggingFace格式),为下一步推理使用准备,无推理任务忽略此章节。一般训练都是多卡分布式训练权重结果文件为多个且文件为Megatron格式,因此需要合并多个文件转换为huggingface格式。 转换脚本的执行需要在/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink目录下执行。具体执行步骤如下: 以lora微调训练权重结果Megatron权重格式转化为HuggingFace权重为例。 #进入ModelLink目录下: cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink # 执行权重格式转换脚本:2_convert_mg_hf.sh LOAD_DIR=/home/ma-user/ws/saved_dir_for_ma_output/GLM3-6B/lora SAVE_DIR=/home/ma-user/ws/tokenizers/GLM3-6B CONVERT_HFTOMG=False sh ../scripts/glm3/2_convert_mg_hf.sh 其脚本2_convert_mg_hf.sh参数说明: save-model-type:输出后权重格式如(save_huggingface_qwen、save_huggingface_llama等)。 megatron-path:megatron模型路径,在代码xxx-Ascend/llm_train/AscendSpeed/ModelLink目录下 load-dir:${LOAD_DIR} 训练完成后保存的权重路径.如lora微调、sft、预训练生成的权重结果。 save-dir:${SAVE_DIR} 需要填入原始HF模型路径,新权重会存于../GLM3-6B/mg2hg下。 target-tensor-parallel-size:任务不同调整参数target-tensor-parallel-size。默认为1 target-pipeline-parallel-size :任务不同调整参数target-pipeline-parallel-size。默认为1 add-qkv-bias:为像qkv这样的键和值添加偏差。 loader:权重转换时要加载检查点的模型名称。 saver:权重转换时加载检查模型保存名称。 CONVERT_HFtoMG:权重转换类型是否为HuggingFace权重转换为Megatron格式,True :HuggingFace权重转换为Megatron,反之False为Megatron格式转换HuggingFace格式 # 转换后的权重文件结构 ├── config.json ├── configuration_chatglm.py ├── generation_config.json ├── model-00001-of-00003.safetensors ├── model-00002-of-00003.safetensors ├── model-00003-of-00003.safetensors ├── model.safetensors.index.json ├── modeling_chatglm.py ├── quantization.py
  • Step2 LoRA微调权重转换 LoRA微调训练前,需要先把训练权重文件转换为Megatron格式。 LoRA微调训练和SFT全参微调使用的是同一个HuggingFace权重文件转换为Megatron格式后的结果也是通用的。 如果在SFT微调任务中已经完成了HuggingFace权重转换操作,此处无需重复操作,可以直接使用SFT微调中的权重转换结果。 如果前面没有执行HuggingFace权重转换任务,可以参考SFT全参微调权重转换章节完成。
  • Step4 启动训练脚本 请根据表1修改超参值后,再启动训练脚本。 单机启动 以GLM3-6B为例,单机SFT全参微调启动命令如下。 进入代码目录/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed下执行启动脚本。xxx-Ascend请根据实际目录替换。 MODEL_TYPE=6B RUN_TYPE=lora DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights TRAIN_ITERS=300 MBS=1 GBS=64 TP=2 PP=4 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh 其中 MODEL_TYPE 、RUN_TYPE、DATA_PATH、TOKENIZER_MODEL、MODEL_PATH为必填;TRAIN_ITERS、MBS、GBS、 TP、PP 、SEQ_LEN为非必填,有默认值。 多机启动 以GLM3-6B为例,多台机器执行训练启动命令如下。多机启动需要在每个节点上执行,此处以双机为例。 进入代码目录/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed下执行启动脚本。xxx-Ascend请根据实际目录替换。 第一台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=0 MODEL_TYPE=6B RUN_TYPE=lora DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights TRAIN_ITERS=300 MBS=2 GBS=128 TP=2 PP=8 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh ... ... # 第二台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=1 MODEL_TYPE=6B RUN_TYPE=lora DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights TRAIN_ITERS=300 MBS=2 GBS=128 TP=2 PP=8 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh 以上命令多台机器执行时,只有${NODE_RANK}的节点ID值不同,其他参数都保持一致;其中MASTER_ADDR、NODE_RANK、MODEL_TYPE 、RUN_TYPE、DATASET_PATH、TOKENIZER_PATH、MODEL_PATH为必填;TRAIN_ITERS、MBS、GBS、TP、PP、WORK_DIR、SEQ_LEN为非必填,有默认值。 训练完成后,请参考查看日志和性能章节查看LoRA微调训练的日志和性能。
  • Step3 LoRA微调超参配置 LoRA微调训练脚本glm3_base.sh,存放在xxx-Ascend/llm_train/AscendSpeed/scripts/glm3/目录下。训练前,可以根据实际需要修改超参配置。 微调任务配置,操作同预训练配置类似,不同点为RUN_TYPE类型不同,以及输入输出路径的配置的不同。 表1 LoRA微调超参配置 参数 值 参数说明 DATASET_PATH /home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft 必填。训练时指定的输入数据路径。一般为数据地址/处理后的数据前缀名,不加文件类型后缀。 请根据实际规划修改。 TOKENIZER_PATH /home/ma-user/ws/tokenizers/GLM3-6B 必填。加载tokenizer时,tokenizer存放地址。请根据实际规划修改。 MODEL_PATH /home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights 必填。加载的权重文件路径。Step2 LoRA微调权重转换章节中将HuggingFace格式转化为Megatron格式的权重文件。 MODEL_TYPE 6B 必填。模型加载类型。 TRAIN_ITERS 300 非必填。训练迭代周期。根据实际需要修改。 MBS 1 非必填。表示流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。 该值与TP和PP以及模型大小相关,可根据实际情况进行调整。 默认值为1。单机建议值为1,双机为2。 GBS 64 非必填。表示训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长。 建议值单机64,双机128。 TP 2 非必填。表示张量并行。默认值为2。 PP 4 非必填。表示流水线并行。建议值单机4,双机8。 RUN_TYPE lora 必填。表示训练类型,lora表示LoRA微调训练。 MASTER_ADDR localhost 多机必填,单机忽略;指定主节点IP地址,多台机器中需要指定一个节点IP为主节点IP。 一般指定第一个节点IP为主节点IP。 NNODES 1 多机必填,单机忽略;节点总数,单机写1,双机写2,8机写8。 NODE_RANK 0 多机必填,单机忽略;节点序号,当前节点ID,一般从0开始,单机默认是0。以8机训练为例,节点ID依次为(0 1 2 3 4 5 6 7);一般ID为0的节点设置为主节点IP。 WORK_DIR /home/ma-user/ws 非必填。容器的工作目录。训练的权重文件保存在此路径下。默认值为:/home/ma-user/ws。 SEQ_LEN 8192 非必填。默认值为8192。
  • Step1 修改训练超参配置 SFT全参微调脚本glm3_base.sh,存放在Ascenxxx-Ascend/llm_train/AscendSpeed/scripts/glm3目录下。训练前,可以根据实际需要修改超参配置。 微调任务配置,操作同预训练配置类似,不同点为RUN_TYPE类型不同,以及输入输出路径的配置的不同。SFT微调的计算量与预训练基本一致,故配置可以与预训练相同。 表1 SFT全参微调超参配置 参数 值 参数说明 DATASET_PATH /home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft 必填。训练时指定的输入数据路径。一般为数据地址/处理后的数据前缀名,不加文件类型后缀。 请根据实际规划修改。 TOKENIZER_PATH /home/ma-user/ws/tokenizers/GLM3-6B 必填。加载tokenizer时,tokenizer存放地址。请根据实际规划修改。 MODEL_PATH /home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights 必填。加载的权重文件路径。SFT全参微调权重转换章节中将HuggingFace格式转化为Megatron格式的权重文件。 MODEL_TYPE 6B 必填。模型加载类型。 TRAIN_ITERS 200 非必填。训练迭代周期。根据实际需要修改。 MBS 1 非必填。表示流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。 该值与TP和PP以及模型大小相关,可根据实际情况进行调整。 建议值单机1,双机2。 GBS 64 非必填。表示训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长。 建议值单机64,双机128。 TP 2 非必填。表示张量并行。默认值为2。 PP 4 非必填。表示流水线并行。建议值单机4,双机8。 RUN_TYPE sft 必填。表示训练类型,sft表示SFT微调训练。 MASTER_ADDR localhost 多机必填,单机忽略。指定主节点IP地址,多台机器中需要指定一个节点IP为主节点IP。 一般指定第一个节点IP为主节点IP。 NNODES q 多机必填,单机忽略。节点总数,单机写1,双机写2,8机写8。 NODE_RANK 0 多机必填,单机忽略。节点序号,当前节点ID,一般从0开始,单机默认是0。以8机训练为例,节点ID依次为(0 1 2 3 4 5 6 7);一般ID为0的节点设置为主节点IP。 WORK_DIR /home/ma-user/ws 非必填。容器的工作目录。训练的权重文件保存在此路径下。默认值为:/home/ma-user/ws。 SEQ_LEN 8192 非必填。默认值为8192。
  • Step2 启动训练脚本 请根据表1修改超参值后,再启动训练脚本。 单机启动 以GLM3-6B为例,单机SFT全参微调启动命令如下。 进入代码目录/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed下执行启动脚本。xxx-Ascend请根据实际目录替换。 MODEL_TYPE=6B RUN_TYPE=sft DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights TRAIN_ITERS=200 MBS=1 GBS=64 TP=2 PP=4 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh 其中 MODEL_TYPE 、RUN_TYPE、DATASET_PATH、TOKENIZER_PATH、MODEL_PATH为必填;TRAIN_ITERS、MBS、GBS、TP、PP、SEQ_LEN为非必填,有默认值。 多机启动 以GLM3-6B为例,多台机器执行训练启动命令如下。多机启动需要在每个节点上执行,以下命令以双机为例。 进入代码目录/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed下执行启动脚本。xxx-Ascend请根据实际目录替换。 第一台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=0 MODEL_TYPE=6B RUN_TYPE=sft DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights TRAIN_ITERS=200 MBS=2 GBS=128 TP=2 PP=8 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh ... ... # 第二台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=1 MODEL_TYPE=6B RUN_TYPE=sft DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights TRAIN_ITERS=200 MBS=2 GBS=128 TP=2 PP=8 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh 以上命令多台机器执行时,只有${NODE_RANK}的节点ID值不同,其他参数都保持一致。 其中MASTER_ADDR、NODE_RANK、MODEL_TYPE 、RUN_TYPE、DATASET_PATH、TOKENIZER_PATH、MODEL_PATH为必填;TRAIN_ITERS、MBS、GBS、TP、PP、WORK_DIR、SEQ_LEN为非必填,有默认值。 训练完成后,请参考查看日志和性能章节查看日志和性能。
  • HuggingFace权重转换操作 下载GLM3-6B的预训练权重和词表文件,并上传到/home/ma-user/ws/tokenizers/GLM3-6B目录下。具体下载地址请参见表1。如果已下载,忽略此步骤。 创建权重转换后的输出目录/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights/。 cd /home/ma-user/ws/ #进入/home/ma-user/ws/目录 mkdir -p processed_for_ma_input/GLM3-6B/converted_weights 进入代码目录/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink,在此代码目录下执行2_convert_mg_hf.sh脚本。xxx-Ascend请根据实际目录替换。 #进入ModelLink目录下 cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink # 执行权重格式转换脚本 TP=2 PP=4 LOAD_DIR=/home/ma-user/ws/tokenizers/GLM3-6B SAVE_DIR=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B CONVERT_HFtoMG=True sh ../scripts/glm3/2_convert_mg_hf.sh 其脚本2_convert_mg_hf.sh参数说明: --model-type:模型类型。 --loader:权重转换要加载检查点的模型名称。 --tensor-model-parallel-size:${TP} 张量并行数,需要与训练脚本中的配置一样。 --pipeline-model-parallel-size:${PP} 流水线并行数,需要与训练脚本中的配置一样。 --saver:检查模型保存名称。 --load-dir:${LOAD_DIR} 加载转换模型权重路径。 --save-dir : ${SAVE_DIR} 权重转换完成之后保存路径。 --tokenizer-model : ${TOKENIZER_PATH} tokenizer路径。 --add-qkv-bias : 为qkv这样的键和值添加偏差。 CONVERT_HFtoMG:权重转换类型是否为HuggingFace权重转换为Megatron格式,True表示HuggingFace权重转换为Megatron,反之False为Megatron格式转换HuggingFace格式。 权重转换完成后,在/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights目录下查看转换后的权重文件。 图1 转换后的权重文件
  • 数据预处理说明 使用数据预处理脚本preprocess_data.py脚本重新生成.bin和.idx格式的SFT全参微调数据。preprocess_data.py存放在xxx-Ascend/llm_train/AscendSpeed/ModelLink/tools目录中,脚本具体内容如下。xxx-Ascend请根据实际目录替换。 #进入ModelLink目录: cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/AscendSpeed export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink python ./tools/preprocess_data.py \ --input /home/ma-user/ws/training_data/finetune/Alpaca_data_gpt4_zh.jsonl \ --tokenizer-name-or-path $TOKENIZER_PATH \ --output-prefix $DATASET_PATH\ --tokenizer-type PretrainedFromHF \ --workers 8 \ --seq-length 8192 \ --handler-name GeneralInstructionHandler \ --append-eod \ --tokenizer-not-use-fast 参数说明: - input:SFT全参微调数据的存放路径。 - output-prefix:处理后的数据集保存路径+数据集名称前缀(例如:alpaca_ft)。 - tokenizer-type:tokenizer的类型,可选项有['BertWordPieceLowerCase', 'BertWordPieceCase','GPT2BPETokenizer', 'PretrainedFromHF'],设置为PretrainedFromHF。 - tokenizer-name-or-path:tokenizer的存放路径。 - handler-name:生成数据集的用途,这里是生成的指令数据集,用于微调。 - workers:数据处理线程数。 seq-length:是一个用于计算序列长度的函数。它接收一个序列作为输入,并返回序列的长度,需和训练时参数保持一致。 -append-eod:参数用于控制是否在每个输入序列的末尾添加一个特殊的标记。这个标记表示输入序列的结束,可以帮助模型更好地理解和处理长序列。 输出结果 alpaca_ft_packed_attention_mask_document.bin alpaca_ft_packed_attention_mask_document.idx alpaca_ft_packed_input_ids_document.bin alpaca_ft_packed_input_ids_document.idx alpaca_ft_packed_labels_document.bin alpaca_ft_packed_labels_document.idx
  • 数据处理具体操作 SFT全参微调数据处理具体操作步骤如下。 创建处理后的数据存放目录/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/ cd /home/ma-user/ws/ #进入容器工作目录 mkdir -p processed_for_ma_input/GLM3-6B/data/finetune 进入代码目录“/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink/”,在代码目录中执行preprocess_data.py脚本处理数据。 此处提供一段实际的数据处理代码示例如下。 export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/AscendSpeed export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink python ./tools/preprocess_data.py \ --input /home/ma-user/ws/training_data/finetune/Alpaca_data_gpt4_zh.jsonl \ --tokenizer-name-or-path /home/ma-user/ws/tokenizers/GLM3-6B \ --output-prefix /home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft \ --workers 8 \ --tokenizer-type PretrainedFromHF \ --handler-name GeneralInstructionHandler \ --seq-length 8192 \ --append-eod \ --tokenizer-not-use-fast 数据处理完后,在/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/目录下生成转换后的数据文件。
  • 查看日志 训练过程中,训练日志会在最后的Rank节点打印。 图1 打印训练日志 训练完成后,如果需要单独获取训练日志文件,可以在${SAVE_PATH}/logs路径下获取。日志存放路径为{work_dir}/saved_dir_for_ma_output/GLM3-6B/logs,本实例日志路径为/home/ma-user/ws/saved_dir_for_ma_output/GLM3-6B/logs
  • 查看性能 训练性能主要通过训练日志中的2个指标查看,吞吐量和loss收敛情况。 吞吐量(tokens/s/p):global batch size*seq_length/(总卡数*elapsed time per iteration)*1000,其参数在日志里可找到,默认seq_len值为8192,默认global batch size为64;其global batch size(GBS)、seq_len(SEQ_LEN)为训练时设置的参数。 loss收敛情况:日志里存在lm loss参数 ,lm loss参数随着训练迭代周期持续性减小,并逐渐趋于稳定平缓。也可以使用可视化工具TrainingLogParser查看loss收敛情况,如图2所示。 单节点训练:训练过程中的loss直接打印在窗口上。 多节点训练:训练过程中的loss打印在最后一个节点上。 图2 Loss收敛情况(示意图)
  • 断点续训练操作过程 GLM3-6B的断点续训脚本glm3_base.sh,存放在“xxx-Ascend/llm_train/AscendSpeed/scripts/glm3”目录下。 执行命令如下,进入AscendSpeed代码目录。xxx-Ascend请根据实际目录替换。 cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ 修改断点续训练参数。断点续训前,需要在原有训练参数配置表1中新加“MODEL_PATH”参数,并修改“TRAIN_ITERS”参数和“RUN_TYPE”参数。 表1 断点续训练修改参数 参数 参考值 参数说明 MODEL_PATH /home/ma-user/ws/saved_dir_for_ma_output/GLM3-6B/pretrain 必填。加载上一步预训练后保存的权重文件。 请根据实际规划修改。 TRAIN_ITERS 300 必填。表示训练周期,必须大于上次保存训练的周期次数。 RUN_TYPE retrain 必填。训练脚本类型,retrain表示断点续训练。 在AscendSpeed代码目录下执行断点续训练脚本。 单机启动 MODEL_TYPE=6B RUN_TYPE=retrain DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca_text_document TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B MODEL_PATH=/home/ma-user/ws/saved_dir_for_ma_output/GLM3-6B/pretrain TRAIN_ITERS=300 MBS=1 GBS=64 TP=2 PP=4 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh 多机启动 以GLM3-6B为例,多台机器执行训练启动命令如下。多机启动需要在每个节点上执行,以双机为例。 #第一台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=0 MODEL_TYPE=6B RUN_TYPE=retrain DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca_text_document TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B MODEL_PATH=/home/ma-user/ws/saved_dir_for_ma_output/GLM3-6B/pretrain TRAIN_ITERS=300 MBS=2 GBS=128 TP=2 PP=8 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh ... # 第二台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=1 MODEL_TYPE=6B RUN_TYPE=retrain DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca_text_document TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B MODEL_PATH=/home/ma-user/ws/saved_dir_for_ma_output/GLM3-6B/pretrain TRAIN_ITERS=300 MBS=2 GBS=128 TP=2 PP=8 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh 以上命令多台机器执行时,只有${NODE_RANK}的节点ID值不同,其他参数都保持一致;其中MASTER_ADDR、NODE_RANK、MODEL_TYPE 、RUN_TYPE、DATASET_PATH、TOKENIZER_PATH、MODEL_PATH为必填;TRAIN_ITERS、MBS、GBS、TP、PP、WORK_DIR、SEQ_LEN为非必填,有默认值。 图1 保存的ckpt 训练完成后,可以参考查看日志和性能操作,查看断点续训练日志和性能。
  • Step2 启动训练脚本 请根据表1修改超参值后,再启动训练脚本。 单机启动 以GLM3-6B为例,单机训练启动样例命令如下,以自己实际为准。 进入代码目录/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed下执行启动脚本。xxx-Ascend请根据实际目录替换。 MODEL_TYPE=6B RUN_TYPE=pretrain DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca_text_document TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B TRAIN_ITERS=200 MBS=1 GBS=64 TP=2 PP=4 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh 其中MODEL_TYPE、RUN_TYPE、DATASET_PATH、TOKENIZER_PATH为必填。TRAIN_ITERS、MBS、GBS、TP、PP、SEQ_LEN 为非必填,有默认值。 多机启动 以GLM3-6B为例,多台机器执行训练启动命令如下。多机启动需要在每个节点上执行,以下命令以双机为例。 进入代码目录/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed下执行启动脚本。xxx-Ascend请根据实际目录替。 #第一台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=0 MODEL_TYPE=6B RUN_TYPE=pretrain DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca_text_document TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B TRAIN_ITERS=200 MBS=2 GBS=128 TP=2 PP=8 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh ... ... # 第二台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=1 MODEL_TYPE=6B RUN_TYPE=pretrain DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca_text_document TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B TRAIN_ITERS=200 MBS=2 GBS=128 TP=2 PP=8 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh 以上命令多台机器执行时,只有${NODE_RANK}:节点ID值不同,其他参数都保持一致。 其中MASTER_ADDR、NODE_RANK、MODEL_TYPE 、RUN_TYPE、DATASET_PATH、TOKENIZER_PATH为必填;TRAIN_ITERS、MBS、GBS、TP、PP、WORK_DIR、SEQ_LEN为非必填,有默认值。 等待模型载入 执行训练启动命令后,等待模型载入,当出现“training”关键字时,表示开始训练。训练过程中,训练日志会在最后的Rank节点打印。 图1 等待模型载入 更多查看训练日志和性能操作,请参考查看日志和性能章节。 如果需要使用断点续训练能力,请参考断点续训练章节修改训练脚本。
  • Step1 配置预训练超参 预训练脚本glm3_base.sh,存放在“xxx-Ascend/llm_train/AscendSpeed/scripts/glm3”目录下。训练前,可以根据实际需要修改超参配置。xxx-Ascend请根据实际目录替换。 表1 预训练超参配置 参数 示例值 参数说明 DATASET_PATH /home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca_text_document 必填。训练时指定的输入数据路径。一般为数据地址/处理后的数据前缀名,不加文件类型后缀。 请根据实际规划修改。 TOKENIZER_PATH /home/ma-user/ws/tokenizers/GLM3-6B 必填。加载tokenizer时,tokenizer存放地址。 请根据实际规划修改。 MODEL_TYPE 6B 必填。表示模型加载类型。 TRAIN_ITERS 200 非必填。表示训练迭代周期,根据实际需要修改。 MBS 1 非必填。表示流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。 该值与TP和PP以及模型大小相关,可根据实际情况进行调整。 默认值1。单机建议为1,双机建议为2。 GBS 64 非必填。表示训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长。默认值64。单机建议为64,双机建议为128。 TP 2 非必填。表示张量并行。默认值为2。 PP 4 非必填。表示流水线并行。默认值为4。单机建议为4,双机建议为8。 RUN_TYPE pretrain 必填。表示训练类型,根据实际训练任务类型选择。取值说明: pretrain:表示预训练 retrain:表示断点续训 sft:表示SFT微调训练 lora:表示LoRA微调训练 MASTER_ADDR localhost 多机必填,单机忽略;指定主节点IP地址,多台机器中需要指定一个节点IP为主节点IP。 一般指定第一个节点IP为主节点IP。 NNODES 1 多机必填,单机忽略;节点总数,单机写1,双机写2。 NODE_RANK 0 多机必填,单机忽略;节点序号,当前节点ID,一般从0开始,单机默认是0。 WORK_DIR /home/ma-user/ws 非必填。容器的工作目录。训练的权重文件保存在此路径下。默认值为:/home/ma-user/ws。 SEQ_LEN 8192 非必填。默认值为8192。
  • 自定义数据 如果是用户自己准备的数据集,可以使用Ascendspeed代码仓中的转换工具将json格式数据集转换为训练中使用的.idx + .bin格式。 #示例: #1.将准备好的json格式数据集存放于/home/ma-user/ws/training_data/pretrain目录下: 如data.json #2.运行转换脚本 cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink/ #加载ascendspeed及megatron模型,xxx-Ascend请根据实际目录替换 export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/AscendSpeed export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink python ./tools/preprocess_data.py \ --input {work_dir}/training_data/pretrain/data.json \ --tokenizer-name-or-path {work_dir}/tokenizers/GLM3-6B \ --output-prefix {work_dir}/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca \ --workers 4 \ --tokenizer-type PretrainedFromHF \ --append-eod \ --seq-length 4096 \ --tokenizer-not-use-fast #3.执行完成后在 datasets文件夹中可以得到 data_text_document.idx 与data_text_document.bin 两个文件
  • Alpaca数据处理说明 数据预处理脚本preprocess_data.py存放在代码包的“llm_train/AscendSpeed/ModelLink/tools”目录中,脚本样例命令及参数详解如下,详细执行步骤请参考下一段落。 python ./tools/preprocess_data.py \ --input {work_dir}/training_data/pretrain/train-00000-of-00001-a09b74b3ef9c3b56.parquet \ --tokenizer-name-or-path {work_dir}/tokenizers/GLM3-6B \ --output-prefix {work_dir}/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca \ --workers 4 \ --tokenizer-type PretrainedFromHF \ --append-eod \ --seq-length 8192 \ --tokenizer-not-use-fast 参数说明: ${work_dir}的路径指容器工作路径:如/home/ma-user/ws/ 。 - input:原始数据集的存放路径 - output-prefix:处理后的数据集保存路径+数据集名称前缀(例如: alpaca),该目录路径需提前创建 - tokenizer-type:tokenizer的类型,可选项有['BertWordPieceLowerCase','BertWordPieceCase','GPT2BPETokenizer','PretrainedFromHF'],一般为PretrainedFromHF。 - tokenizer-name-or-path:tokenizer的存放路径 -workers:设置数据处理使用执行卡数量 -append-eod:参数用于控制是否在每个输入序列的末尾添加一个特殊的标记。这个标记表示输入序列的结束,可以帮助模型更好地理解和处理长序列。 seq-length:是一个用于计算序列长度的函数。它接收一个序列作为输入,并返回序列的长度,需和训练时参数保持一致。 数据预处理后输出的训练数据如下: alpaca_text_document.bin alpaca_text_document.idx 训练的时指定的数据路径为${path}/alpaca/GLM3-6B/alpaca_text_document, 不加文件类型后缀。
  • Alpaca数据处理操作步骤 Alpaca数据处理具体操作步骤如下: 创建数据处理后的输出目录/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/pretrain/。 cd /home/ma-user/ws/ #进入容器工作目录 mkdir -p processed_for_ma_input/GLM3-6B/data/pretrain 将获取到的Alpaca预训练数据集传到上一步创建的目录中。如还未下载数据集,请参考准备数据获取。 进入“/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink/”目录,在代码目录中执行preprocess_data.py脚本处理数据。 此处提供一段实际的数据处理代码示例如下。 #加载ascendspeed及megatron模型,xxx-Ascend请根据实际目录替换 export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/AscendSpeed export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink #进入到ModelLink目录下: cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink/ #执行以下命令: python ./tools/preprocess_data.py \ --input /home/ma-user/ws/training_data/pretrain/train-00000-of-00001-a09b74b3ef9c3b56.parquet \ --tokenizer-name-or-path /home/ma-user/ws/tokenizers/GLM3-6B \ --output-prefix /home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca \ --workers 4 \ --tokenizer-type PretrainedFromHF \ --append-eod \ --seq-length 8192 \ --tokenizer-not-use-fast 数据处理完后,在/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/pretrain/目录下生成alpaca_text_document.bin和alpaca_text_document.idx文件。 图1 处理后的数据
  • Step3 启动容器镜像 启动容器镜像前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。启动容器命令如下。 container_work_dir="/home/ma-user/ws" # 容器内挂载的目录 work_dir="/home/ma-user/ws" # 宿主机挂载目录,存放了代码、数据、权重 container_name="${container_name}" # ${container_name}为启动的容器名称 image_name="${image_name}" # ${image_name}启动的镜像ID或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 32g \ --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用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。 driver及npu-smi需同时挂载至容器。 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。 ${image_name} 为docker镜像的ID,在宿主机上可通过docker images查询得到。 通过容器名称进入容器中。 docker exec -it ${container_name} bash 启动容器时默认用户为ma-user用户。如果需要切换到root用户可以执行以下命令: sudo su source /home/ma-user/.bashrc 如果继续使用ma-user,在使用其他属组如root用户上传的数据和文件时,可能会存在权限不足的问题,因此需要执行如下命令统一文件属主。 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 安装依赖包。 #进入scriptsscripts目录,xxx为包版本,请按照实际情况替换 cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/scripts #执行安装命令 pip install -r requirements.txt
  • 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
共100000条