AI大模型教程
一起来学习

【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调【完整教程】

1.背景

上一篇文章写到,【个人开发】macbook m1 Lora微调qwen大模型

该微调方式,同样适用于GPU,只不过在train.py脚本中,针对device,调整为cuda即可。

如果数据量过大的话,单卡微调会存在瓶颈,因此考虑多GPU进行微调。

网上搜罗了一圈,多卡微调的常用方案:deepspeed+Llama-factory

本文主要记录该方式的微调情况,仅为个人学习记录

2.微调方式

2.1 关键环境版本信息

模块 版本
python 3.10
CUDA 12.6
torch 2.5.1
peft 0.12.0
transformers 4.46.2
accelerate 1.1.1
trl 0.9.6
deepspeed 0.15.4

2.2 步骤

2.2.1 下载llama-factory

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

2.2.2 准备数据集

数据集采用网上流传的《甄嬛传》。

数据源地址:huanhuan.json

数据集结构如下。

// 文件命名:huanhuan.json
[
    {
   
        "instruction": "小姐,别的秀女都在求中选,唯有咱们小姐想被撂牌子,菩萨一定记得真真儿的——",
        "input": "",
        "output": "嘘——都说许愿说破是不灵的。"
    },
    ...
]

其次,还得准备数据集信息【dataset_info.json】,因为是本地微调,所以微调时现访问dataset_info,再指定到具体的数据集中。

{
   
  "identity": {
   
    "file_name": "test_data.json"
  }
}

注意文本的数据集的格式必须为,json,不然会报错。

2.2.3 微调模式

2.2.3.1 zero-1微调

配置参考zero-3的配置,修改了一下zero_optimization.stage的参数。

// 文件命名:ds_config_zero1.json
{
   
    "fp16": {
   
        "enabled": "auto",
        "loss_scale": 0,
        "loss_scale_window": 1000,
        "initial_scale_power": 16,
        "hysteresis": 2,
        "min_loss_scale": 1
    },
    "bf16": {
   
        "enabled": "auto"
    },
    "optimizer": {
   
        "type": "AdamW",
        "params": {
   
            "lr": "auto",
            "betas": "auto",
            "eps": "auto",
            "weight_decay": "auto"
        }
    },

    "scheduler": {
   
        "type": "WarmupLR",
        "params": {
   
            "warmup_min_lr": "auto",
            "warmup_max_lr": "auto",
            "warmup_num_steps": "auto"
        }
    },

    "zero_optimization": {
   
        "stage": 1,
        "offload_optimizer": {
   
            "device": "none",
            "pin_memory": true
        },
        "offload_param": {
   
            "device": "none",
            "pin_memory": true
        },
        "overlap_comm": true,
        "contiguous_gradients": true,
        "sub_group_size": 1e9,
        "reduce_bucket_size": "auto",
        "stage3_prefetch_bucket_size": "auto",
        "stage3_param_persistence_threshold": "auto",
        "stage3_max_live_parameters": 1e9,
        "stage3_max_reuse_distance": 1e9,
        "stage3_gather_16bit_weights_on_model_save": true
    },

    "gradient_accumulation_steps": 4,
    "gradient_clipping": "auto",
    "steps_per_print": 100,
    "train_batch_size": "auto",
    "train_micro_batch_size_per_gpu": "auto",
    "wall_clock_breakdown": false
}

微调脚本

# run_train_bash_zero_1.sh
#!/bin/bash
# 记录开始时间
START=$(date +%s.%N)


CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 accelerate launch  src/train.py 
    --deepspeed ds_config_zero1.json 
    --stage sft 
    --do_train True 
    --model_name_or_path /root/ai_project/fine-tuning-by-lora/models/model/qwen/Qwen2___5-7B-Instruct 
    --finetuning_type lora 
    --template qwen 
    --dataset_dir /root/ai_project/fine-tuning-by-lora/dataset/ 
    --dataset identity 
    --cutoff_len 1024 
    --num_train_epochs 30 
    --max_samples 100000 
    --learning_rate 5e-05 
    --lr_scheduler_type cosine 
    --warmup_steps 10 
    --per_device_train_batch_size 4 
    --gradient_accumulation_steps 4 
    --max_grad_norm 1.0 
    --logging_steps 10 
    --save_steps 100 
    --neftune_noise_alpha 0 
    --lora_rank 8 
    --lora_dropout 0.1 
    --lora_alpha 32 
    --lora_target q_proj,v_proj,k_proj,gate_proj,up_proj,o_proj,down_proj 
    --output_dir ./output/qwen_7b_ft/zero1/ 
    --bf16 True 
    --plot_loss True


# 记录结束时间
END=$(date +%s.%N)

# 计算运行时间
DUR=$(echo 

文章来源于互联网:【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调【完整教程】

相关推荐: NO.22十六届蓝桥杯备战|一维数组|七道练习|冒泡排序(C++)

B2093 查找特定的值 – 洛谷 题⽬要求下标是从0开始的,和数组的下标是吻合的,存放数据应该从下标0开始 n的取值范围是1~10000 数组中存放的值的绝对值不超10000,说明int类型就⾜够了 找到了输出下标,找不到要输出-1,这⼀点要注意,很容易忽略…

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » 【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调【完整教程】
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们