對於許多 AI 工程師來說,當 PyTorch 等框架提供的標準運算子(Operator)無法滿足效能需求時,通常需要撰寫自定義的 Kernel(算子,即直接在 GPU 上執行的底層 C++/CUDA 程式碼)。然而,自定義 Kernel 的分發一直是一個痛點:環境依賴複雜、編譯版本對不齊,且執行原生二進位檔存在巨大的安全風險。
Hugging Face 推出的 Kernels 專案旨在將這些底層算子標準化,讓它們像 Model 或 Dataset 一樣,可以在 Hub 上被輕鬆地分發、版本管理與安全地載入。近期該專案進行了重大重構,以下為其核心技術更新的詳細分析。
定義 Kernel 專屬的儲存庫類型
過去在 Hugging Face Hub 上,Kernel 可能被混在一般的 Model 儲存庫中。現在官方引入了 kernel 這種新儲存庫類型。這不僅是分類問題,更重要的是它允許在頁面上直接標註該 Kernel 支援的加速器(如 NVIDIA A100, AMD MI300)、作業系統以及後端版本。
對於開發者而言,這解決了發現性(Discoverability)問題;對於使用者而言,在下載前就能確認該算子是否與目前的硬體環境相容,避免載入後才發生 Crash。
解決原生代碼執行的安全危機
Kernel 與一般 Python 程式碼不同,它執行的是原生機器碼(Native Code),擁有與 Python 進程相同的系統權限。如果使用者載入了一個惡意的 Kernel,攻擊者可以直接控制整台伺服器。為了對抗這個風險,Hugging Face 採取了三層防禦機制。
第一層是可再現性(Reproducibility)。他們使用 Nix 工具來確保建置過程是純淨且隔離的。這意味著任何人都可以根據公開的建置配方重新編譯 Kernel,並驗證產出的二進位檔與 Hub 上分發的一致。
第二層是信任發行者制度(Trusted Publishers)。預設情況下,系統只會載入經過社群認證的發行者所提供的 Kernel。如果使用者想要嘗試非信任來源的代碼,必須在載入時顯式設定 trust_remote_code=True,這將風險意識交還給使用者。
第三層是代碼簽署(Code Signing)。為了防止發行者的帳號被盜後被上傳惡意代碼,他們引入了 Sigstore 的 cosign 技術。開發者使用私鑰簽署 Kernel,而系統則用公鑰驗證。由於使用了短暫的臨時金鑰(Ephemeral Keys),即使金鑰洩漏,其有效時間也極短,大幅降低了被利用的機會。
解耦建置與載入的 CLI 工具
為了讓開發流程更清晰,專案將功能拆分為兩個獨立的 CLI 工具。
kernels 庫現在專注於運行時(Runtime),負責載入、準備與檢查 Kernel 的相容性。 kernel-builder 則專注於開發時(Development),負責定義結構、編譯與產出二進位檔。
這種拆分讓工具鏈變得輕量,也為接下來的 AI Agent 自動化開發奠定了基礎。
擴展框架支援與 ABI 穩定性
為了讓 Kernel 能跨版本使用,專案加入了對 Torch Stable ABI(穩定應用程式二進位介面)的支援。簡單來說,ABI 決定了編譯後的二進位檔如何與框架溝通。透過 Stable ABI,開發者可以針對某個版本(例如 Torch 2.9)編譯一次,而該 Kernel 在隨後約兩年內釋出的後續版本中都能直接運行,無需每次更新 PyTorch 都重新編譯。
此外,他們還支援了 Apache TVM FFI(外部函數介面),這使得同一個 Kernel 可以跨框架運作,同時支援 PyTorch、Jax 與 CuPy。
邁向 Agentic Kernel Development(代理人驅動的算子開發)
這是目前最前瞻的方向:利用 AI Agent 自動撰寫並優化 GPU 算子。
一個完整的自動化循環需要:Agent 產生代碼 $\rightarrow$ kernel-builder 編譯 $\rightarrow$ 在實際硬體上跑 Benchmark(基準測試) $\rightarrow$ 根據效能反饋修改代碼 $\rightarrow$ 再次迭代。
為了支援這個流程,kernel-builder 的 CLI 被設計為對 Agent 友好(非互動式指令、結構化輸出)。同時,透過與 HF Jobs 的整合,Agent 可以自動將算子部署到不同的硬體叢集上測試,確保產出的 Kernel 不僅能跑通,且真的比基準線(Baseline)更快。
實務開發小技巧:相容性檢查
對於工程師來說,最煩人的就是環境不匹配。現在可以使用 has_kernel() 快速檢查目前環境是否支援某個算子。如果回傳 False,可以使用 get_kernel_variants() 查看詳細原因,例如:CPU 架構不匹配(x86_64 vs aarch64)或作業系統不符(Linux vs Darwin)。
來源:https://huggingface.co/blog/revamped-kernels
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。