首頁(yè) 要聞 中國(guó) 經(jīng)濟(jì) 財(cái)經(jīng) 品牌 點(diǎn)評(píng) 會(huì)展 綜合 | 設(shè)為首頁(yè)
中國(guó)品牌要聞網(wǎng)-傳遞資訊的價(jià)值打造品牌的影響
您現(xiàn)在的位置:首頁(yè)/電商物流/ 正文
阿里云PAI-靈駿大模型訓(xùn)練工具Pai-Megatron-Patch正式開源!
來(lái)源:
編輯:
時(shí)間:2023-09-15

作者: 李鵬,王明,施晨,黃俊

導(dǎo)讀

隨著深度學(xué)習(xí)大語(yǔ)言模型的不斷發(fā)展,其模型結(jié)構(gòu)和量級(jí)在快速演化,依托大模型技術(shù)的應(yīng)用更是層出不窮。對(duì)于廣大開發(fā)者來(lái)說(shuō)不僅要考慮如何在復(fù)雜多變的場(chǎng)景下有效的將大模型消耗的算力發(fā)揮出來(lái),還要應(yīng)對(duì)大模型的持續(xù)迭代。開發(fā)簡(jiǎn)單易用的大模型訓(xùn)練工具就成了應(yīng)對(duì)以上問題廣受關(guān)注的技術(shù)方向,讓開發(fā)者專注于大模型解決方案的開發(fā),降低大模型訓(xùn)練加速性能優(yōu)化和訓(xùn)練/推理全流程搭建的人力開發(fā)成本。阿里云機(jī)器學(xué)習(xí)平臺(tái)PAI開源了業(yè)內(nèi)較早投入業(yè)務(wù)應(yīng)用的大模型訓(xùn)練工具Pai-Megatron-Patch,本文將詳解Pai-Megatron-Patch的設(shè)計(jì)原理和應(yīng)用。

Pai-Megatron-Patch是什么

Pai-Megatron-Patch工具是阿里云機(jī)器學(xué)習(xí)平臺(tái)PAI算法團(tuán)隊(duì)研發(fā),基于阿里云智算服務(wù)PAI-靈駿平臺(tái)的大模型最佳實(shí)踐解決方案配套工具,旨在幫助大模型開發(fā)者快速上手靈駿產(chǎn)品,完成大語(yǔ)言模型(LLM)的高效分布式訓(xùn)練,有監(jiān)督指令微調(diào),模型離線推理驗(yàn)證等完整大模型開發(fā)鏈路。該項(xiàng)目提供了業(yè)界主流開源大模型基于Megatron-LM的訓(xùn)練&離線推理驗(yàn)證流程,方便用戶快速上手大模型訓(xùn)練。

主要特性

開源地址

https://github.com/alibaba/Pai-Megatron-Patch

技術(shù)架構(gòu)

Pai-Megatron-Patch的設(shè)計(jì)理念是不對(duì)Megatron-LM的源碼進(jìn)行侵入式修改,即不在Megatron-LM里面添加新的功能特性,將需要擴(kuò)充完善的部分以patch補(bǔ)丁的方式呈現(xiàn)。在patch中構(gòu)建LLM訓(xùn)練鏈路通過(guò)依賴Megatron-LM核心庫(kù)的方法實(shí)現(xiàn)和Megatron-LM的解耦合。這樣解耦合的好處就是Megatron-LM的升級(jí)不會(huì)影響用戶的LLM最佳實(shí)踐體驗(yàn)。
Pai-Megatron-Patch中包含模型庫(kù),分詞器,模型轉(zhuǎn)換,強(qiáng)化學(xué)習(xí),離線文本生成以及使用示例和工具集等用于構(gòu)建LLM訓(xùn)練的關(guān)鍵要素。在模型庫(kù)中包含熱門大模型的Megatron版本實(shí)現(xiàn),例如baichuan,bloom,chatglm,falcon,galactica,glm,llama,qwen和starcoder,后續(xù)還會(huì)根據(jù)需要及時(shí)添加新的Megatron版大模型實(shí)現(xiàn)。同時(shí)patch還提供了huggingface模型權(quán)重和Megatron模型權(quán)重之間的雙向轉(zhuǎn)換。一方面是方便用戶加載huggingface的權(quán)重在Megatron中繼續(xù)預(yù)訓(xùn)練或者微調(diào),另一方面是方便用戶對(duì)訓(xùn)練好的Megatron模型使用huggingface的評(píng)估/推理流程對(duì)模型質(zhì)量進(jìn)行客觀評(píng)估。在強(qiáng)化學(xué)習(xí)部分,patch提供了PPO訓(xùn)練流程等,方便用戶使用SFT模型和RM模型進(jìn)行強(qiáng)化學(xué)習(xí)。最后patch提供了大量的使用示例幫助用戶快速開始大模型訓(xùn)練&離線推理。具體請(qǐng)參考阿里云靈駿產(chǎn)品的使用流程: 智算服務(wù)PAI靈駿大模型分布式訓(xùn)練方案。

