随着阿里通义千问 Qwen3.6 家族的开源。Qwen3.6-35B 凭借其在逻辑推理、代码生成及中文语境下的卓越表现成为了企业级应用和个人开发者眼中的“香饽饽”。35B 的参数量在性能与算力成本之间取得了完美的平衡。然而如何用有限的算力对其进行个性化微调依然是不少开发者面临的痛点。本文将带大家通过 **PEFT (LoRA)** 技术在单卡/双卡消费级显卡上实现 Qwen3.6-35B 的全流程微调。**本文提供全套可运行代码建议收藏备用**一、环境准备与依赖安装在开始之前我们需要配置好标准的深度学习环境。建议使用 Python 3.10 和 PyTorch 2.2。执行以下命令安装核心依赖bashpip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121pip install transformers datasets accelerate peft trl bitsandbytes 注意 为了让 35B 模型在消费级显卡如 RTX 4090 或 A100 40G上运行我们必须引入 bitsandbytes 进行 4-bit 或 8-bit 量化加载。二、数据集准备以 JSONL 格式为例为了让模型学会特定领域的知识例如企业客服、医疗问答或私有代码助手我们需要准备符合大模型对话格式ChatML的数据。创建 dataset.json格式如下json[{messages: [{role: system, content: 你是一个专业的智能财务助理。},{role: user, content: 公司差旅费报销的上限是多少},{role: assistant, content: 根据公司最新财务制度普通员工国内差旅住宿费上限为 400 元/天交通工具优先选择高铁二等座。}]},{messages: [{role: system, content: 你是一个专业的智能财务助理。},{role: user, content: 发票抬头写错了怎么处理},{role: assistant, content: 发票抬头如果写错需要联系开票方作废重开原错票需退回否则无法入账报销。}]}]三、完整微调核心代码新建一个 train.py 脚本这是本次微调的核心。我们采用 **QLoRA4-bit 量化微调** 方案这能帮我们节省超过 60% 的显存。pythonimport torchfrom transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, BitsAndBytesConfigfrom datasets import load_datasetfrom peft import LoraConfig, get_peft_model, prepare_model_for_kbit_trainingfrom trl import SFTTrainer# 1. 配置参数model_id Qwen/Qwen3.6-35B-Instruct # 可替换为本地路径dataset_path dataset.jsonoutput_dir ./qwen3.6_35b_lora_output# 2. 加载 Tokenizertokenizer AutoTokenizer.from_pretrained(model_id, use_fastTrue)tokenizer.pad_token tokenizer.eos_token# 3. 配置 4-bit 量化以节省显存bnb_config BitsAndBytesConfig(load_in_4bitTrue,bnb_4bit_quant_typenf4,bnb_4bit_compute_dtypetorch.bfloat16,bnb_4bit_use_double_quantTrue)# 4. 加载基础模型model AutoModelForCausalLM.from_pretrained(model_id,quantization_configbnb_config,device_mapauto,torch_dtypetorch.bfloat16)# 准备量化训练model prepare_model_for_kbit_training(model)# 5. 配置 LoRA 矩阵lora_config LoraConfig(r16,lora_alpha32,target_modules[q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj],lora_dropout0.05,biasnone,task_typeCAUSAL_LM)model get_peft_model(model, lora_config)model.print_trainable_parameters()# 6. 加载并处理数据集dataset load_dataset(json, data_filesdataset_path, splittrain)# 7. 设置训练参数training_args TrainingArguments(output_diroutput_dir,per_device_train_batch_size2,gradient_accumulation_steps4,learning_rate2e-4,logging_steps10,num_train_epochs3,bf16True, # 显卡支持 bf16 推荐开启save_strategyepoch,report_tonone)# 8. 使用 SFTTrainer 启动训练trainer SFTTrainer(modelmodel,train_datasetdataset,peft_configlora_config,max_seq_length1024,tokenizertokenizer,argstraining_args,)print(--- 开始训练 ---)trainer.train()# 9. 保存 LoRA 权重trainer.model.save_pretrained(output_dir)tokenizer.save_pretrained(output_dir)print(f训练完成模型权重已保存至{output_dir})四、训练过程中的避坑指南显存优化如果你在运行过程中遇到了 OOM (Out of Memory) 报错可以通过调整以下几个参数进行“续命”1. per_device_train_batch_size: 设为 1。2. gradient_accumulation_steps: 相应调大如 8 或 16保证总的总步长Total Batch Size不变。3. max_seq_length: 裁剪你的文本长度从 1024 缩减到 512。4. 梯度检查点 (Gradient Checkpointing): 在 TrainingArguments 中加入 gradient_checkpointingTrue能空间换时间大幅降低显存开销。五、模型推理与效果验证训练完成后我们只需要加载基础模型和刚才保存的 LoRA 权重即可进行测试pythonimport torchfrom transformers import AutoModelForCausalLM, AutoTokenizerfrom peft import PeftModelbase_model_id Qwen/Qwen3.6-35B-Instructlora_dir ./qwen3.6_35b_lora_outputtokenizer AutoTokenizer.from_pretrained(lora_dir)model AutoModelForCausalLM.from_pretrained(base_model_id,torch_dtypetorch.bfloat16,device_mapauto)# 合并 LoRA 权重model PeftModel.from_pretrained(model, lora_dir)# 测试文本messages [{role: system, content: 你是一个专业的智能财务助理。},{role: user, content: 你好请问发票抬头错了怎么办}]text tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue)model_inputs tokenizer([text], return_tensorspt).to(model.device)generated_ids model.generate(**model_inputs,max_new_tokens512)generated_ids [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]response tokenizer.batch_decode(generated_ids, skip_special_tokensTrue)[0]print(模型输出\n, response)总结通过 QLoRA 技术我们成功在可控的算力成本内完成了对 Qwen3.6-35B的特定下游任务微调。如果你有更庞大的数据集可以通过调整学习率和 Epoch 进一步提升模型的垂直领域表现。如果你在微调过程中遇到任何报错如 bitsandbytes 环境冲突或 Flash Attention 编译问题欢迎在评论区留言交流