网站建设国家有补贴吗遵义网站建设制作
2026/4/18 18:01:04 网站建设 项目流程
网站建设国家有补贴吗,遵义网站建设制作,定制微信小程序,村建站是什么部门文章详细介绍了使用LoRA微调技术对Qwen2.5-0.5B-Instruct模型进行微调#xff0c;使其成为会议语音助手的完整流程。从环境配置、模型下载、数据准备到代码实现和测试验证#xff0c;展示了即使在普通笔记本上也能完成微调训练。微调可增强模型特定领域的能力#xff0c;减少…文章详细介绍了使用LoRA微调技术对Qwen2.5-0.5B-Instruct模型进行微调使其成为会议语音助手的完整流程。从环境配置、模型下载、数据准备到代码实现和测试验证展示了即使在普通笔记本上也能完成微调训练。微调可增强模型特定领域的能力减少幻觉提高一致性降低使用成本而数据质量是决定微调效果的关键因素。一、前言上上周的周末无事在家然后写了一篇《【有手就行】自己花20分钟从0开始训练一个“大模型”[1]》结果发现这两个星期涨了几十个关注比我前面写了几个月文章得到的关注还多看来这种浅显易懂的、入门级的技术文章相对来说会有更多人爱看一些。 既然如此我再把早先在做OddAgent[2]时候微调语音助手功能的流程也简单理一下然后放出来给大家做一个参考吧。事实上上手学习大模型、人工智能相关的开发并没有什么太过高深的门槛真的很简单真的就是【有手就行】。二、大模型微调概述微调(Fine-tuning)有很多种不同的方法但是使用的场景以及代价也都是不一样的。作为一个没什么资源数据缺缺GPU缺缺的普通人来说考虑的肯定是低成本方案。方法类型参数更新范围计算成本适用场景典型工具框架全参数微调全部参数极高大数据集、高资源场景Hugging Face TransformersAdapter Tuning适配器参数低多任务、资源受限AdapterHub、PEFTLoRA/QLoRA低秩矩阵参数极低大模型单卡微调、小样本LoRA、QLoRAPEFT 库集成指令微调全量 / 部分参数中 - 高通用对话模型、多任务泛化Alpaca-LoRA、FastChat领域适配微调全量 / 部分参数中垂直领域任务自定义领域数据集 Transformers三、LoRA微调全流程前阵子在将小落同学项目[3]的智能体代码摘成独立的OddAgent项目时实践的是一个会议相关的语音助手功能该功能有针对Qwen2.5-0.5B-Instruct模型和Qwen3-4B-Instruct-2507这两个模型重点做了一些测试和验证用的就是其中成本最低的LoRA微调。 最后跑下来Qwen3-4B-Instruct-2507的效果要显著好于Qwen2.5-0.5B-Instruct有同时针对这两个模型用同一套数据集去做了LoRA微调。 因此本文的重点就放在了Qwen2.5-0.5B-Instruct的LoRA微调上因为后面我还准备再继续针对这个模型再补充一些训练集来做一下微调目标是在这个模型上也能做到100%的意图/槽位准确率。跟之前训练大模型一样还是在我家里的这个10年前的老笔记本上进行的。硬件配置CPU: i7-8850H CPU 2.60GHz16G内存微调训练时长约50分钟由于训练时还在用这个笔记本上网课所以时长仅供参考1. 创建虚拟环境为了不影响现有的python环境建议为这个LoRA训练单独创建一个环境。个人习惯用conda环境可复用节省硬盘空间venv或者vu也都一样全看大家的个人喜好。conda create -n lora python3.12 -yconda activate lora2. 模型下载下载模型前请注意一下你的硬盘空间整个模型需要955M的硬盘空间如果你跟我一样常年硬盘空间都是严重不足的请视情况清理一下空间避免下载失败。pip install modelscope --index https://pypi.mirrors.ustc.edu.cn/simplemodelscope download --model Qwen/Qwen2.5-0.5B-Instruct下载下来后会保存到指定的.cache这个目录下。如果是Windows默认是在C:\Users\Administrator\.cache目录下如果是Linux/Mac则是在.cache目录下。 其中config.json定义模型结构tokenizer.json定义文本输入方式safetensors文件则存储模型的参数权重。3. 微调环境安装call pip install torch --index-url https://download.pytorch.org/whl/cu121call pip install transformers accelerate bitsandbytes peft datasets trl streamlit sentencepiece tensorboard4. 数据库集准备训练需要你预先准备好你用于训练的数据集但是。。。凡事总会有一个“但是”今天的“但是”是 要数据对不起没有 换成几年前哥必须对这个“但是”暴跳如雷然而今天有了大模型腰不酸了背不疼了雷没有了直接用其他大模型自动为每个意图生成50条数据提示词略格式如下{ instruct: 启动工作会议, input: , output: { tool_name: INSTANT_MEETING, parameters: { meeting_name: 工作会议 } } }, { instruct: 创建汇报会会议, input: , output: { tool_name: INSTANT_MEETING, parameters: { meeting_name: 汇报会 } } },intruct为用户指令ouput字段为期望输出5. LoRA微调代码1微调训练代码我的完整代码代码文件名train_lora.pyQwen2.5-0.5B-Instruct LoRA/QLoRA 微调脚本该脚本用于对 Qwen2.5-0.5B-Instruct 模型进行低秩适应(LoRA)或量化低秩适应(QLoRA)微调import torchfrom peft import TaskType, LoraConfig, get_peft_model, prepare_model_for_kbit_trainingfrom datasets import Datasetimport pandas as pdfrom transformers import ( AutoTokenizer, AutoModelForCausalLM, DataCollatorForSeq2Seq, TrainingArguments, Trainer, GenerationConfig)# 定义要微调的基础模型名称TRAINING_MODEL Qwen/Qwen2.5-0.5B-Instructdef load_dataset_json(path): 加载JSON格式的数据集 :param path: 数据集文件的完整路径 :return: 转换为Hugging Face Dataset格式的数据集 # 使用pandas读取JSON文件 df pd.read_json(path) # 将pandas DataFrame转换为Hugging Face Dataset ds Dataset.from_pandas(df) return dsdef dataset_preprocess(ds): 对数据集进行预处理包括加载分词器和处理数据样本 :param ds: Hugging Face Dataset格式的原始数据集 :return: 预处理后的数据集和使用的分词器 # 加载预训练分词器 # use_fastFalse: 使用慢速分词器支持更复杂的文本处理 # trust_remote_codeTrue: 信任模型提供的自定义代码 tokenizer AutoTokenizer.from_pretrained(TRAINING_MODEL, use_fastFalse, trust_remote_codeTrue) def process_func(example): 处理单个数据样本的内部函数 :param example: 单个数据样本包含instruct、input和output字段 :return: 处理后的样本包含input_ids、attention_mask和labels MAX_LENGTH 384 # 最大序列长度限制 input_ids, attention_mask, labels [], [], [] # 构建指令部分的输入使用模型要求的对话格式 instruction tokenizer( f|im_start|system\n现在你要扮演会议语音助手|im_end|\n|im_start|user\n{example[instruct] example[input]}|im_end|\n|im_start|assistant\n, add_special_tokensFalse # 不自动添加特殊标记因为我们已经手动添加 ) # 构建响应部分的输入 response tokenizer(f{example[output]}, add_special_tokensFalse) # 合并指令和响应的token ids并添加pad_token作为结束 input_ids instruction[input_ids] response[input_ids] [tokenizer.pad_token_id] # 合并注意力掩码pad_token位置设置为1表示需要关注 attention_mask instruction[attention_mask] response[attention_mask] [1] # 构建标签指令部分用-100屏蔽不参与损失计算响应部分保留实际token id 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_id ds.map(process_func, remove_columnsds.column_names) # 解码并打印第一个样本的输入用于调试 tokenizer.decode(tokenized_id[0][input_ids]) # 解码并打印第二个样本的标签过滤掉-100用于调试 tokenizer.decode(list(filter(lambda x: x ! -100, tokenized_id[1][labels]))) return tokenized_id, tokenizerdef train(tokenized_id, tokenizer, cpuTrue): 执行模型微调的主函数 :param tokenized_id: 预处理后的数据集 :param tokenizer: 分词器 :param cpu: 是否使用CPU进行训练默认为TrueCPU训练 # 根据是否使用CPU选择数据类型 # CPU训练使用bfloat16GPU训练使用float16 dtype torch.bfloat16 if cpu else torch.float16 # 加载预训练模型 # device_mapauto: 自动分配模型到可用设备CPU或GPU # torch_dtypedtype: 设置模型的数据类型 model AutoModelForCausalLM.from_pretrained(TRAINING_MODEL, device_mapauto, torch_dtypedtype) # 启用输入梯度检查点减少内存使用 model.enable_input_require_grads() # 配置LoRA参数 config LoraConfig( task_typeTaskType.CAUSAL_LM, # 任务类型为因果语言模型 # 指定要微调的模型模块 target_modules[q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj], inference_modeFalse, # 训练模式True为推理模式 r8, # LoRA秩控制适配器的维度 lora_alpha32, # LoRA缩放因子通常为r的4倍 lora_dropout0.1 # Dropout比例防止过拟合 ) # 应用LoRA配置到模型 model get_peft_model(model, config) # 配置训练参数 args TrainingArguments( output_dirf./output/{TRAINING_MODEL}_lora, # 模型输出目录 per_device_train_batch_size4, # 每个设备的训练批量大小 gradient_accumulation_steps4, # 梯度累积步数实际批量大小4*416 logging_steps10, # 每10步记录一次日志 num_train_epochs8, # 训练轮数 save_steps100, # 每100步保存一次模型 learning_rate1e-4, # 学习率 save_on_each_nodeTrue, # 在每个节点上保存模型 gradient_checkpointingTrue, # 启用梯度检查点减少内存使用 ) # 创建训练器 trainer Trainer( modelmodel, # 要训练的模型 argsargs, # 训练参数 train_datasettokenized_id, # 训练数据集 # 数据整理器用于处理批量数据 data_collatorDataCollatorForSeq2Seq(tokenizertokenizer, paddingTrue), ) # 开始训练 trainer.train() def combine_and_save_models(cpuTrue): 合并LoRA适配器和基础模型并保存合并后的模型 :param cpu: 是否使用CPU进行模型合并默认为True # 导入必要的库函数内部导入避免不必要的依赖加载 from transformers import AutoModelForCausalLM, AutoTokenizer import torch from peft import PeftModel # 根据是否使用CPU选择数据类型 dtype torch.bfloat16 if cpu else torch.float16 model_path TRAINING_MODEL # LoRA检查点路径假设是最后一个保存的检查点 lora_path f./output/{TRAINING_MODEL}_lora/checkpoint-100 # 加载分词器 tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) # 加载预训练模型评估模式 model AutoModelForCausalLM.from_pretrained( model_path, device_mapauto, # 自动分配设备 torch_dtypedtype, # 设置数据类型 trust_remote_codeTrue # 信任自定义代码 ).eval() # 设置为评估模式 # 加载LoRA适配器并合并到基础模型 model PeftModel.from_pretrained(model, model_idlora_path) model model.merge_and_unload() # 合并权重并卸载peft封装 # 保存合并后的模型 merged_model_path f./merged_{TRAINING_MODEL}_lora model.save_pretrained(merged_model_path) tokenizer.save_pretrained(merged_model_path) print(fMerged model saved to {merged_model_path})# 主程序入口if __name__ __main__: print(Start to train...) # 训练数据集路径 training_dataset ./data/train.json # 加载数据集 ds load_dataset_json(training_dataset) print(fdataset loaded, train size: {len(ds)}, {ds[0:3]}) # 预处理数据集 tokenized_id, tokenizer dataset_preprocess(ds) print(fdataset preprocessed, start to run training...) # 执行训练 train(tokenized_id, tokenizer, cpuTrue) # 合并并保存模型 print(Start to combine and save models...) combine_and_save_models(cpuTrue) print(Done)2微调训练python train_lora.py整个微调训练在我这个10年前的老笔记本电脑上用CPU跑总共花了2936.4626秒约48.94分钟)。所以如果你也是在一个老电脑上跑的话执行了训练后可以自己去玩一会儿了回来可能就训练完成了。3微调输出文件结构微调完成后输出目录结构如下图所示其中微调后的参数权重位于output\Qwen\Qwen2.5-0.5B-Instruct_lora目录下。合并后的模型位于merged_Qwen\Qwen2.5-0.5B-Instruct_lora目录下。4推理验证微调完成后可以用如下代码进行推理验证。 我的测试程序完整代码。文件名test_lora.py。from transformers import AutoModelForCausalLM, AutoTokenizerimport torchfrom peft import PeftModelimport argparse # 添加argparse模块用于命令行参数解析model_path Qwen/Qwen2.5-0.5B-Instructlora_path ./output/Qwen/Qwen2.5-0.5B-Instruct_lora/checkpoint-100def test(instruct, cpuTrue): 测试微调后的LoRA模型 :param instruct: 用户指令内容通过命令行传入 :param cpu: 是否使用CPU进行推理默认为True # 加载tokenizer tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) # 根据设备选择数据类型和设备映射 if cpu: dtype torch.float16 device_map cpu # 强制使用CPU device cpu else: dtype torch.bfloat16 device_map auto # 自动分配设备 device cuda if torch.cuda.is_available() else cpu # 加载基础模型 model AutoModelForCausalLM.from_pretrained( model_path, device_mapdevice_map, # 使用明确的设备映射 dtypedtype, trust_remote_codeTrue ).eval() # 设置为评估模式 # 加载LoRA权重 model PeftModel.from_pretrained(model, model_idlora_path) # 测试对话 inputs tokenizer.apply_chat_template( [ {role: user, content: 你是一个智能会议语音助手请根据用户指令输出正确的指令和参数}, {role: user, content: instruct} ], add_generation_promptTrue, tokenizeTrue, return_tensorspt, return_dictTrue ) # 将输入移动到与模型相同的设备 inputs inputs.to(device) # 生成配置 gen_kwargs {max_length: 2500, do_sample: True, top_k: 1} # 生成回复 with torch.no_grad(): outputs model.generate(**inputs, **gen_kwargs) # 提取生成的部分 outputs outputs[:, inputs[input_ids].shape[1]:] # 解码并打印结果 print(tokenizer.decode(outputs[0], skip_special_tokensTrue))def parse_args(): 解析命令行参数 :return: 解析后的参数对象 parser argparse.ArgumentParser(description测试LoRA微调后的Qwen2.5-0.5B-Instruct模型) # 必选参数用户指令 parser.add_argument(--instruct, typestr, requiredTrue, help用户指令内容例如打开麦克风) # 可选参数是否使用CPU默认使用CPU parser.add_argument(--cpu, actionstore_true, help是否使用CPU进行推理默认使用CPU) # 可选参数是否使用GPU parser.add_argument(--gpu, actionstore_true, help是否使用GPU进行推理优先级高于--cpu) return parser.parse_args()if __name__ __main__: # 解析命令行参数 args parse_args() # 确定是否使用CPU # 如果同时指定了--cpu和--gpu优先使用GPU use_cpu not args.gpu and args.cpu # 调用测试函数 test(instructargs.instruct, cpuuse_cpu)测试命令python test_lora.py经实测用这些训练数据集训练后的模型对指令识别的准确率提升还是非常的明显的不过前面经过几轮次的微调训练、测试验证、再微调训练、测试验证在我当前的需求规格下识别的准确率仍然未能达到100%最后一版是96.47%所以后面还需要再把意图/配位参数识别错误的一些命令词再补充整理一下然后再继续来做微调训练。四、补充说明再补充一些基础知识废话懂的人不需要看。1. 一点额外的信息在我实际的测试中用Qwen3-4B-Instruct-2507这个模型可以达到100%的准确率但是这个模型无法放到端侧上用。 如果你的目标是一个后端/云端的助手的话可以直接考虑这个模型 但是如果你的目标也跟我一样希望可以在端侧完全自主的完成整个指令、助手的功能的话那可以跟我一样选择Qwen2.5-0.5B-Instruct。Qwen3也有一些小模型比如Qwen3-0.6B。但是这个模型经测试对指令的解析效果超级差所以我放弃了它转回到Qwen2.5-0.5B-Instruct这个老一代的模型。不过这个可能跟需求也有一定关系大家有时间的话也可以自己部署测试一下效果。2. 为什么要微调能力考量让大模型在特定领域上增强。假设你们公司是做视频会议的然后你们的视频会议在某些功能、特性上又跟通用的视频会议不太一样[后面省略一万字]。学习新的知识。大模型训练的时候肯定没有一些你或者你们公司的未披露到网上的信息[后面省略一万字]。性能考量减少幻觉微调可以减少生成虚假或不相关信息的情况提高一致性适当的温度设置通常能产生高质量且富有创意的结果尽管每次输出的内容不同但质量始终保持在一个较高水平而不是有时好有时差。避免输出不必要的信息遇到ZZ、宗教或者其它一些你认为敏感问题时可让模型拒答。降低延迟通过优化和微调让较小参数的模型也可以实现不错的效果从而降低硬件要求降低延迟。成本考量自己训练基座大模型是大公司很花钱的事情。在开源模型上微调使用一些量化减少精度微调方式可以大大降低门槛还可以得到不错的效果。降低使用成本微调的模型与通用模型比模型的参数量会可以更少整体的成本也可做到更低。更大的控制权可以通过模型参数量、使用的资源自主平衡模型性能、耗时、吞吐量等为成本优化提供了空间。3. 数据是关键在现在这个时代完全可以说大部分的技术都是没有什么价值的因为大部分的技术都是有手就行。 真正的价值都在数据而且最有价值的数据往往都是一个个的专业领域的数据决定大模型微调效果的是数据决定你整个产品成败的也是数据这个事情一定要搞清楚。 所以呢建议大家从现在开始给自己好好做积累吧把你的行业数据、专业领域的数据一点点积累好这才是你的未来。AI时代未来的就业机会在哪里答案就藏在大模型的浪潮里。从ChatGPT、DeepSeek等日常工具到自然语言处理、计算机视觉、多模态等核心领域技术普惠化、应用垂直化与生态开源化正催生Prompt工程师、自然语言处理、计算机视觉工程师、大模型算法工程师、AI应用产品经理等AI岗位。掌握大模型技能就是把握高薪未来。那么普通人如何抓住大模型风口AI技术的普及对个人能力提出了新的要求在AI时代持续学习和适应新技术变得尤为重要。无论是企业还是个人都需要不断更新知识体系提升与AI协作的能力以适应不断变化的工作环境。因此这里给大家整理了一份《2025最新大模型全套学习资源》包括2025最新大模型学习路线、大模型书籍、视频教程、项目实战、最新行业报告、面试题等带你从零基础入门到精通快速掌握大模型技术由于篇幅有限有需要的小伙伴可以扫码获取1. 成长路线图学习规划要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。这里我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。2. 大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF3. 大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。4. 大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。5. 大模型行业报告行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。6. 大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。为什么大家都在学AI大模型随着AI技术的发展企业对人才的需求从“单一技术”转向 “AI行业”双背景。企业对人才的需求从“单一技术”转向 “AI行业”双背景。金融AI、制造AI、医疗AI等跨界岗位薪资涨幅达30%-50%。同时很多人面临优化裁员近期科技巨头英特尔裁员2万人传统岗位不断缩减因此转行AI势在必行这些资料有用吗这份资料由我们和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。大模型全套学习资料已整理打包有需要的小伙伴可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询