HAMi

September 8, 2026 · View on GitHub

English version | 中文版 | 日本語版

HAMi logo

LICENSE build status Releases OpenSSF Best Practices OpenSSF Scorecard Go Report Card codecov FOSSA Status docker pulls slack discord website

HAMi

AI インフラストラクチャ向け Kubernetes GPU 仮想化およびヘテロジニアスアクセラレータスケジューリング。

HAMi Architecture

HAMi は Heterogeneous AI Computing Virtualization Middleware(異種 AI コンピューティング仮想化ミドルウェア)の略称です。旧称 k8s-vGPU-scheduler。HAMi はプラットフォームチームが Kubernetes ワークロード間で高価な GPU やその他の AI アクセラレータを共有し、デバイスメモリとコンピュートを分離し、アプリケーションコードを変更することなくデバイスアウェアなスケジューリングポリシーで Pod をスケジュールできるようにします。

HAMi は CNCF Incubating および CNCF Landscape プロジェクトであり、CNAI Landscape にも掲載されています。

CNCF logo

なぜ HAMi?

AI インフラストラクチャチームは、同じような Kubernetes アクセラレータの問題に直面しています:GPU 全体が小さなジョブに割り当てられ、チームが希少なデバイスを争い、異なるアクセラレータベンダーが異なる運用モデルを提供し、スケジューラがワークロードを効率的に配置するための十分なデバイスコンテキストを持っていません。

HAMi は Kubernetes ネイティブなレイヤーを提供します:

  • デバイス共有:メモリ、コア、またはデバイス数によって物理アクセラレータの一部を割り当てます。
  • リソース分離:デバイスバックエンドがサポートする場合、ワークロードごとのアクセラレータメモリとコンピュートの制限を強制します。
  • デバイスアウェアスケジューリング:トポロジアウェア、binpack、spread、およびデバイス固有のスケジューリングポリシーで Pod を配置します。
  • ヘテロジニアス AI クラスター:NVIDIA GPU、NPU、HCU、MLU など、1 つのスケジューリングおよび割り当てワークフローで複数のアクセラレータタイプを管理します。
  • アプリケーションの変更不要:標準の Kubernetes リソースリクエストとリミットを引き続き使用します。
  • 本番運用:メトリクス、ダッシュボード、WebUI、Helm インストール、コミュニティサポートのデプロイガイダンスを提供します。

ユースケース

  • 共有 Kubernetes AI クラスターでの GPU 利用率の向上。
  • 同一のアクセラレータプール上でマルチテナントのノートブック、トレーニング、推論ワークロードを実行。
  • 公平なデバイス割り当てとクォータ制御を備えたプライベートクラウド AI プラットフォームの構築。
  • NVIDIA、Ascend、Cambricon、Hygon、Iluvatar、MetaX、Moore Threads など、複数ベンダーのヘテロジニアスアクセラレータクラスターの運用。
  • バッチ AI ワークロード向けに kube-scheduler や Volcano などの Kubernetes スケジューラと HAMi を組み合わせて使用。

仕組み

HAMi は Mutating Webhook、スケジューラエクステンダー、デバイスプラグイン、およびデバイス固有のコンテナ内仮想化コンポーネントで構成されています。

Pod サブミッション
  -> HAMi Mutating Webhook
  -> HAMi スケジューラ filter / score / bind
  -> デバイス割り当てを Pod アノテーションに書き込み
  -> デバイスプラグイン Allocate()
  -> コンテナランタイム環境
  -> HAMi モニターおよびメトリクス

デバイス仮想化

HAMi はワークロードが必要なアクセラレータリソースのみをリクエストできるようにします。例えば、次の Pod は 3 GiB の GPU メモリを持つ物理 NVIDIA GPU を 1 つリクエストします:

resources:
  limits:
    nvidia.com/gpu: 1
    nvidia.com/gpumem: 3000

ワークロードはコンテナ内で割り当てられたデバイスリソースを確認し、HAMi がスケジューリング、割り当て、分離を調整します。

HAMi 使用前後の比較

注意:

  1. HAMi のインストール後、ノードに登録される nvidia.com/gpu の値はデフォルトで vGPU の数になります。
  2. Pod でリソースをリクエストする場合、nvidia.com/gpu は現在の Pod が必要とする物理 GPU の数を指します。

サポートされているデバイス

HAMi は GPU、NPU、HCU、MLU、GCU、XPU など、複数のヘテロジニアスアクセラレータバックエンドをサポートしています。デバイスの機能はベンダー、モデル、ドライバー、ハードウェア世代によって異なります。

最新のサポートマトリクスについては、HAMi サポートデバイスページを参照してください。

クイックスタート

前提条件

