Esc
输入关键词开始搜索
News

deep huggingface trl v1.md

2026-04-02 · 深度解读 · 编辑:Lighthouse


速查卡

维度内容
一句话总结HuggingFace 将六年积累的 LLM 后训练方法论正式封装为 v1.0 稳定版,覆盖 18+ 训练方法、统一 CLI、双轨 API,成为全球 LLM 微调的事实标准
大白话版以前微调大模型要自己拼积木(SFT、DPO、GRPO 各有各的工具),现在 TRL 把所有积木装进一个工具箱,还分了”稳定层”和”实验层”两个抽屉,并且一行命令就能开训
核心数字18+ 训练方法 (6 稳定 + 12 实验);月下载量 300 万;Liger Kernel 降低 60% 显存 / 提速 20%;Packing 加速 35%;支持 vLLM 0.13-0.17 全系列
影响评级A — 基础设施级里程碑,下游 Unsloth / Axolotl / LLaMA-Factory 均直接依赖
代码github.com/huggingface/trl / pip install --upgrade trl

事件全貌

背景:为什么 TRL v1.0 是一件大事

2024 年末至 2026 年初,LLM 的竞争焦点已从”谁能训出最大的基础模型”转向”谁能最高效地做后训练(post-training)“。后训练——包括监督微调(SFT)、偏好对齐(DPO/RLHF)、基于规则的强化学习(GRPO/RLOO)——是让基础模型变成可用产品的关键环节。

在这个领域,HuggingFace 的 TRL(Transformers Reinforcement Learning)库从六年前的一个研究代码库,逐步演变为全球 LLM 微调的事实标准:

  • 月下载量 300 万,每月增长仍在加速
  • DeepSeek、Qwen、LLaMA 等一线团队在训练管线中直接或间接使用 TRL
  • Unsloth(高效微调)和 Axolotl(全功能训练框架)——各自拥有数千用户——均直接构建在 TRL 的 Trainer API 之上
  • LLaMA-Factory 的 DPO、KTO、ORPO、PPO 能力本质上是对 TRL Trainer 的封装

TRL v1.0 的发布(2026 年 3 月 31 日)不仅是一个版本号的升级,更是一次契约的正式化:这个被整个行业当作稳定基础设施使用的库,终于给出了明确的稳定性承诺。

谁在维护

TRL 由 HuggingFace 的核心团队维护,v1.0 由 @qgallouedec(Quentin Gallouedec)主导发布,@albertvillanova、@sergiopaniego 等人贡献了大量代码。本次发布新增 13 位外部贡献者。


完整内容重建

一、支持的训练方法全景

TRL v1.0 将所有训练方法分为两层:稳定层(stable)和实验层(experimental)。

稳定方法(6 个,受语义版本控制保护)

Trainer类别用途vLLM 加速
SFTTrainer离线监督微调,用标注好的 prompt-completion 对训练模型
DPOTrainer离线直接偏好优化,跳过奖励模型直接从偏好对中学习对齐
RewardTrainer奖励建模训练奖励模型,为后续 RL 阶段提供评分器
GRPOTrainer在线组相对策略优化(DeepSeek-R1 核心方法),无需 value model支持
RLOOTrainer在线REINFORCE Leave-One-Out,使用采样自身作为基线的策略梯度支持

注意: 官方文档标注了 18+ 个 Trainer,但只有上述 5 类(加上 RewardTrainer 共 6 个)处于稳定层。稳定层的承诺是:API 不会在 minor 版本中破坏,遵循严格的语义版本控制。

实验方法(12 个,在 trl.experimental 命名空间下)

Trainer类别用途vLLM状态
OnlineDPOTrainer在线在线版 DPO,使用当前策略生成数据支持候选毕业
NashMDTrainer在线Nash Mirror Descent,纳什均衡博弈优化支持实验
XPOTrainer在线Exploratory Policy Optimization,带探索奖励支持实验
PPOTrainer在线经典 PPO,需要 value model 和奖励模型实验
KTOTrainer离线Kahneman-Tversky 优化,无需配对偏好数据候选毕业
ORPOTrainer离线无参考模型的偏好优化实验
CPOTrainer离线Contrastive Preference Optimization实验
BCOTrainer离线Binary Classifier Optimization实验
PRMTrainer奖励建模Process Reward Model,过程级奖励建模实验
GKDTrainer知识蒸馏Generalized Knowledge Distillation实验
MiniLLMTrainer知识蒸馏小模型从大模型蒸馏实验
AsyncGRPOTrainer在线v1.0 新增:异步 GRPO,解耦生成与训练支持实验

