高埗东莞微信网站建设php5 mysql网站开发实例精讲

张小明 2026/3/13 6:18:54
高埗东莞微信网站建设,php5 mysql网站开发实例精讲,有服务器域名源码怎么做网站平台,平面设计素材网有哪些一、前言 上上周的周末无事在家#xff0c;然后写了一篇《【有手就行】自己花20分钟从0开始训练一个“大模型”》#xff0c;结果发现这两个星期涨了几十个关注#xff0c;比我前面写了几个月文章得到的关注还多#xff0c;看来这种浅显易懂的、入门级的技术文章相对来说会…一、前言上上周的周末无事在家然后写了一篇《【有手就行】自己花20分钟从0开始训练一个“大模型”》结果发现这两个星期涨了几十个关注比我前面写了几个月文章得到的关注还多看来这种浅显易懂的、入门级的技术文章相对来说会有更多人爱看一些。既然如此我再把早先在做OddAgent时候微调语音助手功能的流程也简单理一下然后放出来给大家做一个参考吧。事实上上手学习大模型、人工智能相关的开发并没有什么太过高深的门槛真的很简单真的就是【有手就行】。二、大模型微调概述微调(Fine-tuning)有很多种不同的方法但是使用的场景以及代价也都是不一样的。作为一个没什么资源数据缺缺GPU缺缺的普通人来说考虑的肯定是低成本方案。方法类型参数更新范围计算成本适用场景典型工具框架全参数微调全部参数极高大数据集、高资源场景Hugging Face TransformersAdapter Tuning适配器参数低多任务、资源受限AdapterHub、PEFTLoRA/QLoRA低秩矩阵参数极低大模型单卡微调、小样本LoRA、QLoRAPEFT 库集成指令微调全量 / 部分参数中 - 高通用对话模型、多任务泛化Alpaca-LoRA、FastChat领域适配微调全量 / 部分参数中垂直领域任务自定义领域数据集 Transformers三、LoRA微调全流程前阵子在将小落同学项目的智能体代码摘成独立的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 lorapython3.12-y conda activate lora2. 模型下载下载模型前请注意一下你的硬盘空间整个模型需要955M的硬盘空间如果你跟我一样常年硬盘空间都是严重不足的请视情况清理一下空间避免下载失败。pipinstallmodelscope --index https://pypi.mirrors.ustc.edu.cn/simple modelscope download --model Qwen/Qwen2.5-0.5B-Instruct下载下来后会保存到指定的.cache这个目录下。如果是Windows默认是在C:\Users\Administrator\.cache目录下如果是Linux/Mac则是在.cache目录下。其中config.json定义模型结构tokenizer.json定义文本输入方式safetensors文件则存储模型的参数权重。3. 微调环境安装call pipinstalltorch --index-url https://download.pytorch.org/whl/cu121 call pipinstalltransformers 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.py Qwen2.5-0.5B-Instruct LoRA/QLoRA 微调脚本 该脚本用于对 Qwen2.5-0.5B-Instruct 模型进行低秩适应(LoRA)或量化低秩适应(QLoRA)微调 importtorchfrompeftimportTaskType,LoraConfig,get_peft_model,prepare_model_for_kbit_trainingfromdatasetsimportDatasetimportpandasaspdfromtransformersimport(AutoTokenizer,AutoModelForCausalLM,DataCollatorForSeq2Seq,TrainingArguments,Trainer,GenerationConfig)# 定义要微调的基础模型名称TRAINING_MODELQwen/Qwen2.5-0.5B-Instructdefload_dataset_json(path): 加载JSON格式的数据集 :param path: 数据集文件的完整路径 :return: 转换为Hugging Face Dataset格式的数据集 # 使用pandas读取JSON文件dfpd.read_json(path)# 将pandas DataFrame转换为Hugging Face DatasetdsDataset.from_pandas(df)returndsdefdataset_preprocess(ds): 对数据集进行预处理包括加载分词器和处理数据样本 :param ds: Hugging Face Dataset格式的原始数据集 :return: 预处理后的数据集和使用的分词器 # 加载预训练分词器# use_fastFalse: 使用慢速分词器支持更复杂的文本处理# trust_remote_codeTrue: 信任模型提供的自定义代码tokenizerAutoTokenizer.from_pretrained(TRAINING_MODEL,use_fastFalse,trust_remote_codeTrue)defprocess_func(example): 处理单个数据样本的内部函数 :param example: 单个数据样本包含instruct、input和output字段 :return: 处理后的样本包含input_ids、attention_mask和labels MAX_LENGTH384# 最大序列长度限制input_ids,attention_mask,labels[],[],[]# 构建指令部分的输入使用模型要求的对话格式instructiontokenizer(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# 不自动添加特殊标记因为我们已经手动添加)# 构建响应部分的输入responsetokenizer(f{example[output]},add_special_tokensFalse)# 合并指令和响应的token ids并添加pad_token作为结束input_idsinstruction[input_ids]response[input_ids][tokenizer.pad_token_id]# 合并注意力掩码pad_token位置设置为1表示需要关注attention_maskinstruction[attention_mask]response[attention_mask][1]# 构建标签指令部分用-100屏蔽不参与损失计算响应部分保留实际token idlabels[-100]*len(instruction[input_ids])response[input_ids][tokenizer.pad_token_id]# 截断超过最大长度的序列iflen(input_ids)MAX_LENGTH:input_idsinput_ids[:MAX_LENGTH]attention_maskattention_mask[:MAX_LENGTH]labelslabels[:MAX_LENGTH]return{input_ids:input_ids,attention_mask:attention_mask,labels:labels}# 应用处理函数到整个数据集并移除原始列名tokenized_idds.map(process_func,remove_columnsds.column_names)# 解码并打印第一个样本的输入用于调试tokenizer.decode(tokenized_id[0][input_ids])# 解码并打印第二个样本的标签过滤掉-100用于调试tokenizer.decode(list(filter(lambdax:x!-100,tokenized_id[1][labels])))returntokenized_id,tokenizerdeftrain(tokenized_id,tokenizer,cpuTrue): 执行模型微调的主函数 :param tokenized_id: 预处理后的数据集 :param tokenizer: 分词器 :param cpu: 是否使用CPU进行训练默认为TrueCPU训练 # 根据是否使用CPU选择数据类型# CPU训练使用bfloat16GPU训练使用float16dtypetorch.bfloat16ifcpuelsetorch.float16# 加载预训练模型# device_mapauto: 自动分配模型到可用设备CPU或GPU# torch_dtypedtype: 设置模型的数据类型modelAutoModelForCausalLM.from_pretrained(TRAINING_MODEL,device_mapauto,torch_dtypedtype)# 启用输入梯度检查点减少内存使用model.enable_input_require_grads()# 配置LoRA参数configLoraConfig(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配置到模型modelget_peft_model(model,config)# 配置训练参数argsTrainingArguments(output_dirf./output/{TRAINING_MODEL}_lora,# 模型输出目录per_device_train_batch_size4,# 每个设备的训练批量大小gradient_accumulation_steps4,# 梯度累积步数实际批量大小4*416logging_steps10,# 每10步记录一次日志num_train_epochs8,# 训练轮数save_steps100,# 每100步保存一次模型learning_rate1e-4,# 学习率save_on_each_nodeTrue,# 在每个节点上保存模型gradient_checkpointingTrue,# 启用梯度检查点减少内存使用)# 创建训练器trainerTrainer(modelmodel,# 要训练的模型argsargs,# 训练参数train_datasettokenized_id,# 训练数据集# 数据整理器用于处理批量数据data_collatorDataCollatorForSeq2Seq(tokenizertokenizer,paddingTrue),)# 开始训练trainer.train()defcombine_and_save_models(cpuTrue): 合并LoRA适配器和基础模型并保存合并后的模型 :param cpu: 是否使用CPU进行模型合并默认为True # 导入必要的库函数内部导入避免不必要的依赖加载fromtransformersimportAutoModelForCausalLM,AutoTokenizerimporttorchfrompeftimportPeftModel# 根据是否使用CPU选择数据类型dtypetorch.bfloat16ifcpuelsetorch.float16 model_pathTRAINING_MODEL# LoRA检查点路径假设是最后一个保存的检查点lora_pathf./output/{TRAINING_MODEL}_lora/checkpoint-100# 加载分词器tokenizerAutoTokenizer.from_pretrained(model_path,trust_remote_codeTrue)# 加载预训练模型评估模式modelAutoModelForCausalLM.from_pretrained(model_path,device_mapauto,# 自动分配设备torch_dtypedtype,# 设置数据类型trust_remote_codeTrue# 信任自定义代码).eval()# 设置为评估模式# 加载LoRA适配器并合并到基础模型modelPeftModel.from_pretrained(model,model_idlora_path)modelmodel.merge_and_unload()# 合并权重并卸载peft封装# 保存合并后的模型merged_model_pathf./merged_{TRAINING_MODEL}_loramodel.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# 加载数据集dsload_dataset_json(training_dataset)print(fdataset loaded, train size:{len(ds)},{ds[0:3]})# 预处理数据集tokenized_id,tokenizerdataset_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。fromtransformersimportAutoModelForCausalLM,AutoTokenizerimporttorchfrompeftimportPeftModelimportargparse# 添加argparse模块用于命令行参数解析model_pathQwen/Qwen2.5-0.5B-Instructlora_path./output/Qwen/Qwen2.5-0.5B-Instruct_lora/checkpoint-100deftest(instruct,cpuTrue): 测试微调后的LoRA模型 :param instruct: 用户指令内容通过命令行传入 :param cpu: 是否使用CPU进行推理默认为True # 加载tokenizertokenizerAutoTokenizer.from_pretrained(model_path,trust_remote_codeTrue)# 根据设备选择数据类型和设备映射ifcpu:dtypetorch.float16 device_mapcpu# 强制使用CPUdevicecpuelse:dtypetorch.bfloat16 device_mapauto# 自动分配设备devicecudaiftorch.cuda.is_available()elsecpu# 加载基础模型modelAutoModelForCausalLM.from_pretrained(model_path,device_mapdevice_map,# 使用明确的设备映射dtypedtype,trust_remote_codeTrue).eval()# 设置为评估模式# 加载LoRA权重modelPeftModel.from_pretrained(model,model_idlora_path)# 测试对话inputstokenizer.apply_chat_template([{role:user,content:你是一个智能会议语音助手请根据用户指令输出正确的指令和参数},{role:user,content:instruct}],add_generation_promptTrue,tokenizeTrue,return_tensorspt,return_dictTrue)# 将输入移动到与模型相同的设备inputsinputs.to(device)# 生成配置gen_kwargs{max_length:2500,do_sample:True,top_k:1}# 生成回复withtorch.no_grad():outputsmodel.generate(**inputs,**gen_kwargs)# 提取生成的部分outputsoutputs[:,inputs[input_ids].shape[1]:]# 解码并打印结果print(tokenizer.decode(outputs[0],skip_special_tokensTrue))defparse_args(): 解析命令行参数 :return: 解析后的参数对象 parserargparse.ArgumentParser(description测试LoRA微调后的Qwen2.5-0.5B-Instruct模型)# 必选参数用户指令parser.add_argument(--instruct,typestr,requiredTrue,help用户指令内容例如打开麦克风)# 可选参数是否使用CPU默认使用CPUparser.add_argument(--cpu,actionstore_true,help是否使用CPU进行推理默认使用CPU)# 可选参数是否使用GPUparser.add_argument(--gpu,actionstore_true,help是否使用GPU进行推理优先级高于--cpu)returnparser.parse_args()if__name____main__:# 解析命令行参数argsparse_args()# 确定是否使用CPU# 如果同时指定了--cpu和--gpu优先使用GPUuse_cpunotargs.gpuandargs.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技术交流群微信关注我的公众号奥德元让我们一起学习人工智能一起追赶这个时代。(若二维码过期了可私信我)
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做网站建设一条龙全包xampp下wordpress

