Hugging Face Kernels 重大更新
Hugging Face Kernels 重大更新
Kernels 作為新的儲存庫類型
Hugging Face 在 Hub 上新增了一個 "kernel" 儲存庫類型,以使自訂 kernels 成為第一級、可發現,並顯示支援的加速器、作業系統及後端版本。
使用者可以在 https://huggingface.co/kernels 瀏覽所有 kernels,並看到例如 https://huggingface.co/kernels/kernels-community/flash-attn3 的 Flash Attention 3 kernel 頁面。
將 kernels 設為第一級公民,使使用者能够觀察 kernels、模型與應用程式之間的趨勢。
安全性改進
Hugging Face 透過受信任的發布者和程式碼簽署加強 kernel 安全性,以防止惡意 kernels 以與 Python 程式相同的權限運行。
受信任的 kernel 發布者
預設情況下,kernels 套件僅會載入來自受信任發布者的 kernels;從其他來源載入則需要 trust_remote_code=True 參數。
from kernels import get_kernel
kernel_module = get_kernel(
"Atlas-Inference/gdn", version=1, trust_remote_code=True
)
使用者和組織必須從帳戶設定申請發布者存取權,以允許逐案審查。
Kernel 簽署
額外的一層使用 Sigstore 的 cosign 和短暫的私鑰,使得洩漏的金鑰在其短暫有效期後無法被重複使用。
該 kernel 由一個受信任的 GitHub 工作流程(來自受信任的 GitHub 儲存庫)進行簽署。
kernel-builder 支援簽署,且 kernels verify-signature CLI 可以驗證簽名;載入時的驗證仍在進一步測試中。
初步設置說明位於 kernels 0.16.0 版本說明中:https://github.com/huggingface/kernels/releases/tag/v0.16.0
CLI 改版
kernels 與 kernel-builder 的職責已被分離,以使各 CLI 更精簡且更具體。
kernelsCLI 負責載入並準備 kernels 以供使用。kernel-builderCLI 負責建構 kernels。
文件可在 kernels CLI 和 kernel‑builder CLI 頁面上取得。
此分離也提升了代理式 kernel 開發的體驗。
框架與後端支援擴展
已擴展對框架與後端的支援,以擴大 kernel 相容性。
- Torch Stable ABI: kernels 可以針對特定對特定的 Torch 版本或任何後續版本進行目標設定,大約兩年。例如,針對 Torch 2.9 Stable ABI 的 kernel 可與 Torch >= 2.9 相容。
- Apache TVM FFI: 除了 Torch 之外,第一個受支援的框架,提供一個標準化的 ABI,可與 PyTorch、Jax 和 CuPy 互操作,使得 kernel 能跨框架運行。
代理式 kernel 開發的基礎
工具現在提供了一個結構化、友善於代理的工作流程,用於腳手架、建構、基準測試以及反覆優化 kernels。
kernel-builder 強制執行可預測的專案佈局和可重複的建構,提供一個經過代理優化的 CLI(非互動命令、直接輸出),並包含後端特定的技能,以捕捉工具鏈、編譯路徑和效能考量。
與 HF Jobs 的整合讓代理能夠在不同硬體配置上運行基準測試套件,收集效能結果,並與預定義的基線進行比較。
透過此工作流程開發的 kernel 範例:
其他改進
可用性與可靠性獲得了數項升級。
環境設置
一鍵安裝腳本簡化了 kernel‑builder 環境的設置;同時也提供了 Terraform 安裝指南,適用於短暫實例。
kernels 的系統卡
建構後,會產生一張系統卡,顯示使用說明和暴露的介面;當推送到 Hub 時,它會成為 kernel 的前置資料。
例如:kernels‑community/flash-attn3 的系統卡。
我的系統是否相容於 kernel?
has_kernel() 函式會返回一個布林值,指示相容性。
from kernels import has_kernel
print(has_kernel("kernels-community/activation", version=1))
如需詳細原因,get_kernel_variants() 會列出每個變體及其接受或拒絕的原因。
from kernels import get_kernel_variants, VariantAccepted
for decision in get_kernel_variants("kernels-community/activation", version=1):
name = decision.variant.variant_str
if isinstance(decision, VariantAccepted):
print(f"{name}: compatible
else:
print(f"{name}: rejected ({decision.reason)
manylinux_2_28 支援改進
先前,kernels 靜態連結 libstdc++ 以避免舊版 libstdc++ 問題,但這導致動態與靜態版本互動時出現段錯誤。
現在 kernels 動態連結 libstdc++,並使用官方 manylinux_2_28 工具鏈編譯,以保持與舊版 libstdc++ 的相容性。
結論
此更新旨在同時服務於 kernel 開發者與使用者,透過使 kernels 更安全、更易發現、更易建構,並更適合自動化、代理驅動的工作流程。
歡迎社群提供回饋。
致謝:感謝 Aritra 審閱此篇文章。
Sources
- Original🤗 Kernels: Major Updates