此外,v1.0 还新增了以下实验性方法:

  • VESPO(Variational Sequence-Level Soft Policy Optimization)—— 通过变分框架推导的平滑 reshaping kernel,解决训练不稳定性
  • DPPO(Divergence PPO)—— 用散度约束替代标准 PPO 裁剪
  • SDPO(Self-Distillation Policy Optimization)—— 用模型自身高奖励轨迹做自蒸馏

方法的”毕业”机制

从实验层晋升到稳定层不是自动的,而是基于:

  1. 社区实际使用量 vs 维护成本的比率
  2. API 是否已经收敛稳定
  3. 与稳定方法之间的代码差异是否可控

KTO 和 OnlineDPO 是目前最接近毕业的候选者。

二、CLI 接口设计

TRL v1.0 提供了完整的命令行接口,覆盖六种主要训练方法。

训练命令

命令用途
trl sft监督微调
trl dpo直接偏好优化
trl grpo组相对策略优化
trl rlooREINFORCE Leave-One-Out
trl ktoKahneman-Tversky 优化
trl reward奖励模型训练
trl vllm-serve启动 vLLM 推理服务器
trl env打印系统环境信息

最简示例

一行命令即可启动训练:

trl sft \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name stanfordnlp/imdb
trl grpo \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name HuggingFaceH4/Polaris-Dataset-53K \
  --reward_funcs accuracy_reward

这种设计的意义在于:零代码启动训练。研究人员不需要写 Python 脚本就能跑通一个完整的后训练流程。

YAML 配置文件

所有命令行参数均可写入 YAML 文件以实现可复现配置:

# grpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: HuggingFaceH4/Polaris-Dataset-53K
reward_funcs:
  - accuracy_reward
num_processes: 4
accelerate_config: zero2
trl grpo --config grpo_config.yaml

数据集混合

YAML 配置还支持多数据集混合训练,这对实际生产场景非常关键:

# 混合多个数据源
datasets:
  - path: HuggingFaceH4/Polaris-Dataset-53K
  - path: trl-lib/DeepMath-103K

内置分布式训练配置

TRL CLI 原生集成 Accelerate,提供 7 种预置的分布式训练配置:

配置名描述
single_gpu单 GPU 训练
multi_gpu多 GPU 数据并行
fsdp1Fully Sharded Data Parallel Stage 1
fsdp2Fully Sharded Data Parallel Stage 2
zero1DeepSpeed ZeRO Stage 1
zero2DeepSpeed ZeRO Stage 2
zero3DeepSpeed ZeRO Stage 3

使用方式极为简洁:

trl sft --config sft_config.yaml --accelerate_config zero2

这意味着从单卡实验到多机 DeepSpeed 训练,只需要改一个参数。

三、Configuration API 设计

每个 Trainer 都有对应的 Config 类(如 GRPOConfigDPOConfigSFTConfig),继承自 HuggingFace 的 TrainingArguments,同时扩展了 TRL 特有的参数:

from trl import GRPOConfig, GRPOTrainer

config = GRPOConfig(
    output_dir="./results",
    use_vllm=True,
    vllm_mode="colocate",    # v1.0 新默认值
    use_liger_kernel=True,
    bf16=True,
    num_generations=8,
)

trainer = GRPOTrainer(
    model="Qwen/Qwen2.5-0.5B-Instruct",
    reward_funcs=accuracy_reward,
    train_dataset=dataset,
    args=config,
)
trainer.train()

实验方法的导入路径明确区分:

from trl import SFTTrainer                          # 稳定
from trl.experimental.orpo import ORPOTrainer        # 实验
from trl.experimental.async_grpo import AsyncGRPOTrainer  # 实验,v1.0 新增

四、v1.0 新增核心特性

异步 GRPO(Async GRPO)

这是 v1.0 最重要的新特性。标准 GRPO 的瓶颈在于生成和训练是串行的——模型先花大量时间生成 rollout,再更新梯度。异步 GRPO 将生成卸载到独立的 vLLM 服务器,训练和生成并行进行:

