阿里云PAI靈駿智算服務是面向大規模深度學習場景的智算產品,提供一站式的異構計算資源和AI工程化平臺。本方案將為您介紹如何使用阿里云PAI靈駿智算服務,以及基于Meta-Llama-3.1-8B的開源模型和Megatron的訓練流程,進行模型微調、離線推理驗證,并實現在線服務部署。
前提條件
本方案以Meta-Llama-3.1-8B模型為例,在開始執行操作前,請確認您已經完成以下準備工作:
已開通PAI(DSW、DLC、EAS)并創建了默認的工作空間。具體操作,請參見開通PAI并創建默認工作空間。
已購買靈駿智算資源并創建資源配額。具體操作,請參見新建資源組并購買靈駿智算資源和靈駿智算資源配額。不同模型參數量支持的資源規格列表如下,請根據您實際使用的模型參數量選擇合適的資源,關于靈駿智算資源的節點規格詳情,請參見靈駿Serverless版機型定價詳情。
模型參數量
全參數訓練資源
推理資源(最低)
Megatron訓練模型切片
8B
8卡*gu7xf、8卡*gu7ef
1*V100(32 GB顯存)、1*A10(22 GB顯存)
TP1、PP1
70B
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。
數據集:單擊添加,選擇已創建的數據集,并使用默認掛載路徑。
鏡像:在鏡像地址頁簽,配置鏡像為
dsw-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pai-megatron-patch:24.07
。
如果使用RAM用戶完成以下相關操作,需要為RAM用戶授予DSW、DLC或EAS的操作權限。具體操作,請參見云產品依賴與授權:DSW、云產品依賴與授權:DLC或云產品依賴與授權:EAS。
使用限制
僅支持在華北6(烏蘭察布)和新加坡地域使用該最佳實踐。
步驟一:下載模型訓練工具源代碼
進入PAI-DSW開發環境。
登錄PAI控制臺。
在頁面左上方,選擇使用服務的地域:華北6(烏蘭察布)。
在左側導航欄單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應工作空間內。
在左側導航欄,選擇 。
單擊目標實例操作列下的打開。
在頂部菜單欄單擊Terminal,在該頁簽中單擊創建terminal。
在Terminal中執行以下命令,下載Pai-Megatron-Patch,并安裝訓練環境所需依賴。
cd /mnt/workspace/ # 方式一:通過開源網站獲取訓練代碼。 git clone --recurse-submodules https://github.com/alibaba/Pai-Megatron-Patch.git cd Pai-Megatron-Patch # 目前LLama3.1已支持使用FlashAttention-3加速計算,但只能在Hopper架構的GPU卡上進行運算。如果需要在H卡上使用Flash Attention-3,請在DSW上的容器中安裝上Flash Attention3并保存鏡像。 pip install "git+https://github.com/Dao-AILab/flash-attention.git#egg=flashattn-hopper&subdirectory=hopper" python_path=`python -c "import site; print(site.getsitepackages()[0])"` mkdir -p $python_path/flashattn_hopper wget -P $python_path/flashattn_hopper https://raw.githubusercontent.com/Dao-AILab/flash-attention/main/hopper/flash_attn_interface.py
步驟二:準備Meta-Llama-3.1-8B模型
在DSW的Terminal中執行以下命令,下載Meta-Llama-3.1-8B模型。
cd /mnt/workspace
mkdir llama3-ckpts
cd llama3-ckpts
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/llama3-ckpts/Meta-Llama-3.1-8B.tgz
tar -zxf Meta-Llama-3.1-8B.tgz
步驟三:準備數據集
在DSW的Terminal中,執行以下命令,下載PAI已準備好的數據集。
cd /mnt/workspace
mkdir llama3-datasets
cd llama3-datasets
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/llama3-datasets/mmap_llama3_datasets_text_document.bin
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/llama3-datasets/mmap_llama3_datasets_text_document.idx
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/llama3-datasets/alpaca_zh-llama3-train.json
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/llama3-datasets/alpaca_zh-llama3-valid.json
步驟四:Megatron-Core訓練
您可以按照以下流程進行Megatron-Core訓練。在Llama3.1中,PAI已將預訓練和微調過程整合到run_mcore_llama3_1.sh腳本,對于不同的使用場景,二者各參數的意義有所不同。
Megatron-Core模型格式轉換
在Terminal中執行以下命令,使用PAI提供的模型轉換工具,可將Checkpoint無損轉換成Megatron-Core模型格式,并輸出到啟動參數(TARGET_CKPT_PATH=$3)配置的目標Checkpoint路徑中。
cd /mnt/workspace/Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/llama
bash hf2mcore_convertor_llama3_1.sh \
8B \
/mnt/workspace/llama3-ckpts/Meta-Llama-3.1-8B \
/mnt/workspace/llama3-ckpts/Meta-Llama-3.1-8B/mcore-tp4-pp2 \
4 \
2 \
false \
true \
false \
bf16
其中運行hf2mcore_convertor_llama3_1.sh腳本需要傳入的參數說明如下:
參數 | 描述 |
MODEL_SIZE=$1 | 設置模型參數,取值如下:
|
SOURCE_CKPT_PATH=$2 | 源Checkpoint路徑。 |
TARGET_CKPT_PATH=$3 | 目標Checkpoint路徑。 |
TP=$4 | 模型并行度。 |
PP=$5 | 流水并行度。 |
mg2hf=$6 | 是否執行mcore2hf轉換。 |
CHECK=$7 | 測試轉換前后模型逐層輸出是否一致。 |
CHECK_ONLY=$8 | 僅檢測模型輸出,不進行轉換。 |
PR=$9 | 精度設置,取值如下:
|
HF_CKPT_PATH=$10 | HF的Checkpoint的路徑??蛇x,當mg2hf=true時必須提供。 |
Megatron-Core預訓練
先在DSW單機環境中對訓練腳本進行調試,調試完成后,您便可以在DLC環境提交多機多卡的分布式訓練任務,訓練時長取決于您設定的訓練Tokens數量。任務執行完成后,模型文件將被保存至/mnt/workspace/output_mcore_llama3_1/
目錄。
DSW單機預訓練模型
在Terminal中使用以下命令對Meta-Llama-3.1-8B進行預訓練,代碼示例如下。
cd /mnt/workspace/Pai-Megatron-Patch/examples/llama3_1
sh run_mcore_llama3_1.sh \
dsw \
8B \
1 \
8 \
1e-5 \
1e-6 \
128 \
128 \
bf16 \
4 \
2 \
1 \
true \
true \
true \
false \
false \
false \
100000 \
/mnt/workspace/llama3-datasets/mmap_llama3_datasets_text_document \
/mnt/workspace/llama3-datasets/mmap_llama3_datasets_text_document \
/mnt/workspace/llama3-ckpts/Meta-Llama-3.1-8B/mcore-tp4-pp2 \
10000 \
100 \
/mnt/workspace/output_mcore_llama3_1
其中運行run_mcore_llama3_1.sh腳本,需要傳入的參數列表說明如下:
參數 | 描述 |
ENV=$1 | 配置運行環境:
|
MODEL_SIZE=$2 | 模型結構參數量級:8B、70B或405B。 |
BATCH_SIZE=$3 | 一次迭代一個數據并行內的樣本數。 |
GLOBAL_BATCH_SIZE=$4 | 一次迭代多個數據并行的總樣本數。 |
LR=$5 | 學習率。 |
MIN_LR=$6 | 最小學習率。 |
SEQ_LEN=$7 | 序列長度。 |
PAD_LEN=$8 | Padding長度。 |
PR=${9} | 訓練精度:fp16、bf16或fp8。 |
TP=${10} | 模型并行度。 |
PP=${11} | 流水并行度。 |
CP=${12} | 上下文并行度。 |
SP=${13} | 是否使用序列并行,取值如下:
|
DO=${14} | 是否使用Megatron版Zero-1降顯存優化器,取值如下:
|
FL=${15} | 是否優先使用Flash Attention,取值如下:
|
SFT=${16} | 是否執行微調,取值如下:
|
AC=${17} | 激活檢查點模式,取值如下:
|
OPTIMIZER_OFFLOAD=${18} | 是否啟用Offload optimizer,取值如下:
|
SAVE_INTERVAL=${19} | 保存CheckPoint文件的間隔。 |
DATASET_PATH=${20} | 訓練數據集路徑。 |
VALID_DATASET_PATH=${21} | 驗證數據集路徑。 |
PRETRAIN_CHECKPOINT_PATH=${22} | 預訓練模型路徑。 |
TRAIN_TOKENS=${23} | 訓練TOKEN或者Iter數。 |
WARMUP_TOKENS=${24} | 預熱TOKEN或者Iter數。 |
OUTPUT_BASEPATH=${25} | 訓練輸出日志文件路徑。 |
DLC分布式預訓練模型
在單機開發調試完成后,您可以在DLC環境中配置多機多卡的分布式任務。具體操作步驟如下:
進入新建任務頁面。
登錄PAI控制臺,在頁面上方選擇目標地域,并在右側選擇目標工作空間,然后單擊進入DLC。
在分布式訓練(DLC)頁面,單擊新建任務。
在新建任務頁面,配置以下關鍵參數,其他參數取默認配置即可。更多詳細內容,請參見創建訓練任務。
參數
描述
基本信息
任務名稱
自定義任務名稱。本方案配置為:test_llama3.1_dlc。
環境信息
節點鏡像
選中鏡像地址并在文本框中輸入
dsw-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pai-megatron-patch:24.07
。數據集
單擊自定義數據集,并配置以下參數:
自定義數據集:選擇已創建的NAS類型的數據集。
掛載路徑:配置為
/mnt/workspace/
。
啟動命令
配置以下命令,其中run_mcore_llama3_1.sh腳本輸入的啟動參數與DSW單機預訓練模型一致。
cd /mnt/workspace/Pai-Megatron-Patch/examples/llama3_1 sh run_mcore_llama3_1.sh \ dlc \ 8B \ 1 \ 8 \ 1e-5 \ 1e-6 \ 128 \ 128 \ bf16 \ 4 \ 2 \ 1 \ true \ true \ true \ false \ false \ false \ 100000 \ /mnt/workspace/llama3-datasets/mmap_llama3_datasets_text_document \ /mnt/workspace/llama3-datasets/mmap_llama3_datasets_text_document \ /mnt/workspace/llama3-ckpts/Meta-Llama-3.1-8B/mcore-tp4-pp2 \ 10000 \ 100 \ /mnt/workspace/output_mcore_llama3_1
資源信息
資源類型
選擇靈駿智算。
資源來源
選擇資源配額。
資源配額
本方案選擇已創建的靈駿智算資源的資源配額。
框架
選擇PyTorch。
任務資源
在Worker節點配置以下參數:
節點數量:2,如果需要多機訓練,配置節點數量為需要的機器數即可。
GPU(卡數):8
CPU(核數):90,且不能大于96
內存(GiB):1024
共享內存(GiB):1024
單擊確定,頁面自動跳轉到分布式訓練(DLC)頁面。當狀態變為已成功時,表明訓練任務執行成功。
Megatron-Core指令微調
先在DSW單機環境中對訓練腳本進行調試,調試完成后,您便可以在DLC環境提交多機多卡的分布式訓練任務,訓練時長取決于您設定的訓練迭代次數。任務執行完成后,模型文件將被保至/mnt/workspace/output_megatron_llama3/
目錄。
創建用于微調的idxmap數據集,詳情請參見sft_data_preprocessing。
準備好微調數據集后,進行模型微調。
DSW單機微調模型
將SFT開關設置為
true
即可進行指令微調。代碼示例如下:cd /mnt/workspace/Pai-Megatron-Patch/examples/llama3_1 sh run_mcore_llama3_1.sh \ dsw \ 8B \ 1 \ 8 \ 1e-5 \ 1e-6 \ 128 \ 128 \ bf16 \ 4 \ 2 \ 1 \ true \ true \ true \ true \ false \ false \ 100000 \ /mnt/workspace/llama3-datasets/path_to_your_dataset \ /mnt/workspace/llama3-datasets/path_to_your_dataset \ /path/to/pretraining/checkpoint \ 10000 \ 100 \ /workspace/output_mcore_llama3_1
其中運行run_mcore_llama3_1.sh腳本,需要將啟動參數DATASET_PATH=${20}、VALID_DATASET_PATH=${21}和PRETRAIN_CHECKPOINT_PATH=${22}配置的數據集和預訓練模型路徑替換為您的實際路徑,更多參數配置說明,請參見Megatron-Core預訓練。
DLC分布式微調模型
在DSW單機環境調試完成后,您可以在DLC環境中配置多機多卡分布式任務。提交DLC訓練任務時,啟動命令配置如下,其他參數配置詳情,請參見Megatron-Core預訓練。
cd /mnt/workspace/Pai-Megatron-Patch/examples/llama3_1 sh run_mcore_llama3_1.sh \ dlc \ 8B \ 1 \ 8 \ 1e-5 \ 1e-6 \ 128 \ 128 \ bf16 \ 4 \ 2 \ 1 \ true \ true \ true \ true \ false \ false \ 100000 \ /mnt/workspace/llama3-datasets/path_to_your_dataset \ /mnt/workspace/llama3-datasets/path_to_your_dataset \ /path/to/pretraining/checkpoint \ 10000 \ 100 \ /workspace/output_mcore_llama3_1
其中運行run_mcore_llama3_1.sh需要傳入的參數與DSW單機微調模型相同。
您也可以通過設置MP_DATASET_TYPE環境變量,使用JSON格式的數據集進行指令微調。
DSW單機微調模型
代碼示例如下:
export MP_DATASET_TYPE="raw"
cd /mnt/workspace/Pai-Megatron-Patch/examples/llama3_1
sh run_mcore_llama3_1.sh \
dsw \
8B \
1 \
8 \
1e-5 \
1e-6 \
128 \
128 \
bf16 \
4 \
2 \
1 \
true \
true \
true \
true \
false \
false \
100000 \
/mnt/workspace/llama3-datasets/alpaca_zh-llama3-train.json \
/mnt/workspace/llama3-datasets/alpaca_zh-llama3-valid.json \
/path/to/pretraining/checkpoint \
10000 \
100 \
/mnt/workspace/output_mcore_llama3_1
其中運行run_mcore_llama3_1.sh腳本,需要將啟動參數PRETRAIN_CHECKPOINT_PATH=${22}配置的預訓練模型路徑替換為您的實際路徑,更多參數配置說明,請參見Megatron-Core預訓練。
DLC分布式微調模型
在DSW單機環境調試完成后,您可以在DLC環境中配置多機多卡分布式任務。提交DLC訓練任務時,啟動命令配置如下,其他參數配置詳情,請參見Megatron-Core預訓練。
export MP_DATASET_TYPE="raw"
cd /mnt/workspace/Pai-Megatron-Patch/examples/llama3_1
sh run_mcore_llama3_1.sh \
dlc \
8B \
1 \
8 \
1e-5 \
1e-6 \
128 \
128 \
bf16 \
4 \
2 \
1 \
true \
true \
true \
true \
false \
false \
100000 \
/mnt/workspace/llama3-datasets/alpaca_zh-llama3-train.json \
/mnt/workspace/llama3-datasets/alpaca_zh-llama3-valid.json \
/path/to/pretraining/checkpoint \
10000 \
100 \
/mnt/workspace/output_mcore_llama3_1
其中運行run_mcore_llama3_1.sh需要傳入的參數與DSW單機微調模型相同。
步驟五:下游任務評估
您需要將已訓練好的Megatron-Core格式模型轉換為HuggingFace格式。具體操作步驟如下:
請將模型路徑
/mnt/workspace/llama3-ckpts/Meta-Llama-3.1-8B/mcore-tp4-pp2
中的JSON文件拷貝至mnt/workspace/output_mcore_llama3_1/checkpoint/pretrain-mcore-llama3-1-8B-****
目錄下,以保證模型可以正常使用。說明請替換為您的實際路徑。
在Terminal中執行以下命令,將訓練生成的模型轉換成Huggingface格式的模型。
cd /mnt/workspace/Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/llama bash hf2mcore_convertor_llama3_1.sh \ 8B \ /mnt/workspace/output_mcore_llama3_1/checkpoint/pretrain-mcore-llama3-1-8B-**** \ /mnt/workspace/llama3-ckpts/Meta-Llama-3.1-8B/hf-from-mg \ 4 \ 2 \ true \ true \ false \ bf16 \ /mnt/workspace/llama3-ckpts/Meta-Llama-3.1-8B
其中運行hf2mcore_convertor_llama3_1.sh腳本需要傳入的參數說明,請參見Megatron-Core模型格式轉換。
評估模型效果。
在Terminal中執行以下命令,下載評估數據。
# In container cd /workspace wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/evaluation-datasets/evaluate.tgz wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/evaluation-datasets/cmmlu.tgz wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/evaluation-datasets/ceval.tgz tar -xvzf cmmlu.tgz tar -xvzf ceval.tgz tar -xvzf evaluate.tgz
運行以下命令,對轉換后的模型進行評估。
cd /mnt/workspace/Pai-Megatron-Patch/LM-Evaluation-Harness-240310 accelerate launch --main_process_port 29051 -m lm_eval \ --model hf \ --model_args pretrained=/mnt/workspace/llama3-ckpts/Meta-Llama-3.1-8B/hf-from-mg,trust_remote_code=True \ --tasks cmmlu,ceval-valid \ --batch_size 16
步驟六:部署及調用在線模型服務
完成離線推理并評估完成模型效果后,您可以將轉換為Huggingface格式的模型部署為在線服務,并在實際的生產環境中調用,從而進行推理實踐。具體操作步驟如下:
部署模型服務
登錄PAI控制臺,在頁面上方選擇目標地域,并在右側選擇目標工作空間,然后單擊進入EAS。
單擊部署服務,然后在自定義模型部署區域,單擊自定義部署。
在自定義部署頁面配置以下關鍵參數,其他參數取默認配置即可。
參數
描述
基本信息
服務名稱
自定義模型服務名稱,同地域內唯一。本方案配置為:test_llama3_1_8b。
環境信息
部署方式
選擇鏡像部署,并選中開啟Web應用。
鏡像配置
選擇鏡像地址,在本文框中配置鏡像地址
eas-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/pai-eas/chat-llm-webui:3.0.5-llama3.1
。模型配置
選擇NAS類型的掛載方式,并配置以下參數:
選擇文件系統:選擇創建數據集使用的NAS文件系統。
文件系統掛載點:選擇創建數據集使用的掛載點。
文件系統路徑:配置為存放在NAS中的轉換后的Huggingface格式模型的路徑。本方案配置為
/llama3-ckpts/Meta-Llama-3.1-8B/hf-from-mg
。掛載路徑:指定掛載后的路徑,本方案配置為:
/llama3.1-8b
。
運行命令
配置為
python webui/webui_server.py --port=7860 --model-path=/llama3.1-8b --model-type=llama3
。其中配置的--model-path需要與模型配置中的掛載路徑一致。
端口號
配置為7860。
資源部署
資源類型
選擇公共資源。
部署資源
本方案以Llama3.1-8B模型為例,推薦使用實例規格ml.gu7i.c16m60.1-gu30,性價比高。
說明如果當前地域的資源不足,您還可以選擇A10(ecs.gn7i-c8g1.2xlarge)類型的資源規格。
專有網絡
專有網絡(VPC)
配置好NAS掛載點后,系統將自動匹配與預設的NAS文件系統一致的VPC、交換機和安全組。
交換機
安全組名稱
單擊部署。
當服務狀態變為運行中時,表明服務部署成功。
調用服務
通過WebUI調用模型服務
服務成功部署后,您可以使用WebUI對該服務進行調試操作。具體操作步驟如下:
在服務列表中,單擊目標服務的服務方式列下的查看Web應用。
在WebUI頁面中,進行推理模型推理。
通過API調用模型服務
當您在WebUI頁面調試好問答效果后,您可利用PAI所提供的API接口,將其集成到您的業務系統中。具體操作,請參見通過API調用EAS服務。
相關文檔
您也可以通過PAI-快速開始(PAI-QuickStart)部署和微調Llama-3系列模型。詳情請參見部署及微調Llama-3系列模型。