關(guān)鍵技術(shù)

1.  模型權(quán)重轉(zhuǎn)換

研發(fā)Megatron-Patch的初衷之一就是能將世界各地研發(fā)機(jī)構(gòu)在Huggingface上放出的熱門大模型使用Megatron引擎進(jìn)行繼續(xù)預(yù)訓(xùn)練或者繼續(xù)微調(diào)。這就需要首先將Huggingface模型格式的ckpt轉(zhuǎn)換成Megatron模型格式,才能正確加載進(jìn)來(lái),否則會(huì)出現(xiàn)pytorch加載模型失敗。Megatron-Patch的一個(gè)核心可靠性保障特征就是在采用算子拆分,流水并行,序列并行,Zero顯存優(yōu)化,BF16混合精度,梯度檢查點(diǎn)等訓(xùn)練加速技術(shù)確保模型訓(xùn)練吞吐速度平均提升1.5倍以上的同時(shí),在評(píng)估任務(wù)模式下的單一樣本前向loss值,預(yù)訓(xùn)練/微調(diào)任務(wù)模式下的loss曲線,離線文本生成任務(wù)模式下的生成效果這三個(gè)方面和Huggingface是對(duì)齊的,從而確保Megatron版模型的可靠性。
另一方面,Megatron版的transformer實(shí)現(xiàn)方式提供了一種讓用戶僅僅通過(guò)設(shè)置開關(guān)就能實(shí)現(xiàn)不同種類GPT模式的能力。比如llama模型打開如下開關(guān)即可
  •  
  •  
  •  
  •  
  •  
	  --swiglu   --use-rotary-position-embeddings   --no-position-embedding   --untie-embeddings-and-output-weights   --disable-bias-linear
如果想將llama模式變成baichuan模型,那么僅僅需要添加采用--use-alibi-mask開關(guān),同時(shí)關(guān)閉Rotary Embeeding開關(guān)即可,具體配置如下所示:
  •  
  •  
  •  
  •  
  •  
	   --swiglu   --use-alibi-mask   --position-embedding-type none   --untie-embeddings-and-output-weights   --disable-bias-linear

下面我們以llama-2為例,詳解從huggingface到megatron的模型權(quán)重轉(zhuǎn)換技術(shù)。下表總結(jié)了兩者在不同module上的命名對(duì)應(yīng)關(guān)系。在patch實(shí)現(xiàn)過(guò)程中,我們首先將HF格式的ckpt轉(zhuǎn)換到一種內(nèi)部格式,然后再把這種內(nèi)部格式轉(zhuǎn)換成對(duì)應(yīng)的外部格式。這樣做可以最大程度復(fù)用已有的轉(zhuǎn)換邏輯來(lái)處理新模型。在轉(zhuǎn)換為內(nèi)部格式的過(guò)程中,q_proj, k_proj, v_proj需要沿著第0維拼接在一起后賦值給內(nèi)部變量query_key_value。

