Wave GPU

GPUとワークロードを、可視化・共有・優先度。

GPUとGPUワークロードをまず可視化し、次に共有できるようにする運用レイヤーです。いま運用されているGPUクラスターからそのまま始められます。

共有レイヤー
HAMiDynamia
デモを申し込む
Wave GPU運用レイヤー · STCLab
GPU Dashboard
GPU Workloads
GPU Health
GPU Sizing
読み取り · GPUメトリクス、ワークロード、Kubernetesの状態
書き戻し · 承認された設定変更のみ
次の2つの環境のどちらでも
現在のGPU環境

NVIDIA標準のデバイスプラグイン。1つのワークロードが1枚のカードを丸ごと使います。

共有レイヤーHAMi

1枚のカードを複数のワークロードで分け合います。ここまではオープンソースです。DynamiaのHAMi Enterpriseは、オーバーコミット、優先度、ターボ、弾性メモリを追加します。

物理GPUA10G · L40S · H100 · H200
課題

カードは1枚、仕事も1つ。残りにはだれも手が届きません。

KubernetesはGPUを整数単位でしか割り当てません。GPUを1つ要求したジョブはカードを丸ごと受け取り、そのジョブがカードの一部しか使っていなくても、残りにはほかのだれも手が届きません。多くのチームは、これが起きていること自体を見られていません。どのワークロードがどのカードに載っているのか、割り当て済みと表示されたカードが実際に稼働しているのか、どのカードが故障していてどのカードが空いているのか。そのため、カードを買い増すことになります。

現在 · 純粋なKubernetes1つのジョブがカードを占有
空き · ほかのワークロードは使えません
学習ジョブKubernetesはGPUを整数単位で割り当てます。このジョブが使うのはカードの約5%です。
HAMi Enterprise + Wave GPU6つのモデルが同じカード上に
123456
物理上限 23,028 MiBホストメモリへ退避 5,972 MiB

割り当て29,000 MiB。カードに収まらない5,972 MiBはサーバーのメインメモリが保持します。

2本のバーは同じ物理カードであり、同じ幅で描いています。KServe環境でNVIDIA A10G 1枚を用いて測定しました。この数値はカードの種類とワークロードによって変わります。ブロックの大きさは模式的なもので、実際の要求量はモデルごとに異なります。

すでに使える3つの選択肢

MIG、タイムスライシング、MPSはカードのメモリの範囲内でしか分割できません

NVIDIAは1枚のカードに複数のワークロードを載せる方法をすでに3つ提供しています。いずれも、カードが物理的に持つメモリの範囲内でしか分割できません。

MIGはカードを固定のハードウェア区画に分割します。タイムスライシングは各ワークロードに順番でカード全体を渡します。MPSは複数のプロセスが同時にカードへ処理を送れるようにします。

表を横にスクロールするとすべての列を確認できます。

できること純粋なKubernetesMIGタイムスライシングMPSHAMi Enterprise+ Wave GPU
1枚のカードを複数のワークロードで共有
最大7個 · プロファイル固定
制限なし
最大48個
MiB単位オープンソース
あるワークロードのメモリを他から保護
該当なし
なし
CUDA 11.4+ · 上限の設定が必要
ハード分離オープンソース
1つのクラッシュで他を巻き込まない
制約あり
オープンソース
対応するカード
すべて
Ampere以降のデータセンター向けカードのみ
Pascal以降
ほとんど
NVIDIA、Ascend、Cambriconなど6系統オープンソース
カードにないメモリまでワークロードに割り当て
アイドル状態のモデルをホストメモリへ
重要なワークロードを優先
後回しのジョブは強制終了せず一時停止
実行中にメモリ上限を変更
再起動が必要
再起動が必要
再起動なし
あり条件付きなし

最終列で「オープンソース」と示した行は、HAMiオープンソースプロジェクトに含まれます。この表示がない3行にはHAMi Enterpriseが必要です。

