← 返回信息流
技术博客Hugging Face Blog·6 小时前

Hugging Face 内核迎来重大更新

原标题:🤗 Kernels: Major Updates

速览

Hugging Face 对其 Kernels 功能进行了重大更新,旨在提升 AI 模型在推理和训练阶段的效率。此次更新可能涉及新的内核实现、性能优化以及更广泛的硬件兼容性。这将帮助开发者更快速、低成本地部署和运行模型,进一步推动 AI 应用的落地。Hugging Face 作为 AI 生态的核心平台,此次升级意义重大。

AI 深度解读

背景

过去几个月,Hugging Face 团队围绕 Kernels 项目进行了大量工作,并几乎完全重新设计了该项目。Kernels 是一个旨在让用户能够加载、构建和运行高性能内核(通常为 CUDA / Triton 等原生代码)的工具链,主要面向 AI 推理与训练场景。此次更新涉及仓库类型、安全性、CLI、框架支持以及 Agent 驱动开发等多个方面。本文总结了已发布的主要更新及未来规划。

核心内容

Kernels – 一种新的仓库类型

我们在 Hub 上引入了一种名为 "kernel" 的新仓库类型。这使得我们可以满足用户对计算相关特性的需求。例如,用户可以了解某个内核支持哪些加速器、操作系统和后端版本。

所有可用内核都可以在 https://huggingface.co/kernels 浏览。将这些内核作为 Hub 的一等公民,也惠及了 AI 生态系统。用户可以跨内核、模型及其使用的应用查看趋势,内核的可发现性也得到提升。

改进的安全性

内核运行原生代码,与加载它的 Python 进程拥有相同权限,因此恶意内核可能造成实质性危害。安全性一直是 Kernels 项目的重中之重。

我们早期就专注于可复现性:用户应当能够自行重新编译内核,并验证其与公开源代码一致。我们使用 Nix 来实现这一点,Nix 通过封闭的构建配方评估和强隔离沙箱来保持构建的纯净。我们还通过将源码 Git SHA1 嵌入内核本身来进一步提升来源可追溯性。

近期我们增加了额外的防御层:可信内核发布者和代码签名。

可信内核发布者

借助新的仓库类型,我们引入了“可信发布者”。由于内核在与 Python 进程相同的权限下执行代码,攻击者可能通过上传恶意内核并诱骗用户使用该内核来危害机器。为帮助用户避免此类恶意内核,kernels 包现在默认只加载由可信发布者发布的内核。可信发布者是社区信任的、诚信行事的组织。

我们仍支持从非可信发布者的组织或用户加载内核,但加载时必须显式设置 trust_remote_code=True 参数:

from kernels import get_kernel
kernel_module = get_kernel("Atlas-Inference/gdn", version=1, trust_remote_code=True)

默认情况下,用户无法在 Hub 上发布内核仓库,需要申请成为内核发布者。用户和组织可以在账户设置中请求访问权限,以便我们逐一处理这些请求。

内核签名

我们增加的另一个安全层是代码签名。代码签名可以防范这样的场景:攻击者通过窃取可信发布者的 Hub 凭证,向该内核仓库上传恶意内核。在代码签名中,内核使用仅内核开发者知晓的私钥签名,并用公开的公钥验证。在 Hub 凭证被攻破的情况下,攻击者无法对恶意内核签名,因为他们没有签名所需的私钥。

为了进一步提升安全性,我们使用 Sigstore 的 cosign 通过临时私钥进行签名。由于这些签名密钥仅在有限时间内有效,即使泄露,攻击者通常也无法使用。我们还会验证内核是否由来自可信 GitHub 仓库的可信 GitHub 工作流签名。

内核签名已得到 kernel-builder 的支持,我们提供了 kernels verify-signature 命令来验证内核。目前 kernels 在加载内核时还未自动验证签名,因为我们希望在全面推出之前先测试这个新功能。有关为自己内核设置代码签名的初步说明,请参见 kernels 0.16.0 发布说明:https://github.com/huggingface/kernels/releases/tag/v0.16.0。

重塑的 CLI

以前,许多实用程序交织在 kernelskernel-builder 之间。我们现在在两者的 CLI 之间建立了更好的关注点分离。这里的心智模型是:kernels 是用于加载和准备内核的库,因此不应包含任何与“构建”内核相关的内容。