當(dāng)用戶在資源受限情況下需要按照TP>1來(lái)拆分權(quán)重的時(shí)候,這里需要注意的是針對(duì)MLP層的gate_proj和up_proj的操作。不能像qkv那樣在轉(zhuǎn)換成內(nèi)部格式的時(shí)候進(jìn)行merge再執(zhí)行算子拆分。需要在拆分前加入如下針對(duì)MLP層的權(quán)重合并的代碼邏輯才能確保正確收斂。
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
	for i in range(tp_size):    params_dict = get_element_from_dict_by_path(output_state_dict[i],                                                "model.language_model.encoder")    dense_h_to_4h_1_name = 'mlp.dense_h_to_4h_1.weight'    dense_h_to_4h_1_layer_name = f"layers.{layer}.{dense_h_to_4h_1_name}"    dense_h_to_4h_1_weight = params_dict[dense_h_to_4h_1_layer_name]    dense_h_to_4h_2_name = 'mlp.dense_h_to_4h_2.weight'    dense_h_to_4h_2_layer_name = f"layers.{layer}.{dense_h_to_4h_2_name}"    dense_h_to_4h_2_weight = params_dict[dense_h_to_4h_2_layer_name]    dense_h_to_4h_name = 'mlp.dense_h_to_4h.weight'    dense_h_to_4h_layer_name = f"layers.{layer}.{dense_h_to_4h_name}"    params_dict[dense_h_to_4h_layer_name] = torch.cat(    [dense_h_to_4h_1_weight, dense_h_to_4h_2_weight], dim=0)
2.  基于TE的FP8訓(xùn)練收斂
Transformer Engine(TE)是一個(gè)在英偉達(dá)GPUS上運(yùn)行的針對(duì)Transformer模型的加速庫(kù),其中包括針對(duì)Hopper GPU的FP8混合精度,該精度可以在較低的顯存利用率下提供更好的訓(xùn)練&推理速度。在TE內(nèi)部封裝了Flash Attention實(shí)現(xiàn),同時(shí)TE還提供了一組高度優(yōu)化后的算子用來(lái)構(gòu)建Transformer模型。比如LayerNormLinear就是將LayerNorm和QKV-Proojection進(jìn)行算子融合,LayerNormMLP就是將layernorm和mlp進(jìn)行算子融合。如下圖所示:

從Huggingface到TE模型的權(quán)重轉(zhuǎn)換技術(shù)和之前是類似的,也需要事先找到兩者之間的映射關(guān)系。從下表可以看出,TE中多了_extra_state是用來(lái)存fp8訓(xùn)練的scale和history的,這些在加載的時(shí)候會(huì)出現(xiàn)沖突,這時(shí)只要將load_state_dict函數(shù)的strict設(shè)置成False就可以了,比如load_state_dict(state_dict_, strict=False)。

 

在Megatron-Patch中使用示例中打開FP8混合精度訓(xùn)練開關(guān)也很容易,如下所示:
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
	if [ $PR = fp16 ]; then    pr_options="         --fp16"elif [ $PR = bf16 ]; then    pr_options="         --bf16"elif [ $PR = fp8 ]; then    pr_options="         --bf16        --fp8-hybrid         --fp8-amax-compute-algo max         --fp8-amax-history-len 1024         --transformer-impl transformer_engine"fi