NVIDIAの公式資料に基づきます。Improving GPU Utilization in Kubernetes、MIG User Guide、MPSのドキュメント。MIGはAmpere以降のデータセンター向けカードが必要なため、L40S、L4、A10Gでは利用できません。3つとも、カードの物理容量の範囲内でしか分割できず、優先度の概念がなく、実行中に上限を変更できません。

仕組み

2つのステップです。最初のステップは何もインストールしません。

ステップ1 · 可視化Wave GPU

いま運用されているGPUクラスター上の4つの画面です。NVIDIA標準のデバイスプラグイン、カード単位の割り当て、新たなインストールはありません。すべてのカード、すべてのワークロード、29項目の点検、そして実測した需要で補正した予約値。

GPU Dashboard · GPU Workloads · GPU Health · GPU Sizing
ステップ2 · 共有HAMiDynamia

1枚のカードを複数のワークロードで共有し、物理的に収まる限界を超えます。メモリオーバーコミット、タスク優先度、ターボモード、弾性メモリ。このページの実測結果はここから得られたものです。

HAMi Enterpriseが必要

順序が重要です。まず自社の数値を確認し、そのうえでカードを共有する価値があるかを判断します。

ステップ1 · 可視化Wave GPU

いま運用しているクラスター上の4つの画面

Wave GPUは、クラスターがすでに出している情報を読み取り、4つの画面にまとめます。いずれもカード共有のインストールを必要としません。

GPU Dashboard

クラスター内の全カードを1画面で

カード1枚にタイル1つ、クラスターの地図です。純粋なGPUクラスターでは各カードの状態とその上のワークロードを、カードを共有するクラスターではワークロードに割り当てたメモリまで表示します。

1
カード1枚にタイル1つ

カードが丸ごとでも分割されていても、稼働中・アイドル・故障・空きをカードごとに表示します。緑は稼働中、グレーはアイドル、赤は速度低下です。

2
タイルを開くとカードの詳細

地図を離れることなく詳細が開きます。物理容量、割り当てたメモリ、実際に載っている量、ホストメモリへ退避した量、そしてカードの点検結果を1つのパネルで確認できます。

3
共有カードでは割り当てと物理を並べて

カードを共有している場合、ワークロードに割り当てたメモリ、物理上限、そしてその上限を超えて割り当てた量をそのまま描きます。使用量だけを見せるダッシュボードにはない数値です。

効果

「GPUはいまどういう状態か」に、カード → 分割 → 割り当て → ワークロードの連なりで答えます。

コンソール設計案
GPUカード10枚をタイル地図で示すGPU Dashboardのコンソール設計案
GPU Dashboardのコンソール設計案。数値はA10G 10枚のクラスターを想定した例です。
GPU Workloads

各GPUワークロードが実際に何をしているか

クラスター内のすべてのGPUワークロードを1つの表で。何を使い、どう動き、どう配置されたか。

1
GPUをどう使っているか

メモリと演算の使用量と予約量、直近24時間のパターン、そして現在の状態。ワークロードの速度が落ちているときは、その原因となっているワークロードまで表が示します。

2
どう動いているか

Deployment、Job、InferenceServiceといったオブジェクトの種類。vLLMなどの実行ランタイム。そしてPodがまとまって同時に起動する必要があるかどうか。

3
どう配置されたか

配置したスケジューラー(HAMi、Volcano、KAI)と経由したキュー(Kueue)。複数のスケジューラーが同時に動くクラスターでも、配置の経路が見えたままになります。

効果

「GPUワークロードは順調か」に、1つの表で答えます。

コンソール設計案
GPUワークロードの表を示すGPU Workloadsのコンソール設計案
GPU Workloadsのコンソール設計案。数値は例です。アイドル状態の行はオーバーコミット推奨の入力になります。
GPU Health

29項目の点検: ハードウェア12項目、共有レイヤー17項目

GPUの障害は2つの場所から来ます。ハードウェアの故障と共有レイヤーの故障は原因も対処も異なるため、分けて点検します。