from trl.experimental.async_grpo import AsyncGRPOTrainer

trainer = AsyncGRPOTrainer(
    model="Qwen/Qwen2.5-0.5B-Instruct",
    reward_funcs=accuracy_reward,
    train_dataset=dataset,
)

这涉及缓冲、反压(backpressure)和策略版本记账等复杂工程问题,目前仍在实验阶段。但它指向的方向是明确的:当模型规模和 rollout 数量继续增长时,同步 GRPO 的 GPU 利用率会越来越低,异步是必然出路

奖励函数增强

奖励函数现在可以返回字典,附带额外的标量或逐样本指标,通过 log_extra()log_metric() 回调自动记录到日志中。这对调试和监控 RL 训练过程非常有价值。

Tool Calling 支持

VLLMClient.chat() 新增 tool calling 支持,使 TRL 可以直接训练具有工具调用能力的 agentic 模型。

Packing 加速 35%

BFD(Best-Fit Decreasing)packing 算法性能提升 35%,策略名从 "bfd-requeue" 更名为 "bfd_split"。Packing 是 SFT 训练中将多个短样本拼接到同一个序列中以提高 GPU 利用率的关键技术。

GKD/GOLD 缓冲生成

知识蒸馏训练器新增缓冲 rollout 生成机制,将生成与梯度更新解耦,并支持 vLLM 推理加速。

五、性能优化体系

TRL v1.0 构建了一套完整的性能优化栈:

vLLM 集成(在线方法加速)

在线方法(GRPO、RLOO、OnlineDPO 等)需要模型生成 rollout,这通常是训练的性能瓶颈。TRL 通过集成 vLLM 的 PagedAttention 实现显著加速。

两种运行模式:

  • Server 模式:vLLM 在独立进程中运行,通过 API 通信。适合多机场景。
  • Colocate 模式(v1.0 新默认值):vLLM 与训练共享进程,减少通信开销。
# Server 模式:分配独立 GPU
CUDA_VISIBLE_DEVICES=0,1,2,3 trl vllm-serve --model Qwen/Qwen2.5-7B
CUDA_VISIBLE_DEVICES=4,5,6,7 accelerate launch train.py

支持 vLLM 0.13.0 至 0.17.0 全系列版本。

Liger Kernel(显存优化)

Liger Kernel 是一组 Triton 内核,专为 LLM 训练优化:

  • 吞吐量提升 20%
  • 显存降低 60%

适用于所有 Trainer:

training_args = GRPOConfig(..., use_liger_kernel=True)

Kernels Hub(注意力优化)

TRL 支持从 HuggingFace Kernels Hub 直接加载预编译的优化注意力内核,无需手动编译 Flash Attention:

training_args = SFTConfig(
    ...,
    model_init_kwargs={"attn_implementation": "kernels-community/flash-attn2"}
)

混合精度训练

training_args = SFTConfig(..., bf16=True)   # Ampere 及以上 GPU
training_args = SFTConfig(..., fp16=True)   # 旧 GPU

Unsloth 集成

Unsloth 不是 TRL 的内置组件,而是构建在 TRL Trainer API 之上的独立加速层。通过自定义的融合内核和内存优化,Unsloth 在 TRL 基础上提供:

  • 约 2x 训练速度提升
  • 最高 70% 显存降低

Unsloth 的实现方式是替换 TRL Trainer 内部的关键计算路径(如注意力计算、梯度累积),同时保持 TRL 的外部 API 不变。这意味着使用 Unsloth 的用户本质上仍然是 TRL 用户——他们使用相同的 Trainer API、相同的配置系统、相同的数据格式。

六、架构设计哲学

TRL v1.0 博客中阐述了一套独特的设计哲学,这对理解其架构决策至关重要。

核心原则:“混沌适应性设计”

TRL 的设计假设是:这个领域的变化速度比任何抽象能跟上的都快

具体体现在三条原则:

原则 1:最小化抽象

传统做法是提取公共基类:

# 反模式:继承层次
class OfflineTrainer(Trainer):
    def some_common_method(self): ...

class DPOTrainer(OfflineTrainer): ...
class KTOTrainer(OfflineTrainer): ...

