FastChat 框架在 AutoDL 平台上全量微调和 PEFT 方式微调 LLMs

选择机器

暂且选择 A40 和 4090,支持 BF16 浮点格式,有两个地方需要注意:

  1. 硬盘可扩容空间,因为下载大模型很费空间需要额外扩容,免费空间根本不够用
  2. 最高 CUDA 优先选择 12.0,Pytorch 选择 2.0.0

在这里插入图片描述
记得扩容数据盘 100-400G

打开 jupyter lab,进入 autodl-tmp 工作目录
在这里插入图片描述

配置环境

打开终端,进入工作目录,开启学术加速

cd autodl-tmp
# 机器重启后需要再次配置
source /etc/network_turbo
# 安装 Git-LFS
apt update && apt install git-lfs -y

下载 Llama-2-7b 大模型, 如果更换机器可以通过 scp 命令在机器之间互传免下载。

# Make sure you have git-lfs installed (https://git-lfs.com)
git lfs install
git clone https://huggingface.co/NousResearch/Llama-2-7b-hf

克隆我的微调仓库,本仓库基于 FastChat 框架,对数据模块参数模块进行了拓展,除了 FastChat 官方的 Vicuna 的数据格式,额外支持 Alpaca 等数据格式指令微调。

git clone https://github.com/Aipura/Vicuna.git

安装依赖

cd Aipura
pip3 install -r requirements.txt

单机单卡 A40 (Q)LoRA 微调 LLaMA2-7B

准备数据

数据选择 alpaca_data_cleaned,Git 仓库提交时候只截取了 1000 条减少体积,数据格式如下:
在这里插入图片描述

编辑训练脚本

