从零开始:Qwen2.5-3B大模型LoRA微调与ollama本地部署实战
1. 环境准备与工具安装想要玩转Qwen2.5-3B大模型的微调和部署首先得把工具和环境准备好。我建议使用Linux系统Ubuntu 20.04或者MacOSWindows用户可以考虑WSL2。以下是需要安装的核心工具Python 3.9这是运行所有AI相关工具的基础CUDA 11.7如果你有NVIDIA显卡这是必须的Git用来下载各种开源项目Docker简化环境配置的好帮手安装完基础环境后我们来搞定几个关键工具# 安装Python依赖 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117 pip install transformers datasets accelerate peft # 安装LlamaFactory git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e .[torch,metrics]如果你打算在本地运行模型还需要安装ollama# Linux/Mac安装ollama curl -fsSL https://ollama.com/install.sh | sh # Windows用户可以去官网下载安装包2. 获取Qwen2.5-3B模型现在我们来获取Qwen2.5-3B模型。国内用户推荐使用魔搭社区速度更快from modelscope import snapshot_download model_dir snapshot_download(Qwen/Qwen2.5-3B-Instruct)下载完成后模型会保存在~/.cache/modelscope/hub/Qwen/Qwen2.5-3B-Instruct目录下。这个模型大约占用6GB空间确保你的磁盘有足够容量。如果你想验证模型是否下载成功可以运行以下代码from transformers import AutoModelForCausalLM, AutoTokenizer tokenizer AutoTokenizer.from_pretrained(model_dir) model AutoModelForCausalLM.from_pretrained(model_dir, device_mapauto) input_text 你好介绍一下你自己 inputs tokenizer(input_text, return_tensorspt).to(cuda) outputs model.generate(**inputs, max_new_tokens50) print(tokenizer.decode(outputs[0], skip_special_tokensTrue))3. 使用LoRA进行轻量化微调LoRALow-Rank Adaptation是目前最流行的大模型微调技术之一它只训练模型的一小部分参数大大降低了计算资源需求。下面我们使用LlamaFactory来微调Qwen2.5-3B。3.1 准备数据集首先准备一个JSON格式的数据集。比如我们要让模型学会用甄嬛体说话[ { instruction: 用甄嬛体回答今天天气真好, output: 今儿个这天儿可真是极好的晴空万里倒叫本宫想起那年御花园里的景致。 }, { instruction: 用甄嬛体表达我饿了, output: 哀家这身子骨儿倒是有些乏了腹中空空如也想来是到了用膳的时辰了。 } ]把这个文件保存为zhenhuan.json放到LLaMA-Factory/data目录下然后在dataset_info.json中注册这个数据集{ zhenhuan: { file_name: zhenhuan.json, formatting: alpaca } }3.2 启动微调训练现在可以开始微调了使用以下命令llamafactory-cli train \ --stage sft \ --do_train \ --model_name_or_path /path/to/Qwen2.5-3B-Instruct \ --dataset zhenhuan \ --template qwen \ --finetuning_type lora \ --lora_rank 16 \ --lora_alpha 32 \ --output_dir ./output \ --per_device_train_batch_size 2 \ --gradient_accumulation_steps 4 \ --lr_scheduler_type cosine \ --logging_steps 10 \ --save_steps 100 \ --learning_rate 5e-5 \ --num_train_epochs 3.0 \ --fp16关键参数说明lora_rank: LoRA矩阵的秩一般8-64之间越大效果越好但需要更多计算batch_size: 根据你的GPU显存调整12GB显存可以设2-4learning_rate: LoRA学习率通常设5e-5到1e-4训练过程中可以在output目录下查看日志和保存的检查点。如果中断了可以加--resume_from_checkpoint output继续训练。4. 模型转换与量化训练完成后我们需要把LoRA适配器合并到原模型中并转换成ollama支持的GGUF格式。4.1 合并LoRA适配器from peft import PeftModel from transformers import AutoModelForCausalLM, AutoTokenizer base_model AutoModelForCausalLM.from_pretrained(Qwen/Qwen2.5-3B-Instruct) model PeftModel.from_pretrained(base_model, ./output) merged_model model.merge_and_unload() merged_model.save_pretrained(./merged_model)4.2 安装llama.cppGGUF转换需要llama.cppgit clone https://github.com/ggerganov/llama.cpp cd llama.cpp make -j4.3 转换为GGUF格式python convert-hf-to-gguf.py ./merged_model --outtype f16 --outfile qwen2.5-3b-zh.f16.gguf如果你显存有限可以进行4-bit量化./quantize qwen2.5-3b-zh.f16.gguf qwen2.5-3b-zh.q4_k_m.gguf q4_k_m量化后模型大小从6GB降到约1.5GB效果损失很小。5. 使用ollama本地部署现在我们可以用ollama来运行这个微调后的模型了。5.1 创建Modelfile新建一个Modelfile文件内容如下FROM ./qwen2.5-3b-zh.q4_k_m.gguf TEMPLATE {{ if .System }}|start_header_id|system|end_header_id| {{ .System }}|eot_id|{{ end }}{{ if .Prompt }}|start_header_id|user|end_header_id| {{ .Prompt }}|eot_id|{{ end }}|start_header_id|assistant|end_header_id| {{ .Response }}|eot_id| SYSTEM 你是一个用甄嬛体说话的AI助手 PARAMETER temperature 0.7 PARAMETER num_ctx 20485.2 创建并运行模型ollama create zhenhuan -f Modelfile ollama run zhenhuan现在你就可以和微调后的模型对话了试试输入今日心情甚好看看它会不会用甄嬛体回应你。6. 进阶技巧与优化6.1 微调参数调优不同的任务需要不同的微调策略。以下是一些经验参数任务类型lora_rank学习率batch_sizeepoch风格模仿32-643e-54-83-5知识注入16-325e-52-41-3指令跟随8-161e-48-161-26.2 多LoRA适配器切换ollama支持运行时切换不同的LoRA适配器。你可以训练多个专用适配器比如一个用于客服场景一个用于创意写作一个用于代码生成然后在运行时通过--lora参数指定ollama run zhenhuan --lora ./customer_service_lora.bin6.3 系统提示词优化SYSTEM提示词对模型行为影响很大。比如想让模型扮演专业医生SYSTEM 你是一位资深内科医生回答患者问题时要专业且富有同理心。如果遇到不确定的情况应该说这个需要进一步检查确认7. 常见问题解决问题1训练时显存不足解决方案减小batch_size开启梯度累积(gradient_accumulation_steps)使用--load_in_4bit参数问题2模型回答质量下降解决方案检查数据集质量确保指令-输出对匹配尝试增大lora_rank调整temperature参数0.3-0.7效果较好问题3ollama加载失败解决方案确认GGUF文件路径正确检查Modelfile的TEMPLATE格式是否正确尝试用ollama serve查看详细日志我在实际项目中发现Qwen2.5-3B对中文理解相当不错配合LoRA微调后在特定任务上可以达到接近70B模型的效果。最关键的是找到合适的数据集和训练参数这往往需要多次实验调整。建议从小数据集开始快速迭代验证效果再逐步扩大训练规模。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2505899.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!