最近有用戶展示了一種在 48GB GPU RAM 上訓練大模型(例如 Llama 2 70B)的方法。此外,它可以在多個 GPU 上運行,因此可以在 2X 4090 實例上訓練模型!
新的fsdp_qlora開源軟件有許多訓練選項和示例。該軟件基于兩個重要理念:
QLoRA(量化 LoRA)結(jié)合了量化(使用更少的位來存儲模型權重)和 LoRA(低秩自適應,將小型可訓練矩陣添加到凍結(jié)的基礎模型)。這允許使用帶有可訓練 LoRA 適配器的量化基礎模型來訓練大于 GPU 內(nèi)存的模型。但是,QLoRA 仍然存在局限性,例如需要昂貴的 GPU 并且由于內(nèi)存限制而限制序列長度和批處理大小。
FSDP(完全分片數(shù)據(jù)并行)是由 Meta 開發(fā)的一個庫,它可以有效地將大型模型拆分到多個 GPU 上,從而允許同時使用它們。它改進了之前的黃金標準 DDP(分布式數(shù)據(jù)并行),后者要求完整模型適合每個 GPU。通過將模型參數(shù)分片到多個 GPU,F(xiàn)SDP 可以訓練超出單個 GPU 內(nèi)存的大型模型。
本指南將向您展示如何在捷智算平臺上租用 2X 實例以按需運行該軟件。
如何在捷智算平臺2X 3090/4090 實例上運行 fsdp_qlora
捷智算平臺有大量 RTX 3090 和 RTX 4090 GPU,非常適合運行 fsdp_qlora。您需要一個帶有積分的捷智算平臺帳戶。
創(chuàng)建您的捷智算帳戶,添加信用并在本地機器上安裝。
設置捷智算平臺帳戶并驗證您的電子郵件地址。向您的帳戶添加一些用于 GPU 租賃的信用額度。然后安裝。
搜索捷智算算力市場
我們需要找到合適的 GPU。根據(jù)我的測試,訓練 Llama 70B 需要 200GB 的系統(tǒng) RAM。此查詢將返回適合 2X 4090 實例的按需 GPU 優(yōu)惠,按下載帶寬排序
對于 2X 4090 實例
vastai search offers "gpu_name=RTX_4090 cpu_ram>=130 disk_space>140 num_gpus=2" -o "inet_down-"
對于 2X 3090 實例
vastai search offers "gpu_name=RTX_3090 cpu_ram>=130 disk_space>140 num_gpus=2" -o "inet_down-"
創(chuàng)建捷智算平臺實例
優(yōu)惠列表將包含大量有關可用機器的詳細信息。要選擇一個,您將需要優(yōu)惠 ID。然后在創(chuàng)建命令中使用該 ID 以及 Pytorch Cuda Devel 模板哈希。
此命令將根據(jù)提供的報價創(chuàng)建一個實例,使用該模板并分配 200GB 的磁盤。
將 XXXXXXX 替換為來自市場的優(yōu)惠 ID。
vastai create instance XXXXXXX --template_hash e4c5e88bc289f4eecb0c955c4fe7430d --disk 200
通過 SSH 進入捷智算平臺實例
等待幾分鐘,讓實例啟動。您可以使用 WebUI通過單擊 >_ 按鈕獲取直接 SSH 命令。
要通過 SSH 連接,您只需使用從實例卡復制的命令。它看起來類似于以下內(nèi)容:
ssh -p <port> <sshURL> -L 8080:localhost:8080
安裝 fsdp_qlora 并登錄 Hugging Face
git clone https://github.com/AnswerDotAI/fsdp_qlora
pip install llama-recipes fastcore --extra-index-url https://download.pytorch.org/whl/test/cu118
pip install bitsandbytes>=0.43.0
pip install wandb
登錄 Hugging Face,粘貼你的 API 密鑰來下載模型
huggingface-cli login
可選:登錄 wandb 以啟用 Weights and Balances 日志記錄
wandb login
可選擇設置 HQQ
HQQ 是一種快速且準確的模型量化器。它可以代替 bitsandbytes 使用。如果您想使用它,您需要先安裝它。
git clone https://github.com/mobiusml/hqq.git
安裝 HQQ
cd hqq && pip install .
訓練模型
有關完整選項,請查看Github repo。此示例將使用 hqq_lora 對 Llama 70B 進行微調(diào)。
例如:微調(diào) Llama 2 70B,上下文長度為 512
cd ~/fsdp_qlora
python train.py
--model_name meta-llama/Llama-2-70b-hf
--batch_size 2
--context_length 512
--precision bf16
--train_type qlora
--use_gradient_checkpointing true
--use_cpu_offload true
--dataset alpaca
--reentrant_checkpointing true
故障排除
在某些情況下,系統(tǒng)似乎僅在 CPU 上運行。 GPU 可能無法被識別。 監(jiān)控fsdp_qlora repo以獲取幫助。
對于與實例或使用捷智算平臺相關的任何問題,請點擊捷智算平臺右下角的網(wǎng)站支持聊天以獲得即時支持。
有時,它可以幫助導出 cuda 可見設備,以幫助解決 GPU 無法加載且 CPU 完成所有工作的問題。
export CUDA_VISIBLE_DEVICES=0,1