Lora微调Qwen-1_8B-Chat模型实践(魔搭社区)

一、准备工作

1,克隆qwen仓库代码:

git clone https://github.com/QwenLM/Qwen.git

2,跳转至Qwen项目的目录下:

cd Qwen

3,安装依赖包:

pip install deepspeed transformers==4.32.0 peft pydantic==1.10.13 transformers_stream_generator einops tiktoken

4,训练数据准备:

样本放入列表存为json文件,命名为chat.json(可以先下载再上传)

5,下载模型文件:

git clone https://modelscope.cn/qwen/Qwen-1_8B-Chat.git

二、单机单卡微调

1,export CUDA_DEVICE_MAX_CONNECTIONS=1
      export CUDA_VISIBLE_DEVICES=0

2,执行微调python文件:

python finetune.py --model_name_or_path Qwen-1_8B-Chat --data_path chat.json --fp16 True --output_dir output_qwen --num_train_epochs 5 --per_device_train_batch_size 2 --per_device_eval_batch_size 1 --gradient_accumulation_steps 8 --evaluation_strategy "no" --save_strategy "steps" --save_steps 1000 --save_total_limit 10 --learning_rate 3e-4 --weight_decay 0.1 --adam_beta2 0.95 --warmup_ratio 0.01 --lr_scheduler_type "cosine" --logging_steps 1 --report_to "none" --model_max_length 512 --lazy_preprocess True --gradient_checkpointing --use_lora

 此处容易出现的问题-

(1)相关依赖包不匹配:根据错误提示更新即可

1‘No module named 'transformers.models.gemma

解决:更新transformers库pip install transformers --upgrade

2’Your currently installed version of Keras is Keras 3, but this is not yet supported in Transformers. Please install the backwards-compatible tf-keras package with `pip install tf-keras`.

解决:pip install tf-keras

(2)fp16精度问题:True改为False

三、保存微调后模型并测试

1,保存:

from peft import AutoPeftModelForCausalLM 
from transformers import AutoTokenizer 
model = AutoPeftModelForCausalLM.from_pretrained( "output_qwen", device_map="auto", trust_remote_code=True ).eval() 
merged_model = model.merge_and_unload() 
merged_model.save_pretrained("qwen-1_8b-finetune", max_shard_size="2048MB", safe_serialization=True) # 最大分片2g
tokenizer = AutoTokenizer.from_pretrained( "output_qwen", trust_remote_code=True ) 
 
tokenizer.save_pretrained("qwen-1_8b-finetune")

结果展示:

2,测试:

from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig 
tokenizer = AutoTokenizer.from_pretrained("qwen-1_8b-finetune", trust_remote_code=True)
 
model = AutoModelForCausalLM.from_pretrained("qwen-1_8b-finetune", device_map="auto", 
trust_remote_code=True).eval() 
response, history = model.chat(tokenizer, "xxxx", history=None) 
print(response)

结果展示:

### Qwen-14B-Chat 模型 SFT 阶段微调注意事项 在使用 `llamafactory-cli train` 命令对 Qwen-14B-Chat 进行监督微调Supervised Fine-Tuning, SFT)时,需特别关注以下几个方面: #### 1. **CUDA 可见设备配置** 确保 GPU 设备分配合理。如果多卡并行训练,则需要通过 `CUDA_VISIBLE_DEVICES` 设置可见的 GPU 列表[^3]。例如,在八张显卡的情况下: ```bash CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ``` #### 2. **YAML 文件路径验证** 确认 YAML 配置文件路径无误,并且该文件包含了完整的超参数定义。对于自定义路径 `/your/path/llm/LLaMA-Factory/examples/train_lora/qwen2vl_lora_sft_my20241112.yaml` 的情况,应检查以下几点: - 路径是否存在。 - YAML 文件中的字段是否正确填充,尤其是学习率 (`learning_rate`)、批量大小 (`batch_size`) 和最大序列长度 (`max_seq_length`) 等关键参数。 #### 3. **Python 环境一致性** 为了防止因依赖库版本不一致引发错误,建议按照指定方式创建独立 Python 环境[^2]。具体操作如下: ```bash conda create -n qwen-14b-chat python=3.10 -y conda activate qwen-14b-chat ``` 同时安装所需依赖包,通常可以通过运行项目根目录下的 `requirements.txt` 完成: ```bash pip install -r requirements.txt ``` #### 4. **LORA 微调相关参数** 低秩适应(LoRA)技术能够显著降低内存消耗和计算成本。以下是几个重要 LoRA 参数及其作用说明: - **rank**: 控制矩阵分解后的维度,默认值一般设为816。 - **alpha**: 影响缩放因子的选择,推荐初始值与 rank 相同。 - **lora_dropout**: 添加随机失活机制以增强泛化能力,典型取值范围为0到0.1之间。 这些参数均应在 YAML 文件中明确定义。例如: ```yaml model: lora_rank: 16 lora_alpha: 16 lora_dropout: 0.05 ``` #### 5. **数据集准备** 高质量的数据源直接影响最终效果。因此要仔细校验输入 JSON 或 CSV 数据格式是否满足预期标准。另外还需注意样本分布均衡性和标注质量等问题。 --- ### 示例代码片段 下面展示了一个简单的脚本用于启动训练过程: ```python import os os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3,4,5,6,7" config_path = "/your/path/llm/LLaMA-Factory/examples/train_lora/qwen2vl_lora_sft_my20241112.yaml" command = f"CUDA_VISIBLE_DEVICES={os.getenv('CUDA_VISIBLE_DEVICES')} llamafactory-cli train {config_path}" print(f"Executing command:\n{command}") os.system(command) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值