Hugging Face Kernels Major Updates

Hugging Face Kernels Major Updates

Kernels as a New Repository Type

Hugging Faceは、カスタムカーネルを第一級の存在(first-class)にし、発見しやすくし、どのアクセラレータ、オペレーティングシステム、およびバックエンドバージョンがサポートされているかを示すために、Hubに新しい「kernel」リポジトリタイプを追加しました。

ユーザーは https://huggingface.co/kernels ですべてのカーネルを閲覧でき、https://huggingface.co/kernels/kernels-community/flash-attn3 のような例ページを確認できます。

カーネルを第一級の市民にすることで、ユーザーはカーネル、モデル、およびアプリケーションにわたるトレンドを確認できるようになります。

Improved Security

Hugging Faceは、悪意のあるカーネルがPythonプロセスと同じ権限で実行されるのを防ぐため、信頼できるパブリッシャー(trusted publishers)とコード署名を使用して、カーネルのセキュリティを強化しました。

Trusted kernel publishers

デフォルトでは、kernelsパッケージは信頼できるパブリッシャーからのカーネルのみをロードします。他のソースからのロードには trust_remote_code=True 引数が必要です。

from kernels import get_kernel

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

ユーザーおよび組織は、アカウント設定からパブリッシャーへのアクセスをリクエストする必要があり、ケースバイケースのレビューが行われます。

Kernel signing

追加のレイヤーとして、Sigstoreのcosignがエフェメラルな秘密鍵を使用して使用されます。これにより、漏洩した鍵が短い有効期間の後に再利用されることはありません。

カーネルは、信頼できるGitHubリポジトリからの信頼できるGitHubワークフローによって署名されます。

kernel-builder は署名をサポートしており、kernels verify-signature CLI で署名を検証できます。ロード時の検証は、さらなるテスト待ちの状態です。

事前のセットアップに関するメモは、kernels 0.16.0 のリリースノートに記載されています: https://github.com/huggingface/kernels/releases/tag/v0.16.0。

Revamped CLIs

各CLIをより軽量かつ特化させるために、kernelskernel-builder の責任が分離されました。

  • kernels CLI は、カーネルのロードと使用のための準備を処理します。
  • kernel-builder CLI は、カーネルのビルドを処理します。

ドキュメントは、kernels CLI および kernel-builder CLI のページで利用可能です。

この分離により、エージェントによるカーネル開発の体験も向上します。

Expanded Framework and Backend Support

カーネルの互換性を広げるために、フレームワークとバックエンドのサポートが拡張されました。

  • Torch Stable ABI: カーネルは、特定のTorchバージョン、または約2年間にわたってそれ以降のバージョンをターゲットにできます。例えば、Torch 2.9 Stable ABIをターゲットとするカーネルは、Torch >= 2.9 で動作します。
  • Apache TVM FFI: Torchに次いでサポートされた最初のフレームワークであり、PyTorch、Jax、CuPyと相互運用可能な標準化されたABIを提供し、フレームワークをまたいで実行されるカーネルを可能にします。

Foundation for Agentic Kernel Development

ツールセットは、カーネルのスカフォールディング、ビルド、ベンチマーク、および反復的な最適化のための、構造化されたエージェントフレンドリーなワークフローを이제提供します。

kernel-builder は、予測可能なプロジェクトレイアウトと再現可能なビルドを強制し、エージェントに最適化されたCLI(非対話型コマンド、分かりやすい出力)を提供し、ツールチェーン、コンパイルパス、およびパフォーマンスの考慮事項を捉えたバックエンド固有のスキルを含んでいます。

HF Jobsとの統合により、エージェントは異なるハードウェア構成でベンチマークスイートを実行し、パフォーマンス結果を収集し、定義されたベースラインと比較することができます。

このワークフローを通じて開発されたカーネルの例:

Miscellaneous Improvements

ユーザビリティと信頼性がいくつかアップグレードされました。

Environment setup

ワンクリックのインストールスクリプトにより、kernel-builder環境のセットアップが簡素化されます。エフェメラルインスタンス用のTerraformセットアップガイドも用意されています。

System card for kernels

ビルド後、使用手順と公開インターフェースを示すシステムカードが生成されます。Hubにプッシュされると、それはカーネルのフロントマターになります。

例: kernels-community/flash-attn3 のシステムカード。

Is a kernel compatible on my system?

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})

Improved manylinux_2_28 support

以前は、古いlibstdc++の問題を避けるためにカーネルはlibstdc++を静的にリンクしていましたが、これにより動的バージョンと静的バージョンが相互作用したときにセグメンテーション違反が発生していました。

現在、カーネルはlibstdc++を動的にリンクし、古いlibstdc++バージョンとの互換性を維持するために、公式の manylinux_2_28 ツールチェーンでコンパイルされます。

Conclusion

これらのアップデートは、カーネルをより安全に、発見しやすく、構築しやすく、自動化されたエージェント駆動型のワークフローに適したものにすることで、カーネル開発者とユーザーの両方に貢献することを目指しています。

コミュニティからのフィードバックをお待ちしています。

Acknowledgements: 記事のレビューをしてくれたAritraに感謝します。

Sources