TRL 选择了允许受控的代码重复

# TRL 偏好:独立实现
class DPOTrainer(Trainer):
    def some_common_method(self): ...   # 允许重复

class KTOTrainer(Trainer):
    def some_common_method(self): ...   # 允许重复

理由:当 KTO 的数据处理逻辑需要独立演化时,继承层次会变成枷锁。接受重复的代价,换来的是每个 Trainer 可以独立修改而不影响其他 Trainer。

原则 2:认识组件的暂时性

一个深刻的观察:奖励模型在 PPO 时代是核心组件,在 DPO 时代变成可选项,在 RLVR(规则验证)时代又以验证器形式回归。如果围绕”奖励模型”建立了大量抽象,当它的角色改变时,抽象就会变成负担。

原则 3:双轨稳定性

  • 稳定层:语义版本控制,不在 minor 版本中引入破坏性变更
  • 实验层:快速迭代,API 随时可能变化

这种双轨设计让 TRL 能同时满足两种用户:需要稳定 API 的生产用户,和需要最新方法的研究用户。

七、从 v0.x 迁移

v1.0 的迁移成本被刻意控制得极低——大部分破坏性变更已在 0.x 系列中逐步引入。对 v0.29 用户,只需注意三点:

1. vLLM 模式默认值变更

# v0.29:默认 server 模式
GRPOConfig(use_vllm=True)  # 等价于 vllm_mode="server"

# v1.0:默认 colocate 模式
GRPOConfig(use_vllm=True)  # 等价于 vllm_mode="colocate"

# 如需保持旧行为:
GRPOConfig(use_vllm=True, vllm_mode="server")

2. Packing 参数重命名

# v0.29
SFTConfig(packing="bfd-requeue")

# v1.0
SFTConfig(packing="bfd_split")

3. None 值处理变更

TRL Trainer 不再自动剥离数据集中的 None 值。使用旧版 datasets 库创建的数据集需要手动处理:

from trl.trainer.utils import remove_none_values

dataset = dataset.with_transform(remove_none_values)
trainer = SFTTrainer(..., train_dataset=dataset)

整体评估:从 v0.29 到 v1.0 的迁移工作量在分钟级别。 这是 TRL 团队刻意为之——将破坏性变更分散到多个 0.x 版本中逐步消化,而不是在 v1.0 集中爆发。

八、v1.0 完整 Changelog 要点

新训练方法:

  • Async GRPO:异步解耦生成与训练
  • VESPO:变分序列级软策略优化
  • DPPO:散度近端策略优化
  • SDPO:自蒸馏策略优化

功能增强:

  • 奖励函数返回字典,支持额外指标记录
  • VLLMClient tool calling 支持
  • BFD packing 加速 35%
  • GKD/GOLD 缓冲 rollout 生成
  • SFT 支持 truncation_mode
  • DPO VLM 训练支持 max_length
  • GRPOTrainer 和 RLOOTrainer 支持 pad_to_multiple_of
  • Liger Kernel 支持序列采样
  • Qwen 3.5 聊天模板支持

关键 Bug 修复:

  • DPO collator 截断/填充顺序修复
  • GRPO accuracy_reward 非主线程崩溃修复
  • GRPO tool-calling 循环中的重新 tokenization bug 修复
  • CPO/ORPO 不等长 chosen/rejected prompt 处理修复
  • 多模态消息中 tool_calls 和 tool 角色的处理修复

基础设施:

  • CLI 延迟导入重构(加快启动速度)
  • vLLM 0.13.0 至 0.17.0 全版本支持
  • 需要 datasets>=4.7.0
  • 新增 AGENTS.md 和 .ai 目录,为 AI agent 提供代码库导航指南

竞品对比

TRL 官方博客提供了一份极为详尽的横向对比,覆盖 9 个竞品:

