最近有用户展示了一种在 48GB GPU RAM 上训练大模型(例如 Llama 2 70B)的方法。此外,它可以在多个 GPU 上运行,因此可以在 2X 4090 实例上训练模型!
新的fsdp_qlora开源软件有许多训练选项和示例。该软件基于两个重要理念:
QLoRA(量化 LoRA)结合了量化(使用更少的位来存储模型权重)和 LoRA(低秩自适应,将小型可训练矩阵添加到冻结的基础模型)。这允许使用带有可训练 LoRA 适配器的量化基础模型来训练大于 GPU 内存的模型。但是,QLoRA 仍然存在局限性,例如需要昂贵的 GPU 并且由于内存限制而限制序列长度和批处理大小。
FSDP(完全分片数据并行)是由 Meta 开发的一个库,它可以有效地将大型模型拆分到多个 GPU 上,从而允许同时使用它们。它改进了之前的黄金标准 DDP(分布式数据并行),后者要求完整模型适合每个 GPU。通过将模型参数分片到多个 GPU,FSDP 可以训练超出单个 GPU 内存的大型模型。
本指南将向您展示如何在捷智算平台上租用 2X 实例以按需运行该软件。
如何在捷智算平台2X 3090/4090 实例上运行 fsdp_qlora
捷智算平台有大量 RTX 3090 和 RTX 4090 GPU,非常适合运行 fsdp_qlora。您需要一个带有积分的捷智算平台帐户。
创建您的捷智算帐户,添加信用并在本地机器上安装。
设置捷智算平台帐户并验证您的电子邮件地址。向您的帐户添加一些用于 GPU 租赁的信用额度。然后安装。
搜索捷智算算力市场
我们需要找到合适的 GPU。根据我的测试,训练 Llama 70B 需要 200GB 的系统 RAM。此查询将返回适合 2X 4090 实例的按需 GPU 优惠,按下载带宽排序
对于 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-"
创建捷智算平台实例
优惠列表将包含大量有关可用机器的详细信息。要选择一个,您将需要优惠 ID。然后在创建命令中使用该 ID 以及 Pytorch Cuda Devel 模板哈希。
此命令将根据提供的报价创建一个实例,使用该模板并分配 200GB 的磁盘。
将 XXXXXXX 替换为来自市场的优惠 ID。
vastai create instance XXXXXXX --template_hash e4c5e88bc289f4eecb0c955c4fe7430d --disk 200
通过 SSH 进入捷智算平台实例
等待几分钟,让实例启动。您可以使用 WebUI通过单击 >_ 按钮获取直接 SSH 命令。
要通过 SSH 连接,您只需使用从实例卡复制的命令。它看起来类似于以下内容:
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 进行微调。
例如:微调 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
故障排除
在某些情况下,系统似乎仅在 CPU 上运行。 GPU 可能无法被识别。 监控fsdp_qlora repo以获取帮助。
对于与实例或使用捷智算平台相关的任何问题,请点击捷智算平台右下角的网站支持聊天以获得即时支持。
有时,它可以帮助导出 cuda 可见设备,以帮助解决 GPU 无法加载且 CPU 完成所有工作的问题。
export CUDA_VISIBLE_DEVICES=0,1