本文為您介紹如何使用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)頁面中單擊新建任務,進入新建任務頁面。
在新建任務頁面,配置以下關鍵參數,其他參數配置詳情,請參見創建訓練任務。
參數
描述
環境信息
鏡像地址
選中鏡像地址,并在文本框中輸入
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。
內存(GB):800。
共享內存(GB):800。
GPU(卡數):1。
單擊提交。
頁面自動跳轉到分布式訓練(DLC)頁面,當任務執行成功后,模型轉換成功。
2.開啟SFT訓練
進入新建任務頁面,具體操作,請參見1.下載和轉化預訓練模型。
在新建任務頁面,配置以下關鍵參數,其他參數配置詳情,請參見創建訓練任務。
參數
描述
環境信息
鏡像地址
選中鏡像地址,并在文本框中輸入
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。
內存(GB):800。
共享內存(GB):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模型。
進入新建任務頁面,具體操作,請參見1.下載和轉化預訓練模型。
在新建任務頁面,配置以下關鍵參數,其他參數配置詳情,請參見創建訓練任務。
參數
描述
環境信息
鏡像地址
選中鏡像地址,并在文本框中輸入
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。
內存(GB):800。
共享內存(GB):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訓練。具體操作步驟如下:
進入新建任務頁面,具體操作,請參見1.下載和轉化預訓練模型。
在新建任務頁面,配置以下關鍵參數,其他參數配置詳情,請參見創建訓練任務。
參數
描述
環境信息
節點鏡像
選擇鏡像地址,并配置:
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。
內存(GB):800。
共享內存(GB):800。
GPU(卡數):8。
訓練腳本中,資源需求(假設資源為A100-80GB或A800-80GB GPU)如下,您可以根據實際情況修改配置參數:
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訓練模式的參數配置說明。