MCPcopy Index your code
hub / github.com/Project-HAMi/HAMi

github.com/Project-HAMi/HAMi @v2.9.0 sqlite

repository ↗ · DeepWiki ↗ · release v2.9.0 ↗
1,524 symbols 4,519 edges 153 files 288 documented · 19%
README

English version | 中文版 | 日本語版

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

Project-HAMi: 異種AIコンピューティング仮想化ミドルウェア

はじめに

HAMi(旧称「k8s-vGPU-scheduler」)は、Kubernetes用のヘテロジニアスデバイス管理ミドルウェアです。GPU、NPUなどの異なるタイプのヘテロジニアスデバイスを管理し、Pod間でヘテロジニアスデバイスを共有し、デバイスのトポロジーとスケジューリングポリシーに基づいてより良いスケジューリング決定を行うことができます。

HAMiは、異なるヘテロジニアスデバイス間のギャップを埋め、ユーザーがアプリケーションを変更することなく統一されたインターフェースで管理できるようにすることを目指しています。2024年12月現在、HAMiはインターネット、パブリッククラウド、プライベートクラウドだけでなく、金融、証券、エネルギー、通信、教育、製造などのさまざまな垂直産業でも広く採用されています。50以上の企業や機関がエンドユーザーであるだけでなく、アクティブな貢献者でもあります。

cncf_logo

HAMiはCloud Native Computing Foundation(CNCF)のサンドボックス及びlandscapeプロジェクトであり、 CNAI Landscapeプロジェクトでもあります。

デバイス仮想化

HAMiは、デバイス共有とデバイスリソース分離をサポートすることにより、GPUを含むいくつかのヘテロジニアスデバイスにデバイス仮想化を提供します。デバイス仮想化をサポートするデバイスのリストについては、サポートされているデバイスを参照してください。

デバイス共有

  • デバイスコアの使用量を指定することにより、部分的なデバイス割り当てが可能です。
  • デバイスメモリを指定することにより、部分的なデバイス割り当てが可能です。
  • ストリーミングマルチプロセッサに厳格な制限を課します。
  • 既存のプログラムへの変更は不要です。
  • dynamic-mig機能をサポートします。

デバイスリソース分離

デバイス分離の簡単なデモンストレーション: 次のリソースを持つタスクは、コンテナ内で3000MのデバイスメモリーとGPUを認識します:

      resources:
        limits:
          nvidia.com/gpu: 1 # Podが必要とする物理GPUの数を宣言
          nvidia.com/gpumem: 3000 # 各物理GPUがPodに割り当てる3GのGPUメモリを識別

img

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

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

NVIDIA GPU
Cambricon MLU
HYGON DCU
Iluvatar CoreX GPU
Moore Threads GPU
HUAWEI Ascend NPU
MetaX GPU

アーキテクチャ

HAMiは、統一されたmutatingwebhook、統一されたスケジューラーエクステンダー、異なるデバイスプラグイン、および各ヘテロジニアスAIデバイスのための異なるコンテナ内仮想化技術を含む、いくつかのコンポーネントで構成されています。

クイックスタート

オーケストレーターを選択

kube-scheduler volcano-scheduler

前提条件

NVIDIAデバイスプラグインを実行するための前提条件のリストは以下の通りです:

  • NVIDIA drivers >= 440
  • nvidia-docker version > 2.0
  • containerd/docker/cri-oコンテナランタイムのデフォルトランタイムとしてnvidiaが設定されていること
  • Kubernetes version >= 1.23
  • glibc >= 2.17 & glibc < 2.30
  • kernel version >= 3.10
  • helm > 3.0

インストール

まず、「gpu=on」ラベルを追加して、HAMiでスケジューリングするためにGPUノードにラベルを付けます。このラベルがないと、ノードはスケジューラーで管理できません。

kubectl label nodes {nodeid} gpu=on

helmにリポジトリを追加します

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

次のコマンドでデプロイします:

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

設定を調整してインストールをカスタマイズします。

次のコマンドでインストールを確認します:

kubectl get pods -n kube-system

hami-device-plugin(旧称vgpu-device-plugin)とhami-scheduler(旧称vgpu-scheduler)の両方のPodがRunning状態であれば、インストールは成功です。こちらの例を試すことができます。

WebUI

HAMi-WebUIはHAMi v2.4以降で利用可能です。

インストールガイドについては、こちらをクリックしてください。

モニタリング

モニタリングはインストール後に自動的に有効になります。次のURLにアクセスしてクラスター情報の概要を取得します:

http://{scheduler ip}:{monitorPort}/metrics

デフォルトのmonitorPortは31993です。他の値はインストール時に--set devicePlugin.service.httpPortを使用して設定できます。

Grafanaダッシュボードの

注意 タスクを送信する前にノードのステータスは収集されません

注意事項

  • NVIDIAイメージでデバイスプラグインを使用する際にvGPUをリクエストしない場合、マシン上のすべてのGPUがコンテナ内に公開される可能性があります
  • 現在、A100 MIGは「none」および「mixed」モードでのみサポートされています。
  • 「nodeName」フィールドを持つタスクは現時点ではスケジュールできません。代わりに「nodeSelector」を使用してください。

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