ハードウェア点検12項目共有レイヤー点検17項目
1
ハードウェア点検12項目

XIDエラー、ECCメモリエラー、温度、PCIe、スロットリングをDCGMの信号から読み取ります。カードを共有していてもいなくても、あらゆるGPUクラスターで動作します。

2
共有レイヤー点検17項目

この17項目はカード共有を使っている場合にのみ該当します。分離、アドミッションwebhook、デバイスプラグイン、設定ドリフト、ライセンスを対象とします。検出ごとに、その原因と影響を受けるPodを、元の記録から引用して提示します。

3
対処は段階的に

ラベルの再適用のような安全な修復は自動で適用します。Podの再起動は準備だけを行い、承認を待ちます。

画面の事例: 共有しているカードでは、メモリ上限はPodの起動時に注入されます。それを注入する仕組みが静かに停止すると、新しいPodは上限のないまま起動します。すべて正常に見えていながら、ワークロードが互いのメモリに手を伸ばせる状態です。
効果

静かに無効化された分離を、人が気づく前に見つけます。

コンソール設計案
点検結果と1つの対処の詳細を示すGPU Healthのコンソール設計案
GPU Healthのコンソール設計案。数値は例です。対処の履歴には、修復が維持されたかどうかまで記録されます。
GPU Sizing

推測で決めたGPU予約を、実測で補正します

GPUの予約はたいてい推測から始まります。GPU Sizingは、ワークロードが実際にどれだけ使っているかを測り、それに見合う予約値を提案します。

1
まず測ります

ワークロードがGPUを実際にどれだけ使っているかを測り、予約値と比較します。差が大きい場合は、より小さい値を提案します。

2
安全な範囲まで

メモリは、そのワークロードが到達した最大値を下回っては削りません。メモリ上限を超えるとプロセスが終了するためです。すでに適正なワークロードには提案を出しません。

3
承認してから適用されます

自動で変わるものはありません。画面で承認するか、プルリクエストとして書き出します。適用後にワークロードが上限を超えた場合は、以前の値に戻します。

効果

予約が実測に合えば、同じカードにより多くのワークロードが安全に収まります。

コンソール設計案
推奨テーブルと根拠パネルを示すGPU Sizingのコンソール設計案
GPU Sizingのコンソール設計案。数値は例です。すでに適正な行と、根拠が足りない行には提案を出しません。

いまのクラスターでそのまま動きます

上の4つの画面は、すでに運用されているGPUクラスター以外に何もインストールしません。NVIDIA標準のデバイスプラグイン、1ワークロードに1枚のカード、共有レイヤーなし。書き直すものはありません。

標準のKubernetes

Wave GPUは上に載せるレイヤーです。お使いのスケジューラーは置き換えません。

すでに稼働中のスタック

Kubeflow、Kueue、KServeを使うクラスターにそのまま入ります。

アプリケーションの変更なし

PyTorch、TensorFlow、vLLMのワークロードは、いまのまま動きます。

上の4つの画面は、すでに運用されているGPUクラスター以外に何もインストールしません。ここから下は2つ目のステップ、カードを共有する話です。

ステップ2 · 共有HAMiDynamia

DynamiaのHAMi Enterpriseで、1枚のカードを複数のワークロードが共有します

HAMiはDynamiaが開発したKubernetes向けの共有レイヤーです。基本の共有機能はHAMiオープンソースプロジェクトに含まれます。さらに4つの機能がHAMi Enterpriseで利用可能になります。オーバーコミット、優先度、ターボ、弾性メモリです。Wave GPUはこの5つすべてを運用します。どこまで共有して安全かを測り、設定を提案し、適用後に何が起きるかを見守ります。

Flexible GPU VirtualizationHAMiオープンソースに含まれる

1枚のカードを複数のワークロードが安全に共有します

1
分数ではなくMiB単位で分割

「GPU 0.5個」とは要求しません。マニフェストにMiBの数値を書けば、コンテナにはちょうどその分だけが見えます。

