项目代码:
https://github.com/jiaweizzhao/galorehttps://github.com/jiaweizzhao/galore
参考博客:
https://zhuanlan.zhihu.com/p/686686751
创建环境
基础环境配置如下:
操作系统: CentOS 7 CPUs: 单个节点具有 1TB 内存的 Intel CPU,物理CPU个数为64,每颗CPU核数为16 GPUs: 8 卡 A800 80GB GPUs Python: 3.10 (需要先升级OpenSSL到1.1.1t版本(点击下载OpenSSL),然后再编译安装Python),点击下载Python NVIDIA驱动程序 版本: 515.125.06,根据不同型号选择不同的驱动程序,点击下载。 CUDA工具包: 11.8,点击下载conda create -n GaLore python=3.10
安装依赖包
pip install -r requirements.txt
其中,requirements.txt 文件为:
torch==2.1.0
transformers==4.31.0
tokenizers
datasets==2.14.6
peft
wandb
loguru
nvitop
lion-pytorch
matplotlib
bitsandbytes
scipy
scikit-learn
evaluate
pip install tensorly
注意:Pytorch 需确保2.1.0以上,不然会报错。
数据集准备
本文使用 C4 数据集进行训练,C4 数据集是由 Google 提供的一个大型预训练数据集,用于训练语言模型。C4 数据集包含了数十亿个网页的内容,经过处理和清洗后形成了一个适合用于训练大型语言模型的数据集。这个数据集可以用于训练各种自然语言处理任务,如文本生成、文本分类
、语言建模等。语言建模
下载地址:https://huggingface.co/datasets/allenai/c4/tree/main/en由于数据集太大,这里只下载了一个文件大约356317条数据。
wandb 启用离线模式
启用离线模式后,wandb
将不会上传数据,但仍然会记录实验过程中的数据和结果。
wandb offline
# W&B offline. Running your script from this directory will only write metadata locally. Use wandb disabled to completely turn off W&B.
单张 4090 消费级显卡预训练 LLaMA-7B
接下来,使用单个 GPU(例如:NVIDIA RTX 4090)训练 7B 模型,您所需要做的就是指定 --optimizer=galore_adamw8bit_per_layer
,这会启用 GaLoreAdamW8bit
并进行每层权重更新。通过激活(梯度)检查点(activation checkpointing),您可以将在 NVIDIA RTX 4090 上测试的批量大小保持为 16。
执行命令:
CUDA_VISIBLE_DEVICES=3 torchrun --standalone --nproc_per_node 1 torchrun_main.py \
--model_config configs/llama_7b.json \
--lr 0.005 \
--galore_scale 0.25 \
--rank 1024 \
--update_proj_gap 500 \
--batch_size 16 \
--total_batch_size 512 \
--activation_checkpointing \
--num_training_steps 150000 \
--warmup_steps 15000 \
--weight_decay 0 \
--grad_clipping 1.0 \
--dtype bfloat16 \
--eval_every 1000 \
--single_gpu \
--optimizer galore_adamw8bit_per_layer
CUDA_VISIBLE_DEVICES=3 torchrun --standalone --nproc_per_node 1 torchrun_main.py --model_config configs/llama_7b.json --lr 0.005 --galore_scale 0.25 --rank 1024 --update_proj_gap 500 --batch_size 16 --total_batch_size 512 --activation_checkpointing --num_training_steps 150000 --warmup_steps 15000 --weight_decay 0 --grad_clipping 1.0 --dtype bfloat16 --eval_every 1000 --single_gpu --optimizer galore_adamw8bit_per_layer
好像是因为连不了外网所以没找到数据集:
解决方法,手动下载数据集,上传到服务器:
下载地址:https://huggingface.co/datasets/allenai/c4/tree/main/en
同样,模型也要提前下好,放在指定位置:
开始训练了,只是比较慢,显存开销在22G的样子:
总结
### 文章总结本文详细描述了如何为深度学习项目配置基础环境、安装必要的依赖包、准备数据集,并通过指定参数使用单张NVIDIA RTX 4090显卡进行LLaMA-7B模型预训练的过程。具体内容如下:
#### 1. **环境配置**
- **操作系统**:CentOS 7
- **硬件配置**:
- 单个节点拥有1TB内存
- Intel CPU(物理CPU个数64,每颗CPU核数16)
- 8块A800 80GB GPUs
- **软件配置**:
- **Python**:3.10版本,需先升级OpenSSL至1.1.1t再编译安装Python
- **NVIDIA驱动**:版本515.125.06
- **CUDA工具包**:版本11.8
- 使用Conda创建虚拟环境`galore`,并安装指定的Python版本和其他库
#### 2. **依赖包安装**
- 创建一个名为`galore`的conda环境,并指定Python版本为3.10。
- 安装`requirements.txt`中列出的依赖包,包括PyTorch、Transformers等深度学习库及辅助工具包。特别注意PyTorch版本需确保为2.1.0以上。
#### 3. **数据集准备**
- 使用C4数据集进行训练,该数据集包含数十亿个网页内容,适合大型语言模型训练。
- 由于C4数据集庞大,本文仅演示了下载数据集的一个子集(约356,317条数据)的方法。
#### 4. **wandb 离线模式启用**
- 通过命令`wandb offline`启用Weights & Biases(wandb)的离线模式,以便在没有网络连接时仍能记录实验数据和结果。
#### 5. **单张GPU预训练 LLaMA-7B 模型**
- 使用单个NVIDIA RTX 4090显卡进行模型训练,通过指定一系列参数如优化器、学习率等,以进行高效的模型训练。
- 使用`GaloreAdamW8bit`优化器并开启激活检查点技术来在资源受限的情况下保持较大的批量大小。
- 提供了详细的命令行示例,包括指定模型配置、学习率、梯度裁剪等重要选项。
#### 6. **注意事项**
- 由于某些环境可能无法直接访问外部资源下载数据集和模型文件,文章还提供了手动下载这些数据并上传到服务器的解决方案。
- 训练过程中需要较大的显存开销(示例中约为22GB),确保硬件资源充分支持训练过程。
本报告详细指导了从环境搭建到数据集准备,再到模型的具体训练步骤,为进行大规模深度学习实验提供了全面的参考。