2026/5/21 14:16:36
网站建设
项目流程
昆明建个网站哪家便宜,wordpress恢复源代码,北京电力交易中心领导班子,优秀手机网站设计手把手教你用Qwen3-1.7B做LoRA微调#xff0c;显存不足也能跑
1. 引言#xff1a;为什么选择LoRA微调Qwen3-1.7B#xff1f;
你是不是也遇到过这样的问题#xff1a;想微调一个大模型#xff0c;但显卡只有10G甚至更少#xff0c;全参数微调直接爆显存#xff1f;别急…手把手教你用Qwen3-1.7B做LoRA微调显存不足也能跑1. 引言为什么选择LoRA微调Qwen3-1.7B你是不是也遇到过这样的问题想微调一个大模型但显卡只有10G甚至更少全参数微调直接爆显存别急今天这篇文章就是为你准备的。我们选用阿里巴巴开源的Qwen3-1.7B模型结合LoRALow-Rank Adaptation技术在低显存环境下完成高效微调。整个过程不需要32G以上的高端显卡普通消费级GPU如RTX 3060/3090都能轻松运行。本文将带你从零开始准备医疗领域数据集配置训练监控工具SwanLab加载Qwen3-1.7B模型使用PEFT进行LoRA微调实现流式推理与记忆功能最终目标是让模型学会像DeepSeek R1那样输出“思考过程 回答”的双段式回复特别适用于医学问答等专业场景。无论你是刚入门的大模型爱好者还是希望在有限算力下做垂直领域适配的开发者这篇教程都值得一试。2. 环境准备与镜像启动2.1 启动Qwen3-1.7B镜像环境本实验基于CSDN提供的预置镜像环境一键即可部署Qwen3-1.7B模型服务。操作步骤如下进入 CSDN星图AI平台搜索并选择Qwen3-1.7B镜像创建实例并等待初始化完成启动Jupyter Notebook服务注意该镜像已内置Transformers、Peft、datasets、swanlab等常用库无需手动安装。2.2 验证模型可调用性使用LangChain调用本地部署的Qwen3-1.7B模型验证是否正常运行from langchain_openai import ChatOpenAI chat_model ChatOpenAI( modelQwen3-1.7B, temperature0.5, base_urlhttps://gpu-pod69523bb78b8ef44ff14daa57-8000.web.gpu.csdn.net/v1, # 替换为实际地址 api_keyEMPTY, extra_body{ enable_thinking: True, return_reasoning: True, }, streamingTrue, ) response chat_model.invoke(头痛可能是什么原因引起的) print(response)如果能看到结构化的思考与回答内容说明模型服务已就绪。3. 数据准备构建医学对话数据集我们要训练的是一个能进行“深度思考”的医疗问答模型因此需要包含“思考过程”和“正式回答”的高质量样本。3.1 下载并加载原始数据使用ModelScope SDK下载公开医疗数据集from modelscope.msdatasets import MsDataset dataset MsDataset.load(krisfu/delicate_medical_r1_data)该数据集包含2000条医学对话记录字段包括question患者提出的问题think模型应输出的推理过程answer最终的专业回答3.2 数据格式转换与清洗我们将每条数据构造成标准的对话模板便于后续训练def format_example(example): prompt f你是一个专业的医生助手请根据以下问题进行详细分析。\n\n问题{example[question]}\n\n请先逐步推理再给出结论。 think example[think] answer example[answer] return { prompt: prompt, completion: f|thinking|{think}|/thinking||output|{answer}|/output| } # 应用到所有样本 train_data [format_example(item) for item in dataset[train]] val_data [format_example(item) for item in dataset[validation]]3.3 保存为JSONL格式import json def save_jsonl(data, filename): with open(filename, w, encodingutf-8) as f: for item in data: f.write(json.dumps(item, ensure_asciiFalse) \n) save_jsonl(train_data, train.jsonl) save_jsonl(val_data, val.jsonl)完成后你会得到两个文件train.jsonl和val.jsonl用于后续训练与验证。4. 配置SwanLab可视化训练监控为了实时观察训练效果我们使用轻量级AI实验管理工具SwanLab。4.1 安装SwanLabpip install swanlab -i https://mirrors.cernet.edu.cn/pypi/web/simple国内源可显著提升安装速度。4.2 登录账号注册 SwanLab官网 并获取API Key后执行swanlab login粘贴你的API Key即可完成认证。4.3 初始化实验在训练脚本中加入以下代码import swanlab swanlab.init( projectqwen3-medical-lora, config{ learning_rate: 2e-4, batch_size: 4, epochs: 3, lora_rank: 64, lora_alpha: 128, lora_dropout: 0.05 }, description使用LoRA微调Qwen3-1.7B实现医学领域推理能力增强 )这样就能自动上传超参数和训练指标。4.4 记录训练指标在每个step后记录lossswanlab.log({loss: loss.item(), step: step})训练结束后可在网页端查看完整的损失曲线、学习率变化等图表。5. 加载Qwen3-1.7B模型使用ModelScope或Hugging Face加载基础模型from transformers import AutoTokenizer, AutoModelForCausalLM model_name Qwen/Qwen3-1.7B # 或本地路径 tokenizer AutoTokenizer.from_pretrained(model_name, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.bfloat16, device_mapauto, trust_remote_codeTrue )建议开启trust_remote_codeTrue以支持Qwen系列自定义模块。6. 全参数微调 vs LoRA对比6.1 全参数微调高显存需求全量微调会更新所有参数效果最好但资源消耗巨大# 此方式约需32GB显存 optimizer torch.optim.AdamW(model.parameters(), lr2e-5)对于大多数用户来说这几乎是不可行的。6.2 LoRA低秩适配技术原理LoRA的核心思想是冻结原始权重只训练少量新增的低秩矩阵。优点显存占用降低60%以上训练速度快2~3倍参数量减少90%便于存储和部署效果接近全参数微调6.3 使用PEFT库实现LoRAfrom peft import LoraConfig, get_peft_model lora_config LoraConfig( r64, # 低秩矩阵维度 lora_alpha128, # 缩放系数 target_modules[q_proj, k_proj, v_proj, o_proj], lora_dropout0.05, biasnone, task_typeCAUSAL_LM ) model get_peft_model(model, lora_config) model.print_trainable_parameters() # 查看可训练参数比例输出示例trainable params: 8,388,608 || all params: 1,700,000,000 || trainable%: 0.49%仅训练0.5%的参数却能达到接近全调的效果7. 开始LoRA微调训练7.1 构建训练器使用HuggingFace Transformers的TrainerAPIfrom transformers import TrainingArguments, Trainer training_args TrainingArguments( output_dir./qwen3-medical-lora, per_device_train_batch_size4, gradient_accumulation_steps8, num_train_epochs3, learning_rate2e-4, fp16True, logging_steps10, save_steps100, evaluation_strategysteps, eval_steps100, report_toswanlab, # 对接SwanLab run_nameqwen3-lora-medical ) trainer Trainer( modelmodel, argstraining_args, train_datasettrain_dataset, eval_datasetval_dataset, tokenizertokenizer, data_collatorlambda data: { input_ids: torch.stack([f[0] for f in data]), attention_mask: torch.stack([f[1] for f in data]), labels: torch.stack([f[2] for f in data]) } )7.2 启动训练trainer.train()典型资源消耗显存占用约9.8GBRTX 3090单epoch耗时约45分钟最终模型大小增加约15MB仅为LoRA权重训练过程中可通过SwanLab实时查看loss下降趋势。8. 推理阶段流式输出与思考展示8.1 加载微调后的LoRA权重from peft import PeftModel model AutoModelForCausalLM.from_pretrained( Qwen/Qwen3-1.7B, torch_dtypetorch.bfloat16, device_mapauto ) model PeftModel.from_pretrained(model, ./qwen3-medical-lora/checkpoint-100)8.2 实现流式生成def predict_stream(prompt): inputs tokenizer(prompt, return_tensorspt).to(model.device) streamer TextStreamer(tokenizer, skip_promptTrue, skip_special_tokensTrue) with torch.no_grad(): model.generate( **inputs, max_new_tokens512, temperature0.7, do_sampleTrue, streamerstreamer )调用示例prompt 患者有持续性偏头痛伴有恶心和畏光可能是什么疾病如何治疗 predict_stream(prompt)预期输出格式|thinking|首先考虑偏头痛的可能性……进一步排除其他颅内病变……建议进行脑部影像检查……|/thinking| |output|根据症状描述高度怀疑为典型偏头痛……推荐使用曲普坦类药物缓解急性发作……|/output|前端可解析标签分别渲染“思考区”和“回答区”提升专业感。9. 添加简单记忆功能为了让模型具备多轮对话能力我们需要维护对话历史。9.1 实现思路维护一个全局的messages列表每次用户提问时追加到列表模型回复后也将其加入列表下次输入时传入完整上下文9.2 代码实现messages [] def chat(question): global messages # 添加用户消息 messages.append({role: user, content: question}) # 构造完整上下文 context \n.join([f{m[role]}:{m[content]} for m in messages]) prompt f以下是医生与患者的对话记录\n{context}\n\n请继续回答 # 生成回复 response for token in predict_stream(prompt): response token # 添加助手回复 messages.append({role: assistant, content: response}) return response现在你可以连续提问模型会记住之前的对话内容。10. 总结低成本微调大模型的可行路径通过本次实践我们成功实现了在10G显存以内完成Qwen3-1.7B的领域微调使用LoRA技术大幅降低资源消耗构建了支持“思考回答”模式的医疗问答模型集成了SwanLab实现训练可视化实现了流式输出和对话记忆功能这套方案非常适合中小企业或个人开发者在有限算力下打造垂直领域AI助手。关键经验总结小显存首选LoRA而非全参数微调医疗/法律等专业领域需明确区分“推理”与“结论”使用SwanLab等工具能极大提升调试效率流式输出记忆机制显著改善用户体验下一步你可以尝试更大规模的数据集扩展多LoRA模块切换不同专科方向结合RAG引入外部知识库封装成Web API供业务系统调用大模型落地并不一定需要天价算力找准方法普通人也能玩转AI。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。