我們可以使用如下訓(xùn)練腳本run_pretrain_megatron_llama_enwiki.sh來(lái)測(cè)試打開FP8開關(guān)后的預(yù)訓(xùn)練收斂性。下圖展示了llama-7B和llama-2-70B模型在打開和關(guān)閉FP8時(shí)的loss曲線對(duì)比,可以看出基本是重合的。
LLama-7B
LLama2-70B
3.  大模型訓(xùn)練&推理
從github上獲取Megatron模型訓(xùn)練工具PAI-Megatron-Patch(https://github.com/alibaba/Pai-Megatron-Patch)源代碼并拷貝到工作目錄/mnt/workspace/下。
1模型格式轉(zhuǎn)換
使用我們提供的模型轉(zhuǎn)換腳本,將huggingface格式的模型文件轉(zhuǎn)換為megatron格式:
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
	cd /mnt/workspace/mkdir llama2-ckptscd llama2-ckptswget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/
models/pai-megatron-patch/llama2-ckpts/Llama-2-7b-hf.tgztar -zxf Llama-2-7b-hf.tgzmv Llama-2-7b-hf llama2-7b-hfcd /mnt/workspace/PAI-Megatron-Patch/toolkits/model_checkpoints_convertor/llamash model_convertor.sh /root/Megatron-LM-23.04        /mnt/workspace/llama2-ckpts/llama2-7b-hf         /mnt/workspace/llama2-ckpts/llama2-7b-hf-to-megatron-tp1-pp1  1  1  llama-7b 0 false
2繼續(xù)預(yù)訓(xùn)練
中文繼續(xù)預(yù)訓(xùn)練漢化指引
Step1: 獲取需要擴(kuò)充詞表的模型(如llama-13b-hf)

Step2: 獲取需要擴(kuò)充的詞表

Step3: 詞表擴(kuò)充

運(yùn)行繼續(xù)預(yù)訓(xùn)練腳本 run_pretrain_megatron_llama.sh,需要傳入的參數(shù)列表如下:
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
	ENV=$1                          # 運(yùn)行環(huán)境: dlc, dswMEGATRON_PATH=$2                # 設(shè)置開源Megatron的代碼路徑MEGATRON_PATCH_PATH=$3          # 設(shè)置Megatron Patch的代碼路徑MODEL_SIZE=$4                   # 模型結(jié)構(gòu)參數(shù)量級(jí):7B, 13BBATCH_SIZE=$5                   # 每卡訓(xùn)練一次迭代樣本數(shù): 4, 8GLOBAL_BATCH_SIZE=$6            # 全局batch sizeLR=$7                           # 學(xué)習(xí)率: 1e-5, 5e-5MIN_LR=$8                       # 最小學(xué)習(xí)率: 1e-6, 5e-6SEQ_LEN=$9                      # 序列長(zhǎng)度PAD_LEN=${10}                   # Padding長(zhǎng)度:100EXTRA_VOCAB_SIZE=${11}          # 詞表擴(kuò)充大小PR=${12}                        # 訓(xùn)練精度: fp16, bf16TP=${13}                        # 模型并行度PP=${14}                        # 流水并行度AC=${15}                        # 激活檢查點(diǎn)模式: sel, fullDO=${16}                        # 是否使用Megatron版Zero-1降顯存優(yōu)化器: true, falseFL=${17}                        # 是否使用Flash Attention: true, falseSP=${18}                        # 是否使用序列并行: true, falseSAVE_INTERVAL=${19}             # 保存ckpt的間隔DATASET_PATH=${20}              # 訓(xùn)練數(shù)據(jù)集路徑PRETRAIN_CHECKPOINT_PATH=${21}  # 預(yù)訓(xùn)練模型路徑TRAIN_TOKENS=${22}              # 訓(xùn)練token數(shù)WARMUP_TOKENS=${23}             # 預(yù)熱t(yī)oken數(shù)OUTPUT_BASEPATH=${24}           # 訓(xùn)練輸出文件路徑

注意設(shè)置正確的數(shù)據(jù)集掛載路徑WORK_DIR以及運(yùn)行環(huán)境ENV,運(yùn)行示例如下所示:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
	export WORK_DIR=/mnt/workspacecd ${WORK_DIR}/PAI-Megatron-Patch/examples/llama2bash run_pretrain_megatron_llama.sh dlc /root/Megatron-LM-23.04   ${WORK_DIR}/PAI-Megatron-Patch  7B   1    16 1e-5   1e-6   2048  80  0   fp16  1   1  sel  true   false  false   100000  ${WORK_DIR}/llama2-datasets/wudao/wudao_llamabpe_text_document   ${WORK_DIR}/llama2-ckpts/llama2-7b-hf-to-megatron-tp1-pp1   100000000   10000   ${WORK_DIR}/output_megatron_llama2/   

3有監(jiān)督微調(diào)

在微調(diào)開始之前,請(qǐng)先進(jìn)入

https://github.com/alibaba/Pai-Megatron-Patch/blob/main/toolkits/pretrain_data_preprocessing/README.md

獲取json文件。運(yùn)行run_finetune_megatron_llama.sh腳本,需要傳入的參數(shù)列表如下:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
	ENV=$1                          # 運(yùn)行環(huán)境: dlc, dswMEGATRON_PATH=$2                # 設(shè)置開源Megatron的代碼路徑MEGATRON_PATCH_PATH=$3          # 設(shè)置Megatron Patch的代碼路徑MODEL_SIZE=$4                   # 模型結(jié)構(gòu)參數(shù)量級(jí): 7B, 13BBATCH_SIZE=$5                   # 每卡訓(xùn)練一次迭代樣本數(shù): 4, 8LR=$6                           # 學(xué)習(xí)率: 1e-5, 5e-5MIN_LR=$7                       # 最小學(xué)習(xí)率: 1e-6, 5e-6SEQ_LEN=$8                      # 序列長(zhǎng)度PAD_LEN=$9                      # Padding長(zhǎng)度:100EXTRA_VOCAB_SIZE=${10}          # 詞表擴(kuò)充大小PR=${11}                        # 訓(xùn)練精度: fp16, bf16TP=${12}                        # 模型并行度PP=${13}                        # 流水并行度AC=${14}                        # 激活檢查點(diǎn)模式: sel, fullDO=${15}                        # 是否使用Megatron版Zero-1降顯存優(yōu)化器: true, falseFL=${16}                        # 是否使用Flash Attention: true, falseSP=${17}                        # 是否使用序列并行: true, falseTRAIN_DATASET_PATH=${18}        # 訓(xùn)練數(shù)據(jù)集路徑VALID_DATASET_PATH=${19}        # 驗(yàn)證數(shù)據(jù)集路徑PRETRAIN_CHECKPOINT_PATH=${20}  # 預(yù)訓(xùn)練模型路徑EPOCH=${21}                     # 訓(xùn)練迭代輪次OUTPUT_BASEPATH=${22}           # 訓(xùn)練輸出文件路徑
多節(jié)點(diǎn)運(yùn)行示例如下所示:
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
	export WORK_DIR=/mnt/workspacecd ${WORK_DIR}/PAI-Megatron-Patch/examples/llama2sh run_finetune_megatron_llama.sh  dlc    /root/Megatron-LM-23.04   ${WORK_DIR}/PAI-Megatron-Patch  7B     1      1e-5   1e-6   2048   80     0      fp16   1      1      sel    true   false  false  ${WORK_DIR}/llama2-datasets/wudao_train.json   ${WORK_DIR}/llama2-datasets/wudao_valid.json   ${WORK_DIR}/llama2-ckpts/llama2-7b-hf-to-megatron-tp1-pp1   2   ${WORK_DIR}/output_megatron_llama2/   
4離線推理
模型訓(xùn)練完成后,可以進(jìn)行離線推理,評(píng)估模型效果。根據(jù)上面的訓(xùn)練流程不同,我們提供了Megatron格式的推理鏈路。對(duì)于Megatron訓(xùn)練的模型,可以直接用Megatron框架進(jìn)行推理。
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
	ENV=$1                          # 運(yùn)行環(huán)境: dlc, dswMEGATRON_PATH=$2                # 設(shè)置開源Megatron的代碼路徑MEGATRON_PATCH_PATH=$3          # 設(shè)置Megatron Patch的代碼路徑CHECKPOINT_PATH=$4              # 模型微調(diào)階段的模型保存路徑MODEL_SIZE=$5                   # 模型結(jié)構(gòu)參數(shù)量級(jí): 1.1B, 1.7B, 7.1BTP=$6                           # 模型并行度BS=$7                           # 每卡推理一次迭代樣本數(shù): 1, 4, 8SEQ_LEN=$8                      # 序列長(zhǎng)度: 256, 512, 1024PAD_LEN=$9                      # PAD長(zhǎng)度:需要將文本拼接到的長(zhǎng)度EXTRA_VOCAB_SIZE=${10}          # 模型轉(zhuǎn)換時(shí)增加的token數(shù)量PR=${11}                        # 推理采用的精度: fp16, bf16TOP_K=${12}                     # 采樣策略中選擇排在前面的候選詞數(shù)量(0-n): 0, 5, 10, 20INPUT_SEQ_LEN=${13}             # 輸入序列長(zhǎng)度: 512OUTPUT_SEQ_LEN=${14}            # 輸出序列長(zhǎng)度: 256INPUT_FILE=${15}                # 需要推理的文本文件: input.txt, 每行為一個(gè)樣本OUTPUT_FILE=${16}               # 推理輸出的文件: output.txt# TOP_K和TOP_P必須有一個(gè)為0TOP_P=${17}                     # 采樣策略中選擇排在前面的候選詞百分比(0-1): 0, 0.85, 0.95TEMPERATURE=${18}               # 采樣策略中溫度懲罰: 1-nREPETITION_PENALTY=${19}        # 避免生成是產(chǎn)生大量重復(fù),可以設(shè)置為(1-2)默認(rèn)為1.2

https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/
pai-megatron-patch/llama2-datasets/pred_input.jsonl

以下有監(jiān)督微調(diào)過(guò)程保存模型的推理代碼,需要將run_text_generation_megatron_llama.sh腳本中CUDA_VISIBLE_DEVICES參數(shù)設(shè)置為0;GPUS_PER_NODE參數(shù)設(shè)置為1;同時(shí)使用下列代碼進(jìn)行推理。此時(shí)使用單卡進(jìn)行推理。注意:此處模型tp為1,可使用單卡推理;如果tp>1,則需使用相應(yīng)卡數(shù)進(jìn)行推理

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
	export WORK_DIR=/mnt/workspacecd ${WORK_DIR}/PAI-Megatron-Patch/examples/llama2bash run_text_generation_megatron_llama.sh dsw /root/Megatron-LM-23.04 ${WORK_DIR}/PAI-Megatron-Patch ../../../llama2-train 7B 1 1 1024 1024 0 fp16 10 512 512 ${WORK_DIR}/pred_input.jsonl ${WORK_DIR}/llama2_pred.txt 0 1.0 1.2
4.  大模型強(qiáng)化學(xué)習(xí)

一般來(lái)說(shuō),SFT微調(diào)過(guò)的模型在對(duì)話場(chǎng)景已經(jīng)會(huì)有不錯(cuò)的表現(xiàn)了。如果想進(jìn)一步提升模型效果,可以再加上RLHF訓(xùn)練。包括獎(jiǎng)勵(lì)模型(Reward Model)的訓(xùn)練和強(qiáng)化學(xué)習(xí)(PPO)的訓(xùn)練。這里展示了如何使用當(dāng)前最常用的RLHF開源代碼框架,DeepSpeed-Chat和trlx,來(lái)進(jìn)行獎(jiǎng)勵(lì)函數(shù)訓(xùn)練(RM),以及強(qiáng)化學(xué)習(xí)優(yōu)化(PPO)。

1)模型格式轉(zhuǎn)換