2
アプリケーションの変更なし

PyTorchもTensorFlowもコード変更なしで動きます。処理はインフラのレイヤーで行われます。

3
NVIDIAだけではありません

NVIDIA、Huawei Ascend、Cambricon、Hygon、Iluvatar、Moore Threadsを同じ方式で扱います。

4
いまのクラスターにそのまま

標準のKubernetesに載せるミドルウェアです。スケジューラーはそのままの位置に残ります。

Kubernetes Pod · それぞれがカードの一部を要求
Pod 1
Pod 2
Pod 3
Pod 4
Pod 5
Pod 6
HAMi
すべてのCUDA呼び出しを検査 · リソースをスケジューリング
物理カード
GPU 0
GPU 1
Podからの要求の書き方
resources:
  limits:
    nvidia.com/gpu: 1
    nvidia.com/gpumem: 10000   # MiB · ハード上限
    nvidia.com/gpucores: 30      # % · 競合時の取り分
Memory OvercommitHAMi Enterpriseと併用

アイドル状態のモデルをホストメモリへ退避し、稼働中のモデルがカードを使えるようにします

オーバーコミットとは、カードが物理的に持つ量を超えるメモリをワークロードに割り当てることです。

1
アイドル状態のモデルは自動で退避します

一定時間リクエストのない推論モデルは、GPUメモリからサーバーのメインメモリへ退避します。人が片づける必要はありません。

2
リクエストが来れば戻ります

新しいリクエストが届くと、モデルはGPUメモリへ戻ります。呼び出す側がこの動きに気づくことはありません。

3
同じハードウェアで2倍から3倍

メモリ上限を物理容量より大きく設定できるため、オーバーコミットなしでカードを共有する場合と比べて、同じカードに2倍から3倍の推論サービスが収まります。カードをまったく共有しない状態と比べた場合は、最後のセクションの結果のほうが大きくなります。

4
GPUメモリをキャッシュとして

高価なGPUメモリが固定的な保管場所ではなくなります。いま処理しているもののための高速な置き場になります。

GPUメモリ · 高速で高価23,028 MiB
LLMサービスA
処理中
ビジョンモデルB
処理中
ページイン · リクエスト到着
ページアウト · しばらくリクエストなし
ホストメモリ · 低速で潤沢サーバーのメインメモリ
LLMサービスC
アイドル · 退避済み
埋め込みモデルD
アイドル · 退避済み

4つのワークロードはいずれも自分が生きていると認識しています。自分が2つのどちらに置かれているかは、どれも知りません。

すべてのモデルが同時に稼働している場合、これは成り立ちません。モデルがPCIeバスを行き来し、全体が遅くなります。価値が出るのは、ときどきしか使わないモデルの集まりです。安全な倍率はWave GPUがノードごとに算出して推奨します。

Task Priority (QoS)HAMi Enterpriseと併用

本番を優先しつつ、後ろに回ったジョブを強制終了しません

1
応答時間を守ります

リアルタイム推論のように遅れが許されないワークロードが、要求した瞬間に演算を確保します。

2
安全な地点で一時停止します

優先度の低いジョブはCUDAカーネル境界で一時停止します。GPU処理の1単位と次の単位のあいだにある安全な地点です。強制終了ではありません。

3
進行中の作業は失われません

一時停止したジョブは状態をGPUメモリに保持したまま、カードが空き次第そこから続きを実行します。

4
空き時間はバッチが埋めます

本番サービスが空いている区間をバッチ処理が埋めます。本番の応答時間は変わりません。

高優先度リアルタイム推論
待機
実行中 · 応答時間を維持
待機
低優先度バッチ学習
実行中
安全な地点で一時停止
実行を再開
競合の開始
競合の終了

優先度の低いジョブを強制終了しません。安全な地点で止まり、カードが空けば続きを実行します。進行中の作業はそのあいだもGPUメモリに残ったままです。