このプロジェクトはメンテナーコントリビューターのグループによって管理されています。彼らがどのように選ばれ、管理されているかは、ガバナンスドキュメントに概説されています。

コントリビューターになり、HAMiコードの開発に関わることに興味がある場合は、パッチの送信とコントリビューションワークフローの詳細についてCONTRIBUTINGを参照してください。

興味のあることについてはロードマップを参照してください。

ミーティングと連絡先

HAMiコミュニティは、オープンで歓迎的な環境を育むことに取り組んでおり、他のユーザーや開発者と関わるための複数の方法があります。

ご質問がある場合は、以下のチャネルからお気軽にお問い合わせください:

講演と参考資料

リンク
CHINA CLOUD COMPUTING INFRASTRUCTURE DEVELOPER CONFERENCE (Beijing 2024) Unlocking heterogeneous AI infrastructure on k8s clusters 03:06:15から開始
KubeDay(Japan 2024) Unlocking Heterogeneous AI Infrastructure K8s Cluster:Leveraging the Power of HAMi
KubeCon & AI_dev Open Source GenAI & ML Summit(China 2024) Is Your GPU Really Working Efficiently in the Data Center?N Ways to Improve GPU Usage
KubeCon & AI_dev Open Source GenAI & ML Summit(China 2024) Unlocking Heterogeneous AI Infrastructure K8s Cluster
KubeCon(EU 2024) Cloud Native Batch Computing with Volcano: Updates and Future

ライセンス

HAMiはApache 2.0ライセンスの下にあります。詳細についてはLICENSEファイルを参照してください。

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

スター履歴

Star History Chart

Extension points exported contracts — how you extend this code

Devices (Interface)
(no doc) [18 implementers]
pkg/device/devices.go
ResourceManager (Interface)
ResourceManager provides an interface for listing a set of Devices and checking health on them [1 implementers]
pkg/device-plugin/nvidiadevice/nvinternal/rm/rm.go
UsageInfo (Interface)
(no doc) [2 implementers]
pkg/monitor/nvidia/cudevshr.go
Option (FuncType)
Option defines a function type for client configuration options.
pkg/util/client/options.go
FitFn (FuncType)
(no doc)
pkg/device/kunlun/topo.go
Interface (Interface)
Interface defines the API for the plugin package
pkg/device-plugin/nvidiadevice/nvinternal/plugin/api.go
LeaderManager (Interface)
(no doc) [2 implementers]
pkg/util/leaderelection/leaderelection.go
Option (FuncType)
Option is a function that configures a options
pkg/device-plugin/nvidiadevice/nvinternal/plugin/options.go

Core symbols most depended-on inside this repo

Contains
called by 86
pkg/device-plugin/nvidiadevice/nvinternal/rm/devices.go
String
called by 67
pkg/version/version.go
Lock
called by 43
pkg/monitor/nvidia/cudevshr.go
Split
called by 42
pkg/device-plugin/nvidiadevice/nvinternal/rm/devices.go
Get
called by 38
pkg/device/metax/qos.go
InitNvidiaDevice
called by 24
pkg/device/nvidia/device.go
GetClient
called by 23
pkg/util/client/client.go
EncodePodSingleDevice
called by 22
pkg/device/devices.go

Shape

Function 737
Method 609
Struct 133
TypeAlias 34
Interface 7
FuncType 4

Languages

Go99%
Python1%

Modules by API surface

pkg/device/devices.go54 symbols
pkg/device/nvidia/device_test.go50 symbols
pkg/device/nvidia/device.go41 symbols
pkg/device/devices_test.go38 symbols
pkg/monitor/nvidia/cudevshr.go33 symbols
pkg/device-plugin/nvidiadevice/nvinternal/plugin/server.go32 symbols
pkg/device-plugin/nvidiadevice/nvinternal/rm/devices.go31 symbols
pkg/monitor/nvidia/v1/spec.go27 symbols
pkg/monitor/nvidia/v0/spec.go27 symbols
pkg/scheduler/scheduler_test.go26 symbols
pkg/scheduler/scheduler.go26 symbols
pkg/device/metax/sdevice.go26 symbols

Dependencies from manifests, versioned

github.com/Masterminds/semver/v3v3.4.0 · 1×
github.com/NVIDIA/go-gpuallocatorv0.6.0 · 1×
github.com/NVIDIA/go-nvlibv0.10.0 · 1×
github.com/NVIDIA/go-nvmlv0.13.0-1.0.20260212 · 1×
github.com/beorn7/perksv1.0.1 · 1×
github.com/ccoveille/go-safecastv1.8.2 · 1×
github.com/cespare/xxhash/v2v2.3.0 · 1×
github.com/cpuguy83/go-md2man/v2v2.0.7 · 1×
github.com/davecgh/go-spewv1.1.2-0.20180830191 · 1×

For agents

$ claude mcp add HAMi \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact