2026/5/14 4:48:42
网站建设
项目流程
哪些网站做的不好,德州东海建设集团网站,零基础怎么建设网站,网页搜索快捷键是什么对于刚接触大模型的程序员和小白而言#xff0c;微调是解锁大模型定制化能力的关键技能。本文从基础认知出发#xff0c;系统拆解大型语言模型#xff08;LLM#xff09;的核心结构、参数量计算、显存占用与存储需求#xff0c;再深入讲解微调全流程的关键技术#xff08…对于刚接触大模型的程序员和小白而言微调是解锁大模型定制化能力的关键技能。本文从基础认知出发系统拆解大型语言模型LLM的核心结构、参数量计算、显存占用与存储需求再深入讲解微调全流程的关键技术Prompt工程、数据构造、LoRA等搭配实操工具与平台使用指南帮你快速掌握大模型微调的核心逻辑与落地方法。一、微调相关知识介绍1.1. 认识大模型在介绍LLM的微调知识前我们先具象的认识下大模型长什么样子包括模型结构、参数量、精度、显存占用。1.1.1. 模型结构《Attention Is All You Need》是一篇Google提出的将Attention思想发挥到极致的论文。这篇论文中提出一个全新的模型叫 Transformer抛弃了以往深度学习任务里面使用到的 CNN 和 RNN。可以看到Encoder包含一个Muti-Head Attention模块是由多个Self-Attention组成而Decoder包含两个Muti-Head Attention。Muti-Head Attention上方还包括一个 Add Norm 层Add 表示残差连接 (Residual Connection) 用于防止网络退化Norm 表示 Layer Normalization用于对每一层的激活值进行归一化。LLM大模型基本选择以Decoder模块堆叠N层组成的网络结构。Transformer结构如下LLM大模型基本选择以Decoder模块堆叠N层组成的网络结构。1.1.2. 模型参数例如羊驼系列 LLaMA 大模型按照参数量的大小有四个型号LLaMA-7B、LLaMA-13B、LLaMA-33B 与 LLaMA-65B。这里的 B 是 billion 的缩写指代模型的参数规模。故最小的模型 7B 包含 70 亿个参数而最大的一款 65B 则包含 650 亿个参数。我们以大模型的最基本结构 Transformer 为例首先来看一下参数量是怎么算出来的。transformer 由 L 个相同的层组成每个层分为两个部分self-attention 和 MLP 层。 其中 self-attention 块不管用的是 self-attention 还是 multi-head self-attention参数量计算并不影响。 因为在输入时对 QKV 三个向量都进行了线性变换只是 multi-head self-attention 会对隐藏层 h 切分成 head 份而已。 那么 self-attention 块的参数量为4h²4h。 MLP 块由 2 个线性层组成这两个层的 shape 是先将维度 h 映射到 4h然后第二个线性层再将维度从 4h 映射回 h。 self-attention 和 MLP 块各有一个 layer normalization包含了 2 个可训练的参数尺度缩放参数 gamma和平移参数 beta形状都是 [h]。 那么这两个 layer normalization 参数量为4h。 那么每个 transformer 层的参数量就为12h²13h。 除此之外还有输入部分的词嵌入参数词向量的维度为 h假设词表大小 vocab size 为 V。 那么词嵌入的参数量为 Vh而输出层的权重矩阵通常与输入的词嵌入矩阵参数是共享的不会引入额外的参数量。 关于位置编码这部分参数比较少可以忽略。其中如果采用可训练的位置编码那么参数量为 N*hN 是最大序列长度例如 chatgpt 的 4k。 如果采用的是相对位置编码如旋转编码 RoPE 或者 AliBi则这部分就没有可训练的参数。 综上所述L 层的 transformer 模型的总参数量为 L12h²13hVh当隐藏维度 h 较大时可以忽略一次项模型参数量可以近似为 12Lh²。综上所述L 层的 transformer 模型的总参数量为 L12h²13hVh当隐藏维度 h 较大时可以忽略一次项模型参数量可以近似为 12Lh²。1.1.3. 模型显存如何计算大语言模型所需的显存4B是因为32位的浮点精度会占4个字节内存下面以运行16位精度的 Llama 70B 模型所需的 GPU 内存为例套用公式该模型有 700 亿参数。M (700 ∗ 4) / (32 / 16) ∗ 1.2 ≈ 140 * 1.2 168GB1.1.4. 模型存储我们以 LLaMA-7B 为例这个大模型参数量约为 70 亿假设每个参数都是一个 fp32即 4 个字节总字节就是 280 亿字节则 280 亿字节/1024KB/1024MB/1024GB 26.7GB当然这是原始的理论值我们再往下看。因为实际存储 weight 权重参数会存 fp16所以模型大小继续减半为 13.35GB。但是部分 layer norm 等数据会保留源格式 fp32因此实际会稍微有所增加到 13.5GB 左右我们从开源的 LLaMA-7B 的实际的存储结果来看是符合上面的计算的相信在介绍这部分后大家应该对LLM大模型的模型结构、参数量、精度、存储空间更具象的认识。1.2. 模型微调1.2.1. prompt工程模型微调通常来说虽然可以提高任务的效果但通常来说微调的成本远大于提示词调优模型微调相对来说复杂性高、资源需求大而且成本高。使用 OpenAI API 进行快速工程的最佳实践https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-apiprompt结构化、具体化、清晰化在微调之前先尝试优化prompt和fewshot来探索模型能力边界是否能解决现有问题合适的base-model类型和size的选取有了明确的效果保证后再微调得到更加稳定的效果输出和更小的size部署等需求。1.2.2. 数据构造有这么一句话在业界广泛流传数据和特征决定了机器学习的上限而模型和算法只是逼近这个上限而已。所以数据的构造至关重要需要建立对生成数据质量的把控。在chatgpt出来后业界最开始基于pretrain模型上做sft最受关注的工作之一是self-instruct蒸馏chatgpt得到高质量的sft数据很多后来的生成sft数据的工作是以这个工作为基础。核心思想是通过建立种子集然后prompt模型输出目标格式的数据通过后置ROUGE-L等筛选方法去重不断的加入种子集合来提升产出数据的多样性和质量。比如qwen2.5-7b是pretrain后的模型qwen2.5-7b-instrcut是基于qwen2.5-7b做了通用的SFT微调后得到。生成指令数据的流程由四个步骤组成。1指令生成2识别指令是否代表分类任务3用输入优先或输出优先的方法生成实例4过滤低质量数据。关注数据集的质量和丰富度我们提及微调更多是在通用SFT训练好的模型基础上再做领域的微调。可以更省事的选择俄把生成好的数据直接丢给模型去训练验证最后的效果但是如果朝着长期做效果迭代的方向我们需要对生成的数据是否符合预期有更现验的判断这也能够为后续如果微调后模型不符合预期的情况下来有debug的依据和方法。一方面是人来check数据质量另外一方面是可以通过规则或者LLM大模型来做后置的数据验证让模型来打分并给出推理过程等方式。数据量的问题上跟数据类型的分布关系很大需要产生不同任务下的高质量数据更需要关注数据分布。1.2.3. LoRA微调基于已有开源大模型进行微调训练如果采用预训练的方式对模型的所有参数都进行训练微调由于现有的开源模型参数量都十分巨大。PEFT (Parameter-Efficient Fine-Tuning)即对开源预训练模型的所有参数中的一小部分参数进行训练微调最后输出的结果和全参数微调训练的效果接近。LoRA论文LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS该方法的核心思想就是通过低秩分解来模拟参数的改变量从而以极小的参数量来实现大模型的间接训练。秩是矩阵中最长的独立行数或列数神经网络包含很多全连接层其借助于矩阵乘法得以实现然而很多全连接层的权重矩阵都是满秩的。因此论文的作者认为权重更新的那部分参数矩阵尽管随机投影到较小的子空间仍然可以有效的学习可以理解为针对特定的下游任务这些权重矩阵就不要求满秩。在涉及到矩阵相乘的模块在旁边增加一个新的通路通过前后两个矩阵A,B相乘第一个矩阵A负责降维第二个矩阵B负责升维中间层维度为r。其中rdr是矩阵的秩这样矩阵计算就从d x d变为d x r r x d参数量减少很多。将原部分跟新增的通路两部分的结果加起来作为最终的结果两边通路的输入跟输出维度是一致的。此外Transformer的权重矩阵包括Attention模块里用于计算query, key, value的WqWkWv以及多头attention的Wo,以及MLP层的权重矩阵LoRA只应用于Attention模块中的4种权重矩阵而且通过消融实验发现同时调整 Wq 和 Wv 会产生最佳结果。1.3. 强化学习instructGPT提出的SFT和RLHF的流程图在SFT模型的基础做强化学习的训练往往会提升模型的表现。我们需要一个模型来定量评判模型输出的回答在人类看来是否质量不错即输入 [提示(prompt)模型生成的回答] 奖励模型输出一个能表示回答质量的标量数字。1.把大量的promptOpen AI使用调用GPT-3用户的真实数据输入给第一步得到的语言模型对同一个问题可以让一个模型生成多个回答也可以让不同的微调fine-tune版本回答。2.让标注人员对同一个问题的不同回答排序实验发现发现不同的标注员打分的偏好会有很大的差异而这种差异就会导致出现大量的噪声样本。排序的话能获得大大提升一致性。3.这些不同的排序结果会通过某种归一化的方式变成定量的数据丢给模型训练从而获得一个奖励模型。也就是一个裁判员。1.3.1. DPO训练由于PPO需要4个模型加载2个推理2个训练成本较高而DPO只需要两个模型一个推理一个训练。开始训练时reference model和policy model都是同一个模型只不过在训练过程中reference model不会更新权重。目标函数梯度动态因子因此DPO的优化目的可以理解为通过训练 最大化正样本上的奖励 和负样本上的奖励两者的间距(margin)。 因为参考模型是不动的因此进一步可以理解为提升模型在正样本上的概率优化模型在正样本上的概率 大于 参考模型在正样本上的概率 降低模型在负样本上的概率优化模型在负样本上的概率 小于 参考模型在负样本上的概率。当我们的任务能够产出正负样例对的时候我们可以通过这种方式来微调模型提升表现。来让模型从正负样例中学到好的为什么好差的为什么差往往能够得到比SFT更优的效果。它和SFT的区别在于SFT只能告诉模型正例而没有负例。{ messages: [ { role: user, content: 你能帮我写一篇关于环境保护的文章吗? } ], chosen: { role: assistant, content: 当然可以。环境保护是一个非常重要的话题我们可以从减少碳排放、保护森林和水资源、推广可再生能源等方面来入手。你想要文章的具体方向和字数是多少呢 }, rejected: { role: assistant, content: 可以的环境保护是一个重要的话题。 } }二、微调实践工具使用介绍完一些初步的理论基础后这部分主要来讲大模型的具体微调流程和具体的操作细节。因为集团内外关于模型微调的工具也很丰富这里只给出我们团队常使用的平台和框架以及微调的实操流程。本文涉及几个内部平台说明星云平台模型训练平台TuningFactory基于LLaMA-Factory在星云平台上开发的框架Whale模型部署平台idealab请求开/闭源模型方式外部平台LLaMA-Factory-外部通用微调框架-本地微调模型https://github.com/hiyouga/LLaMA-Factory这里给出一个微调的实践简化流程如下数据构造idealab 请求请求部署在whale上的开源模型节约成本数据分析思考训练集和测试集的对齐数据质量、分布、量级训练平台的选择任务提交本地星云平台训练模型超参调整对验证集loss关注checkpoint的选择模型推理部署whale的推理加速、参数设置等测试集数据分析迭代 or Done2.1. 数据构造2.1.1. idealab工具idealab 帮助文档一共接入了包含文生文、多模态、向量化、bing搜索、代码生成等类别的大模型共计近50个涵盖了包含azure openai gpt系列、dalle阿里通义千问、淘天星辰谷歌vertexAI系列等主流模型。调用的方式-H Content-Type:application/json -H X-AK: xxxx -d { model: gpt-3.5-turbo, prompt: 你是谁 }收费依赖key需要预算申请主要用于闭源模型的调用部分免费目前通义系列百炼在线模型、deepseek r1、v3等是免费。2.1.2. 部署在whale上的开源模型whale平台上提供了丰富的开源模型部署根据调试或批量调用的需求可以分成访问免费部署模型和独立部署模型两部分。整体体验还是比较便捷对大模型部署支持的比较好比较推荐。访问whale部署的免费模型通过申请访问平台部署的公共模型可以快速调用。无需卡资源。独立部署在whale上模型如果本身的任务请求量大对耗时有要求等可以部署自己的开源模型。需要卡资源。在部署模型之后除了whale的UI界面去调用也支持sdk调用whale服务代码LLMChatStreamDemo.py核心代码如下from whale import TextGeneration, VipServerLocator from whale.util import Timeout response TextGeneration.chat( modelQwen-72B-Chat-Pro, messagesmsgs, streamTrue, temperature1.0, max_tokens2000, timeoutTimeout(60, 20), top_p0.8, extend_fieldsextend_fields)2.2. 训练平台的选择任务提交当我们通过上述方式生成好自己的训练集后就需要开始微调模型了。针对小任务/小模型可以在自己开发机上微调即可推荐使用LLaMA-Factory微调框架对于依赖较大资源或者数据量较大的情况可以使用TuningFactory框架结合星云平台做模型的训练。LLaMA-Factory代码库https://github.com/hiyouga/LLaMA-Factorylora微调scripts/sft_lora.shWORLD_SIZE8 LR1e-5 # 实验项目名需要在星云实验管理中创建实验或者选择你有权限的实验 # 如果不指定并且开启了report_toml_tracker,会默认使用 你工号_default 作为实验项目名 # TRACKER_PROJECT_NAME # if you want to train based on lora ckpt, please set LORA_CKPT and set MODEL_NAME to pretrained model # LORA_CKPTyour_nebula_project.your_lora_ckpt/versionyour_version/ckpt_idcheckpoint-xxx # LORA_CKPTdigital_live_chat.Google-RAG-7B/versionv1.4/ckpt_idcheckpoint-330 LORA_CKPTdigital_live_chat.sft_model_whale/versionv20.26/ckpt_idcheckpoint-210 args--stage dpo \ --model_name_or_path$MODEL_NAME \ --do_train \ --do_eval \ --val_size 0.05 \ --file_name${INPUT} \ --ranking \ --systemsystem \ --promptinput \ --chosenpos \ --rejectedneg \ --deepspeedscripts/ds_zero3.json \ --template$PROMPT_TEMPLATE \ --finetuning_type lora \ --gradient_checkpointing True \ --lora_targeto_proj,q_proj,k_proj,v_proj,up_proj,gate_proj,down_proj \ --lora_rank64 \ --lora_alpha16 \ --output_dirlocal/tmp/ckpt_save_path/ \ --overwrite_cache \ --per_device_train_batch_size 1 \ --gradient_accumulation_steps 4 \ --lr_scheduler_type cosine \ --logging_steps 10 \ --num_train_epochs 20 \ --learning_rate$LR \ --cutoff_len2048 \ --preprocessing_num_workers8 \ --dataloader_num_workers4 \ --plot_loss \ --report_tonone \ --pref_beta0.2 \ --pref_ftx0.5 \ --bf16在这里可以指定训练的lora checkpoint到指定的项目存储路径后续可以在whale平台直接调用非常方便。训练完成结果和统计图表如下:挑选eval集合上loss最低的checkpoint作为最优的模型。2.3. 微调模型部署在模型配置处可以搜索上一步中生成好的训练模型选择部署。自动化的流量和模型性能监控报表可视化的对话调试界面2.3.1. 推理加速在模型的推理加速上探索过以下三种whale平台上配置加速的手段降低加载精度效果会存在损失可以选fp16或者int8精度加载模型需要关注精度降低后的效果变化System-prompt缓存如果prompt长且固定可以用这种方法[{“task_id”: 1, “prompt”: |im_start|system\nYou are a helpful assistant.|im_end|\n|im_start|},{“task_id”: 2, “prompt”: “你是一个严谨的程序员你接下来需要非常谨慎的思考并回答以下问题:”}]投机采样-vanilla speculative decoding投机采样利用“大模型蒸馏后的小模型”预测结果由大模型验证结果如qwen-14b 常用蒸馏后的qwen 1b8作为小模型它可以在不损失生成效果前提下提速。以Qwen2.5-7B为例测试不同加速方法带来的提升平台自动支持推理引擎会根据请求自动凑batch推理支持多并发请求2.4. 测试集数据分析模型微调和部署完成后往往需要在我们的测试集上查看模型效果这依赖你需要有反映你线上真实情况的测试集细化的测评指标我们需要预先定义一个指标来判断模型的效果好坏对于指标定义不明确的任务尽量细化它的标准。可以让人工去评估也可以让大模型自动评估。2.5. 评估迭代优化 or 上线经过上述步骤有了新的模型效果后除了考虑算法工程耗时、部署资源、模型并发外效果上需要考虑是否能推送上线的关注点宏观整体指标上的对比机器/人工模型效果是否符合优化预期目标goodcase其他case上模型效果是否变差是否需要优化从指标和case分析中发现并定位问题从数据构造中不断去完善更高质量的数据探索更强模型和更优的微调方法。全是goodcase是个理想的情况实验结果往往会存在不符合预期或者跷跷板的问题这个时候需要思考是模型能力的问题、还是数据构造上有考虑不周的情况等。不同的任务/base模型/数据质量/训练参数和数据集都有关还是得结合具体场景来做分析和优化。一般经验来讲提升数据质量是最直接有效的方法在这个基础上再探索强化学习、推理模型等进一步解决目标问题的手段。最后近期科技圈传来重磅消息行业巨头英特尔宣布大规模裁员2万人传统技术岗位持续萎缩的同时另一番景象却在AI领域上演——AI相关技术岗正开启“疯狂扩招”模式据行业招聘数据显示具备3-5年大模型相关经验的开发者在大厂就能拿到50K×20薪的高薪待遇薪资差距肉眼可见业内资深HR预判不出1年“具备AI项目实战经验”将正式成为技术岗投递的硬性门槛。在行业迭代加速的当下“温水煮青蛙”式的等待只会让自己逐渐被淘汰与其被动应对不如主动出击抢先掌握AI大模型核心原理落地应用技术项目实操经验借行业风口实现职业翻盘深知技术人入门大模型时容易走弯路我特意整理了一套全网最全最细的大模型零基础学习礼包涵盖入门思维导图、经典书籍手册、从入门到进阶的实战视频、可直接运行的项目源码等核心内容。这份资料无需付费免费分享给所有想入局AI大模型的朋友扫码免费领取全部内容部分资料展示1、 AI大模型学习路线图2、 全套AI大模型应用开发视频教程从入门到进阶这里都有跟着老师学习事半功倍。3、 大模型学习书籍文档4、AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。5、大模型大厂面试真题整理了百度、阿里、字节等企业近三年的AI大模型岗位面试题涵盖基础理论、技术实操、项目经验等维度每道题都配有详细解析和答题思路帮你针对性提升面试竞争力。6、大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。学会后的收获• 基于大模型全栈工程实现前端、后端、产品经理、设计、数据分析等通过这门课可获得不同能力• 能够利用大模型解决相关实际项目需求 大数据时代越来越多的企业和机构需要处理海量数据利用大模型技术可以更好地处理这些数据提高数据分析和决策的准确性。因此掌握大模型应用开发技能可以让程序员更好地应对实际项目需求• 基于大模型和企业数据AI应用开发实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能 学会Fine-tuning垂直训练大模型数据准备、数据蒸馏、大模型部署一站式掌握• 能够完成时下热门大模型垂直领域模型训练能力提高程序员的编码能力 大模型应用开发需要掌握机器学习算法、深度学习框架等技术这些技术的掌握可以提高程序员的编码能力和分析能力让程序员更加熟练地编写高质量的代码。扫码免费领取全部内容这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】