
Transformers Generate 功能介紹
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
conda create -n Test01 python=3.10 anaconda
conda activate Test01
# 將conda環境加入PATH和LD_LIBRARY_PATH中,從而可以優先利用conda安裝的程序
export LD_LIBRARY_PATH=~/anaconda3/envs/Test01/lib/:$LD_LIBRARY_PATH
export PATH=~/anaconda3/envs/Test01/bin:$PATH
conda install git
git clone https://github.com/microsoft/DeepSpeedExamples.git
cd DeepSpeedExamples/applications/DeepSpeed-Chat/
# 安裝依賴
pip install -r requirements.txt
最近這個開發庫更新得非常頻繁,所以你下載的最新版本可能與我在視頻中介紹的內容不一致。以下是視頻中所使用的版本:
https://github.com/TechDIYLife/DeepSpeedExamples20230415.git
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
常見問題:
python
>>> import torch
>>> torch.cuda.is_available()
True
>>> torch.cuda.device_count()
1
>>> torch.cuda.current_device()
0
>>> torch.cuda.device(0)
<torch.cuda.device at 0x7efce0b03be0>
>>> torch.cuda.get_device_name(0)
'GeForce GTX 950M'
~/.cache/torch_extensions
目錄下的緩存文件參考網頁說明:https://www.deepspeed.ai/getting-started/
ChatGPT 的訓練過程共分為四個步驟:
其中,階段(a)的 GPT-3.5 或 GPT-4 預訓練部分是計算量最大的階段。這不僅需要大量的 GPU(幾十到數百個),而且訓練時間非常長(數月),因此通常只有大型企業才能進行訓練。在本實例中,我們使用了 Facebook 公開的 opt 系列預訓練模型,并主要針對 b、c、d 三個步驟進行訓練。這三個步驟分別對應案例中的 Step 1、2、3。
DS-chat代碼位于 applications/DeepSpeed-Chat 目錄下,下面是主要程序的結構,詳細解釋請觀看視頻中的解說:
- train.py # 入口程序
- training # 訓練腳本
- step1_supervised_finetuning # 第一步訓練
- evaluation_scripts # 第一步訓練完成后評價用
- training_scripts # 模型訓練腳本
- README.md # 說明文檔
- main.py # 主程序,訓練過程的實現細節
- prompt_eval.py # 評價主程序
- step2_reward_model_finetuning # 第二步訓練
- 省略
- step3_rlhf_finetuning # 第三步訓練
- 省略
- utils 模型訓練,評價的相關函數庫
- inference # 測試,評價代碼
模型訓練調用過程(以1.3b模型為例)
train.py
training/step1_supervised_finetuning/training_scripts/single_node/run_1.3b.sh
Facebook opt系列模型
本實例中使用的預訓練模型是 facebook opt系列模型,根據OPT論文介紹,OPT-175B模型與GPT-3有類似的性能。
OPT:Open Pre-trained Transformer Language Models
論文地址:https://arxiv.org/abs/2205.01068
模型在Huggingface上的地址:
https://huggingface.co/facebook/opt-125m
https://huggingface.co/facebook/opt-350m
https://huggingface.co/facebook/opt-1.3b
https://huggingface.co/facebook/opt-6.7b
https://huggingface.co/facebook/opt-13b
https://huggingface.co/facebook/opt-30b
https://huggingface.co/facebook/opt-66b
如果要使用最大的175B的模型,需要申請,獲得授權后才能使用。
申請地址:https://forms.gle/dag8g7nKiR4o4VZq5
任務說明: 使用標定的數據對預訓練模型進行微調。
啟動訓練:
通過執行下面的命令,就可以開啟模型的訓練。 在執行以下命令以開始模型訓練之前,請確保設置了 CUDA 并激活了 conda 運行環境(請參考【2 開發環境安裝】)。
python3 train.py --step 1 --deployment-type single_gpu #單GPU訓練
python3 train.py --step 1 --deployment-type single_node #多GPU訓練
python3 train.py --step 1 --deployment-type multi_node #多Node訓練
在上述三種方式中,single_gpu 只適合訓練較小的模型,而 single_node 和 multi_node 更適合訓練較大的模型。第一次運行時,建議使用 single_gpu,因為在這種模式下,輸出的錯誤信息會更詳細。如果遇到 GPU 內存不足的問題,可以嘗試使用 single_node 和 multi_node 來訓練。如果問題仍然存在,需要手動調整 batch-size。
此步驟主要進行:
~/.cache/huggingface/hub/models--facebook--opt-1.3b
Dahoas/rm-static # 對話(prompt,response,chosen,rejected)
Dahoas/full-hh-rlhf # 對話(prompt,response,chosen,rejected)
Dahoas/synthetic-instruct-gptj-pairwise #對話(prompt,chosen,rejected)
yitingxie/rlhf-reward-datasets # 對話(prompt,chosen,rejected)
openai/webgpt_comparisons # 帶人工打分的數據,comparisons with human feedback,19,578 comparisons)
stanfordnlp/SHP # 18個領域的385k 人類標注數據
評價與測試:
打開文件 run_prompt.sh
添加 baseline 模型,和 finetune 后的模型:
export CUDA_VISIBLE_DEVICES=0
python prompt_eval.py \
--model_name_or_path_baseline facebook/opt-1.3b \
--model_name_or_path_finetune ../../output/actor-models/1.3b
評價程序會調用 prompt_eval.py
來分別輸出 baseline 和 finetune 后模型的結果。
要執行此代碼,需要切換到 step1_supervised_finetuning 目錄下。
cd training/step1_supervised_finetuning
bash evaluation_scripts/run_prompt.sh
常見問題:
export CUDA_VISIBLE_DEVICES=0,1 # 2塊GPU
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 # 8塊GPU
export MASTER_ADDR=127.0.0.1 # 多node時,需要設置為主node的IP或者機器名
export MASTER_PORT=29701
以上設置,也可以在 run1.3b.sh
文件中進行設置,例如:
CUDA_VISIBLE_DEVICES=0,1 deepspeed --master_addr=127.0.0.1 --master_port=29701 main.py
原因是由于模型被finetune以后,Token對應的詞典數量發生了變化,導致輸入數據維度變化了(這應該是個bug,在輸入端應盡量保持與預訓練模型一致)。應對方法,打開文件 prompt_eval.py,增加新的 config 讀取腳本,并把來源模型從 baseline 模型中修改為finerune后的模型:
config = AutoConfig.from_pretrained(args.model_name_or_path_finetune) # 新增
model_fintuned = get_model(config, args.model_name_or_path_finetune, tokenizer)
chat.py
命令(需要移動到 DeepSpeed-Chat 目錄下),執行方式如下:python chat.py --path output/actor-models/1.3b
任務介紹: 在第三步(Step3)中,強化學習階段需要使用獎勵模型。獎勵模型會對模型生成的答案進行打分,Step3 的強化訓練會根據這些分數對模型進行優化,從而使最終模型生成更高分的答案。獎勵模型同樣基于預訓練模型進行訓練,在這里我們使用了 350M 的 opt 模型。
啟動訓練:
啟動訓練方法與前面類似:
python3 train.py --step 2 --deployment-type single_gpu #單GPU訓練
python3 train.py --step 2 --deployment-type single_node #多GPU訓練
python3 train.py --step 2 --deployment-type multi_node #多Node訓練
訓練數據:
Dahoas/rm-static
Dahoas/full-hh-rlhf
Dahoas/synthetic-instruct-gptj-pairwise
yitingxie/rlhf-reward-datasets
openai/webgpt_comparisons
stanfordnlp/SHP
評價與測試:
步驟如下:
--model_name_or_path
參數。step2_reward_model_finetuning
下bash evaluation_scripts/run_eval.sh
常見錯誤:
任務介紹:
RLHF 是基于人類反饋的強化學習的縮寫。根據官方介紹,此步訓練面臨兩個主要挑戰:
在此實例中,通過將 DeepSpeed 訓練和推理功能整合為一個統一的混合引擎(Hybrid Engine)來應對這些挑戰。更多詳細信息可以參考官方說明。
在此步驟首次運行時,會安裝并編譯新的工具(transformer_inference)。如果編輯過程出現問題,建議升級 PyTorch 和 CUDA 版本。在我的環境下,使用 PyTorch 2.0 和 CUDA 11.7 下可以成功編譯。
啟動訓練:
python3 train.py --step 3 --deployment-type single_gpu #單GPU訓練
python3 train.py --step 3 --deployment-type single_node #多GPU訓練
python3 train.py --step 3 --deployment-type multi_node #多Node訓練
此步訓練后的模型被存儲在 output/step3-models/1.3b/
下。
常見問題:
--per_device_train_batch_size 8 --per_device_mini_train_batch_size=8
使用 chat.py
命令(需要移動到 DeepSpeed-Chat 目錄下)進行評價與測試。 執行方式如下:
python chat.py --path output/step3-models/1.3b/actor
上面的程序可以啟動13b的模型,但是66b的模型無法成功運行。
備注:
這套工具剛剛發布不久,最近作者和貢獻者們還在頻繁的更新中。
更多的信息,請關注其github倉庫中的動態。
文章轉載自: 專題:大模型訓練入門實戰