华为云用户手册

  • Step4 调用在线服务 进入在线服务详情页面,选择“预测”。 如果以vllm接口启动服务,设置请求路径:“/generate”,输入预测代码“{"prompt": "你好", "temperature":0, "max_tokens":20}”,单击“预测”即可看到预测结果。 图8 预测-vllm 如果以openai接口启动服务,设置请求路径:“/v1/completions”,输入预测代码“{"prompt": "你是谁","model": "${model_path}","max_tokens": 50,"temperature":0}”,单击“预测”即可看到预测结果。 图9 预测-openai 在线服务的更多内容介绍请参见文档查看服务详情。
  • LLama-Factory微调数据集预处理参数说明 ModelLink开源仓已经支持LLama-Factory格式的数据预处理,目前仅支持sft全参微调,lora微调。数据集预处理脚本参数说明如下: --input:原始数据集的存放路径。 --output-prefix:处理后的数据集保存路径+数据集名称(例如:moss-003-sft-data) --tokenizer-type:tokenizer的类型,可选项有['BertWordPieceLowerCase','BertWordPieceCase','GPT2BPETokenizer','PretrainedFromHF'],一般为PretrainedFromHF。 --tokenizer-name-or-path:tokenizer的存放路径,与HF权重存放在一个文件夹下。 --handler-name:生成数据集的用途,这里是生成的指令数据集,用于微调。可选项有['AlpacaStyleInstructionHandler SharegptStyleInstructionHandler']。 AlpacaStyleInstructionHandler :用于处理Alpaca风格的数据集。 SharegptStyleInstructionHandler:用于处理sharegpt风格的数据集。 --workers:设置数据处理使用执行卡数量 / 启动的工作进程数。 --log-interval:是一个用于设置日志输出间隔的参数,表示输出日志的频率。在训练大规模模型时,可以通过设置这个参数来控制日志的输出。 --prompt-type:需要指定使用模型的template。已支持的系列模型可查看:文档更新内容。 输出数据预处理结果路径: 训练完成后,以 llama2-13b 为例,输出数据路径为:/home/ma-user/ws/llm_train/processed_for_input/llama2-13b/
  • ModelLink微调数据集预处理参数说明 微调包含SFT和LoRA微调。数据集预处理脚本参数说明如下: --input:原始数据集的存放路径。 --output-prefix:处理后的数据集保存路径+数据集名称(例如:moss-003-sft-data) --tokenizer-type:tokenizer的类型,可选项有['BertWordPieceLowerCase','BertWordPieceCase','GPT2BPETokenizer','PretrainedFromHF'],一般为PretrainedFromHF。 --tokenizer-name-or-path:tokenizer的存放路径,与HF权重存放在一个文件夹下。 --handler-name:生成数据集的用途,这里是生成的指令数据集,用于微调。 GeneralInstructionHandler:用于sft、lora微调时的数据预处理过程中,会对数据集full_prompt中的user_prompt进行mask操作。 --seq-length:要处理的最大seq length。 --workers:设置数据处理使用执行卡数量 / 启动的工作进程数。 --log-interval:是一个用于设置日志输出间隔的参数,表示输出日志的频率。在训练大规模模型时,可以通过设置这个参数来控制日志的输出。 输出数据预处理结果路径: 训练完成后,以 llama2-13b 为例,输出数据路径为:/home/ma-user/ws/llm_train/processed_for_input/llama2-13b/data/finetune/
  • ModelLink预训练数据集预处理参数说明 预训练数据集预处理脚本scripts/llama2/1_preprocess_data.sh 中的具体参数如下: --input:原始数据集的存放路径。 --output-prefix:处理后的数据集保存路径+数据集名称(例如:moss-003-sft-data)。 --tokenizer-type:tokenizer的类型,可选项有['BertWordPieceLowerCase','BertWordPieceCase','GPT2BPETokenizer','PretrainedFromHF'],一般为PretrainedFromHF。 --tokenizer-name-or-path:tokenizer的存放路径,与HF权重存放在一个文件夹下。 --handler-name:生成数据集的用途,这里是生成的文本数据集,用于预训练。 GeneralPretrainHandler:默认。用于预训练时的数据预处理过程中,将数据集根据key值进行简单的过滤。 --seq-length:要处理的最大seq length。 --workers:设置数据处理使用执行卡数量 / 启动的工作进程数。 --log-interval:是一个用于设置日志输出间隔的参数,表示输出日志的频率。在训练大规模模型时,可以通过设置这个参数来控制日志的输出。 输出数据预处理结果路径: 训练完成后,以 llama2-13b 为例,输出数据路径为:/home/ma-user/ws/llm_train/processed_for_input/llama2-13b/data/pretrain/
  • 用户自定义执行数据处理脚本修改参数说明 同样以 llama2 为例,用户可直接编辑 scripts/llama2/1_preprocess_data.sh 脚本,自定义环境变量的值,并运行该脚本。其中环境变量详细介绍如下: 表1 数据预处理中的环境变量 环境变量 示例 参数说明 RUN_TYPE pretrain、sft、lora 数据预处理区分: 预训练场景下数据预处理,默认参数:pretrain 微调场景下数据预处理,默认:sft / lora ORIGINAL_TRAIN_DATA_PATH /home/ma-user/ws/training_data/${用户自定义的数据集路径和名称} 原始数据集的存放路径。 TOKENIZER_PATH /home/ma-user/ws/tokenizers/llama2-13b tokenizer的存放路径,与HF权重存放在一个文件夹下。请根据实际规划修改。 PRO CES SED_DATA_PREFIX /home/ma-user/ws/llm_train/processed_for_input/llama2-13b/data 处理后的数据集保存路径+数据集前缀 TOKENIZER_TYPE PretrainedFromHF 可选项有:['BertWordPieceLowerCase','BertWordPieceCase','GPT2BPETokenizer','PretrainedFromHF'],一般为 PretrainedFromHF 。 SEQ_LEN 4096 要处理的最大seq length。脚本会检测超出SEQ_LEN长度的数据,并打印log。
  • 在线推理使用Guided Decoding 启动推理服务请参考启动推理服务章节。 在线推理使用Guided Decoding时,在发送的请求中包含上述guided_json架构,具体示例可参考以下代码。 curl -X POST http://${docker_ip}:8080/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "${container_model_path}", "prompt": "Meet our valorous character, named Knight, who has reached the age of 32. Clad in impenetrable plate armor, Knight is well-prepared for any battle. Armed with a trusty sword and boasting a strength score of 90, this character stands as a formidable warrior on the field.Please provide details for this character, including their Name, Age, preferred Armor, Weapon, and Strength", "max_tokens": 200, "temperature": 0, "guided_json": "{\"title\": \"Character\", \"type\": \"object\", \"properties\": {\"name\": {\"title\": \"Name\", \"maxLength\": 10, \"type\": \"string\"}, \"age\": {\"title\": \"Age\", \"type\": \"integer\"}, \"armor\": {\"$ref\": \"#/definitions/Armor\"}, \"weapon\": {\"$ref\": \"#/definitions/Weapon\"}, \"strength\": {\"title\": \"Strength\", \"type\": \"integer\"}}, \"required\": [\"name\", \"age\", \"armor\", \"weapon\", \"strength\"], \"definitions\": {\"Armor\": {\"title\": \"Armor\", \"description\": \"An enumeration.\", \"enum\": [\"leather\", \"chainmail\", \"plate\"], \"type\": \"string\"}, \"Weapon\": {\"title\": \"Weapon\", \"description\": \"An enumeration.\", \"enum\": [\"sword\", \"axe\", \"mace\", \"spear\", \"bow\", \"crossbow\"], \"type\": \"string\"}}}" }'
  • 什么是guided-decoding Guided Decoding是一种用于生成文本的策略,通过提供额外的上下文或约束,来引导模型生成更符合预期的结果。 比如使用openai启动服务,通过配置guided_json参数使用JSON Schema的架构来举例。 JSON Schema使用专门的关键字来描述数据结构,例如标题title、 类型type、属性properties,必须属性required 、定义definitions等,JSON Schema通过定义对象属性、类型、格式的方式来引导模型生成一个包含用户信息的JSON对象。 其优势主要如下: 上下文引导:通过提供特定的提示或上下文信息,模型可以更好地理解生成内容的方向。 约束生成:可以设定某些限制条件,如关键词、主题或风格,使生成的内容更加一致和相关。 提高质量:通过引导,生成的文本通常更具逻辑性和连贯性,减少无关信息的出现。
  • 离线推理使用Guided Decoding 离线推理,要使用guided-decoding,需要通过SamplingParams类中的GuidedDecodingParams进行配置。 下面是一种离线使用方式示例: from vllm import LLM, SamplingParams from vllm.sampling_params import GuidedDecodingParams MODEL_NAME = ${MODEL_NAME} llm = LLM(model=MODEL_NAME) guided_decoding_params = GuidedDecodingParams(choice=["Positive", "Negative"]) sampling_params = SamplingParams(guided_decoding=guided_decoding_params) outputs = llm.generate( prompts="Classify this sentiment: vLLM is wonderful!", sampling_params=sampling_params, ) print(outputs[0].outputs[0].text) MODEL_NAME表示对应模型路径。
  • 场景介绍 对于ModelArts专属资源池的用户,不允许使用公共资源池创建训练作业、创建Notebook实例或者部署推理服务时,可以通过权限控制限制用户使用公共资源池。 涉及配置的自定义权限策略项如下; modelarts:notebook:create:此策略项表示创建Notebook实例。 modelarts:trainJob:create:此策略项表示创建训练作业。 modelarts:service:create:此策略项表示创建推理服务。
  • 操作流程 图1 操作流程图 表2 操作任务流程说明 阶段 任务 说明 准备工作 准备环境 本教程案例是基于ModelArts Lite Server运行的,需要购买并开通Server资源。 准备代码 准备AscendSpeed训练代码、分词器Tokenizer和推理代码。 准备数据 准备训练数据,可以用本案使用的数据集,也可以使用自己准备的数据集。 准备镜像 准备训练模型适用的容器镜像。 预训练 预训练 介绍如何进行预训练,包括训练数据处理、超参配置、训练任务、性能查看。 微调训练 SFT全参微调 介绍如何进行SFT全参微调、超参配置、训练任务、性能查看。 LoRA微调训练 介绍如何进行LoRA微调、超参配置、训练任务、性能查看。
  • 训练支持的模型列表 本方案支持以下模型的训练,如表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 17 Qwen2 qwen2-0.5b https://huggingface.co/Qwen/Qwen2-0.5B-Instruct 18 qwen2-1.5b https://huggingface.co/Qwen/Qwen2-1.5B-Instruct 19 qwen2-7b https://huggingface.co/Qwen/Qwen2-7B-Instruct 20 qwen2-72b https://huggingface.co/Qwen/Qwen2-72B-Instruct 21 GLMv4 glm4-9b https://huggingface.co/THUDM/glm-4-9b-chat 说明: glm4-9b模型必须使用版本4b556ad4d70c38924cb8c120adbf21a0012de6ce 22 mistral mistral-7b https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2 23 mixtral mixtral-8x7b https://huggingface.co/mistralai/Mixtral-8x7B-Instruct-v0.1
  • Step1 处理fill50k数据集 使用ma-user用户在容器上执行如下命令解压数据集。 cd /home/ma-user/datasets/fill50k unzip conditioning_images.zip unzip images.zip 接着修改fill50k.py文件,如果机器无法访问huggingface网站,则需要将脚本文件中下载地址替换为容器本地目录。 56 def _split_generators(self, dl_manager): 57 #metadata_path = dl_manager.download(METADATA_URL) 58 #images_dir = dl_manager.download_and_extract(IMAGES_URL) 59 #conditioning_images_dir = dl_manager.download_and_extract( 60 # CONDITIONING_IMAGES_URL 61 #) 62 metadata_path = "/home/ma-user/datasets/fill50k/train.jsonl" 63 images_dir = "/home/ma-user/datasets/fill50k" 64 conditioning_images_dir = "/home/ma-user/datasets/fill50k"
  • 步骤二 修改训练超参配置 以 llama2-70b 和 llama2-13b 预训练 为例,执行脚本为 0_pl_pretrain_70b.sh 和 0_pl_pretrain_13b.sh 。 修改模型训练脚本中的超参配置,必须修改的参数如表1所示。其他超参均有默认值,可以参考表1按照实际需求修改。 表1 训练超参配置说明 参数 示例值 参数说明 ORIGINAL_TRAIN_DATA_PATH /home/ma-user/ws/training_data/train-00000-of-00001-a09b74b3ef9c3b56.parquet 必须修改。训练时指定的输入数据路径。请根据实际规划修改。 ORIGINAL_HF_WEIGHT /home/ma-user/ws/models/llama2-13B 必须修改。加载Hugging Face权重(可与tokenizer相同文件夹)时,对应的存放地址。请根据实际规划修改。 TOKENIZER_PATH /home/ma-user/ws/tokenizers/llama2-13B 该参数为tokenizer文件的存放地址。默认与ORIGINAL_HF_WEIGHT路径相同。若用户需要将Hugging Face权重与tokenizer文件分开存放时,则需要修改参数。 INPUT_PROCESSED_DIR /home/ma-user/ws/llm_train/processed_for_input/llama2-13b 该路径下保存“数据转换”和“权重转换”的结果。示例中,默认生成在“processed_for_input”文件夹下。若用户需要修改,可添加并自定义该变量。 OUTPUT_SAVE_DIR /home/ma-user/ws/llm_train/saved_dir_for_output/ 该路径下统一保存生成的 CKPT、P LOG 、LOG 文件。示例中,默认统一保存在“saved_dir_for_output”文件夹下。若用户需要修改,可添加并自定义该变量。 CKPT_SAVE_PATH /home/ma-user/ws/llm_train/saved_dir_for_output/saved_models/llama2-13b 保存训练生成的模型 CKPT 文件。示例中,默认保存在“saved_dir_for_output/saved_models”文件夹下。若用户需要修改,可添加并自定义该变量。 LOG_SAVE_PATH /home/ma-user/ws/llm_train/saved_dir_for_output/saved_models/llama2-13b/log 保存训练过程记录的日志 LOG 文件。示例中,默认保存在“saved_models/llama2-13b/log”文件夹下。若用户需要修改,可添加并自定义该变量。 ASCEND_PROCESS_LOG_PATH /home/ma-user/ws/llm_train/saved_dir_for_output/plog 保存训练过程中记录的程序堆栈信息日志 PLOG 文件。示例中,默认保存在“saved_dir_for_output/plog”文件夹下。若用户需要修改,可添加并自定义该变量。 CONVERT_MG2HF TRUE 训练完成的权重文件默认不会自动转换为Hugging Face格式权重。如果需要自动转换,则在运行脚本添加变量CONVERT_MG2HF并赋值TRUE。如果用户后续不需要自动转换,则在运行脚本中必须删除CONVERT_MG2HF变量。转换的Hugging Face格式权重会保存至OUTPUT_SAVE_DIR的目录中。 对于Yi系列模型、ChatGLMv3-6B和Qwen系列模型,还需要手动修改训练参数和tokenizer文件,具体请参见训练tokenizer文件说明。
  • 步骤四 根据config.yaml启动作业 启动作业命令如下。首先会根据config.yaml创建pod,继而在pod容器内自动启动训练作业。 kubectl apply -f config.yaml 启动后,可通过以下命令获取所有已创建的pod信息。若pod已全部启动,则状态为:Running。 kubectl get pod -A -o wide 若查看启动作业日志信息,可通过以下命令打印正在启动的日志信息。其中${pod_name}为上述pod信息中的NAME,例如vcjob-main-0。 kubectl logs -f ${pod_name}
  • 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/AscendFactory/yi/3_training.sh文件,并添加--tokenizer-not-use-fast参数。修改后如图1所示。 图1 修改Yi 模型3_training.sh文件
  • 步骤二 修改训练超参配置 以Llama2-70b和Llama2-13b的LoRA微调为例,执行脚本为0_pl_lora_70b.sh和0_pl_lora_13b.sh 。 修改模型训练脚本中的超参配置,必须修改的参数如表1所示。其他超参均有默认值,可以参考表1按照实际需求修改。 表1 训练超参配置说明 参数 示例值 参数说明 ORIGINAL_TRAIN_DATA_PATH /home/ma-user/ws/training_data/alpaca_gpt4_data.json 必须修改。训练时指定的输入数据路径。请根据实际规划修改。 ORIGINAL_HF_WEIGHT /home/ma-user/ws/models/llama2-13B 必须修改。加载Hugging Face权重(可与tokenizer相同文件夹)时,对应的存放地址。请根据实际规划修改。 TOKENIZER_PATH /home/ma-user/ws/tokenizers/llama2-13B 该参数为tokenizer文件的存放地址。默认与ORIGINAL_HF_WEIGHT路径相同。若用户需要将Hugging Face权重与tokenizer文件分开存放时,则需要修改参数。 INPUT_PROCESSED_DIR /home/ma-user/ws/llm_train/processed_for_input/llama2-13b 该路径下保存“数据转换”和“权重转换”的结果。示例中,默认生成在“processed_for_input”文件夹下。若用户需要修改,可添加并自定义该变量。 OUTPUT_SAVE_DIR /home/ma-user/ws/llm_train/saved_dir_for_output/ 该路径下统一保存生成的 CKPT、PLOG、LOG 文件。示例中,默认统一保存在“saved_dir_for_output”文件夹下。若用户需要修改,可添加并自定义该变量。 CKPT_SAVE_PATH /home/ma-user/ws/llm_train/saved_dir_for_output/saved_models/llama2-13b 保存训练生成的模型 CKPT 文件。示例中,默认保存在“saved_dir_for_output/saved_models”文件夹下。若用户需要修改,可添加并自定义该变量。 LOG_SAVE_PATH /home/ma-user/ws/llm_train/saved_dir_for_output/saved_models/llama2-13b/log 保存训练过程记录的日志 LOG 文件。示例中,默认保存在“saved_models/llama2-13b/log”文件夹下。若用户需要修改,可添加并自定义该变量。 ASCEND_PROCESS_LOG_PATH /home/ma-user/ws/llm_train/saved_dir_for_output/plog 保存训练过程中记录的程序堆栈信息日志 PLOG 文件。示例中,默认保存在“saved_dir_for_output/plog”文件夹下。若用户需要修改,可添加并自定义该变量。 CONVERT_MG2HF TRUE 训练完成的权重文件默认不会自动转换为Hugging Face格式权重。如果需要自动转换,则在运行脚本添加变量CONVERT_MG2HF并赋值TRUE。如果用户后续不需要自动转换,则在运行脚本中必须删除CONVERT_MG2HF变量。转换的Hugging Face格式权重会保存至OUTPUT_SAVE_DIR的目录中。 对于Yi系列模型、ChatGLMv3-6B和Qwen系列模型,还需要手动修改训练参数和tokenizer文件,具体请参见训练tokenizer文件说明。
  • 步骤四 根据config.yaml启动作业 启动作业命令如下。首先会根据config.yaml创建pod,继而在pod容器内自动启动训练作业。 kubectl apply -f config.yaml 启动后,可通过以下命令获取所有已创建的pod信息。若pod已全部启动,则状态为:Running。 kubectl get pod -A -o wide 若查看启动作业日志信息,可通过以下命令打印正在启动的日志信息。其中${pod_name}为上述pod信息中的NAME,例如vcjob-main-0。 kubectl logs -f ${pod_name}
  • 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。
共100000条
提示

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