工具HF 生态集成LoRA/QLoRA分布式方案基础设施门槛VLM 支持偏好方法RL 方法
TRL完整LoRA + QLoRAAccelerate / DeepSpeed / FSDP支持DPO, KTO, ORPO, CPO, SimPO, IPOPPO, GRPO, RLOO
OpenRLHF仅加载LoRA + QLoRARay不支持仅 DPOPPO, REINFORCE++, GRPO, RLOO
veRL仅加载模型仅 LoRARay + rollout engine很高支持不支持PPO, GRPO, RLOO, REINFORCE++, DAPO, PRIME
PRIME-RL仅加载仅 LoRA自定义仅 Qwen3-VL不支持异步 GRPO 变体
PipelineRL仅加载不支持异步 vLLM支持不支持GRPO, 异步
OAT仅加载LoRA + QLoRAvLLM不支持DPO, SimPO, IPO, XPOPPO, GRPO, Online DPO
Tinker无数据集加载仅 LoRA托管云不支持不支持不支持
LLaMA-Factory完整LoRA + QLoRAAccelerate支持DPO, KTO, ORPO (通过 TRL)仅 PPO (通过 TRL)
torchtune仅数据集LoRA + QLoRA (torchao)原生 PyTorch仅 Llama Vision仅 DPOPPO (GRPO 开发中)

关键洞察: LLaMA-Factory 的偏好方法和 RL 方法实际上就是 TRL 的封装。这意味着 TRL 的真实用户群远大于其直接下载量所显示的规模。

TRL 自我定位的核心差异化:

“TRL 在生态中的位置是独特的:一个通用后训练库,在方法覆盖面、HuggingFace 深度集成、低基础设施门槛和显式稳定性契约之间取得了平衡。“


产业影响链

上游:HuggingFace 生态的飞轮效应

HuggingFace 每 90 天新增 100 万个仓库(平均每 8 秒一个新仓库)。TRL 是这个飞轮的关键齿轮之一:

用户在 Hub 上找到模型 → 用 TRL 微调 → 上传微调后的模型到 Hub → 更多用户发现

TRL v1.0 的稳定性承诺强化了这个飞轮:生产用户更愿意依赖有语义版本控制保证的库。

中游:微调工具链的分层格局

v1.0 进一步明确了 LLM 微调工具链的三层结构:

层级代表角色
底层引擎TRL + Transformers + PEFT提供核心 Trainer 和算法实现
加速层Unsloth, Liger Kernel在 TRL 基础上提供内核级性能优化
应用层Axolotl, LLaMA-Factory在 TRL 基础上提供 GUI/更高级抽象

TRL v1.0 的双轨设计(稳定 + 实验)让加速层和应用层可以选择性地依赖稳定 API,同时仍能访问实验性新方法。

下游:研究到生产的”最后一公里”

TRL 正在成为学术论文方法落地的标准渠道。一个新的后训练方法从论文到可用实现的路径正在标准化:

  1. 论文发布 → 2. 社区在 TRL experimental 中贡献实现 → 3. 经过验证后毕业到稳定层 → 4. 全球用户可直接使用

VESPO、DPPO、SDPO 三个 v1.0 新方法均是这条路径的产物。


实用指南:谁该用什么

场景选择矩阵

你的场景推荐方法数据需求GPU 需求
有标注数据,想让模型学会特定任务trl sftprompt-completion 对1+ GPU
有偏好对数据(chosen/rejected)trl dpo偏好对1+ GPU
只有”好/坏”标签,无配对trl kto(实验)非配对偏好1+ GPU
有规则/验证器,想做 RLVRtrl grpoprompt + 奖励函数2+ GPU(推荐 vLLM)
想要最前沿的 RL 方法trl rlooprompt + 奖励函数2+ GPU(推荐 vLLM)
训练奖励模型给其他方法用trl reward偏好对1+ GPU
从大模型蒸馏到小模型GKD/MiniLLM(实验)大模型 + 小模型2+ GPU

快速起步推荐配置

个人研究者 / 单卡:

model_name_or_path: Qwen/Qwen2.5-7B
dataset_name: your-dataset
bf16: true
use_liger_kernel: true
per_device_train_batch_size: 2
gradient_accumulation_steps: 8

小团队 / 4-8 卡:

model_name_or_path: Qwen/Qwen2.5-32B
dataset_name: your-dataset
bf16: true
use_liger_kernel: true
use_vllm: true
vllm_mode: colocate
accelerate_config: zero2
num_processes: 4

生产环境 / 多机:

model_name_or_path: meta-llama/Llama-3.3-70B
dataset_name: your-dataset
bf16: true
use_liger_kernel: true
use_vllm: true
vllm_mode: server
accelerate_config: zero3

批判性分析