结果是,kernelskernel-builder 现在都更加精简和专注。更多详情请参阅文档。

更多框架和后端支持

我们扩展了对框架的支持,最显著的变化包括:

  • kernelskernel-builder 添加了对 Torch Stable ABI 的支持。Torch Stable ABI 允许内核开发者针对特定的 Torch 版本或其后大约两年内的任何版本进行开发。例如,针对 Torch 2.9 Stable ABI 的内核支持 Torch >= 2.9。
  • Apache TVM FFI 是除 Torch 之外第一个受支持的框架。TVM FFI 是一种标准化的 ABI,可与 PyTorch、Jax 和 CuPy 等其他框架互操作,允许内核开发者开发跨框架运行的内核。

Agent 驱动内核开发的基础

kernel-builderkernels 补充了 Agent 驱动内核开发的兴起——即利用 Agent 从零开始生成(优化后的)内核。它们共同支持一个工作流:Agent 可以搭脚手架、构建、基准测试并迭代优化内核。

Agent 驱动内核开发仍处于早期阶段,合适的开发循环会不断演变。因此,简单、清晰的基础设施尤为重要——工具应易于组合到用户选择的任何 Agent 工作流或框架中。

kernel-builder 有助于强制执行内核源代码的搭脚手架和使用方式,以实现可复现的构建。这为 Agent 提供了可预测的项目布局和可重复的工作流。其 CLI 也是为 Agent 优化的,例如非交互式命令和输出,便于 Agent 以编程方式解析。为此,我们还有后端特定的技能来帮助 Agent 应对不同后端的特性,包括特定后端的工具链、编译路径和性能考量。

成功构建内核不是唯一目标,我们还需要确保它在目标硬件上比基线带来实际加速。因此,成功的构建只是第一步验证。通常,目标硬件可能包含多种不同的加速器,甚至同一加速器的不同系列。这使得跨硬件供应商和代际评估结果非常重要。我们与 HF Jobs 的紧密集成可以简化这一基准测试过程。Agent 可以利用此集成运行基准测试套件、收集性能结果,并与定义的基线进行比较。

这样,Agent 可以在不同硬件配置上运行测试,获得关于生成内核性能的可靠反馈,并确定需要改进的地方,从而指导下一次优化迭代。

下面是一些 Agent 增强内核的示例,展示了通过此工作流可以开发和评估的内核类型。

杂项

环境设置

使用 kernel-builder 构建内核的环境设置可能令人生畏。为方便用户,我们现在提供安装脚本,可一键设置环境。如果你更喜欢使用临时实例,可以遵循我们的 Terraform 设置指南。

内核的系统卡

内核构建完成后,我们会创建系统卡(原文未完整展示,但可理解为用于描述内核元数据的记录)。

关键要点

  • 新仓库类型:Hub 上新增 "kernel" 仓库,支持浏览、趋势查看,并明确标注硬件/OS/后端兼容性。
  • 安全增强
    • 默认仅加载可信发布者的内核,避免恶意代码。
    • 引入基于 Sigstore/cosign 的代码签名,使用临时私钥,防范凭证泄露风险。
    • 通过 Nix 构建保证可复现性,嵌入源码 Git SHA1 可追溯。
  • CLI 重塑kernelskernel-builder 职责分离,前者专注加载/准备,后者专注构建,两者更精简。
  • 框架扩展:新增 Torch Stable ABI 支持,以及 Apache TVM FFI 支持,实现跨 PyTorch、Jax、CuPy 等框架的内核互操作。
  • Agent 驱动开发基础kernel-builder 提供结构化脚手架和可复现构建工作流;CLI 针对 Agent 优化(非交互、机器可解析);集成 HF Jobs 实现跨硬件基准测试与迭代优化。
  • 环境简化:提供一键安装脚本和 Terraform 指南,降低构建环境门槛。

意义与影响

此次更新标志着 Hugging Face 在 AI 原生代码执行领域迈出了重要一步。通过将内核作为 Hub 的一等公民,Hugging Face 不仅统一了模型、数据集和应用的管理,还建立了面向高性能计算的安全与协作标准。代码签名和可信发布者机制借鉴了软件供应链安全的最佳实践,对于防止恶意内核扩散具有里程碑意义。同时,对 Agent

查看原文 →huggingface.co