尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

【大模型微调】通义千问3-0.6B 模型微调,全程干货,小白也能轻松学会!!!

【大模型微调】通义千问3-0.6B 模型微调,全程干货,小白也能轻松学会!!! 前言在日常业务场景中业界普遍使用 DeepSeek 全量版、阿里千问等大型语言模型。与此同时模型生态平台上还存在大量轻量级模型其参数规模仅为数 B 级别甚至如 Qwen3 0.6B 这类更小规格的模型也有其生存空间与 DeepSeek 671B 的全量版本形成非常大的差异。那么小型语言模型存在的价值和使用场景在哪里。要回答这一问题企业可从以下维度评估自身实际情况数据安全合规性业务场景中涉及的数据是否属于敏感范畴是否需要满足本地私有化调用的合规要求。任务类型适配性当前模型调用的核心场景是处理简单指令型任务如信息检索、基础问答总结等还是需要复杂逻辑推理的深度任务如数据分析代码生成等。成本效益分析实际业务中的 Token 消耗规模如何api 账单费用是否过高。如果企业面临的是简单的指令型任务且有数据本地存储的要求那么就可以选择本地部署小模型去处理任务或者作为agent 中的一个节点。当企业确定适合采用小型语言模型后模型微调将成为提升模型业务适配性的关键技术手段。模型微调是指在预训练模型的基础上利用企业特定领域的标注数据对模型参数进行针对性调整使其更贴合业务需求。具体而言微调存在企业可收集与业务场景相关的文本数据如行业文档、历史对话记录、产品知识库等通过监督学习、强化学习等微调方法优化模型在特定任务上的表现。例如在智能客服场景中通过微调可使小型语言模型更好地理解企业产品术语和服务流程提升回答的准确性与专业性。微调也可以应用在数据清洗领域数据清洗是数据预处理的关键环节其核心目标是将原始的、杂乱无章的文本数据转换为符合企业业务需求的结构化数据格式。通过模型微调技术企业可训练小型语言模型自动识别文本中的关键信息并按照预设规则进行结构化转换。下面以一个客户投诉的场景演示qwen3-0.6B 模型微调和部署过程。一、任务要求假设企业有一个从客户投诉文本中抽取客户姓名地址联系方式具体投诉内容的一个任务。原始数据如下张三上海市徐汇区 110nafanexample.com。要求晚上清空街道给我跑步需要以 json 格式返回{name:张三,address:上海市徐汇区 110,email:nafanexample.com,question:要求晚上清空街道给我跑步}当然这个任务你可以使用 deepseek-R1 或者 Qwen3-235B这些大模型去完成或者通过python 代码实现本文以此为例重点介绍模型微调的方法。二、数据准备导入库fromdatasetsimportDatasetimport pandasaspdfrom transformersimportAutoTokenizer,AutoModelForCausalLM,DataCollatorForSeq2Seq,TrainingArguments,Trainer,GenerationConfigfrom peftimportLoraConfig,TaskType,get_peft_modelimport torch# 将JSON文件转换为CSV文件df pd.read_json(fake_sft.json)ds Dataset.from_pandas(df)ds[:3]model_idQwen/Qwen3-0.6BtokenizerAutoTokenizer.from_pretrained(model_id,use_fastFalse)tokenizer对大语言模型进行supervised-finetuningsft有监督微调的数据格式如下{instruction:回答以下用户问题仅输出答案。,input:11等于几?,output:2}其中instruction是用户指令告知模型其需要完成的任务input是用户输入是完成用户指令所必须的输入内容output是模型应该给出的输出。有监督微调的目标是让模型具备理解并遵循用户指令的能力。因此在构建数据集时我们应针对我们的目标任务针对性构建数据。Qwen3采用的Chat Template格式如下messages[{role:system,content:You are a helpful AI},{role:user,content:How are you?},{role:assistant,content:Im fine, think you. and you?},]texttokenizer.apply_chat_template(messages,tokenizeFalse,add_generation_promptTrue,enable_thinkingFalse)print(text)|im_start|systemYou are a helpful AI|im_end||im_start|userHow are you?|im_end||im_start|assistantthink/thinkIm fine,think you.andyou?|im_end||im_start|assistantthink/thinkLoRALow-Rank Adaptation训练的数据是需要经过格式化、编码之后再输入给模型进行训练的我们需要先将输入文本编码为input_ids将输出文本编码为labels编码之后的结果是向量。首先定义一个预处理函数这个函数用于对每一个样本同时编码其输入、输出文本并返回一个编码后的字典defprocess_func(example):MAX_LENGTH1024# 设置最大序列长度为1024个token input_ids, attention_mask, labels [], [], [] # 初始化返回值 # 适配chat_template instruction tokenizer( fs|im_start|system\n{example[system]}|im_end|\n f|im_start|user\n{example[instruction] example[input]}|im_end|\n f|im_start|assistant\nthink\n\n/think\n\n, add_special_tokensFalse ) response tokenizer(f{example[output]}, add_special_tokensFalse) # 将instructio部分和response部分的input_ids拼接并在末尾添加eos token作为标记结束的token input_ids instruction[input_ids] response[input_ids] [tokenizer.pad_token_id] # 注意力掩码表示模型需要关注的位置 attention_mask instruction[attention_mask] response[attention_mask] [1] # 对于instruction使用-100表示这些位置不计算loss即模型不需要预测这部分 labels [-100] * len(instruction[input_ids]) response[input_ids] [tokenizer.pad_token_id] if len(input_ids) MAX_LENGTH: # 超出最大序列长度截断 input_ids input_ids[:MAX_LENGTH] attention_mask attention_mask[:MAX_LENGTH] labels labels[:MAX_LENGTH] return { input_ids: input_ids, attention_mask: attention_mask, labels: labels }tokenized_idds.map(process_func,remove_columnsds.column_names)tokenized_idtokenizer.decode(tokenized_id[0][input_ids])tokenizer.decode(list(filter(lambdax:x!-100,tokenized_id[1][labels])))三、加载模型加载模型并配置LoraConfigmodelAutoModelForCausalLM.from_pretrained(model_id,device_mapauto,torch_dtypetorch.bfloat16)modelQwen3ForCausalLM((model):Qwen3Model((embed_tokens):Embedding(151936,1024)(layers):ModuleList((0-27):28x Qwen3DecoderLayer((self_attn):Qwen3Attention((q_proj):Linear(in_features1024,out_features2048,biasFalse)(k_proj):Linear(in_features1024,out_features1024,biasFalse)(v_proj):Linear(in_features1024,out_features1024,biasFalse)(o_proj):Linear(in_features2048,out_features1024,biasFalse)(q_norm):Qwen3RMSNorm((128,),eps1e-06)(k_norm):Qwen3RMSNorm((128,),eps1e-06))(mlp):Qwen3MLP((gate_proj):Linear(in_features1024,out_features3072,biasFalse)(up_proj):Linear(in_features1024,out_features3072,biasFalse)(down_proj):Linear(in_features3072,out_features1024,biasFalse)(act_fn):SiLU())(input_layernorm):Qwen3RMSNorm((1024,),eps1e-06)(post_attention_layernorm):Qwen3RMSNorm((1024,),eps1e-06)))(norm):Qwen3RMSNorm((1024,),eps1e-06)(rotary_emb):Qwen3RotaryEmbedding())(lm_head):Linear(in_features1024,out_features151936,biasFalse))model.enable_input_require_grads()# 开启梯度检查点时要执行该方法四、Lora 配置LoraConfig这个类中可以设置很多参数比较重要的如下task_type模型类型现在绝大部分decoder_only的模型都是因果语言模型CAUSAL_LMtarget_modules需要训练的模型层的名字主要就是attention部分的层不同的模型对应的层的名字不同rLoRA的秩决定了低秩矩阵的维度较小的r意味着更少的参数lora_alpha缩放参数与r一起决定了LoRA更新的强度。实际缩放比例为lora_alpha/r在当前示例中是32 / 8 4倍lora_dropout应用于LoRA层的dropout rate用于防止过拟合frompeftimportLoraConfig,TaskType,get_peft_model configLoraConfig(task_typeTaskType.CAUSAL_LM,target_modules[q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj],inference_modeFalse,# 训练模式 r8, # Lora 秩 lora_alpha32, # Lora alaph具体作用参见 Lora 原理 lora_dropout0.1# Dropout 比例)configmodelget_peft_model(model,config)configmodel.print_trainable_parameters()五、Training Argumentsoutput_dir模型的输出路径per_device_train_batch_size每张卡上的batch_sizegradient_accumulation_steps: 梯度累计num_train_epochs顾名思义epochargsTrainingArguments(output_dirQwen3_instruct_lora,per_device_train_batch_size4,gradient_accumulation_steps4,logging_steps1,num_train_epochs3,save_steps50,learning_rate1e-4,save_on_each_nodeTrue,gradient_checkpointingTrue,report_tonone,)六、模型导入VLLM进入微调后的文件夹Qwen3_instruct_lora 检查 checkpoint(vllm)rootwuyou-Standard-PC-Q35-ICH9-2009:~# cd Qwen3_instruct_lora/(vllm) rootwuyou-Standard-PC-Q35-ICH9-2009:~/Qwen3_instruct_lora# lscheckpoint-50 checkpoint-57把微调后的qwen3 模型和原始模型合并生成一个可以直接部署的模型。fromtransformersimportAutoTokenizer,AutoModelForCausalLMfrom peftimportPeftModel# 路径设置base_model_path /root/qwenmodels # 本地原始模型lora_model_path /root/Qwen3_instruct_lora/checkpoint-57 # 微调后的 checkpoint 路径merged_model_path /root/Qwen3-0.6B-merged # 合并后的新模型保存路径# 加载基础模型model AutoModelForCausalLM.from_pretrained(base_model_path, device_mapcpu, torch_dtypeauto)# 加载 LoRAmodel PeftModel.from_pretrained(model, lora_model_path)# 合并 LoRA 权重model model.merge_and_unload()# 保存合并后的模型model.save_pretrained(merged_model_path)tokenizer AutoTokenizer.from_pretrained(base_model_path, use_fastFalse)tokenizer.save_pretrained(merged_model_path)print(f✅ LoRA 合并完成模型已保存到:{merged_model_path})合并后的模型文件存放在/root/Qwen3-0.6B-merged使用 VLLM 启动模型8000 端口监听成功后使用接口进行任务测试curl http://220.168.146.21:25325/v1/chat/completions \-HAuthorization: Bearer token-abc123\-HContent-Type: application/json\-d{ model: Qwen3-0.6B-merged, messages: [ {role: system, content: 将文本中的name、address、email、question提取出来以json格式输出/no_think}, {role: user, content: 张三上海市徐汇区 110nafanexample.com。要求晚上清空街道给我跑步} ] }接口返回结果包含nameaddressemailquestion 的json 格式。实现微调目标。{id:chatcmpl-99b7aa2c0ee44c7aa5d87a8a03ef61c3,object:chat.completion,created:1748597131,model:Qwen3-0.6B-merged,choices:[{index:0,message:{role:assistant,reasoning_content:null,content:think\n\n/think\n\njson\n{\n \name\: \张三\,\n \address\: \上海市徐汇区 110\,\n \email\: \nafanexample.com\,\n \question\: \要求晚上清空街道给我跑步\\n}\n,tool_calls:[]},logprobs:null,finish_reason:stop,stop_reason:151643}],usage:{prompt_tokens:61,total_tokens:119,completion_tokens:58,prompt_tokens_details:null},prompt_logprobs:null}json 格式化后效果总结微调后的 qwen3-0.6B 模型处理简单的指令型任务效率非常高一张 3090 或者 4090 卡就可以跑的飞快经过微调后的模型能准确的完成数据清洗的任务本地部署能符合严苛的数据安全要求且能为企业省下大笔 API 费用。最后为什么要学AI大模型当下⼈⼯智能市场迎来了爆发期并逐渐进⼊以⼈⼯通⽤智能AGI为主导的新时代。企业纷纷官宣“ AI ”战略为新兴技术⼈才创造丰富的就业机会⼈才缺⼝将达 400 万DeepSeek问世以来生成式AI和大模型技术爆发式增长让很多岗位重新成了炙手可热的新星岗位薪资远超很多后端岗位在程序员中稳居前列。与此同时AI与各行各业深度融合飞速发展成为炙手可热的新风口企业非常需要了解AI、懂AI、会用AI的员工纷纷开出高薪招聘AI大模型相关岗位。最近很多程序员朋友都已经学习或者准备学习 AI 大模型后台也经常会有小伙伴咨询学习路线和学习资料我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频全系列的学习资料这些学习资料不仅深入浅出而且非常实用让大家系统而高效地掌握AI大模型的各个知识点。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】AI大模型系统学习路线在面对AI大模型开发领域的复杂与深入精准学习显得尤为重要。一份系统的技术路线图不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点还能提供一条高效、有序的学习路径。但知道是一回事做又是另一回事初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性在这基础上找到高质量的学习资源不浪费时间、不走弯路又是重中之重。AI大模型入门到实战的视频教程项目包看视频学习是一种高效、直观、灵活且富有吸引力的学习方式可以更直观地展示过程能有效提升学习兴趣和理解力是现在获取知识的重要途径光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。海量AI大模型必读的经典书籍PDF阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。600AI大模型报告实时更新这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。AI大模型面试真题答案解析我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表