概述
本指南旨在為用戶提供一套全面、高效的模型訓練最佳實踐,涵蓋從環境登錄到多機分布式訓練的全過程。通過系統化的步驟指引,用戶可以快速熟悉并掌握在平臺上進行模型訓練的操作流程,充分利用平臺的強大工具,完成大模型的高效訓練任務。無論是單機訓練還是多機分布式訓練,本指南均提供了詳細的操作步驟與注意事項,幫助用戶快速上手并解決可能遇到的問題。
前置條件
執行本文操作之前, 請完成以下準備工作:
注冊天翼云賬號,并完成實名認證。
確保天翼云賬戶余額大于100元。
說明
為了方便演示,本文中涉及資源開通的情形,均默認選擇按量付費模式。
平臺體驗:
環境介紹:本次使用昇騰910B環境進行操作
CPU: 鯤鵬920 4*48=192
內存:1536GB
NPU: 昇騰910B * 8
主機(風冷機):Atlas 800A2
訓練準備
開發機
在進行大規模模型訓練之前,確保所有的開發環境、模型代碼、依賴庫、權重文件以及數據集都已準備妥當是至關重要的一步。通過平臺提供的開發機工具,您可以輕松實現可視化的IDE操作,簡化訓練環境的搭建與管理。
1.配置模型開發任務
先創建模型開發IDE任務,按照如下步驟展開操作:
2.打開IDE
提交任務后,點擊“啟動”按鈕,任務狀態將依次顯示啟動中->環境準備中->運行中(如果長時間(>1min)界面狀態未更新, 可以使用F5手動刷新界面),當狀態顯示為運行中后,點擊操作欄“打開”按鈕。
3.打開終端
打開后,顯示vscode界面如下,按照下圖步驟打開terminal運行終端:
左側文件管理器中顯示了當前集群的共享存儲空間/work/share,用戶可在此創建文件夾,確保所有節點對文件的訪問。用戶還可以在終端中進入共享存儲目錄,執行命令行操作。
4.鏡像制作
您可以輕松將開發機中的運行環境保存為鏡像,通過保存鏡像,您不僅能夠在日后快速復用該開發環境,還可以將其應用到多節點訓練任務中,確保訓練環境的一致性與穩定性。這種方式能夠避免因環境差異導致的問題,實現從單機開發到多機分布式訓練的無縫銜接。同時,鏡像化管理還能在團隊協作中發揮重要作用,便于其他成員直接使用統一環境,提升整體研發效率。
填寫鏡像名稱與版本號后,點擊“確定”按鈕。
在左側“鏡像管理”選項卡中可查看鏡像制作進度。
鏡像制作完成后,下次創建開發機或訓練任務時即可選擇該自定義鏡像。
模型準備
1.代碼下載
將工程代碼、第三方庫下載,并切換到對應的版本號。
git clone //gitee.com/ascend/MindSpeed-LLM.git
git clone //github.com/NVIDIA/Megatron-LM.git
# 【可替換】國內加速: git clone //gitdl.cn///github.com/NVIDIA/Megatron-LM.git
cd Megatron-LM
git checkout core_r0.6.0
cp -r megatron ../MindSpeed-LLM/
cd../MindSpeed-LLM
git checkout 1.0.RC2
mkdir logs
mkdir model_from_hf
mkdir dataset
mkdir ckpt2.環境搭建
安裝加速包和其他依賴。
git clone //gitee.com/ascend/MindSpeed.git
cd MindSpeed
git checkout 2b0edd2
pip install -e .
cd..
pip install -r requirements.txt3.權重下載
通過 ModelScope 工具下載模型權重,例如:Llama-2-7b-hf 權重:
cd ./model_from_hf/
pip install modelscope
modelscope download --model shakechen/Llama-2-7b-hf --local_dir ./llama-2-7b-hf
cd..4.權重轉換
將Huggingface格式的權重轉換為可運行的切分后的megatron格式權重。
python tools/checkpoint/convert_ckpt.py \
--model-type GPT \
--loader llama2_hf \
--saver megatron \
--target-tensor-parallel-size 1\
--target-pipeline-parallel-size 2\
--load-dir ./model_from_hf/llama-2-7b-hf/ \
--save-dir ./model_weights/llama-2-7b-hf-v0.1-tp1-pp2/ \
--tokenizer-model ./model_from_hf/llama-2-7b-hf/tokenizer.model運行成功后,終端顯示如下信息:
數據集準備
1.數據集下載
使用 wget 工具從指定地址下載數據集文件。以下命令行下載 alpaca 數據集為例:
# 下載數據
cd ./dataset
wget //hf-mirror.com/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet
cd..
# 【備選】使用模樂社區下載權重
# apt install git-lfs
# git lfs install
# git clone //modelers.cn/MindSpore-Lab/llama2-7b-hf.git此過程會將數據集文件存儲到指定目錄中,下載完成后請檢查文件完整性,為后續的數據預處理環節做好準備。
2.數據集預處理
下載完成后,需對原始數據集進行預處理,以便適配模型訓練的需求。以下是預處理的關鍵步驟:
# 處理數據
mkdir ./dataset/llama-2-7b-hf/
python ./tools/preprocess_data.py \
--input ./dataset/train-00000-of-00001-a09b74b3ef9c3b56.parquet \
--tokenizer-name-or-path ./model_from_hf/llama-2-7b-hf/ \
--output-prefix ./dataset/llama-2-7b-hf/alpaca \
--workers 4\
--log-interval 1000\
--tokenizer-type PretrainedFromHF運行完成后,終端顯示如下信息:
通過以上步驟,您已成功將原始數據集轉換為可直接用于訓練的數據格式,此時也可以在文件管理器中看到生成的數據預處理文件。
模型訓練
開發機-單機訓練
開發機訓練是模型開發過程中快速驗證代碼和訓練流程的重要環節。通過開發機訓練,可以高效完成模型調試和小規模實驗,以下是開發機模型訓練的操作指南。
1.訓練腳本準備
在完成環境和權重準備后,可以通過以下步驟啟動開發機的模型訓練任務:修改examples/llama2/pretrain_llama2_7b_ptd.sh腳本
# 根據實際情況配置權重保存、權重加載、詞表、數據集路徑
CKPT_SAVE_DIR="./ckpt/llama-2-7b"#新權重保存路徑
DATA_PATH="./dataset/llama-2-7b-hf/alpaca_text_document"#數據集路徑
TOKENIZER_MODEL="./model_from_hf/llama-2-7b-hf/tokenizer.model"#詞表路徑
CKPT_LOAD_DIR="./model_weights/llama-2-7b-hf-v0.1-tp1-pp2"#權重加載路徑可直接在VScode中,使用文本編輯其中進行修改,文本編輯器內的內容會自動保存更改,無需每次手動保存。
2.配置分布式參數
單機 8 卡訓練參數示例:
GPUS_PER_NODE=8
MASTER_ADDR=localhost
MASTER_PORT=6000
NNODES=1
NODE_RANK=0
WORLD_SIZE=$(($GPUS_PER_NODE * $NNODES))3.啟動訓練
在終端的MindSpeed-LLM工作目錄下直接執行訓練腳本。
bash examples/llama2/pretrain_llama2_7b_ptd.sh說明
由于原框架問題,第一次運行失敗的話,可以嘗試重復啟動一下。
訓練任務啟動后,終端將實時打印訓練日志。
訓練任務-多機訓練
多節點訓練是提升模型訓練效率、實現大規模分布式計算的關鍵方式。借助平臺提供的訓練任務工具,通過動態分配計算資源、自動化參數配置和高效的資源管理,能夠快速完成大規模模型的分布式訓練。以下是多節點訓練的詳細操作指南。
1.訓練腳本準備
多節點訓練的腳本與單節點訓練腳本基本一致,僅需針對分布式參數部分進行相應調整。
復制單節點訓練腳本。
# 參考單機訓練腳本拷貝出一份多機訓練腳本
cpexamples/llama2/pretrain_llama2_7b_ptd.shexamples/llama2/pretrain_llama2_7b_multinodes.sh修改分布式參數,在腳本中,調整以下配置:
# examples/llama2/pretrain_llama2_7b_multinodes.sh
GPUS_PER_NODE=8
DISTRIBUTED_ARGS="
--nproc_per_node $GPUS_PER_NODE \
--nnodes $PET_NNODES \
--node_rank $PET_NODE_RANK \
--master_addr $PET_MASTER_ADDR \
--master_port $PET_MASTER_PORT
"參數說明
$GPUS_PER_NODE:每個節點的 GPU 數量,由用戶自行配置。
$NNODES:總節點數,由用戶自行配置。
$PET_NNODES、$PET_NODE_RANK、$PET_MASTER_ADDR、$PET_MASTER_PORT:由平臺提供的系統變量自動配置。
2.創建任務
多節點集群訓練可使用訓練任務工具創建多機多卡訓練任務,創建任務可通過以下兩種方式創建。
方法一:通過模型開發任務創建
在模型開發任務頁面中創建訓練任務,系統會自動選擇與開發機一致的鏡像版本,保證環境一致性。
方法二:通過訓練任務工具創建
打開平臺左側“訓練任務”選項卡,點擊“新建任務”按鈕。
3.配置任務
兩種方法均會進入任務創建頁面。
啟動命令:
cd /work/share/demo/MindSpeed-LLM;
bash examples/llama2/pretrain_llama2_7b_multinodes.sh;注意
此模式下,不要打開容錯訓練開關!
完成所有配置后,點擊“提交”按鈕,您的訓練任務將被創建并開始執行。
4.監控任務
若訓練任務成功拉起,任務狀態變為運行中。
點擊日志按鈕,可實時查看所有節點的訓練日志,支持篩選單節點日志或查看全量日志,方便定位問題。
若啟動命令存在錯誤,任務無法正常啟動,可以進入“事件”頁面查看錯誤原因是否存在資源不足、網絡超時等提示。或者檢查日志中,根據具體報錯情況,調整模型配置或訓練腳本,并重新提交任務。
結語
通過本文檔的實踐操作,用戶可以熟練掌握平臺模型訓練的關鍵流程,包括環境搭建、代碼管理、鏡像管理、數據處理、權重轉換以及單機和多機訓練等核心任務。在實際操作中,如果遇到任何問題,可以結合日志信息和平臺提供的工具進行排查和優化。隨著平臺功能的持續升級和優化,相信在未來,用戶將能夠更加高效地完成大模型的訓練任務,并不斷探索和應用前沿的人工智能技術。