本方案旨在協助大模型開發人員快速上手靈駿智算平台,實現大語言模型(Qwen-7B、Qwen-14B和Qwen-72B)的高效分布式訓練、三階段指令微調、模型離線推理和線上服務部署等完整的開發流程。以Qwen-7B模型為例,為您詳細介紹該方案的開發流程。
前提條件
本方案以Qwen-7B v1.1.4版本的模型為例,在開始執行操作前,請確認您已經完成以下準備工作:
已開通PAI(DSW、DLC、EAS)並建立了預設的工作空間。具體操作,請參見開通PAI並建立預設工作空間。
已購買靈駿智算資源並建立資源配額。不同的模型參數量支援的資源規格列表如下,請根據您實際使用的模型參數量選擇合適的資源,關於靈駿智算資源的節點規格詳情,請參見靈駿Serverless版機型定價詳情。具體操作,請參見建立資源群組併購買靈駿智算資源和靈駿智算資源配額。
模型參數量
全參數訓練資源
推理資源(最低)
Megatron訓練模型切片
7B
8卡*gu7xf、8卡*gu7ef
1*V100(32 GB顯存)、1*A10(24 GB顯存)
TP1、PP1
14B
8卡*gu7xf、8卡*gu7ef
2*V100(32 GB顯存)、2*A10(24 GB顯存)
TP2、PP1
72B
4*8卡*gu7xf、4*8卡*gu7ef
6*V100(32 GB顯存)、2卡*gu7xf
TP8、PP2
已建立阿里雲檔案儲存體(通用型NAS)類型的資料集,用於儲存訓練所需的檔案和結果檔案。預設掛載路徑配置為
/mnt/data/nas
。具體操作,請參見建立及管理資料集。已建立DSW執行個體,其中關鍵參數配置如下。具體操作,請參見建立DSW執行個體。
資源配額:選擇已建立的靈駿智算資源的資源配額。
資源規格:配置以下資源規格。
CPU(核心數):90。
記憶體(GiB):1024。
共用記憶體(GiB):1024。
GPU(卡數):至少為8。
掛載配置:單擊添加,選擇已建立的資料集,並使用預設掛載路徑。
鏡像:在鏡像地址頁簽,配置鏡像為
pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pytorch-training:1.12-ubuntu20.04-py3.10-cuda11.3-megatron-patch-llm
。
如果使用RAM使用者完成以下相關操作,需要為RAM使用者授予DSW、DLC或EAS的操作許可權。具體操作,請參見雲產品依賴與授權:DSW、雲產品依賴與授權:DLC或雲產品依賴與授權:EAS。
使用限制
僅支援在華北6(烏蘭察布)地區使用該最佳實務。
步驟一:準備通義千問模型
本案例提供了以下三種下載模型的方式,您可以根據需要選擇其中一種。具體操作步驟如下:
進入PAI-DSW開發環境。
登入PAI控制台。
在頁面左上方,選擇使用服務的地區:華北6(烏蘭察布)。
在左側導覽列單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應工作空間內。
在左側導覽列,選擇 。
單擊目標執行個體操作列下的開啟。
在頂部功能表列單擊Terminal,在該頁簽中單擊建立terminal。
下載通義千問模型。
從ModelScope社區下載模型
在Terminal中執行以下命令安裝ModelScope。
執行以下命令進入Python環境。
以Qwen-7B模型為例,下載模型檔案的程式碼範例如下。
按
Ctrl+D
,退出Python環境。執行以下命令將已下載的通義千問模型移動到對應檔案夾中。
pip install modelscope
python
# ### Loading Model and Tokenizer from modelscope.hub.snapshot_download import snapshot_download model_dir = snapshot_download('qwen/Qwen-7B', 'v1.1.4') # model_dir = snapshot_download('qwen/Qwen-14B', 'v1.0.4') # model_dir = snapshot_download('qwen/Qwen-72B') # 擷取下載路徑 print(model_dir) # /root/.cache/modelscope/hub/qwen/Qwen-7B
# mkdir -p /mnt/workspace/qwen-ckpts/${尾碼為hf的ckpt檔案夾} mkdir -p /mnt/workspace/qwen-ckpts/qwen-7b-hf # cp -r ${在此處填寫已下載的模型路徑}/* /mnt/workspace/qwen-ckpts/${尾碼為hf的ckpt檔案夾} cp -r /root/.cache/modelscope/hub/qwen/Qwen-7B/* /mnt/workspace/qwen-ckpts/qwen-7b-hf
從HuggingFace社區下載模型
在DSW的Terminal中執行以下命令下載模型檔案。本方案以下載Qwen-7B模型為例,如果您需要下載Qwen-14B或Qwen-72B的模型檔案,請參照下方代碼進行修改。
mkdir /mnt/workspace/qwen-ckpts cd /mnt/workspace/qwen-ckpts git clone https://huggingface.co/Qwen/Qwen-7B # git clone https://huggingface.co/Qwen/Qwen-7B-Chat # git clone https://huggingface.co/Qwen/Qwen-14B # git clone https://huggingface.co/Qwen/Qwen-14B-Chat # git clone https://huggingface.co/Qwen/Qwen-72B # git clone https://huggingface.co/Qwen/Qwen-72B-Chat
步驟二:準備預訓練資料
建議您在DSW執行個體中準備預訓練資料。本案例以WuDaoCorpora2.0資料集(該資料集僅供研究使用)為例,介紹Megatron訓練資料的預先處理流程。您可以直接下載PAI已準備好的小規模樣本資料,也可以按照以下操作步驟自行準備預訓練資料。
使用PAI處理好的小規模樣本資料
為了方便您試用該案例,PAI也提供了已經處理好的小規模樣本資料,您可以在DSW的Terminal中執行以下命令下載樣本資料。
mkdir /mnt/workspace/qwen-datasets/
cd /mnt/workspace/qwen-datasets
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/alpaca_zh-qwen-train.json
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/alpaca_zh-qwen-valid.json
mkdir -p /mnt/workspace/qwen-datasets/wudao
cd /mnt/workspace/qwen-datasets/wudao
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/wudao_qwenbpe_content_document.bin
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/wudao_qwenbpe_content_document.idx
自行處理資料
下載WuDaoCorpora2.0開來源資料集到
/mnt/workspace/qwen-datasets
工作目錄下。本案例將解壓後的檔案夾命名為wudao_200g。PAI提供了部分範例資料作為樣本,您可以在DSW的Terminal中執行以下命令下載並解壓資料集。
mkdir /mnt/workspace/qwen-datasets cd /mnt/workspace/qwen-datasets wget https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/datasets/WuDaoCorpus2.0_base_sample.tgz tar zxvf WuDaoCorpus2.0_base_sample.tgz mv WuDaoCorpus2.0_base_sample wudao_200g
在Terminal中執行以下命令,對Wudao資料執行資料集清洗並進行檔案格式轉換,最終產生匯總的merged_wudao_cleaned.json檔案。
#! /bin/bash set -ex # 請在此處設定未經處理資料所在路徑。 data_dir=/mnt/workspace/qwen-datasets/wudao_200g # 開始資料清洗流程。 dataset_dir=$(dirname $data_dir) mkdir -p ${dataset_dir}/cleaned_wudao_dataset cd ${dataset_dir}/cleaned_wudao_dataset wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/llama2-codes/preprocess_wudao2.py # 此處與上一節不同,增加了key參數設為text。 python preprocess_wudao2.py -i ${data_dir} -o ${dataset_dir}/cleaned_wudao_dataset -k text -p 32 # 合并清洗後的資料。 mkdir ${dataset_dir}/wudao cd ${dataset_dir}/wudao find ${dataset_dir}/cleaned_wudao_dataset -name "*.json" -exec cat {} + > ${dataset_dir}/wudao/merged_wudao_cleaned.json rm -rf ${dataset_dir}/cleaned_wudao_dataset
命令執行完成後,
qwen-datasets
目錄的檔案結構如下,新增了一個wudao檔案夾。qwen-datasets ├── wudao_200g └── wudao └── merged_wudao_cleaned.json
在Terminal中執行以下命令,利用產生的merged_wudao_cleaned.json檔案將資料拆分成若干組並進行壓縮,以便於後續實現多執行緒。
apt-get update apt-get install zstd # 此處設定分塊數為10,如資料處理慢可設定稍大。 NUM_PIECE=10 # 對merged_wudao_cleaned.json檔案進行處理。 mkdir -p ${dataset_dir}/cleaned_zst/ # 查詢資料總長度,對資料進行拆分。 NUM=$(sed -n '$=' ${dataset_dir}/wudao/merged_wudao_cleaned.json) echo "total line of dataset is $NUM, data will be split into $NUM_PIECE pieces for processing" NUM=`expr $NUM / $NUM_PIECE` echo "each group is processing $NUM sample" split_dir=${dataset_dir}/split mkdir $split_dir split -l $NUM --numeric-suffixes --additional-suffix=.jsonl ${dataset_dir}/wudao/merged_wudao_cleaned.json $split_dir/ # 資料壓縮。 o_path=${dataset_dir}/cleaned_zst/ mkdir -p $o_path files=$(ls $split_dir/*.jsonl) for filename in $files do f=$(basename $filename) zstd -z $filename -o $o_path/$f.zst & done rm -rf $split_dir rm ${dataset_dir}/wudao/merged_wudao_cleaned.json
命令執行完成後,
qwen-datasets
目錄的檔案結構如下。新增了一個cleaned_zst
檔案夾,該檔案夾中有10個壓縮檔。qwen-datasets ├── wudao_200g ├── wudao └── cleaned_zst ├── 00.jsonl.zst │ ... └── 09.jsonl.zst
製作MMAP格式的預訓練資料集。
MMAP資料是一種預先執行tokenize的資料格式,可以減少訓練微調過程中等待資料讀入的時間,尤其在處理大規模資料時優勢更為突出。具體操作步驟如下:
在DSW的Terminal中執行以下命令,將Megatron格式的模型訓練工具原始碼PAI-Megatron-Patch拷貝至DSW的工作目錄
/mnt/workspace/
下。cd /mnt/workspace/ # 方式一:通過開源網站擷取訓練代碼。 git clone --recurse-submodules https://github.com/alibaba/Pai-Megatron-Patch.git # 方式二:通過wget方式擷取訓練代碼,需要執行tar zxvf Pai-Megatron-Patch.tgz進行解壓。 wget https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/models/Pai-Megatron-Patch.tgz
在Terminal中執行以下命令將資料轉換成MMAP格式。
命令執行成功後,在
/mnt/workspace/qwen-datasets/wudao
目錄下產生.bin
和.idx
檔案。# 安裝Qwen依賴的tokenizer庫包。 pip install tiktoken # 請在此處設定資料集路徑和工作路徑。 export dataset_dir=/mnt/workspace/qwen-datasets export WORK_DIR=/mnt/workspace # 分別為訓練集、驗證集產生mmap格式預訓練資料集。 cd ${WORK_DIR}/Pai-Megatron-Patch/toolkits/pretrain_data_preprocessing bash run_make_pretraining_dataset.sh \ ../../Megatron-LM-23.04 \ ${WORK_DIR}/Pai-Megatron-Patch/ \ ${dataset_dir}/cleaned_zst/ \ qwenbpe \ ${dataset_dir}/wudao/ \ ${WORK_DIR}/qwen-ckpts/qwen-7b-hf rm -rf ${dataset_dir}/cleaned_zst
其中運行run_make_pretraining_dataset.sh輸入的六個啟動參數說明如下:
參數
描述
MEGATRON_PATH=$1
設定開源Megatron的代碼路徑。
MEGATRON_PATCH_PATH=$2
設定Megatron Patch的代碼路徑。
input_data_dir=$3
打包後的Wudao資料集的檔案夾路徑。
tokenizer=$4
指定分詞器的類型為qwenbpe。
output_data_dir=$5
指定輸出的
.bin
和.idx
檔案的儲存路徑。load_dir=$6
產生的tokenizer_config.json檔案的路徑。
指令碼執行完成後,
qwen-datasets
目錄的檔案結構如下。qwen-datasets ├── wudao_200g └── wudao ├── wudao_qwenbpe_content_document.bin └── wudao_qwenbpe_content_document.idx
步驟三:Megatron訓練
您可以按照以下流程進行Megatron訓練。
模型格式轉換
將HuggingFace格式的模型檔案轉換為Megatron格式。
下載轉換好的Megatron模型
為方便您試用該案例,PAI提供了已經轉換好格式的模型。您可以在Terminal中執行以下命令下載模型。
cd /mnt/workspace/
mkdir qwen-ckpts
cd qwen-ckpts
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-ckpts/qwen-7b-hf-to-mg-tp1-pp1.tgz
tar -zxf qwen-7b-hf-to-mg-tp1-pp1.tgz
mv qwen-7b-hf-to-mg-tp1-pp1 qwen-7b-hf-to-megatron-tp1-pp1
自行將HuggingFace格式的模型轉換成Megatron格式
在Terminal中執行以下命令,使用PAI提供的模型轉換工具,將HuggingFace格式的模型檔案轉換為Megatron格式:
# 轉換模型。
cd /mnt/workspace/Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/qwen
sh model_convertor.sh \
../../../Megatron-LM-main \
/mnt/workspace/qwen-ckpts/qwen-7b-hf \
/mnt/workspace/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1 \
1 \
1 \
qwen-7b \
0 \
false
其中運行model_convertor.sh需要傳入的參數說明如下:
參數 | 描述 |
MEGATRON_PATH=$1 | 設定開源Megatron的代碼路徑。 |
SOURCE_CKPT_PATH=$2 | HuggingFace格式的模型檔案路徑。 |
TARGET_CKPT_PATH=$3 | 轉換為Megatron格式模型後儲存的路徑。 |
TP=$4 | 張量切片數量,與訓練保持一致。不同參數量下的切片數量不同,在轉換模型時需進行針對性修改:
|
PP=$5 | 流水切片數量,與訓練保持一致。不同參數量下的切片數量不同,在轉換模型時需進行針對性修改:
|
MN=$6 | 模型名稱:qwen-7b、qwen-14b或qwen-72b。 |
EXTRA_VOCAB_SIZE=$7 | 額外詞表大小。 |
mg2hf=$8 | 是否為Megatron格式轉HuggingFace格式。 |
預訓練模型
您可以在DSW單機環境中訓練模型,也可以在DLC環境中提交多機多卡分布式訓練任務,訓練過程大約持續2個小時。任務執行成功後,模型檔案將輸出到/mnt/workspace/output_megatron_qwen/
目錄下。
DSW單機預訓練模型
以Qwen-7B模型為例,在Terminal中啟動並執行程式碼範例如下:
export WORK_DIR=/mnt/workspace
cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen
sh run_pretrain_megatron_qwen.sh \
dsw \
${WORK_DIR}/Pai-Megatron-Patch \
7B \
1 \
8 \
1e-5 \
1e-6 \
2048 \
2048 \
85 \
fp16 \
1 \
1 \
sel \
true \
false \
false \
false \
100000 \
${WORK_DIR}/qwen-datasets/wudao/wudao_qwenbpe_content_document \
${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1 \
100000000 \
10000 \
${WORK_DIR}/output_megatron_qwen/
其中運行run_pretrain_megatron_qwen.sh需要傳入的參數說明如下:
參數 | 描述 |
ENV=$1 | 配置運行環境:
|
MEGATRON_PATH=$2 | 設定開源Megatron的代碼路徑。 |
MODEL_SIZE=$3 | 模型結構參數量級:7B、14B或72B。 |
BATCH_SIZE=$4 | 每卡訓練一次迭代樣本數:4或8。 |
GLOBAL_BATCH_SIZE=$5 | 訓練總迭代樣本數。 |
LR=$6 | 學習率:1e-5或5e-5。 |
MIN_LR=$7 | 最小學習率:1e-6或5e-6。 |
SEQ_LEN=$8 | 序列長度。 |
PAD_LEN=${9} | Padding長度。 |
EXTRA_VOCAB_SIZE=${10} | 詞表擴充大小:
|
PR=${11} | 訓練精度:fp16或bf16。 |
TP=${12} | 模型並行度。 |
PP=${13} | 流水並行度。 |
AC=${14} | 啟用檢查點模式:
|
DO=${15} | 是否使用Megatron版Zero-1降顯存最佳化器:
|
FL=${16} | 是否開啟Flash Attention:
|
SP=${17} | 是否使用序列並行:
|
TE=${18} | 是否開啟Transformer-engine加速技術,需gu8xf顯卡。 |
SAVE_INTERVAL=${19} | 儲存CheckPoint檔案的間隔。 |
DATASET_PATH=${20} | 訓練資料集路徑。 |
PRETRAIN_CHECKPOINT_PATH=${21} | 預訓練模型路徑。 |
TRAIN_TOKENS=${22} | 訓練Tokens。 |
WARMUP_TOKENS=${23} | 預熱Token數。 |
OUTPUT_BASEPATH=${24} | 訓練輸出模型檔案的路徑。 |
DLC分布式預訓練模型
在單機開發調試完成後,您可以在DLC環境中配置多機多卡的分布式任務。具體操作步驟如下:
進入建立任務頁面。
登入PAI控制台。
在左側導覽列單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應工作空間內。
在工作空間頁面的左側導覽列選擇 ,在分布式訓練(DLC)頁面中單擊建立任務,進入建立任務頁面。
在建立任務頁面,配置以下關鍵參數,其他參數取預設配置即可。更多詳細內容,請參見建立訓練任務。
參數
描述
基本資料
任務名稱
自訂任務名稱。本方案配置為:test_qwen_dlc。
環境資訊
節點鏡像
選中鏡像地址並在文字框中輸入
pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pytorch-training:1.12-ubuntu20.04-py3.10-cuda11.3-megatron-patch-llm
。掛載配置
單擊添加按鈕,掛載類型選擇自訂資料集:
資料集:選擇已建立的NAS類型的資料集。
掛載路徑:配置為
/mnt/workspace/
。
啟動命令
配置以下命令,其中run_pretrain_megatron_qwen.sh指令碼輸入的啟動參數與DSW單機預訓練模型一致。
export WORK_DIR=/mnt/workspace cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen sh run_pretrain_megatron_qwen.sh \ dlc \ ${WORK_DIR}/PAI-Megatron-Patch \ 7B \ 1 \ 8 \ 1e-5 \ 1e-6 \ 2048 \ 2048 \ 85 \ fp16 \ 1 \ 1 \ sel \ true \ false \ false \ false \ 100000 \ ${WORK_DIR}/qwen-datasets/wudao/wudao_qwenbpe_content_document \ ${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1 \ 100000000 \ 10000 \ ${WORK_DIR}/output_megatron_qwen/
資源資訊
資源類型
選擇靈駿智算。
資源來源
選擇資源配額。
資源配額
本方案選擇已建立的靈駿智算資源的資源配額。
架構
選擇PyTorch。
任務資源
在Worker節點配置以下參數:
節點數量:2,如果需要多機訓練,配置節點數量為需要的機器數即可。
GPU(卡數):8
CPU(核心數):90
說明CPU核心數不能大於96。
記憶體(GiB):1024
共用記憶體(GiB):1024
單擊確定,頁面自動跳轉到分布式訓練(DLC)頁面。當狀態變為已成功時,表明訓練任務執行成功。
有監督微調模型
您可以在DSW單機環境中微調模型,也可以在DLC環境中提交多機多卡分布式任務,訓練過程大約持續2個小時。任務執行成功後,模型檔案將輸出到/mnt/workspace/output_megatron_qwen/
目錄下。
在微調模型前,請前往步驟二:準備預訓練資料章節,在使用PAI處理好的小規模樣本資料頁簽中,按照代碼下載JSON檔案。
微調模型。
DSW單機微調模型
以Qwen-7B模型為例,在Terminal中啟動並執行程式碼範例如下:
export WORK_DIR=/mnt/workspace cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen sh run_finetune_megatron_qwen_withGA.sh \ dsw \ ${WORK_DIR}/Pai-Megatron-Patch \ 7B \ 1 \ 96 \ 1e-5 \ 1e-6 \ 2048 \ 2048 \ 85 \ bf16 \ 1 \ 1 \ sel \ true \ false \ false \ false \ 1000 \ ${WORK_DIR}/qwen-datasets/alpaca_zh-qwen-train.json \ ${WORK_DIR}/qwen-datasets/alpaca_zh-qwen-valid.json \ ${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1 \ 2000 \ 10 \ ${WORK_DIR}/output_megatron_qwen/
其中運行run_finetune_megatron_qwen_withGA.sh需要傳入的參數說明如下:
參數
描述
ENV=$1
運行環境:
dlc
dsw
MEGATRON_PATH=$2
設定開源Megatron的代碼路徑。
MODEL_SIZE=$3
模型結構參數量級:7B、14B或72B。
BATCH_SIZE=$4
每卡訓練一次迭代樣本數:1、2、4、8。
GLOBAL_BATCH_SIZE=$5
微調總迭代樣本數:64、96、128。
LR=$6
學習率:1e-5、5e-5。
MIN_LR=$7
最小學習率:1e-6、5e-6。
SEQ_LEN=$8
序列長度。
PAD_LEN=$9
Padding序列長度。
EXTRA_VOCAB_SIZE=${10}
詞表擴充大小:
Qwen-7B:85。
Qwen-14B:213。
Qwen-72B:213。
PR=${11}
訓練精度:fp16、bf16。
TP=${12}
模型並行度。
PP=${13}
流水並行度。
AC=${14}
啟用檢查點模式:full或sel。
DO=${15}
是否使用Megatron版Zero-1降顯存最佳化器:
true
false
FL=${16}
是否開啟Flash Attention:
true
false
SP=${17}
是否使用序列並行:
true
false
TE=${18}
是否開啟Transformer-engine加速技術,需gu8xf顯卡。
SAVE_INTERVAL=${19}
儲存模型的步數。
DATASET_PATH=${20}
訓練資料集路徑。
VALID_DATASET_PATH=${21}
驗證資料集路徑。
PRETRAIN_CHECKPOINT_PATH=${22}
預訓練模型路徑。
TRAIN_ITERS=${23}
訓練迭代輪次。
LR_WARMUP_ITERS=${24}
學習率增加值最大的步數。
OUTPUT_BASEPATH=${25}
訓練輸出模型檔案的路徑。
DLC分布式微調模型
在DSW單機環境調試完成後,您可以在DLC環境中配置多機多卡分布式任務。提交DLC訓練任務時,啟動命令配置如下,其他參數配置詳情,請參見步驟2:預訓練模型。
export WORK_DIR=/mnt/workspace cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen sh run_finetune_megatron_qwen_withGA.sh \ dlc \ ${WORK_DIR}/Pai-Megatron-Patch \ 7B \ 1 \ 96 \ 1e-5 \ 1e-6 \ 2048 \ 2048 \ 85 \ bf16 \ 1 \ 1 \ sel \ true \ false \ false \ false \ 1000 \ ${WORK_DIR}/qwen-datasets/alpaca_zh-qwen-train.json \ ${WORK_DIR}/qwen-datasets/alpaca_zh-qwen-valid.json \ ${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1 \ 2000 \ 10 \ ${WORK_DIR}/output_megatron_qwen/
其中運行run_finetune_megatron_qwen_withGA.sh需要傳入的參數與DSW單機微調模型相同。
步驟四:離線推理模型
在模型訓練完成後,您可以使用Megatron推理鏈路進行離線推理,以評估模型效果。具體操作步驟如下:
下載測試樣本pred_input.jsonl,並上傳到DSW的
/mnt/workspace
目錄下。具體操作,請參見上傳與下載資料檔案。說明推理的資料群組織形式需要與微調時保持一致。
將訓練前模型路徑下的所有JSON檔案和tokenizer.model檔案拷貝到訓練產生的模型路徑(位於
{OUTPUT_BASEPATH }/checkpoint
的下一級目錄下,與latest_checkpointed_iteration.txt同級)。說明命令中的路徑需替換為您的實際路徑。
cd /mnt/workspace/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1 cp *.json /mnt/workspace/output_megatron_qwen/checkpoint/dswXXX/ cp tokenizer.model /mnt/workspace/output_megatron_qwen/checkpoint/dswXXX/
在Terminal中執行以下命令完成模型離線推理,推理結果輸出到
/mnt/workspace/qwen_pred.txt
檔案,您可以根據推理結果來評估模型效果。說明執行命令前,您需要將run_text_generation_megatron_qwen.sh指令碼中的參數CUDA_VISIBLE_DEVICES設定為0;參數GPUS_PER_NODE設定為1。
export WORK_DIR=/mnt/workspace cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen bash run_text_generation_megatron_qwen.sh \ dsw \ ${WORK_DIR}/PAI-Megatron-Patch \ /mnt/workspace/output_megatron_qwen/checkpoint/dswXXX \ 7B \ 1 \ 1 \ 1024 \ 1024 \ 85 \ fp16 \ 10 \ 512 \ 512 \ ${WORK_DIR}/pred_input.jsonl \ ${WORK_DIR}/qwen_pred.txt \ 0 \ 1.0 \ 1.2
其中運行run_text_generation_megatron_qwen.sh指令碼輸入的啟動參數說明如下:
參數
描述
ENV=$1
運行環境:
dlc
dsw
MEGATRON_PATCH_PATH=$2
設定Megatron Patch的代碼路徑。
CHECKPOINT_PATH=$3
模型訓練階段的模型儲存路徑。
重要該路徑需要替換為您自己的模型路徑。
MODEL_SIZE=$4
模型結構參數量級:7B、14B或72B。
TP=$5
模型並行度。
重要該參數配置為1,可以使用單卡進行推理。
該參數值大於1,則需要使用相應的卡數進行推理。
BS=$6
每卡推理一次迭代樣本數:1、4、8。
SEQ_LEN=$7
序列長度:256、512、1024。
PAD_LEN=$8
PAD長度:需要將文本拼接的長度。
EXTRA_VOCAB_SIZE=${9}
模型轉換時增加的token數量:
Qwen-7B:85。
Qwen-14B:213。
Qwen-72B:213。
PR=${10}
推理採用的精度:fp16、bf16。
TOP_K=${11}
採樣策略中選擇排在前面的候選詞數量(0-n): 0、5、10、20。
INPUT_SEQ_LEN=${12}
輸入序列長度:512。
OUTPUT_SEQ_LEN=${13}
輸出序列長度:256。
INPUT_FILE=${14}
需要推理的文字檔:pred_input.jsonl,每行為一個樣本。
OUTPUT_FILE=${15}
推理輸出的檔案:qwen_pred.txt。
TOP_P=${16}
採樣策略中選擇排在前面的候選詞百分比(0,1):0、0.85、0.95。
說明TOP_K和TOP_P必須有一個為0。
TEMPERATURE=${17}
採樣策略中溫度懲罰:1-n。
REPETITION_PENALTY=${18}
避免產生時產生大量重複,可以設定為(1-2)。預設為1.2。
步驟五:模型格式轉換
離線推理完成後,如果模型效果符合您的預期,您可以將訓練獲得的Megatron格式的模型轉換為HuggingFace格式,具體操作步驟如下。後續您可以使用轉換後的HuggingFace格式的模型進行服務線上部署。
在Terminal中執行以下命令,將訓練產生的Megatron格式的模型轉換為HuggingFace格式的模型。
export WORK_DIR=/mnt/workspace cd /mnt/workspace/Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/qwen sh model_convertor.sh \ ../../../Megatron-LM-main \ ${WORK_DIR}/output_megatron_qwen/checkpoint/${路徑}/iter_******* \ /mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1/ \ 1 \ 1 \ qwen-7b \ 0 \ true
其中運行model_convertor.sh指令碼需要傳入的參數說明如下:
參數
描述
MEGATRON_PATH=$1
設定開源Megatron的代碼路徑。
SOURCE_CKPT_PATH=$2
配置為訓練獲得的Megatron格式的模型路徑,具體到
iter_*
。例如:${WORK_DIR}/output_megatron_qwen/checkpoint/dsw-pretrain-megatron-qwen-7B-lr-1e-5-bs-1-seqlen-2048-pr-bf16-tp-1-pp-1-ac-sel-do-true-sp-false-tt--wt-/iter_*******
。重要請替換為您自己的模型路徑。
如果使用預訓練模型進行轉換,需要刪除模型路徑下所有的distrib_optim.pt檔案。
TARGET_CKPT_PATH=$3
轉換為HuggingFace格式的模型後儲存的路徑。
TP=$4
張量切片數量,與訓練保持一致。
PP=$5
流水切片數量,與訓練保持一致。
MN=$6
模型名稱:qwen-7b、qwen-14b或qwen-72b。
EXTRA_VOCAB_SIZE=$7
額外詞表大小。
mg2hf=$8
是否為Megatron格式轉HuggingFace格式。
將開源HuggingFace模型檔案夾路徑
/mnt/workspace/qwen-ckpts/qwen-7b-hf
下的.json
、.py
和.tiktoken
類型的檔案,拷貝至/mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1
目錄下,以保證模型可以正常使用。重要請注意,無需複製pytorch_model.bin.index.json檔案。
步驟六:部署及調用模型服務
完成離線推理並評估完成模型效果後,您可以將轉換為HuggingFace格式的模型部署為線上服務,並在實際的生產環境中調用,從而進行推理實踐。具體操作步驟如下:
部署模型服務
進入模型線上服務頁面。
登入PAI控制台。
在左側導覽列單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應工作空間內。
在工作空間頁面的左側導覽列選擇模型部署>模型線上服務(EAS),進入模型線上服務(EAS)頁面。
在模型線上服務(EAS)頁面,單擊部署服務,在自訂模型部署地區,單擊自訂部署。
在部署服務頁面配置以下關鍵參數,其他參數取預設配置即可。
參數
描述
模型服務資訊
服務名稱
自訂模型服務名稱,同地區內唯一。本方案配置為:test_qwen。
部署方式
本方案選擇:鏡像部署AI-Web應用。
鏡像選擇
選擇鏡像地址,在本文框中配置鏡像地址
pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/llm-inference:vllm-0.2.1-v4
,並選中閱讀並同意PAI服務專用協議。模型配置
單擊填寫模型配置,配置模型地址。
選擇NAS掛載,並配置以下參數:
NAS掛載點:選擇建立資料集使用的NAS檔案系統和掛載點。
NAS源路徑:配置為存放在NAS中的轉換後的HuggingFace格式模型的路徑。本方案配置為
/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1
。掛載路徑:指定掛載後的路徑,本方案配置為:
/qwen-7b
。
運行命令
運行命令配置為
nohup python -m fastchat.serve.controller > tmp1.log 2>&1 & python -m fastchat.serve.gradio_web_server_pai --model-list-mode reload > tmp2.log 2>&1 & python -m fastchat.serve.vllm_worker --model-path /qwen-7b --tensor-parallel-size 1 --trust-remote-code
。其中:
--model-path:需要與模型配置中的掛載路徑一致。
--tensor-parallel-size:模型張量切分的數量,需要根據GPU的卡數進行調整。7B模型配置為1;72B模型配置為2。
連接埠號碼配置為:7860。
資源部署資訊
資源群組種類
本方案選擇靈駿智算資源。
Quota選擇
選擇已建立的靈駿智算資源的資源配額。
執行個體數
根據模型和選擇的資源情況進行配置。以7b模型為例,執行個體數配置為1,每個執行個體使用的資源配置為:
CPU:16。
記憶體(MB):64000。
GPU:1。
專用網路配置
VPC
配置好NAS掛載點後,系統將自動匹配與預設的NAS檔案系統一致的VPC、交換器和安全性群組。
交換器
安全性群組名稱
單擊部署。
當服務狀態變為運行中時,表明服務部署成功。
調用服務
服務部署成功後,您可以調用服務進行推理實踐,具體操作步驟如下:
在服務列表中,單擊目標服務的服務方式列下的查看Web應用。
在WebUI頁面中,進行推理模型推理。