如果基于huggingface格式的模型直接進(jìn)行獎(jiǎng)勵(lì)模型訓(xùn)練(RM)和強(qiáng)化學(xué)習(xí)優(yōu)化(PPO),可以跳過(guò)此步驟。
如果基于Megatron格式的模型,如PAI-Megatron-Patch訓(xùn)練好的SFT模型,進(jìn)行RM和PPO訓(xùn)練,需要使用我們提供的模型轉(zhuǎn)換腳本,先將Megatron格式的模型文件轉(zhuǎn)換為huggingface格式。
LLaMA2模型轉(zhuǎn)換:
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
	cd PAI-Megatron-Patch/toolkits/model_checkpoints_convertor/gpt3_llamabash model_convertor.sh /path/to/Megatron-LM /path/to/megatron_llama2_ckpt /path/to/hf_llama2_ckpt 1 1 llama-7b 0 true
BLOOM模型轉(zhuǎn)換:
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
	cd PAI-Megatron-Patch/toolkits/model_checkpoints_convertor/bloombash model_convertor_huggingface_megatron.sh /path/to/Megatron-LM /path/to/megatron_bloom_ckpt /path/to/hf_bloom_ckpt 1 1 true

2DeepSpeed-Chat

下載安裝開源社區(qū)DeepSpeed-Chat源代碼:

  •  
  •  
  •  
  •  
  •  
  •  
	cd PAI-Megatron-Patch/rlhf/deepspeed-chatgit clone https://github.com/microsoft/DeepSpeedExamples.gitcp -f rm_main.py DeepSpeedExamples/applications/DeepSpeed-Chat/training/
