LLM微调系列——Qwen微调教程

本文详细介绍了如何获取Qwen微调脚本,包括单卡和多卡微调的步骤、数据格式要求、参数设置以及模型合并和推理的过程。旨在帮助读者解决微调过程中可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录

第一章 Qwen微调



前言

作者在微调Qwen时遇到的一些坑以及一点经验 作者在微调Qwen时遇到的一些坑以及一点经验


一、脚本获取

官方链接: Github-Qwen
夸克网盘链接: Qwen,提取码:SYXe

二、使用步骤

1.数据格式

示例:

[
    {
        "id": "identity_0",
        "conversations": [
            {
                "from": "user",
                "value": "你好"
            },
            {
                "from": "assistant",
                "value": "我是一个语言模型,我叫通义千问。"
            }
        ]
    },
    {
        "id": "identity_1",
        "conversations": [
            {
                "from": "user",
                "value": "你是谁?"
            },
            {
                "from": "assistant",
                "value": "我是一个语言模型,我叫通义千问。"
            }
        ]
    }
]

2.SFT微调:

  1. 单卡微调:

脚本路径:

Qwen-main/finetune/finetune_lora_single_gpu.sh

部分参数说明:

MODEL:模型路径
DATA:自定义数据集路径
output_dir:输出模型路径
num_train_epochs: 设置训练的轮数
model_max_length:模型处理序列长度,根据自身数据定义
per_device_train_batch_size: 训练批处理大小设置
save_steps: 模型每n步保存一次

执行命令:

bash finetune/finetune_lora_single_gpu.sh
  1. 多卡微调:

脚本路径:

Qwen-main/finetune/finetune_lora_ds.sh

部分参数说明:

MODEL:模型路径
DATA:自定义数据集路径
GPUS_PER_NODE:置每个节点上GPU的数量。在分布式训练环境中,这用于定义每个节点上可用的GPU数目。
output_dir:输出模型路径
num_train_epochs: 设置训练的轮数
model_max_length:模型处理序列长度,根据自身数据定义
per_device_train_batch_size: 训练批处理大小设置
save_steps: 模型每n步保存一次

多卡限定设置(如果你GPU不支持NCCL请加上以下设置,例如:RTX3090):

export CUDA_DEVICE_MAX_CONNECTIONS=1
设置CUDA设备最大连接数为1。这可能用于限制一个CUDA设备上的并行处理任务数量。
export NCCL_IB_DISABLE=1
禁用NCCL(NVIDIA Collective Communications Library)的InfiniBand支持。
export NCCL_P2P_DISABLE=1
禁用NCCL的点对点(Peer-to-Peer)通信。

执行命令:

bash finetune/finetune_lora_ds.sh

3.模型合并:

脚本路径(官方未直接提供脚本文件,需通过链接下载获取):

Qwen-main/merger_model.py

参数说明:

path_to_adapter:模型输出路径或其中某个checkpoint路径
new_model_directory:合并结果路径

文件迁移:

合并后会有一些文件未在合并后的目录中,去源模型文件中将文件复制到合并后的目录
以Qwen-7B为例:
cache_autogptq_cuda_256.cpp
cache_autogptq_cuda_kernel_256.cu
qwen.tiktoken
tokenization_qwen.py
tokenizer_config.json

4.模型推理:

脚本路径:

Qwen-main/web_demo.py

总结

工作随笔,希望可以帮助到大家!
如有不足之处,请多多指教!