编辑训练脚本./scripts/train_llama2_7b_lora.sh,根据具体情况配置下 Base 模型,Batch_Size, Epoch 等超参数,对部分超参数不理解可以参考 Transformers 官方的 Docs。
即使单卡情况下 deepspeed 也能为我们优化一下显存,比如优化显存碎片等。
根据 FastChat 仓库[微调文档],(https://github.com/lm-sys/FastChat/blob/main/docs/training.md),我们可以使用使用 ZeRO2 使用 QLoRA 来训练。请注意,QLoRA 目前不支持 ZeRO3,但 ZeRO3 确实支持 LoRA,playground/deepspeed_config_s3.json 下有一个参考配置。要使用 QLoRA,必须安装 bitsandbytes>=0.39.0 和 transformers>=4.30.0。
如果使用 Q-LoRA 将对应超参数改为 True 就行。

deepspeed --include localhost:0 --master_port 62000 train_lora.py \
    --model_name_or_path /root/autodl-tmp/Llama-2-7b-hf \
    --dataset "data/alpaca_data_cleaned_1000.json" \
    --dataset_format "alpaca" \
    --output_dir checkpoint \
    --num_train_epochs 10 \
    --fp16 False \
    --bf16 True \
    --tf32 True \
    --gradient_checkpointing True \
    --flash_attn False \
    --xformers True \
    --per_device_train_batch_size 60 \
    --per_device_eval_batch_size 60 \
    --gradient_accumulation_steps 2 \
    --evaluation_strategy "steps" \
    --eval_steps 20  \
    --save_strategy "steps" \
    --save_steps 40 \
    --save_total_limit 1 \
    --load_best_model_at_end False \
    --logging_strategy "steps" \
    --logging_steps 1 \
    --lora_r 8 \
    --lora_alpha 16 \
    --lora_dropout 0.05 \
    --q_lora False \
    --data_seed 42 \
    --train_on_source False \
    --do_train \
    --model_max_length 2048 \
    --source_max_len 2048 \
    --target_max_len 512 \
    --do_eval \
    --eval_dataset_size 300 \
    --dataloader_num_workers 3 \
    --remove_unused_columns False \
    --learning_rate 2e-5 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --adam_beta2 0.999 \
    --max_grad_norm 0.3 \
    --seed 3407 \
    --disable_tqdm False \
    --report_to wandb \
    --lora_target_modules q_proj v_proj o_proj gate_proj down_proj up_proj \
    --deepspeed playground/deepspeed_config_s2.json

开始单机单卡训练

bash scripts/train_llama2_7b_lora.sh

期间如果使用 wandb 记录训练日志,需要注册一个 wandb 账号,获取下 token, 如果不需要,删掉 report_to wandb 超参。
在这里插入图片描述
点开链接可以看到训练过程中的重要参数比如 loss, 学习率的变化,还能看到系统资源比如显存,CPU占用情况。
在这里插入图片描述

单机四卡 4090 全量微调 LLaMA2-7B

编辑训练脚本./scripts/train_llama2_13b_lora.sh,可能要配置下 Base 模型,Batch_Size, Epoch 等超参数,可以开启 Zero 2 或者 Zero 3,脚本中使用了 Zero 2, 如果想使用 Zero 3 将 deepspeed 超参数 改为 playground/deepspeed_config_s3.json,来大幅度降低显存占用。

deepspeed --include localhost:0,1,2,3 --master_port 62000 train.py \
    --model_name_or_path /root/autodl-tmp/Llama-2-7b-hf \
    --dataset "data/alpaca_data_cleaned_1000.json" \
    --dataset_format "alpaca" \
    --output_dir checkpoint \
    --num_train_epochs 1 \
    --fp16 False \
    --bf16 True \
    --tf32 True \
    --gradient_checkpointing True \
    --flash_attn False \
    --xformers True \
    --per_device_train_batch_size 24 \
    --per_device_eval_batch_size 24 \
    --gradient_accumulation_steps 2 \
    --evaluation_strategy "steps" \
    --eval_steps 20  \
    --save_strategy "steps" \
    --save_steps 40 \
    --save_total_limit 1 \
    --load_best_model_at_end False \
    --logging_strategy "steps" \
    --logging_steps 1 \
    --data_seed 42 \
    --train_on_source False \
    --do_train \
    --model_max_length 2048 \
    --source_max_len 2048 \
    --target_max_len 512 \
    --do_eval \
    --eval_dataset_size 300 \
    --dataloader_num_workers 3 \
    --remove_unused_columns False \
    --learning_rate 2e-5 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --adam_beta2 0.999 \
    --max_grad_norm 0.3 \
    --seed 3407 \
    --disable_tqdm False \
    --report_to wandb \
    --deepspeed playground/deepspeed_config_s2.json

开始单机多卡训练

bash scripts/train_llama2_7b.sh

调整合适的batch_size,尽量把 GPU 运行时显存占满。
在这里插入图片描述

新开启一个终端,键入 nvitop命令监控实时显存占用情况。
在这里插入图片描述

推理测试

训练好模型可以使用 FastChat 从终端加载训练好的 checkpoints 测试,还可以以 WebUI Gradio 的形式加载模型测试,参考:https://github.com/lm-sys/FastChat#serving-with-web-gui
在这里插入图片描述

<think>好的,用户想在AutoDL平台上对ChatGLM3-6B模型进行单机多卡微调。我需要先理解用户的问题,然后根据提供的引用信息给出步骤。 首先,用户提到的AutoDL平台,可能需要使用特定的命令和环境配置。根据引用3中的信息,单机多卡可以使用torchrun命令,设置nproc_per_node为GPU数量。例如,使用8卡的话,命令是OMP_NUM_THREADS=1 torchrun --standalone --nnodes=1 --nproc_per_node=8 finetune_hf.py ...。但用户可能需要根据实际情况调整参数。 然后,用户需要准备数据和配置文件。引用3和4提到需要配置数据路径、模型路径和配置文件(如lora.yaml)。用户需要确认这些文件的位置是否正确,特别是数据路径是否指向正确的目录。 另外,引用4提到如果显存不足,可以使用accelerate库来分割模型到多张GPU。不过用户的问题是关于微调而不是推理,所以可能需要检查代码中是否已经支持多卡训练,或者是否需要修改模型加载方式。比如使用load_model_on_gpus函数,但需要确认该函数是否适用于微调场景。 还要注意环境依赖,比如安装accelerate库(pip install accelerate),这可能需要在训练脚本中正确初始化分布式训练。同时,确保所有GPU都能被正确识别,可能需要设置CUDA_VISIBLE_DEVICES环境变量。 最后,用户可能需要调整学习率或批大小,以适应多卡训练。同时,日志和模型保存路径也需要正确配置,避免多进程间的冲突。 总结步骤应该是:环境准备、启动命令、数据配置、参数调整。需要将这些步骤详细列出,确保用户能一步步操作。同时,提醒用户注意可能遇到的坑,比如端口冲突、路径错误等。</think>在AutoDL平台上对ChatGLM3-6B进行单机多卡微调可分为以下步骤: ### 一、环境准备 1. 创建实例时选择**多GPU规格**(如A100-10G*2) 2. 通过`nvidia-smi`命令确认GPU状态 3. 安装依赖库: ```bash pip install accelerate deepspeed transformers ``` ### 二、启动分布式训练 根据引用[3]提供的方案,使用torchrun启动分布式训练: ```bash OMP_NUM_THREADS=1 torchrun --standalone --nnodes=1 --nproc_per_node=2 finetune_hf.py \ data/AdvertiseGen/ \ THUDM/chatglm3-6b \ configs/lora.yaml ``` 参数说明: - `nproc_per_node=2`:使用2张GPU - `data/AdvertiseGen/`:微调数据路径 - `configs/lora.yaml`:LoRA参数配置文件 ### 三、多卡配置要点 1. **模型加载**:若遇到显存不足,参考引用[4]使用分片加载: ```python from utils import load_model_on_gpus model = load_model_on_gpus("THUDM/chatglm3-6b", num_gpus=2) ``` 2. **参数调整**: ```yaml # lora.yaml示例 device_map: "auto" fp16: true gradient_accumulation_steps: 4 per_device_train_batch_size: 2 ``` ### 四、监控与验证 1. 使用`watch -n 1 gpustat`监控GPU利用率 2. 验证多卡通信: ```bash echo $MASTER_ADDR # 应显示127.0.0.1 echo $MASTER_PORT # 默认29500 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

geeksoarsky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值