AI 用サーバレス・プラットフォーム Modal のガイドから、GPU アクセラレータについての説明をまとめてみました。
Modal ガイド : GPU と他のリソース : GPU アクセラレーション
作成 : クラスキャット・セールスインフォメーション
作成日時 : 03/15/2025
* 本記事は modal.com/docs の以下のページを独自に翻訳した上でまとめ直し、補足説明を加えています :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
◆ お問合せ : 下記までお願いします。
- クラスキャット セールス・インフォメーション
- sales-info@classcat.com
- ClassCatJP
Modal ガイド : GPU と他のリソース : GPU アクセラレーション
Modal は GPU 上で任意のコードを実行することを簡単にします。
クイックスタート
ここに Modal の A100 上で動作する関数の簡単な例があります :
import modal
app = modal.App()
image = modal.Image.debian_slim().pip_install("torch")
@app.function(gpu="A100", image=image)
def run():
import torch
print(torch.cuda.is_available())
これはベースイメージの上に PyTorch をインストールして、Python で GPU を使用することができます。
GPU タイプの指定
関数のために特定の GPU タイプを gpu 引数で選択できます。Modal はこのパラメータ用に以下の値をサポートしています :
- T4
- L4
- A10G
- A100-40GB
- A100-80GB
- L40S
- H100
例えば、H100 を使用するには、 @app.function(gpu=”H100″) を使用できます。
各 GPU タイプのための最新の価格については pricing ページ を参照してください。
GPU 数の指定
GPU 引数に :n を付け加えることで、コンテナ毎に 1 GPU 以上を指定することができます。例えば、8*H100 を使用して関数を実行するには :
@app.function(gpu="H100:8")
def run_llama_405b_fp8():
...
現在、H100, A100, L4, T4 と L40S インスタンスは 8 GPU (640 GB GPU RAM) までサポートし、A10G インスタンスは 4 GPU (96 GB GPU RAM) までサポートします。コンテナ毎に 2 GPU より多くをリクエストすると通常はより多くの待ち時間という結果になることに注意してください。これらの GPU は常に同じ物理マシンにアタッチされます。
GPU の選択
ニューラルネットワークをトレーニングするのではなく実行するためには、L40S から始めることを勧めます、これはコストとパフォーマンスの優れたトレードオフと、モデル重みをストアするための 48 GB の GPU RAM を提供します。
LLaMA や Stable Diffusion のようなニューラルネットワークによる使用のための GPU を選択する方法の詳細や、その GPU をフル活用する方法のヒントについては、Tim Dettemers のブログ記事 や Full Stack Deep Learning page on Cloud GPUs をご覧ください。
GPU フォールバック
Modal は、複数のオプションと互換性のある関数に適切な、可能な GPU タイプのリストの指定が可能です。Modal はこのリストの順序を尊重し、優先度の低い GPU タイプにフォールバックする前に最も優先度の高い GPU タイプを割り当てようとします。
@app.function(gpu=["H100", "A100-40GB:2"])
def run_on_80gb():
...
See this example for more detail.
H100 GPU
Modal の最速 GPU は H100 です、これは Hopper/Lovelace アーキテクチャ 用の NVIDIA のフラグシップ・データセンター・チップです。
H100 をリクエストするには、gpu 引数を “H100” に設定します。
@app.function(gpu="H100")
def run_text_to_video():
...
H100 を使用して Flux.schnell モデルから画像を 1 秒以内に生成できる方法を見るには このサンプル を確認してください。
最も強力な (従って最も高価な) GPU に飛びつく前に、貴方の計算のどこにボトルネックがあるかを必ず理解してください。例えば、小さいバッチサイズ (e.g. 一度に 1 プロンプト) による言語モデルの実行は、計算 (arithmetic) ではなくメモリがボトルネックになります。最近のハードウェア世代では、計算スループットはメモリスループットよりも速く向上しているので、メモリに縛られた GPU ジョブのスピードアップは顕著ではなく、追加コストに見合わない場合があります。
H200 GPU
Modal は H100 上のリクエストを H200 上に自動的にアップグレードする場合があります、これは Hopper/Lovelace アーキテクチャ 用の H100 チップの NVIDIA の進化版です。この自動アップグレードは GPU のコストを変えません。
H200 は H100 とソフトウェア互換ですので、コードは常に両方で動作しますが、H200 へのアップグレードはより高いメモリ帯域幅をもたらします。4.8TB/s の NVIDIA H200 の HBM3e メモリ帯域幅は HBM3 を備える NVIDIA H100 よりも 1.4 倍高速です。
A100 GPU
A100 は、Ampere アーキテクチャ に基づく、NVIDIA の前世代の最上位のデータセンターチップです。Modal は A100 の 2 つのバージョンを提供しています : 一つは 40 GB の RAM 搭載、そしてもう一つは 80 GB の RAM を搭載しています。
40 GB の GPU メモリ 搭載の A100 をリクエストするには、gpu=”A100″ を使用します :
@app.function(gpu="A100")
def llama_7b():
...
To request an 80 GB A100, use the string A100-80GB:
@app.function(gpu="A100-80GB")
def llama_70b_fp8():
...
マルチ GPU トレーニング
Modal は現在、シングルマシン上のマルチ GPU トレーニング、そして closed ベータのマルチノード・トレーニングをサポートしています (contact us for access)。使用しているフレームワークによっては、マルチ GPU 上でトレーニングするには様々なテクニックを使用する必要があるかもしれません。
(PyTorch Lightning のように) フレームワークが Python プロセスのエントリポイントを再実行する場合、トレーニングを直接起動したいならば strategy を ddp_spawn か ddp_notebook に設定する必要があります。もう一つの選択肢として、代わりにトレーニング・スクリプトをサブプロセスとして実行します。
@app.function(gpu="A100:2")
def run():
import subprocess
import sys
subprocess.run(
["python", "train.py"],
stdout=sys.stdout, stderr=sys.stderr,
check=True,
)
以上