(转载)没有核心训练团队,如何研发生成式模型?
最近看到这篇文章,个人觉得完美描述了在生成式AI的年代,普通团队(没有核心训练infra和细分分工的团队)如何作出好的模型产出,
从道和术的角度,概括了训练出好的生成式模型,其所需的方法.
原作者: https://zhuanlan.zhihu.com/p/715712057
此 SOP 旨在为以工程师为主导的团队,提供一套将大模型训练转化为系统化工程任务的标准流程。
阶段一:战略定义与准备 (定义问题)
-
核心转化:首先在战略上明确,将“训练一个好的大模型”这一宏大目标,重新定义为三个并行的、具体的工程搜索问题:
- 1.1. 模型配置搜索:在给定的资源(算力、时间)约束下,搜索最优的模型架构与尺寸。
- 1.2. 训练超参搜索:给定模型配置,搜索能使其损失(Loss)最低或评测(Benchmark)表现最好的超参数组合。
- 1.3. 数据策略搜索:给定基础数据集,搜索最优的数据清洗、配比、增强和排序策略。
-
建立评估体系:为确保搜索方向的正确性,必须先建立客观的度量衡。
- 2.1. 确定基线 (Baseline):找到并稳定复现一个或多个行业内的公认基准模型,作为一切改进的衡量标尺。
- 2.2. 构建评测集 (Benchmark):建立一套全面的、多维度的评测体系,用于精确诊断模型的各项能力,识别短板和瓶颈。
阶段二:双轨并行执行 (高效搜索)
围绕“提升搜索效率”这一核心目标,同时推进以下两条轨道的工作:
-
轨道A:提升单次搜索速度(搜得更快)
- 3.1. 小模型验证:严格遵循 Scaling Law 原则,先在成本低的小规模模型上进行大量的探索性实验,快速验证想法和方案。
- 3.2. 优化训练框架:持续迭代训练代码和基础设施,以提升模型有效计算(MFU, Model FLOPs Utilization)为核心指标,压榨硬件性能。
- 3.3. 优化任务流程:自动化训练任务的提交、监控、和资源调度流程,确保计算集群利用率最大化,杜绝资源空闲。
-
轨道B:减少无效搜索次数(搜得更少)
- 3.4. 建立先验知识库:通过系统性地追踪、阅读并总结最新的学术论文、技术博客和开源实现,为所有搜索任务(模型/超参/数据)设定一个合理的初始值(Initial Value)。
- 3.5. 瓶颈驱动实验:利用阶段一建立的评估体系,精确分析当前模型与基线模型的差距,将实验资源聚焦于解决最关键的瓶颈问题,从而避免盲目、发散的实验。
阶段三:迭代与收敛 (闭环优化)
- 执行循环:基于上述准备,持续进行“假设 -> 实验 -> 评估 -> 调整”的闭环迭代。
- 评估与决策:根据评测结果判断实验成效,决定是继续深化当前方向,还是调整搜索策略。
- 收敛:当模型在关键评测集上的表现达到预设目标,或资源投入的边际效益显著下降时,可认为找到了一个令人满意的局部最优解。
方法论详解
核心思想:将训练转化为工程化的搜索问题
本方法论的核心在于,对于一个以工程师为主导、研究资源相对有限的团队,我们不必遵循顶尖研究机构“从零到一”的探索模式。相反,我们可以在业界已验证大模型可行性的基础上,将目标从“发明创造”转变为**“在已知框架内寻找最优解”**。这一转变能最大化地发挥工程师在系统优化、效率提升和目标导向执行力方面的核心优势。
我们将复杂的大模型训练任务,系统性地分解为三个界限分明、可独立迭代和优化的工程搜索挑战。
第一步:定义三大核心搜索问题
这是整个方法论的基石,它将模糊的目标变得清晰、可执行。
- 模型配置搜索:在给定的计算和推理资源预算内,寻找最合适的模型结构、大小和其他配置。这包括对模型参数量、层数、注意力头等架构选择的探索。
- 训练超参搜索:对于一个已经确定的模型配置,寻找最优的训练超参数组合,以达到最低的损失(Loss)或在关键评估基准(Benchmark)上取得最佳表现。
- 数据策略搜索:对于给定的数据集,寻找一种最优的数据筛选、配比和呈现方式(数据约束),使其最适合当前模型的训练需求。
第二步:应用两大执行支柱进行高效搜索
面对这三个搜索问题,我们采用两个经典的工程优化策略来指导执行:“搜得更快” 和 “搜得更少”。
支柱一:提升搜索效率(搜得更快)
目标是在单位时间内执行更多次的实验,最大化搜索的广度和速度。
- 信赖 Scaling Laws:充分利用 Scaling Laws(规模定律)的指导意义。 先在计算成本较低的小规模模型上进行大量的探索性实验,验证想法、筛选方案,再将有效的策略应用到大模型上,从而大幅降低试错成本。
- 优化训练框架:持续提升训练框架的计算效率,主要体现为提升有效计算(MFU, Model FLOPs Utilization)。这意味着减少通信瓶颈、优化内存使用、提升代码执行效率,让每一分硬件资源都尽可能用于模型训练本身。
- 优化任务流:建立高效、自动化的任务提交与监控流程。确保计算集群的利用率饱和,避免因流程中断、人工干预等问题导致宝贵的计算资源闲置。
支柱二:降低搜索成本(搜得更少)
目标是利用先验知识和客观评估,减少不必要的实验次数,让每一次搜索都更有针对性。
- 建立有效的先验知识(设置合理的初值):通过系统性地研究领域内的最新论文、技术博客和开源方案,了解行业内的“标准实践”和“常见技巧”。 这有助于为我们的搜索设定一个较高的起点,避免从零开始摸索。
- 建立明确的评估体系(有方向地剪枝):
- 寻找客观基线(Baseline):找到并复现一个可靠的基准模型,作为衡量一切改进的标尺。
- 增加评测维度(Benchmark):建立一套全面的、多维度的评测集,用以精确地诊断模型的能力短板和瓶颈所在。通过明确差距,我们可以针对性地进行优化,从而避免在已经达到瓶颈或无关紧要的方向上浪费实验资源。
这套“搜索问题转化法”的精髓在于,它承认并利用了团队的自身优势。它将看似由少数天才研究员驱动的大模型研发,转化为一个可以通过严谨的工程实践、系统的优化和迭代来不断逼近局部最优解的常规任务。
当我们自身条件并非顶尖时,主动将问题转化到自己擅长的领域,这或许就是一种实用的“兵法”。
经验总结
-
兵法思维:
- 通过工程优化将问题拉到团队擅长的维度。
- 在这个维度上利用经验积累实现突破,即“傻子兵法”的智慧。
-
实践验证:
- 实践证明了这些工程方法的有效性,最终找到了一套性价比高的解决方案(局部最优点)。
-
心态转变:
- 通过明确问题的常规性,增强了面对困难的信心和执行力。
今年,我们内部对从 pretrain 到 sft 的整个大模型训练流程进行了翻新,模型能力上也有了比较明显的提升,我也在这个过程中对训练有了更深入的理解,在这里分享一下,也算是对自己工作以来最累的一段时光的记录。
从方法论的角度,我认为这次翻新的核心在于,将问题转化为我们擅长的问题。
一般认为,大模型的训练团队应该由这么 2 波人组成:
一波是像 Ilya Suskever 或者 John Schulman 这样的研究人员来提供研究目标与实验方案;
另一波是类似 Greg Brockman 这样的工程师,提供相对稳定的集群,高速的训练框架与推理服务(我不确定 Greg 是干这个的... 但是就是那么个意思吧~)
这两拨人的工作相对解耦,研究人员开开心心做实验,工程师认认真真做优化,从而训出了像 GPT4 这样轰动世界的模型。
但是我们不具备这样的条件:我们的团队中几乎没有研究人员(甚至没有一个 phd),但是有很多经验丰富的工程师。那么扪心自问,我们凭什么能训出来还不错的模型呢?
如果我们转换思维,在 OpenAI 验证了大模型的可行性后。我们可以将大模型的训练问题转变为 3 个搜索问题:
给定训练与推理资源,搜索合适的模型配置;
给定模型配置,搜索训练超参,使其有更低的 next token loss(或在下游 benchmark 上表现出色);
给定数据,搜索某种数据约束,使其更适合模型训练。
而搜索问题,是很传统的工程问题,只需要考虑:
如何在单位时间内搜更多次,即每次搜索跑得快一些;
如何建立合适的先验,以设置初值与剪枝,即搜得少一点。
对于跑得快,在大模型这里有这样的 3 种优化手段:
相信 scaling law,先在小模型上做大量的实验;
优化训练框架,提升 MFU;
优化任务提交流程,保证卡永远在跑着。
对于搜的少,则采用这样的方法:
通过看论文和博文,知道大家都是咋做的,来设置初值;
通过找到客观的 baseline 以及增加 benchmark,明确差距/瓶颈,针对性提升,来减少实验量。
当我们这样展开问题后,训练大模型这个任务,就变得比较常规了,也就有了直面困难的信心。剩下的事情也就是老老实实去看论文、跑实验、优化框架和提升集群利用率了~
幸运的是,近几个月我们的实践也验证了这套分析的可行性,采用这样的工程手段,是可以搜到一个相当不错的局部最优点的。这段经历让我积累了一条很有趣的经验:我们尝嘲笑说,傻子最擅长的事情是把别人拉到和他一个水平,然后利用他在那个水平丰富的经验击败对手,但是当自己是傻子的时候,也许这就是兵法~