云服务器内容精选

  • Alpaca数据处理操作步骤 Alpaca数据处理具体操作步骤如下: 创建数据处理后的输出目录/home/ma-user/ws/processed_for_ma_input/Llama2-70B/data/pretrain/。 cd /home/ma-user/ws/ #进入容器工作目录 mkdir -p processed_for_ma_input/Llama2-70B/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/train-00000-of-00001-a09b74b3ef9c3b56.parquet \ --tokenizer-name-or-path /home/ma-user/ws/tokenizers/Llama2-70B \ --output-prefix /home/ma-user/ws/processed_for_ma_input/Llama2-70B/data/pretrain/alpaca \ --workers 8 \ --log-interval 1000 \ --tokenizer-type PretrainedFromHF 数据处理完后,在/home/ma-user/ws/processed_for_ma_input/Llama2-70B/data/pretrain/目录下生成alpaca_text_document.bin和alpaca_text_document.idx文件。 图1 处理后的数据
  • 自定义数据 如果是用户自己准备的数据集,可以使用Ascendspeed代码仓中的转换工具将json格式数据集转换为训练中使用的.idx + .bin格式。 #示例: #1.将准备好的json格式数据集存放于/home/ma-user/ws/training_data目录下: 如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/data.json \ --tokenizer-name-or-path {work_dir}/tokenizers/Llama2-70B \ --output-prefix {work_dir}/processed_for_ma_input/Llama2-70B/data/pretrain/alpaca \ --workers 8 \ --log-interval 1000 \ --tokenizer-type PretrainedFromHF #3.执行完成后在 datasets文件夹中可以得到 data_text_document.idx 与data_text_document.bin 两个文件
  • Alpaca数据处理说明 数据预处理脚本preprocess_data.py存放在代码包的“llm_train/AscendSpeed/ModelLink/tools/”目录中,以Llama2-70B为例, 脚本具体内容如下。 #进入到ModelLink目录下,xxx-Ascend请根据实际目录替换 cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink #加载ascendspeed及megatron模型 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/train-00000-of-00001-a09b74b3ef9c3b56.parquet \ --tokenizer-name-or-path {work_dir}/tokenizers/Llama2-70B \ --output-prefix {work_dir}/processed_for_ma_input/Llama2-70B/data/pretrain/alpaca \ --workers 8 \ --log-interval 1000 \ --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:是一个用于设置日志输出间隔的参数,表示输出日志的频率。在训练大规模模型时,可以通过设置这个参数来控制日志的输出 数据预处理后输出的训练数据如下: alpaca_text_document.bin alpaca_text_document.idx 训练的时指定的数据路径为${path}/alpaca/llama2-70B/alpaca_text_document, 不加文件类型后缀。
  • 自定义数据 如果是用户自己准备的数据集,可以使用Ascendspeed代码仓中的转换工具将json格式数据集转换为训练中使用的.idx + .bin格式。 #示例: #1.将准备好的json格式数据集存放于6.3.902-Ascend/datasets/data目录下: data.json #2.修改转换脚本 python ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ModelLink/tools/preprocess_data.py \ --input ${MA_JOB_DIR}/6.3.902-Ascend/datasets/data/data.json \ #需要转换的数据集路径 --output-prefix ${MA_JOB_DIR}/6.3.902-Ascend/datasets/alpaca/llama2-13B/alpaca \ #转换后存放的数据集路径 --tokenizer-type PretrainedFromHF \ --tokenizer-name-or-path ${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf \ --tokenizer-not-use-fast \ --json-keys text #3.执行完成后在 datasets文件夹中可以得到 data_text_document.idx 与data_text_document.bin 两个文件
  • 创建训练任务 在VS Code中修改“\6.3.902-Ascend\llm_train\AscendSpeed\scripts\llama2\sft-llama2-13b.sh”脚本,修改脚本内容如下: #!/bin/bash set -ex source /usr/local/Ascend/ascend-toolkit/set_env.sh # The number of parameters is not aligned export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib:/root/miniconda3/lib:$LD_LIBRARY_PATH # 以下环境变量和多机网络通信相关,可以在容器内使用ifconfig查看 export HCCL_CONNECT_TIMEOUT=3600 # 多机通信等待时间 export AZUREML_EXPERIMENT_ID=0 # 多机训练时,数据多机编译 export GLOO_SOCKET_IFNAME=${NCCL_SOCKET_IFNAME} # 多机之间使用gloo通信时需要指定网口名称, export TP_SOCKET_IFNAME=${NCCL_SOCKET_IFNAME} # 多机之间使用TP通信时需要指定网口名称 # 以下变量和性能优化相关 export HCCL_OP_BASE_FFTS_MODE_ENABLE=TRUE export COMBINED_ENABLE=1 export MULTI_STREAM_MEMORY_REUSE=1 # export INF_NAN_MODE_ENABLE=1 # model args export MODEL_TYPE=13B #模型加载类型 # learning rate args export LR=0.00001 export MIN_LR=0.000003 export TRAIN_ITERS=100 #训练迭代周期 export LR_WARMUP_ITERS=2000 export MBS=4 #流水线并行中一个micro batch所处理的样本量 export GBS=64 #训练中所有机器一个step所处理的样本量,建议单机64,双机128。 # data args PWD=`pwd` export DATASET_PATH=${MA_JOB_DIR}/6.3.902-Ascend/datasets/alpaca-ft/alpaca-ft #预处理后的数据地址:*注意:一般为数据地址/数据前缀名 export TOKENIZER_PATH=${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf/ #tokeneizer地址 export SAVE_PATH=$PWD/ckpt #中间保存结果 包含日志 export SAVE_CKPT_PATH=${SAVE_PATH}/ckpt-llama2-13b-sft #训练ckpt保存地址 export MODEL_PATH=${MA_JOB_DIR}/6.3.902-Ascend/weight/llama2-13b-ckpt #增量预训练权重加载地址 # megatron args export TP=8 #张量并行 export PP=1 #流水线并行 export SEED=1234 export RUN_TYPE=sft #训练类型:pretrain、sft、loral,sft表示训练类型是增量预训练 bash $PWD/scripts/llama2/llama2.sh 在“\6.3.902-Ascend\llm_train\AscendSpeed”路径下创建“ckpt/ckpt-llama2-13B-sft”目录,并设置为输出目录。 在“\6.3.902-Ascend\datasets\alpaca-ft”目录挂载4.1.1中的输出目录。 设置“tokenizers/llama2-13b-hf”目录挂载权重目录“obs://standard-llama2-13b/llama-2-13b-chat-hf/”。设置“weight/llama2-13b-ckpt”目录挂载增量预训练权重转换的输出路径。 图1 设置输出和挂载目录 设置启动命令如下。 cd ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ && bash scripts/llama2/sft-llama2-13b.sh 单击“提交作业”完成作业创建。 图2 提交作业