本文为您介绍如何使用PAI-ChatLearn对Llama2-7B模型进行Alignment的训练流程。
背景信息
PAI-ChatLearn是一个灵活、易用、高效的大规模Alignment训练框架。支持RLHF(Reinforcement Learning from Human Feedback)、DPO(Direct Preference Optimization)、OnlineDPO、GRPO(Group Relative Policy Optimization)等多种Alignment训练模式,同时也支持您自定义模型的执行流程。您也可以组合使用不同的后端来进行模型建模,例如使用Megatron-LM来进行加速训练,使用vLLM来加速推理。
前提条件
在开始执行操作前,请确认您已经完成以下准备工作:
已创建工作空间,具体操作,请参见创建工作空间。
已准备灵骏智算资源的资源配额,本方案使用灵骏智算资源gu7xf机型(例如:资源规格选择ml.gu7xf.c96m1600.8-gu108),关于如何购买灵骏智算资源和创建资源配额,请参见新建资源组并购买灵骏智算资源和灵骏智算资源配额。
已创建通用型NAS文件系统。具体操作,请参见创建文件系统。
已创建阿里云文件存储通用型NAS类型的数据集,用于存储训练所需的文件和结果文件。默认挂载路径配置为
/mnt/data/
。具体操作,请参见创建及管理数据集。
使用限制
仅支持在华北6(乌兰察布)地域使用该最佳实践。
灵骏智算资源、NAS文件系统和分布式训练(DLC)任务需要在同一个地域内。
创建灵骏智算资源的资源配额时使用的专有网络需要与通用型NAS文件系统一致。
准备工作
准备代码
在终端中,执行如下命令下载代码。
下载ChatLearn框架代码:
git clone https://github.com/alibaba/ChatLearn.git
下载Megatron-LM代码。
说明如果您需要运行基于Megatron-LM框架的Alignment训练程序,则需要下载该代码。
git clone https://github.com/NVIDIA/Megatron-LM.git # 请替换为您的实际路径。 cd /**/Megatron-LM git checkout 5161b1689
本方案采用以下方法将代码文件上传至NAS文件系统,以便后续进行模型训练。您也可选择您自己的方式上传代码文件至NAS文件系统。
在函数计算控制台,搭建NAS浏览器应用。具体操作,请参见使用函数计算快速搭建可视化NAS浏览器应用。
将已下载的代码文件按照目录层级上传到通用型NAS文件系统的根目录(/)。具体操作,请参见使用函数计算快速搭建可视化NAS浏览器应用。
准备训练数据
请参考数据准备文档,准备好以下ChatLearn训练需要的数据,并将训练数据上传到NAS文件系统中,具体操作,请参见使用函数计算快速搭建可视化NAS浏览器应用。
准备SFT训练数据,并上传到NAS的
/sft
目录中。准备Reward训练数据,并上传到NAS的
/rm
目录中。准备Aignment的RLHF模式的训练数据,并上传到NAS的
/alignment
目录中。
ChatLearn训练
步骤一:SFT微调训练
SFT是指使用有标注的对话数据来微调预训练语言模型的过程。在本方案中,您需要下载预训练的模型,然后开始一个简单的SFT训练示例。具体操作步骤如下:
1.下载和转化预训练模型
下载预训练Checkpoint。
您可以使用来自HuggingFace transformers的模型,例如HuggingFace Hub中的Llama2模型meta-llama/Llama-2-7b-hf。您也可以使用本地保存好的SFT模型。本方案使用llama-2-7b-hf。
将已下载的Llama2模型按照目录层级上传到通用型NAS文件系统的根目录
/
。具体操作,请参见使用函数计算快速搭建可视化NAS浏览器应用。将HuggingFace transformers模型转化为Megatron-LM模型格式。
进入新建任务页面。
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入DLC。
在分布式训练(DLC)页面,单击新建任务。
在新建任务页面,配置以下关键参数,其他参数配置详情,请参见创建训练任务。
参数
描述
环境信息
节点镜像
选中镜像地址,并在文本框中输入
registry.cn-wulanchabu.aliyuncs.com/pai-dlc/pytorch-training:2.4.0-gpu-py3.10-cu12.5-ngc24.06-ubuntu22.04
。数据集
单击自定义数据集,并配置以下参数:
自定义数据集:选择已创建的通用型NAS数据集。
挂载路径:取默认配置
/mnt/data/
。
启动命令
配置以下命令:
export MEGATRON=path-to-megatron-lm export CHATLEARN=path-to-chatlearn cd ${CHATLEARN}/examples/megatron/ TP=$num_of_tp \ PP=$num_of_pp \ LOAD_PATH=path-to-hf-model \ TOKENIZER_MODEL=$LOAD_PATH/tokenizer.model \ SAVE_PATH=path-to-megatron-model \ bash scripts/convert_hf_to_megatron.sh
其中:
MEGATRON:是Megatron-LM代码仓库clone存放的位置。本方案配置为
/mnt/data/Megatron-LM
。CHATLEARN:是ChatLearn代码仓库clone存放的位置。本方案配置为
/mnt/data/ChatLearn
。LOAD_PATH:是Llama2模型的存放路径。本方案配置为
/mnt/data/llama-2-7b-hf
。SAVE_PATH:转换后的Megatron-LM格式模型的存储路径。本方案配置为
/mnt/data/llama-2-7b-hf-to-megatron
。TP(tensor_model_parallel_size)和PP(
pipeline_model_parallel_size
)参数配置说明如下:对于Llama2-7B的模型,系统会将模型转换成
TP=4,PP=1
的Checkpoint。您需要配置参数为TP=4,PP=1。对于Llama2-13B的模型,系统会将模型转化成
TP=8,PP=1
的Checkpoint。您需要配置参数为TP=8,PP=1。对于Llama2-70B的模型,系统会将模型转化成
TP=8,PP=4
的Checkpoint。您需要配置参数为TP=8,PP=4。
资源信息
资源类型
选择灵骏智算。
资源来源
选择资源配额。
资源配额
选择已创建的资源配额。
框架
选择PyTorch。
任务资源
在Worker节点配置以下参数:
节点数量:配置为1。
CPU(核数):80。
内存(GiB):800。
共享内存(GiB):800。
GPU(卡数):1。
单击确定。
页面自动跳转到分布式训练(DLC)页面,当任务执行成功后,模型转换成功。
2.开启SFT训练
进入新建任务页面。
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入DLC。
在分布式训练(DLC)页面,单击新建任务。
在新建任务页面,配置以下关键参数,其他参数配置详情,请参见创建训练任务。
参数
描述
环境信息
节点镜像
选中镜像地址,并在文本框中输入
registry.cn-wulanchabu.aliyuncs.com/pai-dlc/pytorch-training:2.4.0-gpu-py3.10-cu12.5-ngc24.06-ubuntu22.04
。数据集
单击自定义数据集,并配置以下参数:
自定义数据集:选择已创建的通用型NAS数据集。
挂载路径:取默认配置
/mnt/data/
。
启动命令
配置以下命令:
export CHATLEARN=path-to-chatlearn export MEGATRON=path-to-megatron-lm cd ${CHATLEARN}/examples/megatron/ export model_size=llama2-7B LOAD_PATH=$MEGATRON_LLAMA2_CKPT_PATH \ TOKENIZER_MODEL=$LLAMA2_TOKENIZER_MODEL \ DATASET_PATH=$DATASET_ROOT/sft/ \ bash scripts/train_sft_llama.sh
其中关键配置说明如下:
MEGATRON:是Megatron-LM代码仓库clone存放的位置。本方案配置为
/mnt/data/Megatron-LM
。CHATLEARN:是ChatLearn代码仓库clone存放的位置。本方案配置为
/mnt/data/ChatLearn
。LOAD_PATH:是转换后的Megatron-LM格式模型的存储路径。本方案配置为
/mnt/data/llama-2-7b-hf-to-megatron
。TOKENIZER_MODEL:是Llama2Tokenizer所需文件tokenizer.model所在的文件夹路径。本方案配置为
/mnt/data/llama-2-7b-hf/tokenizer.model
。DATASET_PATH:是SFT训练数据集路径。本方案配置为
/mnt/data/sft/
。
训练过程生成的日志和训练完成的模型默认存放在
${CHATLEARN}/output/sft
中。您可以通过CHECKPOINT_PATH来指定模型保存路径,具体的定义详情,请参见${CHATLEARN}/examples/megatron/scripts/train_sft_llama.sh
脚本。资源信息
资源类型
选择灵骏智算。
资源来源
选择资源配额。
资源配额
选择已创建的资源配额。
框架
选择PyTorch。
任务资源
在Worker节点配置以下参数:
节点数量:配置为1。
CPU(核数):80。
内存(GiB):800。
共享内存(GiB):800。
GPU(卡数):8。
训练脚本中,资源需求如下,您可以根据实际情况修改配置参数:
llama2-7B RLHF:8卡GPU
llama2-13B RLHF: 2*8卡GPU
llama2-70B RLHF: 4*8卡GPU
单击确定。
步骤二:Reward模型训练
Reward模型是指在RLHF中作为人类评价的代理,对模型产生的问题回复进行实时评价打分的模型。Reward模型输入问题以及模型回复,可以产生一个标量表示模型回复的质量。
DPO训练模式不需要训练Reward模型。
进入新建任务页面。
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入DLC。
在分布式训练(DLC)页面,单击新建任务。
在新建任务页面,配置以下关键参数,其他参数配置详情,请参见创建训练任务。
参数
描述
环境信息
节点镜像
选中镜像地址,并在文本框中输入
registry.cn-wulanchabu.aliyuncs.com/pai-dlc/pytorch-training:2.4.0-gpu-py3.10-cu12.5-ngc24.06-ubuntu22.04
。数据集
单击自定义数据集,并配置以下参数:
自定义数据集:选择已创建的通用型NAS数据集。
挂载路径:取默认配置
/mnt/data/
。
启动命令
配置以下命令:
export CHATLEARN=path-to-chatlearn export MEGATRON=path-to-megatron-lm cd ${CHATLEARN}/examples/megatron/ LOAD_PATH=path-to-sft-ckpt \ TOKENIZER_MODEL=$LLAMA2_TOKENIZER_MODEL \ DATASET_PATH=$DATASET_ROOT/rm \ bash scripts/train_reward_llama.sh
其中关键配置说明如下:
MEGATRON:是Megatron-LM代码仓库clone存放的位置。本方案配置为
/mnt/data/Megatron-LM
。CHATLEARN:是ChatLearn代码仓库clone存放的位置。本方案配置为
/mnt/data/ChatLearn
。LOAD_PATH:是SFT产出的Checkpoint路径。本方案配置为
${CHATLEARN}/output/sft/
,您的路径以实际为准。TOKENIZER_MODEL:是Llama2Tokenizer所需文件tokenizer.model所在的文件夹路径。本方案配置为
/mnt/data/llama-2-7b-hf/tokenizer.model
。DATASET_PATH:是Reward训练数据集路径。本方案配置为
/mnt/data/rm
。
训练过程生成的日志和训练完成的模型默认存放在
${CHATLEARN}/output/reward
中。您可以通过CHECKPOINT_PATH来指定模型保存路径,具体的定义详见${CHATLEARN}/examples/megatron/scripts/train_reward_llama.sh
脚本。资源信息
资源类型
选择灵骏智算。
资源来源
选择资源配额。
资源配额
选择已创建的资源配额。
框架
选择PyTorch。
任务资源
在Worker节点配置以下参数:
节点数量:配置为1。
CPU(核数):80。
内存(GiB):800。
共享内存(GiB):800。
GPU(卡数):8。
训练脚本中,资源需求如下,您可以根据实际情况修改配置参数:
llama2-7B RLHF:8卡GPU
llama2-13B RLHF: 2*8卡GPU
llama2-70B RLHF: 4*8卡GPU
单击确定。
步骤三:Alignment训练
RLHF训练模式
ChatLearn支持多种Alignment训练模式:RLHF、DPO、OnlineDPO、GRPO等。本方案以RLHF Llama2-7B模型为例,为您介绍如何进行Alignment训练。具体操作步骤如下:
进入新建任务页面。
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入DLC。
在分布式训练(DLC)页面,单击新建任务。
在新建任务页面,配置以下关键参数,其他参数配置详情,请参见创建训练任务。
参数
描述
环境信息
节点镜像
选择镜像地址,并配置:
registry.cn-wulanchabu.aliyuncs.com/pai-dlc/pytorch-training:2.4.0-gpu-py3.10-cu12.5-ngc24.06-ubuntu22.04
。数据集
单击自定义数据集,并配置以下参数:
自定义数据集:选择已创建的通用型NAS数据集。
挂载路径:取默认配置
/mnt/data/
。
启动命令
配置以下命令:
export CHATLEARN=path-to-chatlearn export MEGATRON=path-to-megatron-lm export DATASET_PATH=$DATASET_ROOT/alignment/train.jsonl cd ${CHATLEARN}/examples/megatron/ export model_size=llama2-7B POLICY_LOAD=path-to-sft-ckpt \ REWARD_LOAD=path-to-rm-ckpt \ REWARD_LOAD_ITERATION=1000 \ TOKENIZER_MODEL=$LLAMA2_TOKENIZER_MODEL \ tokenizer_load=${HF_MODEL_DIR} bash scripts/train_rlhf_llama.sh
其中:
MEGATRON:是Megatron-LM代码仓库clone存放的位置。本方案配置为
/mnt/data/Megatron-LM
。CHATLEARN:是ChatLearn代码仓库clone存放的位置。本方案配置为
/mnt/data/ChatLearn
。DATASET_PATH:是Alignment训练数据集路径。本方案配置为
/mnt/data/alignment/train.jsonl
。POLICY_LOAD:是SFT微调训练产出的Checkpoint路径。Policy模型和Reference模型将以SFT的Checkpoint进行初始化。本方案配置为
${CHATLEARN}/output/sft/hh_sft***/
,您的路径以实际为准。REWARD_LOAD:是Reward训练产出Checkpoint路径。本方案配置为
${CHATLEARN}/output/reward/reward_hh***
,您的路径以实际为准。REWARD_LOAD_ITERATION:用于指定加载Checkpoint对应的iteration数。Reward模型和Value模型将以Reward模型的权重进行初始化。
TOKENIZER_MODEL:是Llama2Tokenizer所需文件tokenizer.model所在的文件夹路径。本方案配置为
/mnt/data/llama-2-7b-hf/tokenizer.model
。tokenizer_load:您下载的HuggingFace模型的路径。本方案配置为
/mnt/data/llama-2-7b-hf
。model_size:本方案以Llama2-7B模型为例,如果您需要训练llama2-13B或llama2-70B的模型,您只需要将上述训练脚本中的
export model_size=llama2-7B
替换成export model_size=llama2-13B
或export model_size=llama2-70B
。
系统会将训练完成的模型保存至
${CHATLEARN}/output/**-rlhf
路径。资源信息
资源类型
选择灵骏智算。
资源来源
选择资源配额。
资源配额
选择已创建的资源配额。
框架
选择PyTorch。
任务资源
在Worker节点配置以下参数:
节点数量:配置为1。
CPU(核数):80。
内存(GiB):800。
共享内存(GiB):800。
GPU(卡数):8。
训练脚本中,资源需求如下,您可以根据实际情况修改配置参数:
llama2-7B RLHF:8卡GPU
llama2-13B RLHF: 2*8卡GPU
llama2-70B RLHF: 4*8卡GPU
参数配置完成后,单击确定。
页面自动跳转到分布式训练(DLC)页面。在该页面,您可以单击任务名称进入任务详情页面,来观察任务执行状态。
其他训练模式
其他Alignment训练模式操作方法与RLHF相同,您只需在创建训练任务时,将启动命令更新为对应训练模式的命令即可。其他训练模式对应的启动命令如下:
OnlineDPO/GRPO
OnlineDPO/GRPO训练流程和RLHF比较类似,只是不需要Value模型,以下是一个Llama2-7B的Policy模型和7B的Reward模型的训练脚本。
export CHATLEARN=path-to-chatlearn export MEGATRON=path-to-megatron-lm export DATASET_PATH=$DATASET_ROOT/alignment/train.jsonl cd ${CHATLEARN}/examples/megatron/ export model_size=llama2-7B POLICY_LOAD=path-to-sft-ckpt \ REWARD_LOAD=path-to-rm-ckpt \ REWARD_LOAD_ITERATION=1000 \ TOKENIZER_MODEL=$LLAMA2_TOKENIZER_MODEL \ tokenizer_load=${HF_MODEL_DIR} bash scripts/train_online_dpo_llama.sh
其中DATASET_PATH需要配置为该训练模式支持的训练数据集所在路径。如何准备数据集,请参见数据准备。其他参数配置说明,请参见上述RLHF训练模式的参数配置说明。
DPO
以下是一个Llama2-7B的Policy模型的训练脚本。
export CHATLEARN=path-to-chatlearn export MEGATRON=path-to-megatron-lm export DATASET_PATH=$DATASET_ROOT/alignment/train.jsonl cd ${CHATLEARN}/examples/megatron/ export model_size=llama2-7B POLICY_LOAD=path-to-sft-ckpt \ TOKENIZER_MODEL=$LLAMA2_TOKENIZER_MODEL \ bash scripts/train_dpo_llama.sh
其中DATASET_PATH需要配置为该训练模式支持的训练数据集所在路径。如何准备数据集,请参见数据准备。其他参数配置说明,请参见上述RLHF训练模式的参数配置说明。
GRPO Math
export CHATLEARN=path-to-chatlearn export MEGATRON=path-to-megatron-lm export DATASET_PATH=$DATASET_ROOT/math/train.jsonl cd ${CHATLEARN}/examples/megatron/ export model_size=llama2-7B POLICY_LOAD=path-to-sft-ckpt \ REWARD_LOAD=path-to-rm-ckpt \ REWARD_LOAD_ITERATION=1000 \ TOKENIZER_MODEL=$LLAMA2_TOKENIZER_MODEL \ tokenizer_load=${HF_MODEL_DIR} bash scripts/train_grpo_math_llama.sh
其中DATASET_PATH需要配置为该训练模式支持的训练数据集所在路径。如何准备数据集,请参见数据准备。其他参数配置说明,请参见上述RLHF训练模式的参数配置说明。