<think>好的,我现在需要回答用户关于如何对Qwen模型进行微调以适应Llama Factory需求的问题。首先,我需要理解用户的问题。用户可能已经知道Qwen是一个大语言模型,而Llama Factory可能是一个特定的应用场景或框架,需要将Qwen模型调整到适合该环境使用。 接下来,我应该回忆一下微调大语言模型的一般步骤。通常包括数据准备、环境配置、模型加载、训练配置、执行微调和验证结果等环节。不过具体到Qwen模型和Llama Factory,可能需要查阅相关资料,特别是用户提供的引用内容。 查看用户提供的引用,引用[2]提到了使用modelscope的snapshot_download函数下载模型,并指定下载路径。这可能与模型准备阶段有关。引用[3]提到了LLM的技巧,包括构建LLM的经验,可能涉及微调的最佳实践。引用[1]提到Qwen-VL-MAX是附属模型,可能需要更新API密钥,这可能涉及模型访问权限的问题,但用户的问题是关于微调的,所以可能需要更多信息。 接下来,我需要考虑Llama Factory的具体需求是什么。由于用户没有详细说明,可能需要假设它可能需要特定的输入输出格式、模型结构或性能优化。例如,Llama Factory可能是一个需要特定任务处理的平台,如文本生成、对话系统等,因此微调需要针对这些任务调整模型。 然后,我需要将Qwen模型的微调步骤具体化。例如,数据准备阶段需要收集与目标任务相关的数据集,并进行预处理。环境配置可能需要安装特定的库,如modelscope、transformers等。模型加载可能需要使用snapshot_download函数下载Qwen模型,如引用[2]所述。训练配置可能涉及学习率、批次大小等超参数设置,以及使用LoRA等技术进行高效微调,如引用[3]中提到的LLM技巧可能相关。 此外,可能需要参考Hugging Face的Trainer类或Deepspeed进行分布式训练,特别是处理大规模模型时的资源管理。验证阶段需要评估模型在目标任务上的表现,并进行迭代优化。 可能遇到的问题包括模型与框架的兼容性、计算资源不足、过拟合等。这时需要建议用户检查环境配置、使用更小的批次大小或数据增强等方法。 最后,生成的相关问题需要围绕微调过程中的关键步骤、优化方法和应用场景展开,帮助用户进一步探索。</think>为了对Qwen模型进行微调以适应Llama Factory的需求,需遵循以下步骤: ### 一、环境准备 1. **安装依赖库** 使用以下命令安装必要组件(需提前配置Python环境): ```bash pip install modelscope transformers datasets peft ``` 引用[2]中提到的`modelscope`将用于模型下载和管理[^2] 2. **模型下载** 创建下载脚本(如`download.py`),通过以下代码获取Qwen模型: ```python from modelscope import snapshot_download model_dir = snapshot_download(&#39;Qwen/Qwen-7B&#39;, cache_dir=&#39;/path/to/cache&#39;, revision=&#39;master&#39;) ``` 这将把模型权重存储在指定目录,便于后续加载[^2] --- ### 二、数据准备 1. **格式适配** Llama Factory通常需要`instruction-input-output`格式的数据: ```json { "instruction": "生成客服回复", "input": "用户投诉订单延迟", "output": "已加急处理,预计24小时内送达" } ``` 2. **数据集分割** 建议按`8:1:1`比例划分为训练集、验证集和测试集 --- ### 三、微调配置 ```python from peft import LoraConfig lora_config = LoraConfig( r=8, lora_alpha=32, target_modules=["q_proj","v_proj"], lora_dropout=0.05 ) ``` 使用LoRA进行参数高效微调,可减少显存消耗[^3] --- ### 四、训练执行 ```python from transformers import TrainingArguments training_args = TrainingArguments( output_dir="./output", per_device_train_batch_size=4, gradient_accumulation_steps=2, learning_rate=2e-5, fp16=True, max_steps=1000 ) ``` 启用混合精度训练(`fp16=True`)可提升训练速度 --- ### 五、结果验证 1. **损失曲线分析** 监控训练/验证损失是否正常下降 2. **人工评估** 通过以下prompt测试模型输出: ```python prompt = "<|im_start|>system\n你是一个客服助手<|im_end|>\n<|im_start|>user\n订单号20231215到哪里了?<|im_end|>\n<|im_start|>assistant\n" ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

趋吉避凶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值