Azure Monitor 的告警 Webhook 格式与钉钉机器人不兼容,需要一个中间服务进行格式转换。本文介绍如何使用 Azure Functions 实现告警转发,以及如何优化、管理和扩展这套方案。 一、问题背景 为什么需要转发服务? Azure Monitor 告警发送的 Webhook 格式: {"schema…

张小明 2026/3/10 15:44:01 网站建设

胶州做网站的在线注册免费域名

Alacritty终极指南:5分钟掌握跨平台GPU加速终端 【免费下载链接】alacritty A cross-platform, OpenGL terminal emulator. 项目地址: https://gitcode.com/GitHub_Trending/al/alacritty 在当今的开发环境中,一个高效、快速的终端模拟器是每个程…

张小明 2026/3/10 20:33:08 网站建设

做技术分享网站 盈利网站建设教程

近日,腾讯正式宣布开源旗下大语言模型Hunyuan-7B-Pretrain,这一70亿参数规模的模型凭借256K超长上下文窗口、创新的混合推理模式以及卓越的多场景适配能力,迅速成为AI领域关注的焦点。作为腾讯混元系列开源矩阵的核心成员,该模型不…

张小明 2026/3/12 20:51:29 网站建设

长春网站开发网页翻页电子书制作模板

在当今快速变化的商业环境中,传统分类模型面临严峻挑战:新业务类别不断涌现,标注数据成本高昂,模型更新周期漫长。零样本分类技术通过突破性的架构设计,实现了无需标注数据即可处理未知类别的分类任务,为企…

张小明 2026/3/12 23:18:14 网站建设

宣城公司网站建设wordpress 小说网站

联想平板电脑,包括小新Pad系列、拯救者Y系列等,以其出色的影音娱乐和移动办公体验赢得了众多用户。然而,与笔记本相比,平板更精密的集成度、频繁的移动使用特性,使其在遇到屏幕损坏、电池衰减、系统故障或接口问题时&a…

张小明 2026/3/13 3:26:57 网站建设

公司网上注册在哪个网站网站建设与管理感想

揭秘mall-admin-web:零基础搭建专业电商后台的完整解决方案 【免费下载链接】mall-admin-web mall-admin-web是一个电商后台管理系统的前端项目,基于VueElement实现。 主要包括商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财…

张小明 2026/3/13 4:35:14 网站建设