如何使用QLoRA和FSDP在2X RTX 4090上训练 70b 语言模型?
发布时间: 2024-08-06 14:16

最近有用户展示了一种在 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 实例以按需运行该软件。


如何使用QLoRA和FSDP在2X RTX 4090上训练 70b 语言模型?


如何在捷智算平台2X 3090/4090 实例上运行 fsdp_qlora


  1. 捷智算平台有大量 RTX 3090 和 RTX 4090 GPU,非常适合运行 fsdp_qlora。您需要一个带有积分的捷智算平台帐户。

  2. 创建您的捷智算帐户,添加信用并在本地机器上安装。

  3. 设置捷智算平台帐户并验证您的电子邮件地址。向您的帐户添加一些用于 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

粤公网安备 44030502006483号、 粤ICP备15047669号
  • 捷易科技联系人