ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

大模型训练服务工作流:从微调到部署的完整实践指南

大模型训练服务工作流:从微调到部署的完整实践指南 最近在技术社群里被问到最多的一个问题不是某个模型怎么调参而是从“拿到一个大模型基线”到“线上跑出一个稳定服务”这条路到底应该怎么走。很多人手里有卡、有开源模型、也要训自己的数据但总是卡在半路数据准备好了不知道下一步怎么接训练跑完不知道权重怎么变成接口服务上了线又不知道怎么迭代维护。大模型训练服务工作流程听起来像是三件事拼在一起真正落地时你会发现它是一个从需求定义到数据、训练、部署、服务治理、再回流训练的完整链路任何一个环节断了前面的投入都白费。这篇文章我用自己的实际项目经验把完整流程拆开讲一遍覆盖做微调前怎么判断需求、怎么准备训练集和验证集、训练时怎么盯收敛和保存checkpoint、训练完怎么把模型变成API服务以及服务上线后怎么做增量训练闭环。无论是大模型微调、垂直领域模型还是像YOLOv8、nnUNet这类自建数据集训练的中小模型任务这套流程的大框架都是通用的只是每步的工具和参数不同。适合算法工程师、平台开发的同学以及正准备把模型推向生产环境的团队参考。1. 项目定位不先回答这三个问题训练跑起来也是白跑很多人拿到开源模型第一反应就是“先跑起来看看”。但这个习惯放到正经生产项目里非常危险因为大模型训练服务的成本比普通软件高一个量级你跑一版微调的GPU费用、耗时、人力投入都很大如果连“训练完拿什么验收”“训练结果给谁用”都没定义清楚训练跑完也只是一堆没有业务价值的checkpoint。我每次接到训练需求第一步一定不是给训练脚本而是逼着自己和需求方把定位问题聊透。第一个问题是当前场景到底需不需要动模型参数。业界常说80%的业务问题靠提示词工程、检索增强RAG和工具调用就能解决动模型是最后的手段。如果一个客服场景只是需要引用内部知识库回答问题那优先做RAG只有当模型的行为模式、输出格式、推理逻辑确实不符合要求时才进入微调流程。第二个问题是如果确认要训练属于哪一类训练。是从头预训练、领域继续预训练、有监督指令微调还是低成本的LoRA调参每一步对数据量级和GPU资源的要求差距非常大。第三个问题是如何定义“训练成功”。是看Loss降了多少还是看业务指标比如意图准确率、答案正确率、特定任务评测分数。1.1 任务类型决定整个流程的规模和成本从零开始训练一个大模型需要几万亿token的数据和成百上千张卡这个投入绝大多数团队根本不需要。现实中的大模型训练服务工作绝大多数指的是在开源基座模型的基础上做下游适配。一种常见的任务是继续预训练目的是让模型补充特定领域的词汇和知识比如医疗术语、法律条文、内部代码库风格通常用领域文本继续训练数据量在几千万到几十亿token不等。另一种是指令微调SFT用任务输入和标准输出对让模型学会“按指令回答”比如把口语化的产品咨询转成标准客服话术。还有一种是基于LoRA这类参数高效微调只训练一小部分额外参数显存需求大幅下降很多人用一张消费级显卡就能完成几十亿参数模型的微调数据量不需要太大几千到几万条高质量样本就能有非常明显的行为改变。这个分类必须写在项目文档的第一页因为它决定了数据团队要准备什么数据、运维要准备什么资源、算法要选什么框架。我见过不止一个项目在SFT阶段误用了预训练任务的数据清洗逻辑结果几千条样本喂进去模型几乎没有任何改变最后排查才发现是任务定位从一开始就错了。1.2 把可上线的验收标准写进计划而不是训练结束再想训练期间的Loss曲线反映的是模型对训练集的拟合程度但业务方根本不在乎你的Loss是多少他们只关心这个模型在真实场景里输出对不对。所以项目启动阶段就要定义一套“可上线标准”。标准至少要分成三个层次。第一是自动评测集准备一批和真实场景分布一致的输入样本每一条都有标准答案或关键点评分规则。指令生成类的任务可以记录每一轮输出请业务同事按“正确、部分正确、错误”三档人工打标或者干脆用更强大的模型做裁判打分。第二是离线回归测试集除了新功能样例外必须覆盖之前已经修复过的badcase防止增量训练把旧能力“学没了”。第三是线上灰度指标上线后不是一次性全量替换先让少量真实流量走新模型服务对比响应成功率、用户反馈率、二次转人工率这类业务指标达标后再逐步放量。这一小节看起来和“训练服务”没什么直接关系却是所有流程设计的出发点。训练、服务、评测在真正高效的团队里从来不是一个线性顺序而是一个以评测标准为中心的环形结构。后面每一步怎么选数据、设多少epoch、决定何时停训、能否上线服务本质都是拿标准去判断。2. 数据集与算力准备训练集质量决定服务效果上限训练集的质量上限就是模型效果的上限这句话在实践里会反复被验证。你训练脚本里设置的learning_rate、batch_size只是决定模型能靠近数据分布的程度但如果数据本身脏、偏、有泄漏模型再能拟合也只会把错误规律学进去服务上线后翻车就不可避免。很多人以为数据处理就是把文本收集起来去重其实在正式动手前需要先解决的是样本从哪里来、谁来标注、以什么格式存放。常见误区是没有去重、没有检测语种混杂、没有做训练集验证集测试集的正确切分导致模型训练的Loss很低但一到真实场景就泛化不了。2.1 数据清洗里最容易被忽视的几个坑我在做数据清洗时踩过很多坑每一条几乎都能在训练结果上看到明显的负面反馈。第一是重复样本和相似样本没有去重。公开语料里重复出现的高频句子会让模型在训练时反复看到同一条知识造成对特定表达的过度记忆。不仅仅是完全相同的字符串要处理经过轻微改写的近重复样本同样要小心可以按n-gram相似度或内容哈希聚类去重。第二是标签噪声。指令微调的数据一般是人工或半自动生成的标注员的理解偏差会直接成为模型学习的“标准答案”。很多人只统计样本条数不统计标注一致性导致同一个语义问题在一半样本里是正面答法另一半是负面答法模型学出来就会“精神分裂”。正式流程里要抽检标注结果并计算标注员之间的一致性不一致率超过一定阈值就要返工。第三是cleaning规则要版本化。清洗脚本不是一次性工具它会反复使用。数据工作者经常犯的错误是直接在命令行里改了一个正则就去重跑训练后来想要追溯这版模型学了什么数据根本无从查起。我现在的做法是把所有清洗逻辑写成一个带版本号的配置目录跟训练产物一样纳入管理保证任何一版模型都能对应到精确的数据版本。2.2 训练集、验证集、测试集切分与数据泄漏预防很多刚入行的同学对“验证集Loss很高”的第一反应是继续调参却忽略了可能数据切分阶段就已经发生了泄漏。比如同一个用户的多轮对话散落在训练集和验证集里模型在训练时已经见过验证集里对话的上文验证分数自然虚高。更典型的是时间泄漏。处理时序类数据或用最新数据做增量训练时如果切分不按时间边界而是随机切分模型就会看到未来信息离线指标非常漂亮上线后立刻原形毕露。正确做法是严格按事件时间排序取前一段时间做训练集、后一段时间做验证集和测试集。测试集一旦定下来就不允许再进入任何调参循环。很多人为了“多训一点数据”把测试集也塞进训练集短时间看效果更好但从此你没有任何客观手段判断模型是否真的可用。以大模型场景为例我至少会留出1000条以上高质量测试样本覆盖各业务分支永不参与训练只用来做上线前的最终裁决。2.3 算力估算是训练启动前必须交的作业训练服务工作流里算力估算不准确是项目延期的头号原因。全参数微调一个7B模型如果用bf16混合精度训练模型权重本身占14GB加上梯度、优化器状态和激活值单卡显存需求远超很多人以为的“模型多大就占多大”。这里有个粗算公式可以给第一次做微调的团队参考。全量微调时AdamW优化器状态一般需要为每个参数保存一阶动量、二阶动量和参数副本显存开销大约是模型权重的12到16倍。一个7B参数模型用bf16权重约14GB优化器状态可能在30GB以上激活值另算所以单张40GB的A100只能勉强做很小的batch。这就是为什么绝大多数业务场景选择LoRA因为可训练参数只有原来的百分之一甚至千分之一显存占用能降到纯模型推理的两三倍水平。算力估算不只是看显存还要算总训练时长。一个粗略公式是总训练时长约等于总token数乘以单卡处理一个token的耗时再除以总并行卡数。实践中想估算准确最好先拿一小批数据在一张卡上做一次完整预热测出实际的每秒处理token数再外推到全量数据和全卡规模比任何理论公式都靠谱。我在训练启动前一定会跑这样一个“小样本预演”同时也顺便验证数据加载逻辑和训练代码是否正确比起直接提交全量任务后才发现数据路径写错要高效太多。3. 训练任务管理不只是把loss跑低还要能随时恢复和复盘训练一旦提交到集群上很多人就以为只要隔一会儿看一眼loss曲线就行。大模型训练在真实环境里是一段漫长且脆弱的过程经常要跑十几个小时甚至几天一个脏数据样本、一次显存溢出、一次节点掉线都可能导致任务中断。能不能把训练过程管理好直接决定了整个团队的效率和成本。这里说的“管理”包含三层意思训练参数和脚本要可复现checkpoint要能应对各种中断故障训练过程中的指标日志要能支撑事后复盘。3.1 训练配置和可复现性设计正规的训练任务不应该在jupyter notebook里随意点击运行而是要有明确的启动脚本和配置文件。无论你用的是Transformers、DeepSpeed还是其他框架建议把模型路径、数据路径、学习率、batch size、梯度累积步数、最大序列长度、预热比例、权重衰减、随机种子等全部显式写进配置。固定随机种子这一点很容易被忽略。很多人训练结果不稳定排查半天以为是数据或模型的问题最后发现只是没固定seed导致每次初始化不同。深度学习中多卡并行、数据加载顺序、dropout、参数初始化都会引入随机性必须同时固定torch、numpy和Python内置random的种子。当然即使固定了seed在多卡分布式训练下仍然无法保证百分百复现所以更好的做法是把每轮训练的运行环境和关键指标全部自动记录下来至少保证能从日志里反推版本。我见过一些团队的训练代码没有统一的输出目录结构checkpoint散落在各台机器的临时目录里几个实验跑完根本分不清哪个产物对应哪个配置。建议从一开始就确定固定目录布局比如每个实验一个独立目录下面分config、logs、checkpoints、metrics四个子目录实验名里带上日期和版本号能省掉后面大量的沟通成本。3.2 checkpoint策略训练中断和模型损坏是常态不是意外大模型训练跑上十几个小时后最怕的就是节点故障导致从头再来。避免这种情况的根本方法就是定期保存完整的checkpoint而且要保存得足够完整。一个能断点续训的checkpoint至少要包含四部分模型权重、优化器状态、学习率调度器的当前状态、当前是第几个epoch和第几个step。很多人只保存了模型权重恢复训练时optimizer状态丢失相当于学习率从头开始模型已经训了一半学习率却重新回到较大值很容易把已经收敛的参数打飞。保存频率也值得认真设计。我的经验是每几百个step或每隔一段时间保存一次并保留最近几个checkpoint循环覆盖防止最后一个checkpoint因为磁盘故障损坏时没有可用的历史备份。有一次我在训练一个较大的模型时最后一个checkpoint因为存储节点异常写坏幸好保留了倒数第二个版本只损失了不到一个小时的训练进度。3.3 训练过程的监控Loss以外还要看什么只看训练Loss是很多新手团队的通病。训练Loss下降说明模型在训练集上拟合变好了但无法告诉你它是不是在死记硬背、有没有出现梯度过大导致的数值震荡。我建议每个训练任务至少要记录这样几组曲线训练集Loss、验证集Loss、学习率变化、梯度范数、显存占用。训练Loss和验证Loss差距持续拉大是过拟合的明确信号梯度范数突然飙升往往说明数据里有异常样本或学习率设置过大显存占用异常抖动则可能暗示数据加载器有bug或模型结构存在动态shape问题。有条件的话每训练一段时间保存一部分模型阶段性输出让人眼抽查几条真实样本的生成结果。Loss是一种压缩后的统计信号而人眼能发现“模型开始重复输出”“语气变差”“在特定问题上开始胡说”这些统计指标难以捕捉的质量变化。我养成的一个习惯是训练期间每天早上花十分钟看几个训练数据里的实际输出长期坚持下来大多数学坏方向都能提前发现。4. 模型部署从checkpoint到对外服务的最后一公里训练收敛并不意味着项目完成后面还有一段常被人低估的工作就是把训练产物包装成一个稳定、高效、能被上层应用直接调用的推理服务。很多团队训练阶段做得很好部署阶段却因为对模型格式、量化方案、推理框架选型不熟悉而耗时数周。实际上这最后一段路有一个优先级明确的原则先验证模型质量再做性能优化最后做服务封装。顺序不能乱否则模型效果本身有问题你花大力气优化一个注定会被换掉的推理服务纯属浪费。4.1 第一个坑加载错权重训练完成后首先要搞清楚几个不同的权重文件分别是什么。全量微调得到的完整模型可以直接用如果是LoRA微调训练产物只是一个小的adapter权重文件它要搭配原版基座模型一起加载才能生效推理时可以有两条路一条是先把LoRA权重合并回基座模型导出成一个独立完整的模型文件部署简单相当于把微调知识固化另一条是不合并在推理时每次都用额外参数加载LoRA好处是切换不同任务时不需要加载多个完整大模型只需要替换很小的adapter文件。生产实践中如果只做一个业务场景合并权重更省心如果要做多租户多任务服务保留adapter方式能使多个微调版本共享同一个基座显著节省显存。我经常看到有人直接拿着训练前的原版模型路径去部署上线后业务方反馈“怎么回答跟没训练一样”回头一查部署脚本里引用的模型压根不是训练产物。这个错误虽然低级但在项目节奏紧张时特别容易发生所以模型注册和版本管理这一环非常关键。4.2 Prompt模板必须和训练时保持一致这是一个隐蔽但影响极大的细节。SFT训练时每条样本通常要按照一定的对话模板组装成模型输入比如用特殊的角色标记区分用户消息和助手回复。训练时模型学到的就是这个带特殊标记的格式。如果部署服务时没有严格使用同一套模板把用户输入直接怼给模型模型在推理阶段面对从未见过的输入格式输出质量会大打折扣。有些模型微调时还会涉及system prompt、few-shot示例、多轮历史对话的组装规则这些只有在训练和部署阶段保持一致才能复现离线评测时的效果。最好的做法是把模板文件作为一个独立配置项训练脚本和推理服务都从同一个地方读它避免两边各维护一份配置改了一边忘了另一边。4.3 量化和推理加速框架的选择逻辑模型部署的显存压力比训练时小很多因为不需要保存优化器状态但几十B甚至上百B的模型仍然无法单卡装载需要通过量化或张量并行来降低单卡压力。量化的本质是用更少的bit表示参数int8量化通常对效果影响很小且推理加速明显int4量化使显存进一步降低但某些业务场景可能会出现明显的精度下降尤其是需要严谨推理或数学计算的场景选型前务必要做效果回归测试。网上经常有人推荐“把模型转成ONNX”或“用某某框架推理”其实对大体量模型来说框架选择的重点在于是否支持连续批处理continuous batching这是影响吞吐量的核心机制。简单理解普通推理框架一次只处理一个请求GPU计算和显存利用率都很低支持连续批处理的框架能在同一时间拼接多个请求的计算图让GPU始终处于饱和状态。用支持连续批处理的推理框架跑大模型吞吐量通常会比逐一推理高出数倍。常见选型逻辑可以这样概括如果追求最成熟的生态和稳定性用vLLM这类围绕大模型推理优化的框架如果团队有较深的自研能力需要同时管理不同框架的多个模型或者有着极强的低延迟要求可以考虑Triton Inference Server这类更通用的平台。如果你的场景是本地部署、想快速在个人电脑上跑起来、对高并发没有太多要求用Ollama这类简化工具最省心。4.4 服务封装需要关注的工程细节模型推理核心准备好之后对外封装服务时还有几个实际问题。一个是接口协议目前多数团队选择HTTPJSON调试方便、生态好如果追求更高性能且公司内部基础设施统一可以用gRPC。大模型服务往往要支持流式输出让用户像聊天一样逐字看到回复流式接口的实现方式和普通JSON接口差别很大容易出现连接超时、半包、中断重连等问题建议在服务设计初期就把“是否要流式”定下来。另一个是超时和队列管理。模型推理不像普通数据库查询可以精准预估毫秒级返回prompt长短、生成token数多少都会显著影响推理耗时。如果网关只设了一个很短的通用超时时间长文本生成请求会被误杀。更合理的做法是按场景区分超时预算并让用户在请求参数里通过max_tokens声明期望长度服务端按预算来做排队和调度。服务上线之前还要考虑鉴权与限流。很多团队在开发期用内网直连无所谓一旦接入了公司统一网关或对外开放就必须把API Key或者统一身份认证接入请求链路。限流不是简单的连接数限制大模型服务更合理的限流维度是GPU并发量和总token吞吐量比如限制单用户每分钟消耗的token总数防止少数调用方占满整张GPU让排队用户全部超时。5. 服务化架构中的模型推理请求从进入到返回经过了哪些环节当大模型训练服务的调用方不只是一个人而是一个公司各类业务系统时仅有一个模型接口根本不够。真实生产环境里会出现这个问题同一个模型要服务多个业务方每个业务方有不同版本需求训练团队今天迭代了一版新模型不能直接把所有线上流量切过去需要灰度放量观察。这些都是单机部署模型时完全不会遇到但在微服务架构下做模型服务一定会面对的工程问题。5.1 一条真实请求会经过哪些组件假设一个客服应用想调用你训练好的模型来生成回答。用户的请求先到达应用的负载均衡入口再到公司内部的API网关网关做统一鉴权、限流和路由把请求转发到模型推理服务集群。模型推理服务集群对外暴露统一的API内部通常还有一层推理引擎层负责把请求拼装成模型需要的输入格式交给GPU核心执行推理。涉及大模型时推理引擎往往会维护一个KV Cache队列来承载多用户的并发请求这个Cache是连续批处理机制的核心。推理引擎完成任务后把生成结果返回给上层服务和网关再返回给用户。用户看到的是几十行日志和一个回答其实背后经过了三四个服务层次。这就是为什么大模型项目一旦上到生产环境就不再只是算法工程师一个人的事还需要平台工程师、后端工程师协同。算法要懂一点服务的吞吐指标和批处理机制后端也要理解模型推理为什么不适合按普通HTTP接口的并发模型去压测。5.2 GPU服务为什么不能像普通Java服务那样想扩容就扩容传统的无状态微服务在流量上涨时最快最有效的做法就是加副本横向一扩负载均衡自动分担流量。GPU模型服务则不同模型的权重是GB级甚至TB级每新增一个副本都要把权重从存储加载到显存同时占用大量显存资源和昂贵的GPU硬件。模型的副本很难做到“想扩就扩”要么提前预留了多副本常驻显存要么需要非常快速的模型分发机制。很多平台团队在最初设计时没有考虑这一点直接按普通服务的弹性伸缩去配置结果压测时发现扩容一个副本要几十秒甚至几分钟流量高峰早就过了。更合理的做法是建立基于GPU资源的容量规划。首先确认单卡推理的并发上限和单请求平均耗时再根据业务流量预测需要常驻多少副本。模型服务副本的扩容应该设定比较充裕的预阈值并且扩容动作本身要经过测试以防出现启动频繁失败、显存OOM引发更多连锁问题。另外推理服务集群的Pod在Kubernetes里要正确设置GPU资源限制不能只设CPU和内存就把容器调度上去。5.3 多个微调版本如何共存Model Registry与路由策略当模型迭代到第三个、第五个版本时你会发现一个安全风险不同调用方依赖的版本可能不一致有的业务方需要旧版的保守回答风格有的业务方已经切到了新版。如果直接原地更新部署所有调用方会同时切换到新版一旦新版出现某类badcase影响面会非常大。工程上的标准做法是引入模型注册中心。训练完的模型先注册到一个中心化的服务里记录模型版本、指标、关联数据集版本、发布时间等元信息推理服务并不直接绑定“固定模型”而是通过注册中心拿到版本列表再按路由策略选择要提供服务的版本。上线新版本时可以先让5%的流量走新模型副本另外95%继续走旧版本观察一段时间后再逐步调高比例效果不达标可以直接切回旧模型整个发布过程是对用户几乎无感的。这套机制在模型服务规模变大以后几乎是必需品。我见过一个团队早期没做模型注册全凭人工记忆“当前生产跑的是哪个路径的权重”直到一次新模型上线后效果回退想回滚却找不到上一个版本的完整部署配置最后只能重新训练白白浪费了几天时间。6. 增量训练与服务数据回流服务上线不是流程终点把模型服务成功部署上线只能算完成了训练服务工作流程的一半。真实用户开始调用后每天都会产生新的请求日志和反馈信号这里面藏着大量模型当前能力的短板。能不能把这些“服务阶段的产物”重新转成“训练阶段的原料”形成正向迭代闭环是判断一个团队大模型工程化成熟度的关键。我看到不少团队把“上线”当成项目终点模型一发布就原地休假直到业务方批量投诉badcase才重启训练流程。那时候积累的数据已经很多但数据质量参差不齐标注重做成本极高中间耽误的时间已经让用户体验下降很久了。6.1 线上日志如何变成增量训练的训练集一个常规做法是给线上模型服务的请求和响应加日志开关对用户输入做必要的脱敏处理后把原始输出、业务结果、用户后续操作行为一并记录下来。这里的“用户后续行为”非常关键比如用户是否对回答点了踩、是否立刻转人工、是否对推荐结果点击了“不感兴趣”都可作为自动化的弱标签。但不能把用户行为直接等同于标注。用户反馈弱信号只能用来筛选候选badcase真正进入训练集的高质量样本还是要经过一轮人工审核。以客服场景为例当系统判断某次回答被用户反复追问或触发负面反馈时自动把这条会话推送到标注平台由业务同学标注正确回答每周汇总一次形成增量训练的候选池。这一套“服务端埋点-自动筛选-人工精标-进入训练集”的管线本质上是把大模型服务当成一个持续收集训练信号的产品而不是一个交付完就不管的模型。它是“服务工作流程”和“训练工作流程”最重要的连接器。6.2 增量训练的避坑要点别让新模型忘了旧能力做增量训练时最常见的问题是灾难性遗忘模型为了拟合最新一批数据把先前学到的一部分通用能力和历史知识覆盖掉了。典型表现是针对新增badcase的指标明显变好但在回归测试集上的正确率却下降了一大截。解决办法其实不复杂核心思路是增量数据集不能只放新样本还要混入一定比例的旧样本或通用能力样本做一个“复习”。比如你有1000条新badcase作为本周的增量目标同时准备3000到5000条从历史数据池中采样的通用样本混合训练尽量在不伤害原有能力的前提下修正新问题。另外增量训练的epoch数不宜过大。增量训练的目标是让模型学会局部修正而非全局重新拟合一般设置较小的学习率和较少的轮数否则新数据会被反复学习好几遍模型对这批样本产生过拟合泛化能力反而更差。我在实践中更倾向于每周固定一个增量迭代周期而不是等到badcase积累到几千上万个才动一次工。小步快跑虽然每轮的收益看起来不大但累积起来比一次性大改要安全很多。6.3 版本回归和回滚是增量训练的最后一道保险增量训练不是训练完就能直接上线服务的。新版模型上线前必须完整跑一遍回归测试包括上一节提到的新目标badcase测试集以及覆盖历史能力的回归测试集。只有新目标测试集进步、回归测试集不倒退的模型版本才有资格走灰度发布。灰度发布同样是有技巧的。我建议第一次放量控制在总流量的10%以下观察一天以上。重点看的指标不是“回答看起来正不正确”而是线上真实调用里是否出现异常报错、响应时间是否明显变长、用户反馈率是否上升。如果这些指标都平稳再逐步放大流量。一旦出现问题要能通过模型注册中心快速把流量切回上一版本全程不用重新部署服务只需要调整路由权重。在长期实践中我发现一个问题增量训练流程里最容易被低估的不是技术而是节奏管理。模型训练服务和传统软件开发的一个重要差别是传统软件“改代码、发版、回滚”可以在分钟级完成模型迭代却受到数据标注和训练周期的硬约束无法今天提需求明天就上线。必须建立一个共享的数据回填节奏和模型发布日历让业务方知道“本周的badcase最快什么时候能体现在新模型里”以及“每个版本变更了什么能力、可能牺牲了什么能力”整个协作效率才会真正提高而不是每一次更新都伴随着临时加班和紧急修复。跑完这一整套流程你会发现大模型训练服务工作流的本质不是“怎么训一个模型”而是“怎么建立一个从数据到训练再到服务并持续迭代的系统”。每一次从离线训练走向线上服务每一次从用户反馈回到训练集都是这套系统里的一个小循环。如果你正在设计自己的训练服务平台建议先把数据版本、模型版本、评测集、回滚机制这四个基础设施打好之后的每一次迭代都会顺畅很多。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进