TRL v1.0 做对了什么

  1. 迁移成本的控制是精心设计的。 将破坏性变更分散到 0.x 系列中逐步消化,让 v1.0 的实际迁移工作量接近于零。这是大型开源项目版本管理的典范。

  2. 双轨设计解决了”稳定 vs 前沿”的根本矛盾。 在一个方法论每月都在更新的领域,纯稳定库会迅速过时,纯实验库会让生产用户恐惧。trl.experimental 命名空间是一个务实的折中。

  3. “不过度抽象”的设计哲学是对领域特征的准确回应。 后训练方法的共性确实没有看起来那么多——DPO 的数据处理和 KTO 的数据处理虽然相似但在关键细节上不同,强行抽象反而增加理解和维护成本。

值得关注的风险

  1. “实验层”可能成为方法的坟场。 博客明确说毕业不是自动的,取决于”维护成本 vs 实际使用量”。这意味着一些有学术价值但用户量不大的方法可能永远留在实验层,最终失修。PPO 在实验层这件事本身就值得玩味——它是 RLHF 的经典方法,但在 TRL 的体系中已被 GRPO 和 RLOO 事实上替代。

  2. Colocate 模式成为默认值的风险。 v1.0 将 vLLM 默认模式从 server 改为 colocate。Colocate 减少了通信开销,但在 GPU 显存紧张的场景下(大模型 + 大 batch),训练和推理共享 GPU 可能导致 OOM。这个默认值变更可能会让不少没仔细读迁移指南的用户踩坑。

  3. 对 HuggingFace 生态的深度绑定是双刃剑。 TRL 深度依赖 Transformers、Accelerate、PEFT、Datasets 等 HuggingFace 库。这让 HuggingFace 生态内的体验极其流畅,但也意味着使用非 HuggingFace 格式的模型或数据集时会遇到摩擦。veRL 和 OpenRLHF 虽然基础设施门槛更高,但在某些大规模 RL 场景中可能更灵活。

  4. 异步 GRPO 仍处于早期阶段。 这是最值得期待的特性,但博客坦承其”需要进一步加固”。缓冲、反压和策略版本管理是分布式系统中经典的难题,在 RL 训练中还叠加了策略漂移的问题。v1.0 标记它为实验是诚实的,但也意味着大规模 RL 训练用户可能还需要等待。

未来路线图的信号

TRL 团队明确提到的未来方向:

  • 异步 GRPO 的生产化:解耦生成与训练,提升 GPU 利用率
  • 方法毕业:KTO、SDFT、SDPO 最有可能进入稳定层
  • 多节点鲁棒性:分布式训练的稳定性保证
  • MoE 支持:Mixture-of-Experts 模型的专家并行
  • 训练可读性:在训练循环中嵌入启发式规则,发出结构化的可操作警告(如”VRAM 利用率仅 34%,建议增大 batch size”),这对 AI agent 自动调参意义重大

独立观察

  • TRL v1.0 的发布时间不是巧合。 2026 年 Q1 见证了 GRPO/RLOO 成为开源 RL 训练的主流选择(DeepSeek-R1、Qwen 3.x 系列、FIPO 等均基于 GRPO 变体),TRL 在这个时间点发布 v1.0 并将 GRPO/RLOO 放在稳定层,是对行业共识的确认和巩固。

  • veRL 和 OpenRLHF 走的是完全不同的路。 TRL 选择了”低门槛 + 广覆盖”,veRL 选择了”高门槛 + 大规模 RL 深度优化”。两者不是替代关系,而是互补关系。真正大规模的 RL 训练(如 DeepSeek-R1 级别)可能仍然需要 veRL 的 Ray 编排能力,而绝大多数微调需求(80%+)TRL 完全可以满足。

  • “训练可读性 for AI agents”是一个前瞻性极强的方向。 当 AI agent 能够读取训练过程中的结构化信号并自动调参时,超参搜索将从人工操作变成 agent 自动化任务。TRL 把这个功能列入路线图,暗示 HuggingFace 正在布局”AI 训练 AI”的闭环。


本文基于 HuggingFace 官方博客、TRL v1.0.0 GitHub Release Notes、TRL 官方文档和 MIGRATION.md 撰写。原始资料链接:HuggingFace Blog / GitHub Release