<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>强化学习 on 方糖猫Blog</title>
    <link>https://ftmao.com/blog/tags/%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0/</link>
    <description>AI 视频、AI Agent 与工程实践笔记</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Mon, 29 Jun 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://ftmao.com/blog/tags/%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0/index.xml" rel="self" type="application/rss+xml" /><item>
      <title>GenPage 学习笔记：Netflix 用一个 Transformer 直接生成整个首页</title>
      <link>https://ftmao.com/blog/posts/netflix-genpage-generative-homepage/</link>
      <pubDate>Mon, 29 Jun 2026 10:00:00 +0800</pubDate>
      <guid>https://ftmao.com/blog/posts/netflix-genpage-generative-homepage/</guid>
      <description>&lt;h1 id=&#34;genpage-学习笔记netflix-用一个-transformer-直接生成整个首页&#34;&gt;GenPage 学习笔记：Netflix 用一个 Transformer 直接生成整个首页&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文：&lt;a href=&#34;https://netflixtechblog.com/genpage-towards-end-to-end-generative-homepage-construction-at-netflix-77146fba8a08&#34;&gt;GenPage: Towards End-to-End Generative Homepage Construction at Netflix&lt;/a&gt;
目标读者：做推荐、搜推广或 AI 工程的工程师；也适合想看「LLM 范式怎么落进重工业级在线系统」的人。
阅读目标：搞清楚两件事——GenPage 怎么把「首页构建」改写成「序列生成」问题，以及为了让这个改写扛住生产环境，他们必须解决哪几个工程难题。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一问题的改写从多级流水线到一次生成&#34;&gt;一、问题的改写：从多级流水线到一次生成&lt;/h2&gt;
&lt;p&gt;Netflix 首页不是一个列表，是一个二维结构：哪些行出现、每行里放哪些实体、整体怎么排版，几乎全都个性化。传统做法是多级流水线——行级和实体级各自有召回与排序组件，模型多、阶段之间的优化目标互相对不齐，特征工程沉重。&lt;/p&gt;
&lt;p&gt;GenPage 的改写只有一句话：&lt;strong&gt;把用户历史和请求上下文当作 prompt，自回归生成整个首页作为 response。&lt;/strong&gt; 要回答的问题从「给这个候选打多少分」变成：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;已知关于这个用户和这次请求的一切，应该生成什么样的首页来最大化用户满意度？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;和 TIGER、HSTU、OneRec 这些只生成扁平排序列表的生成式推荐不同，GenPage 把行、实体、布局一起生成。动机四条：端到端建模（一个 transformer 替代多级堆栈，砍掉阶段间目标错位和大量特征工程）；整页级 RL 优化（捕捉行与实体之间的交互，比如顶部的 Continue Watching 满足即时意图但会压低整页浏览深度）；更好的 scaling 行为；以及对新产品形态（直播、游戏、播客、个性化 UI、逐实体艺术图）的扩展性。&lt;/p&gt;
&lt;p&gt;先说成绩再放细节：线上 A/B 对一个成熟、高度优化的多级生产系统，核心用户参与指标统计显著提升（p ＜ 0.001），同时端到端 serving 延迟降了 20%。&lt;/p&gt;
&lt;h2 id=&#34;二数据自建-tokenizer把首页变成一门语言&#34;&gt;二、数据：自建 tokenizer，把首页变成一门语言&lt;/h2&gt;
&lt;p&gt;从传统推荐迁到生成式 transformer，第一件事是重新想数据表示。GenPage 把上下文和首页都编码成一条离散 token 序列。每个训练样本对应一次首页曝光，由三部分组成：Context（用户行为历史、档案属性、请求上下文）、Page（页面上展示的行和实体，按布局顺序）、Feedback（用户与页面的交互）。只有前两者进入 token 化，Feedback 交给奖励系统产生监督信号。&lt;/p&gt;
&lt;p&gt;他们没有用现成的文本 tokenizer，而是为首页数据建了领域专用 tokenizer，换来两个关键优势：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;计算效率&lt;/strong&gt;。举例：「用户 30 天前看了 50 分钟《女子监狱》」这件事，GPT-5 tokenizer 要 16 个 token，他们的方案压到 4 个——&lt;code&gt;[Entity_ID]&lt;/code&gt;、&lt;code&gt;[Action_Type]&lt;/code&gt;、&lt;code&gt;[Action_Time_Bucket]&lt;/code&gt;、&lt;code&gt;[Action_Duration_Bucket]&lt;/code&gt;。序列变短直接降低推理成本和延迟。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;产品控制&lt;/strong&gt;。token 和产品概念（行、实体）一一对应，给业务规则的执行留了一个干净的接口（第五节会看到这条多值钱）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上下文 token 里，用户历史表示为动作序列（显式信号如播放、加片单、点赞，隐式信号如预告片观看、详情页访问），档案 token 编码语言与 profile 类型，请求上下文 token 编码时段、星期几、设备。太长的数据源（比如完整曝光历史）用摘要版本——作者坦白这是手工痕迹，本质是把 prompt engineering 塞回了流水线，端到端学压缩是未来方向。各段之间插特殊 token 作分隔，连续信号（时间戳、时长）分桶离散化。&lt;/p&gt;
&lt;p&gt;页面 token 侧：每个实体、每个行各是一个 token，首页按从左到右、从上到下序列化。词表每日更新纳新；服务时仍不在词表里的实体，靠语义 embedding 融合和 fallback token 处理（见第五节）。分页推荐也自然落在范式里：每次翻页请求前，把已生成行的 page token 连同用户在这些行上的最新实时行为追加进 prompt，模型同时看到长期偏好和会话内行为。&lt;/p&gt;
&lt;h2 id=&#34;三奖励系统一个标量两种用法&#34;&gt;三、奖励系统：一个标量，两种用法&lt;/h2&gt;
&lt;p&gt;监督信号来自 Netflix 内部的奖励系统（既有工作，通过线上 A/B 调参对齐长期满意度）：给页面上每个曝光实体打一个标量奖励——通宵刷完的剧比看了 10 分钟的电影奖励高，被曝光后放弃的实体拿负奖励。&lt;strong&gt;页面级奖励定义为页面上所有曝光实体奖励之和。&lt;/strong&gt; 这个标量同时喂给监督后训练和 RL，但用法不同，见下。&lt;/p&gt;
&lt;h2 id=&#34;四模型与训练llm-配方照搬到推荐&#34;&gt;四、模型与训练：LLM 配方照搬到推荐&lt;/h2&gt;
&lt;p&gt;架构是标准的 decoder-only transformer，理由是简单、灵活、能吃整个 transformer 训练与 serving 生态。有一个值得记的细节：&lt;strong&gt;输入 embedding 和输出投影不共享权重（untie）&lt;/strong&gt;——预训练优化的是词表上的 softmax，WBC 后训练优化的是逐 token 的 sigmoid 分数，两种目标对 logits 的要求不同，解绑给模型留出兼顾的余地。&lt;/p&gt;
&lt;p&gt;训练配方照搬 LLM：先预训练教模型「首页这门语言」，再后训练对齐用户满意度。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;预训练（next-token prediction）&lt;/strong&gt;：只用线上拿到正反馈的曝光样本，让模型 bootstrap 出模仿现有生产系统的能力。作者特意澄清：样本形态其实更像 LLM 的 SFT 对而不是裸文本预训练，叫它预训练是因为从零训练而非微调。局限也直说：预训练只教模仿，不优化奖励幅度；而且模型上线后反复在自己生成的页面上训练，有退化风险——所以要后训练。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;后训练之 WBC（weighted binary classification）&lt;/strong&gt;：把生成变成 token 级价值预测。自定义 tokenization 在这里再次兑现——每个页面 token 直接对应一个实体或行，奖励可以干净地挂上去：奖励的符号给二分类标签（正参与 vs 放弃），幅度给权重（通宵刷剧权重高于短播放），对对应 token 的 logit 优化加权二分类交叉熵。此时 logit 可解释为「在这个位置生成这个 token 的价值估计」。推理时贪心逐 token 取最高价值。优点是构造上自带 token 级 credit assignment，不用像 RL 那样去推断每个决策对最终页面奖励的贡献。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;后训练之 RL&lt;/strong&gt;：把页面生成当序列决策，直接优化页面级奖励。借鉴 RLHF 两步走：先训一个 transformer 奖励模型，预测生成页面的页面级奖励（以实体奖励之和为监督目标；注意它和奖励系统是两回事——奖励系统处理真实曝光的反馈，奖励模型不用真把页面给用户看，这让 RL 能对任意候选页面打分）；再用 Dr. GRPO 优化策略，并用 KL 惩罚把策略锚在预训练 checkpoint 附近——奖励模型只在生产策略生成的页面附近可靠，KL 约束既把页面留在奖励模型的覆盖区内，也压制 reward hacking。另加规则化的 format rewards：页面得长得像行的列表，业务关键的行和实体不能排太靠下。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;RL 相对 WBC 多开三扇门：整页优化（多样性、stopping power、页面级业务约束都能进奖励）；test-time reasoning（推理输出可看作自动化特征工程）；多 token 实体支持——若实体要用多个 token 表示（如 &lt;code&gt;[Show_ID]&lt;/code&gt; 加 &lt;code&gt;[Episode_#]&lt;/code&gt;），WBC 的逐 token 标注会有歧义（一个实体级奖励怎么摊到多个 token 上），RL 优化序列级 return 天然绕开这个问题。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart TD
    subgraph DATA[&amp;#34;训练样本: 一次首页曝光&amp;#34;]
        CTX[&amp;#34;上下文 token&amp;lt;br/&amp;gt;用户历史 档案 请求上下文&amp;#34;]
        PAGE[&amp;#34;页面 token&amp;lt;br/&amp;gt;行与实体 按布局顺序序列化&amp;#34;]
        FB[&amp;#34;用户反馈&amp;lt;br/&amp;gt;播放 点赞 放弃&amp;#34;]
    end
    CTX --&amp;gt; PRE[&amp;#34;预训练&amp;lt;br/&amp;gt;next-token prediction&amp;lt;br/&amp;gt;只用正反馈样本&amp;#34;]
    PAGE --&amp;gt; PRE
    FB --&amp;gt; RS[&amp;#34;奖励系统&amp;lt;br/&amp;gt;每个曝光实体一个标量奖励&amp;#34;]
    PRE --&amp;gt; WBC[&amp;#34;后训练 WBC&amp;lt;br/&amp;gt;符号作标签 幅度作权重&amp;lt;br/&amp;gt;加权二分类交叉熵&amp;#34;]
    RS --&amp;gt; WBC
    RS --&amp;gt; RM[&amp;#34;奖励模型&amp;lt;br/&amp;gt;预测生成页面的页面级奖励&amp;#34;]
    RM --&amp;gt; RL[&amp;#34;后训练 RL&amp;lt;br/&amp;gt;Dr. GRPO 加 format rewards&amp;#34;]
    PRE --&amp;gt; RL
    RL -.-&amp;gt;|&amp;#34;KL 惩罚锚定预训练 checkpoint&amp;lt;br/&amp;gt;防 reward hacking&amp;#34;| PRE
    style PRE fill:#fff3cd
    style RL fill:#e8f5e9&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;h2 id=&#34;五上线要解决的四个工程问题&#34;&gt;五、上线要解决的四个工程问题&lt;/h2&gt;
&lt;p&gt;范式讲得再漂亮，进不了生产都是纸上谈兵。原文列的四个难题，恰好是每个想把生成式推荐搬上线的团队都会撞上的：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;实体冷启动&lt;/strong&gt;。新内容没有交互数据，token embedding 学不出来。两个互补策略：context injection——把新实体或时效实体（如 Live Now 赛事）的元数据直接注入上下文 token；semantic embedding fusion——实体表示改为 ID embedding 与内容 embedding（来自简介、演职员、字幕、类型、视频内容）的融合，训练时以小概率把实体 ID token 随机换成通用 fallback token，逼模型学会只靠内容 embedding 做推荐。效果：新实体的内容元数据一到，它在潜在空间里立刻就有有意义的表示，不等交互数据。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;模型新鲜度&lt;/strong&gt;。每天从头重训大 transformer 不现实，但推荐模型必须跟上趋势和新片入库。方案是 multi-cadence incremental training：大周期在全量历史窗口上做完整预训练加后训练；两次大周期之间，每天从昨天的 checkpoint 继续后训练，数据用最新一天加历史采样的混合，防过拟合和灾难性遗忘。每日新进词表的 token 用同类型 fallback token 初始化（如新行用 &lt;code&gt;[Row_Fallback_Token]&lt;/code&gt;），训练时随机把少量已知 token 替换成 fallback，教模型优雅处理未知 token。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;业务规则&lt;/strong&gt;。首页必须满足结构约束（行的列表）和产品逻辑（去重、行钉位置、类目一致性——喜剧行里必须都是喜剧）。训练信号只能鼓励服从，不能保证。所以规则在推理时强制执行：constrained decoding，每个自回归步先算出合规 token 的掩码打到 logits 上。自定义 tokenization 让这件事格外便宜——实体和行都是单 token，业务规则直接映射成 token 级掩码，没有文本词表上多 token 记账的麻烦。钉行就是把那个位置其他 token 全 mask 掉。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推理延迟&lt;/strong&gt;。逐 token 生成整个页面太贵。利用首页结构做 hybrid row decoding：每行只有前几个实体（用户注意力最集中、决定行质感的位置）自回归生成，然后基于这个前缀做一次前向，拿到所有合格实体的 logits，按分数补齐该行其余位置，同样受业务规则约束。自回归条件性保留在最值钱的地方，长行的逐 token 解码成本省掉了。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    REQ[&amp;#34;请求&amp;#34;] --&amp;gt; CTX2[&amp;#34;构造上下文 token&amp;lt;br/&amp;gt;含会话内最新行为&amp;#34;]
    CTX2 --&amp;gt; GEN[&amp;#34;自回归生成&amp;lt;br/&amp;gt;每行只生成前几个实体&amp;#34;]
    GEN --&amp;gt; MASK[&amp;#34;约束解码&amp;lt;br/&amp;gt;业务规则映射为 token 掩码&amp;#34;]
    MASK --&amp;gt; GEN
    GEN --&amp;gt; FILL[&amp;#34;整行补齐&amp;lt;br/&amp;gt;一次前向取全部合格实体&amp;lt;br/&amp;gt;按分数补满该行&amp;#34;]
    FILL --&amp;gt; OUT[&amp;#34;输出首页若干行&amp;#34;]
    OUT -.-&amp;gt;|&amp;#34;翻页时把已生成行和最新行为&amp;lt;br/&amp;gt;追加回 prompt&amp;#34;| CTX2
    style MASK fill:#fff3cd&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;h2 id=&#34;六离线实验真正起作用的是什么&#34;&gt;六、离线实验：真正起作用的是什么&lt;/h2&gt;
&lt;p&gt;消融在 Netflix 内部数据上做，模型约 200M 参数，只报各研究内部的相对比较。四个问题，四个答案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;预训练有用吗？&lt;/strong&gt; 有。WBC 前加不加预训练对比，全指标显著提升。Entity AUC 从 0.91 到 0.92 看着小，翻译过来是随机正负实体对的错排率从 9% 降到 8%——成熟生产系统上单点改动罕见的幅度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;模型规模怎么 scale？&lt;/strong&gt; 从约 120M 扫到约 900M 参数，预训练 loss 和 WBC loss 都呈幂律下降，和 LLM 的 scaling 行为同构。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;上下文信息怎么 scale？&lt;/strong&gt; 固定模型规模，持续丰富 prompt（加新数据源加改进 tokenization），WBC loss 大幅下降。两组扫描不严格可比，但差距悬殊：&lt;strong&gt;模型扩约 7.5 倍只降 WBC loss 约 1.3%，上下文富化累计降约 6.9%&lt;/strong&gt;，好几次单次设计良好的上下文加入就超过整轮扩容。结论：当前阶段个性化质量的瓶颈首先是模型能看到的信息和表示，其次才是容量；等上下文榨干了，容量才会成为主驱动。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RL 真在做页面级优化吗？&lt;/strong&gt; 页面奖励持续提升（作者承认这条基本是 confirmatory——奖励和策略优化用的是同一个模型）。更有意思的副产品：&lt;strong&gt;多样性根本不在 RL 目标里，但页面多样性（页内实体两两 embedding 距离）随训练上升&lt;/strong&gt;——策略在整页层面优化，而不是孤立地抠每个 token。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;七线上-ab-与意外发现&#34;&gt;七、线上 A/B 与意外发现&lt;/h2&gt;
&lt;p&gt;线上对生产基线的 A/B 里，GenPage 在既有候选集上解码（候选集顺便处理掉大量资格类业务规则）。几个观察都值得记：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;所有训练数据配置不同的变体都在核心指标上显著提升，增益对设计选择鲁棒，不依赖某个特定配置。&lt;/li&gt;
&lt;li&gt;出现了非预期的曝光类目分布漂移（新内容 vs 老内容、剧集 vs 电影）。作者的诊断很诚实：这大概是 GenPage 个性化更锐利的表现——首页 impression 效率上升，用户用更少曝光完成参与；而更锐利的个性化把从生产系统继承来的组件（比如奖励系统）尚未与新范式对齐的问题暴露了出来。&lt;/li&gt;
&lt;li&gt;会话内响应性强且自然：最新行为迅速影响后续推荐，一两天后淡回长期偏好——模型自己在 attend 动作时间戳，生产栈里要靠大量手工特征工程才能做到的事，在生成式范式里涌现出来。&lt;/li&gt;
&lt;li&gt;延迟降 20%，和「生成式一定慢」的直觉相反：多个排序阶段和重特征计算被一个跑在原始 token 上的 transformer 取代，自定义 tokenization 与 hybrid decoding 再压缩了解码步数。作者强调这还没压榨完，余量可以再投给容量或更富的 prompt。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;工程实践联想&#34;&gt;工程实践联想&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;prompt 工程是新的特征工程，而且 ROI 可能更高。&lt;/strong&gt; 6.9% 对 1.3% 这组数字值得贴在每个推荐团队的墙上：在堆模型容量之前，先问自己信息瓶颈有没有解决——模型看不见的信号，再大的容量也学不到。这和我们日常给 LLM 应用调 prompt 的经验完全同构：多数时候收益不在换更大的模型，在把上下文喂对。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自定义 tokenizer 本质是一次领域建模。&lt;/strong&gt; 4 token 对 16 token 的压缩只是表面收益，真正值钱的是「token 与产品概念一一对应」——它让业务规则从模型输出后的事后修补，变成解码期的一层掩码。凡是需要严格控制生成内容的场景（合规、结构约束、配额），这个思路可以直接搬：把控制点设计进词表，而不是指望 prompt 约束。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;规则兜底放在解码时，别指望训练。&lt;/strong&gt; 训练信号只能鼓励、不能保证——这句坦白适用于所有生成式系统。凡是硬约束（不能出现的内容、必须出现的位置），都应该有推理期的机制级保障，RLHF 式的软对齐管软偏好。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;模仿学习起步、对齐训练接棒，是离线冷启动新系统的通用配方。&lt;/strong&gt; 先用生产系统的正反馈样本 bootstrap，避开没有策略就没有数据的死锁；再承认模仿的天花板（不优化奖励幅度、自蒸馏会退化），用后训练接棒。WBC 和 RL 的二选一也很务实：先用简单可优化的对齐拿下实体级指标，把 RL 留给页面级目标，不上来就啃最硬的。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;「单模型替代流水线」的延迟账要重新算。&lt;/strong&gt; 直觉上生成式更慢，实际是把 N 个模型加 N 套特征计算换成一次前向序列。系统总成本从来不在单个模型的 FLOPs 上，在组件数量、数据依赖和特征管线上——架构简化的收益经常大于模型本身的开销。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;本篇小结&#34;&gt;本篇小结&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;问题改写&lt;/strong&gt;：首页构建从「多级召回排序」改写为「prompt 进、页面出」的自回归序列生成，行、实体、布局一次生成；这是与 TIGER、HSTU、OneRec 等扁平列表生成式推荐的分界。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据&lt;/strong&gt;：领域专用 tokenizer 把上下文和页面编码成一条 token 序列，换来 4 倍级序列压缩和「token 即产品概念」的控制接口；反馈不进序列，进奖励系统。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;训练&lt;/strong&gt;：照搬 LLM 配方——正反馈样本上 next-token 预训练，后训练二选一：WBC（token 级价值预测，自带 credit assignment）或 RL（奖励模型 + Dr. GRPO + KL 锚定，解锁整页优化、test-time reasoning、多 token 实体）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;上线四件套&lt;/strong&gt;：冷启动靠 context injection 加 semantic embedding fusion；新鲜度靠多节奏增量训练加 fallback token；业务规则靠 constrained decoding（规则即 token 掩码）；延迟靠 hybrid row decoding（每行只自回归前几个实体）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;核心结论&lt;/strong&gt;：线上核心指标显著优于成熟多级基线且延迟降 20%；离线两条最值得记——丰富 prompt 的收益远大于模型扩容（6.9% 对 1.3%），RL 在不含多样性目标时反而提升了页面多样性。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;未竟之事&lt;/strong&gt;：长上下文仍靠手工摘要，语言、多模态、reasoning 能力尚未接入；作者看好的方向是领域 token 与通用文本 token 的混合 tokenization——概念上等于给 LLM 增加一个「推荐模态」，LLM 和推荐系统的边界会继续模糊。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这篇最打动我的不是架构，是那份诚实：明说预训练样本其实更像 SFT，明说长上下文还是手工摘要，明说奖励提升是 confirmatory，明说线上出现了没优化的分布漂移。工业系统的论文能写到这个坦白程度，比指标本身更值得学。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lequn Wang, Jiangwei Pan, Linas Baltrunas, &lt;a href=&#34;https://netflixtechblog.com/genpage-towards-end-to-end-generative-homepage-construction-at-netflix-77146fba8a08&#34;&gt;GenPage: Towards End-to-End Generative Homepage Construction at Netflix&lt;/a&gt;, Netflix TechBlog, 2026-06（本文唯一原文来源）。&lt;/li&gt;
&lt;li&gt;原文提及的对照工作：TIGER、HSTU、OneRec（生成扁平排序列表的生成式推荐系统）。&lt;/li&gt;
&lt;li&gt;原文提及的 RL 算法：Dr. GRPO（GRPO 的变体，缓解训练目标中的偏差）。&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Netflix 的 LLM 后训练框架：从「跑通脚本」到「管好四根支柱」</title>
      <link>https://ftmao.com/blog/posts/netflix-llm-post-training/</link>
      <pubDate>Fri, 13 Feb 2026 10:00:00 +0800</pubDate>
      <guid>https://ftmao.com/blog/posts/netflix-llm-post-training/</guid>
      <description>&lt;h1 id=&#34;netflix-的-llm-后训练框架从跑通脚本到管好四根支柱&#34;&gt;Netflix 的 LLM 后训练框架：从「跑通脚本」到「管好四根支柱」&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文：&lt;a href=&#34;https://netflixtechblog.com/scaling-llm-post-training-at-netflix-0046f8790194&#34;&gt;Scaling LLM Post-Training at Netflix&lt;/a&gt;
目标读者：做过或想做 LLM 微调/强化学习的工程师，尤其是正在考虑「自建训练管线还是买现成框架」的人。
阅读目标：搞清楚两件事——后训练在 Netflix 规模下到底难在哪；以及一个内部框架靠什么证明自己比「组装开源组件」更有价值。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;先拆一个直觉后训练不就是拿个开源模型-finetune-一下吗&#34;&gt;〇、先拆一个直觉：后训练不就是「拿个开源模型 finetune 一下」吗&lt;/h2&gt;
&lt;p&gt;直觉版本的后训练长这样：准备点私有数据，从 Hugging Face 拉一个开源权重，写个 batch 循环迭代。实验规模下确实就几行代码。原文的核心论点是：&lt;strong&gt;从「跑通脚本」到「生产级后训练」之间隔着一整条工程鸿沟&lt;/strong&gt;——数据管线、多机 GPU 集群的分布式状态、训练与推理交错的工作流，每一个都是深渊。&lt;/p&gt;
&lt;p&gt;Netflix 的场景是推荐、个性化和搜索，需要让通用基座模型理解自家片库和用户交互历史。这种场景下，post-training 很快就不再是建模问题，而是分布式系统问题。AI Platform 团队建这个框架的目标很直白：&lt;strong&gt;把基础设施复杂度藏起来，让模型开发者专注模型本身，而不是分布式管道工。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;一三个环节每个都有自己的坑&#34;&gt;一、三个环节，每个都有自己的坑&lt;/h2&gt;
&lt;p&gt;原文把后训练旅程拆成三步，每一步都有一批「纸面上没有」的坑。&lt;/p&gt;
&lt;h3 id=&#34;数据难的不是读取是精确控制&#34;&gt;数据：难的不是读取，是精确控制&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Loss masking 是命门。&lt;/strong&gt; HF chat template 只负责把对话序列化成文本，不告诉你哪些 token 该进 loss。必须显式做 loss mask，只让 assistant 的 token 参与优化——否则模型会去学习 prompt 和非目标文本，质量直接掉。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;变长序列是隐形浪费。&lt;/strong&gt; batch 内 padding 浪费算力，FSDP 各 worker 形状不齐会带来 GPU 同步开销。更省的做法是 &lt;strong&gt;sequence packing&lt;/strong&gt;：把多个样本塞进定长序列，再用 document mask 阻止跨样本注意力。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;模型加载不了只是开始&#34;&gt;模型：加载不了只是开始&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;模型放不进单卡时，需要 FSDP/TP 分片，并且要&lt;strong&gt;把权重分片直接加载到 device mesh 上&lt;/strong&gt;，避免在任何单设备上物化完整模型。&lt;/li&gt;
&lt;li&gt;加载完还要让它「可训练」：全量微调还是 LoRA，activation checkpointing、编译、精度设置——RL 场景下 rollout 和 policy 的精度必须对齐，这是容易翻车的细节。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大词表（＞128k）的内存陷阱&lt;/strong&gt;：logits 形状是 batch × seq_len × vocab，峰值内存会炸。常见缓解：投影前先丢掉被忽略的 token，沿序列维度分块算 logits 和 loss。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;训练生产训练不是一个-for-循环&#34;&gt;训练：生产训练不是一个 for 循环&lt;/h3&gt;
&lt;p&gt;要支持从 SFT 的单次前反向传播，到 on-policy RL 那种「rollout 生成、reward/reference 推理、policy 更新交错进行」的工作流。Netflix 用 Ray 的 actor 模型做编排，把建模逻辑和硬件解耦。另外两样是标配：实验追踪（loss 这类质量指标 + MFU 这类效率指标）和标准化 checkpoint 带来的容错恢复。&lt;/p&gt;
&lt;h2 id=&#34;二框架总览四根支柱&#34;&gt;二、框架总览：四根支柱&lt;/h2&gt;
&lt;p&gt;整个技术栈从底到顶是：Mako（Netflix 内部 ML 计算平台，在 AWS 上供给 GPU）→ 开源三件套（PyTorch、Ray、vLLM，基本开箱即用）→ Post-Training Framework（以库的形式提供 SFT、DPO、RL、知识蒸馏等标准化 recipe，用户用配置文件选配方、插任务组件）。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart TD
    subgraph APP[&amp;#34;使用者: 模型开发者&amp;#34;]
        CFG[&amp;#34;配置文件&amp;lt;br/&amp;gt;选 recipe 插组件&amp;#34;]
    end
    subgraph FW[&amp;#34;Post-Training Framework&amp;#34;]
        R1[&amp;#34;SFT&amp;#34;] --- R2[&amp;#34;DPO&amp;#34;] --- R3[&amp;#34;RL&amp;#34;] --- R4[&amp;#34;蒸馏&amp;#34;]
    end
    subgraph OSS[&amp;#34;开源基础组件&amp;#34;]
        PT[&amp;#34;PyTorch&amp;#34;] --- RAY[&amp;#34;Ray&amp;#34;] --- VLLM[&amp;#34;vLLM&amp;#34;]
    end
    subgraph INFRA[&amp;#34;基础设施&amp;#34;]
        MAKO[&amp;#34;Mako 内部 ML 计算平台&amp;lt;br/&amp;gt;在 AWS 上供给 GPU&amp;#34;]
    end
    CFG --&amp;gt; FW
    FW --&amp;gt; OSS
    OSS --&amp;gt; MAKO
    style FW fill:#fff3cd&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;框架的能力沿四个维度组织，对应 ML 系统的三支柱加一个新增支柱：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;：SFT、奖励建模、RL 各自的数据集抽象；超本地存储的数据集从云和磁盘做高吞吐流式读取；&lt;strong&gt;异步 on-the-fly packing&lt;/strong&gt;，把 CPU 密集的打包和 GPU 计算重叠，减少空闲。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model&lt;/strong&gt;：支持现代架构（Qwen3、Gemma3）和 MoE 变体（Qwen3 MoE、GPT-OSS）；LoRA 直接集成进模型定义；高层 sharding API，开发者不用写底层分布式代码就能跨 device mesh 分片。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compute&lt;/strong&gt;：统一作业提交接口，单机到几百卡一个入口；自定义架构和 LoRA 下依然准确的 MFU 监控；完整 checkpoint（参数、优化器、dataloader、data mixer 状态），中断后精确恢复。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Workflow&lt;/strong&gt;：这是 RL 逼出来的第四支柱——支持超越「单个训练循环」的多阶段执行模式。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;三教训一从-sft-到-rl架构要换心&#34;&gt;三、教训一：从 SFT 到 RL，架构要换心&lt;/h2&gt;
&lt;p&gt;框架最初围绕 SFT 设计：数据流相对静态、单一训练循环、SPMD 执行模型（每个 GPU worker 跑同一个 step 函数，处理不同数据分片，靠 PyTorch 分布式原语同步）。这个假设在 2025 年失效了——DeepSeek-R1 和 GRPO 这类高效 on-policy RL 普及之后，SFT 从终点变成了入场券。&lt;/p&gt;
&lt;p&gt;两者差异的本质在学习信号：&lt;strong&gt;SFT 的信号稠密而即时&lt;/strong&gt;（每个 token 位置都有全词表 logits 和可微 loss），长得就像 pre-training；&lt;strong&gt;on-policy RL 的信号稀疏而延迟&lt;/strong&gt;（episode 结束才有一个标量 reward），且训练数据依赖当前 policy 生成。单个子阶段（policy 更新、rollout、reference 推理、reward 打分）各自都能 SPMD 化，但端到端算法需要显式协调：prompt、采样轨迹、reward、advantage 这些产物在阶段间不停交接，生命周期要有人管。&lt;/p&gt;
&lt;p&gt;架构上的变化：原来的 driver 是「瘦」的，只负责拉起 N 个相同的 Ray actor，扩容就是加 worker；RL 要求把系统拆成不同角色（Policy、Rollout Worker、Reward Model、Reference Model），driver 进化成&lt;strong&gt;主动控制器&lt;/strong&gt;，编码整个控制面——何时生成 rollout、怎么组 batch 和打分、何时触发优化、跨阶段怎么调度集群资源。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    subgraph SFT[&amp;#34;SFT 架构: 瘦 driver + SPMD&amp;#34;]
        D1[&amp;#34;瘦 driver&amp;lt;br/&amp;gt;只负责拉起 worker&amp;#34;] --&amp;gt; A1[&amp;#34;actor 1&amp;lt;br/&amp;gt;完整训练循环&amp;#34;]
        D1 --&amp;gt; A2[&amp;#34;actor 2&amp;lt;br/&amp;gt;完整训练循环&amp;#34;]
        D1 --&amp;gt; A3[&amp;#34;actor N&amp;lt;br/&amp;gt;完整训练循环&amp;#34;]
    end
    subgraph RL[&amp;#34;RL 架构: 主动控制器 + 多角色&amp;#34;]
        C[&amp;#34;主动控制器&amp;lt;br/&amp;gt;编码控制面&amp;lt;br/&amp;gt;何时 rollout 何时优化&amp;#34;] --&amp;gt; P[&amp;#34;Policy 更新&amp;#34;]
        C --&amp;gt; R[&amp;#34;Rollout Worker&amp;#34;]
        C --&amp;gt; RM[&amp;#34;Reward Model&amp;#34;]
        C --&amp;gt; REF[&amp;#34;Reference Model&amp;#34;]
        R --&amp;gt;|&amp;#34;轨迹&amp;#34;| RM
        RM --&amp;gt;|&amp;#34;reward 和 advantage&amp;#34;| P
    end
    SFT ==&amp;gt;|&amp;#34;2025 年 DeepSeek-R1 与 GRPO 普及&amp;lt;br/&amp;gt;SFT 从终点变成入场券&amp;#34;| RL
    style RL fill:#fff3cd&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;落地方式是集成开源库 &lt;strong&gt;Verl&lt;/strong&gt; 的核心设施来管理 Ray actor 生命周期和 GPU 资源分配，自己只做「建模表面积」——Data/Model/Compute 抽象和内部优化。最终是混合设计：用户在 SFT 和 RL 之间切换不用换心智模型。这个取舍值得画重点：&lt;strong&gt;编排不自己造轮子，抽象层才是护城河。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;四教训二全面押注-hugging-face但模型实现自己来&#34;&gt;四、教训二：全面押注 Hugging Face，但模型实现自己来&lt;/h2&gt;
&lt;p&gt;HF Hub 事实上已是开源权重、tokenizer、配置的默认分发渠道，框架选择贴着生态走而不是另立内部标准：checkpoint 一律按 HF 格式存取，避免「围墙花园」摩擦。&lt;/p&gt;
&lt;p&gt;Tokenizer 的故事最有教训价值。早期直接绑定底层分词库（SentencePiece、tiktoken）追求控制力，结果造成&lt;strong&gt;静默的训练-推理 skew&lt;/strong&gt;：推理栈（vLLM）默认用 HF AutoTokenizer，归一化、特殊 token、chat template 的细微差异会产生不同的 token 边界——这类 mismatch 之后会以「莫名其妙的质量回退」形式冒出来，极难排查。修法：&lt;strong&gt;AutoTokenizer 成为唯一事实源&lt;/strong&gt;，上面加一层薄薄的兼容层（&lt;code&gt;BaseHFModelTokenizer&lt;/code&gt;）处理后训练特有需求（padding token、生成标记注入、语义 ID），同时保证字节级分词路径和生产一致。&lt;/p&gt;
&lt;p&gt;模型实现则相反：&lt;strong&gt;不直接用 transformers 的模型类训练&lt;/strong&gt;，而是维护自己优化的统一模型定义，能读写 HF checkpoint。这一层换来 FlexAttention、分块交叉熵、统一 MFU 核算、统一 LoRA 扩展，跨架构不用重实现；统一的模块命名还让程序化定位和替换组件（Attention、MLP、输出头）成为可能。&lt;/p&gt;
&lt;p&gt;代价很直接：支持一个新模型家族，要写 HF 参考实现到内部定义的桥。Netflix 的解法是 &lt;strong&gt;AI coding agent + logit verifier&lt;/strong&gt;：agent 自动生成大部分转换代码，验收标准是给定随机输入、内部模型的 logits 必须在容差内匹配 HF——因为验收可以机械检查，agent 能自主迭代到正确为止，大幅缩短新架构的支持周期。当前只支持显式适配过的架构（和 vLLM、SGLang、torchtitan 同款取舍），计划中的 HF fallback 后端会允许直接跑原生 transformers 模型做快速探索，代价是部分优化不生效。&lt;/p&gt;
&lt;h2 id=&#34;五教训三差异化价值投在深水区&#34;&gt;五、教训三：差异化价值投在深水区&lt;/h2&gt;
&lt;p&gt;自建框架值不值，取决于有没有超出「组装开源件」的价值。Netflix 的答案：开源换速度，重投入换两个方向——&lt;strong&gt;贴合自家负载特征的性能&lt;/strong&gt;和&lt;strong&gt;Netflix 特有的业务需求&lt;/strong&gt;。两个具体例子：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;On-the-fly sequence packing。&lt;/strong&gt; FSDP 训练里长尾序列制造 straggler，快的 worker 在同步点干等。标准的离线 bin-packing 有效，但在他们的数据规模下预处理延迟可观、数据难保鲜。解法是从存储流式读样本、在内存里动态打包，打包异步跑、和 GPU 计算重叠。结果：最倾斜的数据集上有效 token 吞吐提升最高 &lt;strong&gt;4.7 倍&lt;/strong&gt;（A100 和 H200 上均验证）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;词表大小对齐 64。&lt;/strong&gt; 业务常加自定义 token 和语义 ID，某些词表大小会让 LM head 从高度优化的 cuBLAS kernel 掉到慢得多的 CUTLASS 路径，该层耗时翻三倍。框架自动把词表 pad 到 64 的倍数，开发者不需要知道这层硬件玄学。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;第二个方向是支持「非标准」transformer 用例：比如基于用户交互事件序列（而非自然语言）训练的模型，需要定制的 RL 循环、对接高度定制的推理引擎、优化业务定义的指标——这些要求定制环境、奖励计算和编排模式，但性能、追踪、容错的底层保障必须一样。&lt;/p&gt;
&lt;h2 id=&#34;工程实践联想&#34;&gt;工程实践联想&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;「跑通」和「生产化」之间的鸿沟，大部分都是状态管理。&lt;/strong&gt; Loss mask、checkpoint 完整性、训练-推理一致性——每一项单看都是小细节，合起来决定系统可不可靠。这和我们写业务系统一样：demo 一周，上线半年，差的全在边界条件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;训练-推理 skew 是数据系统里「双写不一致」的 LLM 版本。&lt;/strong&gt; 两份各自「正确」的实现（训练 tokenizer vs 推理 tokenizer）因为微小差异产生静默错误。通用解法也通用：指定唯一事实源，其他都向它对齐，用兼容性测试兜底——logit verifier 本质就是契约测试。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI coding agent 最好用的地方是「验收可机械检查」的场景。&lt;/strong&gt; HF 到内部模型定义的桥接，验收是 logits 数值匹配，agent 可以放心自主迭代。反过来说，给 agent 派活之前先问：这活的验收标准能不能写成断言？写不出断言的活，agent 做完了你还得人工审。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;编排层买、抽象层造，这个取舍可以抄。&lt;/strong&gt; Verl 管 actor 生命周期，自己只做 Data/Model/Compute/Workflow 抽象。通用版：消息队列买、存储买，贴合业务的领域模型自己造——护城河在建模，不在管道。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能优化要贴着自家负载的真实分布做。&lt;/strong&gt; 4.7 倍不是来自通用调优，是来自「我们的序列长度方差极端」这个具体事实；词表对齐 64 同理。先测量自己的负载长什么样，再决定优化什么——别人的 benchmark 不构成你的优化清单。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;本篇小结&#34;&gt;本篇小结&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;定位&lt;/strong&gt;：后训练在 Netflix 规模下是工程问题。框架目标是让模型开发者不碰分布式管道。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;三个坑位&lt;/strong&gt;：数据（loss mask、packing）、模型（分片加载、大词表 logits 内存）、训练（不只是 for 循环，要编排和容错）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;四根支柱&lt;/strong&gt;：Data、Model、Compute、Workflow——第四根是 RL 逼出来的。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;架构演进&lt;/strong&gt;：SFT 的「瘦 driver + SPMD」演进为 RL 的「主动控制器 + 多角色」，编排集成 Verl，自己保住抽象层。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生态策略&lt;/strong&gt;：checkpoint 和 tokenizer 全面贴 HF（AutoTokenizer 是唯一事实源，治训练-推理 skew）；模型实现自己维护换优化空间，桥接新架构用 AI agent + logit verifier 自动化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;差异化投入&lt;/strong&gt;：on-the-fly packing 最高 4.7 倍吞吐；词表对齐 64 避开 kernel 回退；支持交互序列这类非自然语言 transformer。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;一句话&lt;/strong&gt;：训练框架的价值不在堆了多少组件，在于把分布式系统的坑变成了配置项。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://netflixtechblog.com/scaling-llm-post-training-at-netflix-0046f8790194&#34;&gt;Scaling LLM Post-Training at Netflix&lt;/a&gt;（原文，Baolin Li、Lingyi Liu、Binh Tang、Shaojing Li）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/volcengine/verl&#34;&gt;Verl&lt;/a&gt;（字节跳动开源的 RL 后训练库，Netflix 用其核心设施做 actor 生命周期与 GPU 资源管理）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://arxiv.org/abs/2501.12948&#34;&gt;DeepSeek-R1&lt;/a&gt;（GRPO 等高效 on-policy RL 方法的代表作，原文称其为「SFT 变成入场券」的转折点）&lt;/li&gt;
&lt;li&gt;Torchtune、Torchtitan（原文致谢的两个 PyTorch 原生训练参考实现）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://thinkingmachines.ai/tinker/&#34;&gt;Thinking Machines Tinker&lt;/a&gt;（原文对比的外部微调服务）&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
  </channel>
</rss>