step2_reward_model_finetuning/main.pycp -f utils.py DeepSpeedExamples/applications/DeepSpeed-Chat/training/
utils/utils.pycd DeepSpeedExamples/applications/DeepSpeed-Chat/pip install -r requirements.txt
基于LLaMA2模型訓(xùn)練獎(jiǎng)勵(lì)模型(RM):
  •  
	cd training/step2_reward_model_finetuning/ && bash training_scripts/
llama2/run_llama2_7b.sh
基于LLaMA2進(jìn)行強(qiáng)化學(xué)習(xí)優(yōu)化訓(xùn)練(PPO):
  •  
	cd training/step3_rlhf_finetuning/ && bash training_scripts/llama2/run_llama2_7b_lora.sh
3trlx
下載安裝開源社區(qū)trlx源代碼:
  •  
  •  
  •  
  •  
  •  
  •  
  •  
	cd PAI-Megatron-Patch/rlhf/trlxgit clone https://github.com/CarperAI/trlx.gitcp trlx_bloom_rlhf.py trlx_bloom_rlhf_test.py trlx/examples/summarize_rlhf/cp train_reward_model_bloom.py reward_model_bloom.py ds_config_bloom.json trlx/
examples/summarize_rlhf/reward_model/cp -f ds_config_trlx_gptj_summarize.json trlx/examples/summarize_rlhf/configs/cd trlxpip install -e .
基于BLOOM模型訓(xùn)練獎(jiǎng)勵(lì)模型(RM):
  •  
	cd examples/summarize_rlhf/reward_model/ && deepspeed train_reward_model_bloom.py