有効化はアノテーション1行、nvidia.com/priorityです。ワークロードのコードは変わりません。どのワークロードを高い側にするかは、Wave GPUが過去の競合の記録をもとに提案します。

Turbo ModeHAMi Enterpriseと併用

メモリ分離を維持したまま、共有していないカードに近い速度で

1
検査そのものがコストです

カードを共有するには、エンジンがすべてのGPU呼び出しを一度ずつ検査する必要があります。ワークロードが小さな処理を多く送るほど、この分が積み上がります。

2
演算側の検査だけを省きます

メモリ分離はそのまま維持されます。省くのは演算側の検査だけです。分離を手放すわけではありません。

3
応答時間が重要な場面で

密度より速度が優先されるLLMサービングとリアルタイム推論で使います。

4
環境変数ひとつ

環境変数で有効にします。コードの変更はありません。

+4.2%
標準モード
+0.3%
ターボモード

共有レイヤーのない同じカードと比べた速度の損失です。低いほど良好です。NVIDIA A10G 1枚で、小さな処理を次々と送るワークロードを用いて測定しました。

標準モード
アプリケーション
メモリ検査
演算検査
物理GPU
ターボモード
アプリケーション
メモリ検査
演算検査を省略
物理GPU

小さな処理を次々と送るワークロードで測定しました。大きな行列演算で構成されるワークロードは、全体の時間に占める検査の割合が小さいため、差もそのぶん小さくなります。

Elastic Memory ScalingHAMi Enterpriseと併用

トラフィックが急増したとき、コンテナを再起動せず上限を引き上げます

1
実行中に上限が変わります

コンテナを再起動せず、処理中のリクエストも切らずに、GPUメモリの上限を変更します。

2
プロセスは終了しません

トラフィックが急増してメモリが一時的に跳ね上がったとき、ワークロードはノードに残っているメモリを一時的に借ります。

3
メモリは返します

負荷が収まると上限は下がり、そのメモリは同じノードのほかのワークロードに戻ります。

4
再起動が障害になる場面で

再起動にかかる時間がそのままサービスの応答できない時間になる、長時間稼働のLLMサービングで使います。

固定上限 · オープンソース上限を超えるとプロセスが終了します
通常の負荷トラフィック急増10 GiB上限
弾性上限 · HAMi Enterprise上限が上がり、プロセスは動き続けます
通常の負荷トラフィック急増10 → 15 GiB

急増が過ぎると上限は下がり、そのメモリは同じノードのほかのワークロードに戻ります。

固定上限だけの構成では、急増の区間でプロセスが終了し、起動し直すあいだそのサービスは応答できません。

実測結果

カード1枚に何個のワークロードが収まるか

同じカードに、より多くのワークロードを載せます。カードの買い増しはありません。3つの列は同じ試験を3通りの構成で実施したものなので、そのまま突き合わせて読めます。

予測モデルのサービング
KServe · 予測モデル
純粋なKubernetes
1
HAMiオープンソース
4
HAMi Enterprise + Wave GPU
6
学習ジョブ
各6 GiB
純粋なKubernetes
1
HAMiオープンソース
3
HAMi Enterprise + Wave GPU
3
LLMサービング
vLLM · 8Bモデル
純粋なKubernetes
1
HAMiオープンソース
1
HAMi Enterprise + Wave GPU
2
完走したバッチジョブ
Kueue · 6件を投入
純粋なKubernetes
1
HAMiオープンソース
3
HAMiオープンソースは6件のうち3件しか完走しません。
HAMi Enterprise + Wave GPU
6

23,028 MiBのNVIDIA A10G 1枚で、同じクラスターの同じワークロードを用いて2026年6月と7月に測定しました。結果はカードの種類とワークロードによって変わるため、3週間のパイロットでお客様のクラスターを対象に改めて測定します。

ご自身のクラスターでWave GPUをご確認ください

GPUクラスターについてお聞かせいただければ、こちらからご連絡します。

デモを申し込む