NVIDIA デバイスプラグインを使用する場合:

  • NVIDIA ドライバー >= 440
  • nvidia-docker バージョン > 2.0
  • NVIDIA が containerd、Docker、または CRI-O のデフォルトランタイムとして設定されていること
  • Kubernetes >= 1.23
  • glibc >= 2.17
  • Linux カーネル >= 3.10
  • Helm > 3.0

Helm でインストール

HAMi が管理できるように GPU ノードにラベルを付けます:

kubectl label nodes <node-name> gpu=on

HAMi Helm リポジトリを追加します:

helm repo add hami-charts https://project-hami.github.io/HAMi/
helm repo update

HAMi をインストールします:

helm install hami hami-charts/hami -n kube-system

スケジューラとデバイスプラグインが実行されていることを確認します:

kubectl get pods -n kube-system

hami-device-pluginhami-scheduler が両方とも Running になったら、サンプルワークロードをデプロイします:

kubectl apply -f examples/nvidia/default_use.yaml

完全なインストールガイドと設定オプションについては、HAMi ドキュメントを参照してください。

スケジューリングポリシー

HAMi は AI ワークロード向けに複数のスケジューリングモードをサポートしています:

  • binpack:少数のノードまたはデバイスにワークロードをパックしてリソース利用率を向上させます。
  • spread:ノードまたはデバイス間でワークロードを分散させ、競合を減らします。
  • トポロジアウェアスケジューリング:サポートされている場合、GPU トポロジに基づいてデバイスの組み合わせを選択します。
  • ダイナミック MIG:対応するカードとモードに対して NVIDIA MIG インスタンスを動的に作成および割り当てます。

HAMi はデフォルトの Kubernetes スケジューラパスと互換性があり、バッチ指向の AI ワークロードに Volcano を組み合わせて使用することもできます。現在のスケジューラ統合ガイドについては、HAMi Web サイトを参照してください。

オブザーバビリティと WebUI

HAMi はクラスタのアクセラレータ使用状況を監視するためのメトリクスを公開します。インストール後、スケジューラのモニターエンドポイントからメトリクスにアクセスできます:

http://<scheduler-ip>:<monitor-port>/metrics

デフォルトのモニターポートは 31993 です。Helm の値で --set scheduler.service.monitorPort=<port> のように変更できます。

HAMi は他にも以下を提供します:

  • HAMi-WebUI:ビジュアルクラスタおよびデバイス管理。
  • Grafana ダッシュボードの例:アクセラレータモニタリング用。
  • ベンチマーク素材:ワークロードの動作とスケジューリング効果の評価用。

HAMi WebUI

エコシステム連携

プロジェクト連携内容
vLLMGPU メモリ上限付きで推論サーバーを実行し、複数モデルで 1 枚の GPU を共有
VolcanoGPU ワークロード向けのギャングスケジューリングおよびキューベースのバッチスケジューリング
KueueResourceTransformation を通じて HAMi リソースを Kueue に公開し、バッチジョブのキューイングを実現
PrometheusHAMi はコンテナごとの GPU メトリクス(メモリ使用量・利用率)を公開
GrafanaHAMi GPU メトリクスを可視化するための事前構築済みダッシュボードを提供
NVIDIA GPU OperatorHAMi がスケジューリング、GPU Operator がドライバー管理を担う構成で共存可能

ロードマップ、ガバナンス、コントリビューション

HAMi はメンテナーコントリビューターによって管理されています。ガバナンスについては、HAMi コミュニティリポジトリを参照してください。

コード、ドキュメント、テスト、デバイスバックエンドの改善に貢献するには、CONTRIBUTING.md をお読みください。

コミュニティ

HAMi コミュニティは、ユーザー、コントリビューター、ハードウェアベンダー、Kubernetes ベースの AI インフラストラクチャを構築するプラットフォームチームに開かれています。

講演と参考資料

イベント講演
中国クラウドコンピューティング・インフラ開発者会議、北京 2024k8s クラスターにおける異種 AI インフラストラクチャの解放
KubeDay Japan 2024Unlocking Heterogeneous AI Infrastructure K8s Cluster: Leveraging the Power of HAMi
KubeCon + AI_dev Open Source GenAI & ML Summit China 2024Is Your GPU Really Working Efficiently in the Data Center? N Ways to Improve GPU Usage
KubeCon + AI_dev Open Source GenAI & ML Summit China 2024Unlocking Heterogeneous AI Infrastructure K8s Cluster
KubeCon Europe 2024Cloud Native Batch Computing with Volcano: Updates and Future

ライセンス

HAMi は Apache License 2.0 の下でライセンスされています。詳細は LICENSE を参照してください。

Copyright Contributors to HAMi, established as HAMi a Series of LF Projects, LLC.