基于GPT-J模型訓(xùn)練獎(jiǎng)勵(lì)模型(RM):

  •  
	cd examples/summarize_rlhf/reward_model/ && deepspeed train_reward_model_gptj.py
基于BLOOM模型進(jìn)行強(qiáng)化學(xué)習(xí)優(yōu)化訓(xùn)練(PPO):
  •  
	cd examples/summarize_rlhf/ && accelerate launch --config_file configs/
default_accelerate_config.yaml trlx_bloom_rlhf.py
基于GPT-J模型進(jìn)行強(qiáng)化學(xué)習(xí)優(yōu)化訓(xùn)練(PPO):
  •  
	cd examples/summarize_rlhf/ && accelerate launch --config_file configs/
default_accelerate_config.yaml trlx_gptj_text_summarization.py
PPO單測(cè)
如果您想跳過(guò) 有監(jiān)督微調(diào)(SFT)與 獎(jiǎng)勵(lì)模型訓(xùn)練(RM)兩個(gè)步驟,只單獨(dú)測(cè)試PPO模塊的性能,可以運(yùn)行如下指令單測(cè)PPO:
  •  
	cd examples/summarize_rlhf/ && accelerate launch --config_file configs/
default_accelerate_config.yaml trlx_bloom_rlhf_test.py

 開源生態(tài)——構(gòu)想和未來(lái)

在PAI-Megatron-Patch的開發(fā)過(guò)程中,我們圍繞中文大模型訓(xùn)練加速落地沉淀了以下幾個(gè)方面的內(nèi)容:

后續(xù)在PAI-Megatron-Patch中還會(huì)陸續(xù)放出更多高質(zhì)量的大模型和最佳實(shí)踐。此外,在中長(zhǎng)期,我們?cè)贛egatron版的Lora流程以及Transformer Engine方向上會(huì)持續(xù)投入精力,也歡迎各種維度的反饋和改進(jìn)建議以及技術(shù)討論,同時(shí)我們十分歡迎和期待對(duì)開源社區(qū)建設(shè)感興趣的同行一起參與共建,釘釘群號(hào)是29605038042
參考文獻(xiàn)

[1]. Attention Is All You Need

[2]. Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism
[3]. Reducing Activation Recomputation in Large Transformer Models
[4]. FP8 Formats for Deep Learning
[5]. ZeRO: Memory Optimizations Toward Training Trillion Parameter Models
[6]. LLaMA: Open and Efficient Foundation Language Models

[7]. Llama 2: Open Foundation and Fine-Tuned Chat Models

[8]. Benchmarking Large Language Models on NVIDIA H100 GPUs with CoreWeave

 

免責(zé)聲明:本文僅代表作者個(gè)人觀點(diǎn),與本網(wǎng)無(wú)關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí), 對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾, 請(qǐng)讀者僅作參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。當(dāng)事人(單位)如有異議,請(qǐng)參閱《刪帖說(shuō)明》辦理。
中國(guó)品牌要聞網(wǎng)-傳遞資訊的價(jià)值打造品牌的影響
  • CopyRight@ 2005-2022 中國(guó)品牌要聞網(wǎng)
  • 工商注冊(cè)號(hào) 430122000189097
  • ICP備案許證:渝ICP備2022012785號(hào)