Physical AI エンジニアリングツール

VLAファインチューニングVRAM&最大バッチ計算機

SmolVLA、OpenVLAなどのロボティクスVLAモデルを単一GPU(24GB/48GB/80GB)でファインチューニングする際に、混合精度Adamの固定メモリと活性化線形プローブを用いてOOM(メモリ不足)を防ぐ最大バッチサイズ(B_max)を計算します。

1. モデル&ファインチューニング設定

例: SmolVLAは450M (0.45B)、OpenVLAは7,000M (7B)。

SmolVLA標準(行動エキスパートのみ)は約100M、全体学習では450M。

2. ピークVRAM実測値(プローブ)

バッチ1・2・4で数十ステップ実行し、nvidia-smiで測定したピークVRAMを入力して活性化メモリの傾きを求めます。

B = GB
B = GB

3. 対象GPU&安全マージン

GB
90 %

CUDAメモリの断片化やスパイクによるOOMを防ぐため、通常はVRAM全体の90%以内を目標とします。

4. 計算結果

最大バッチサイズ (B_max) 8
最大バッチ時のピークVRAM 20.0 GB
固定メモリ(重み+オプティマイザ) 2.30 GB
単一GPU実行診断 単一GPU学習に適しています
固定パラメータ重み 0.70 GB
学習状態(重み+勾配+オプティマイザ) 1.60 GB
固定メモリ合計 (M_fixed) 2.30 GB
活性化メモリ増加率(傾き a) 2.00 GB/batch
ベースオーバーヘッド切片 (M_0) 4.00 GB
安全メモリ上限 (V × Margin) 21.6 GB
残余バッファメモリ 1.6 GB

* ご案内: 計算結果は線形プローブ外挿に基づくエンジニアリング推定値です。実際のファインチューニングでは解像度、トークン長、分散フレームワークによって変動します。

VLAファインチューニングVRAM計算ガイド&原理

SmolVLAやOpenVLAなどの大規模Vision-Language-Action(VLA)モデルを単一GPUでファインチューニングする場合、最大のボトルネックはモデル重みではなくオプティマイザ状態(Optimizer State)とバッチサイズに比例する活性化メモリです。

1. メモリ構成式(ZeRO 混合精度Adam)

学習時のGPUメモリは、固定項(重み+勾配+オプティマイザ状態)、バッチ依存の活性化メモリ、およびCUDAオーバーヘッドの合計となります:

M_train ≈ (P_frozen × b_w + P_train × 16) + M_act(B) + M_overhead M_fixed = (P_frozen × b_w + P_train × 16) / 10^9 [GB]

* ZeRO 논문(arXiv:1910.02054) 기준: 혼합 정밀도 Adam은 FP16 가중치(2B) + FP16 그래디언트(2B) + FP32 마스터 가중치/모멘텀/분산(12B) = 파라미터당 16바이트를 점유합니다.

2. 短い2回測定で最大バッチ(B_max)を導出する方法

活性化メモリはカメラ数、画像解像度、チャンク長により大きく異なるため理論式のみの予測は困難です。バッチ2と4で短いプローブ測定を行い、直線外挿することで安全な最大バッチを確実に算出できます:

a = (M(B2) − M(B1)) ÷ (B2 − B1) [GB / 배치] M_0 = M(B1) − a × B1 [GB, 베이스 오버헤드 절편] B_max = ⌊ (Safety_Margin × V − M_0) ÷ a ⌋

3. 学習パラメータ数を直接確認するPythonコード

LeRobot環境では、requires_gradパラメータ数を直接カウントして固定項を正確に求められます:

from lerobot.policies.smolvla.modeling_smolvla import SmolVLAPolicy policy = SmolVLAPolicy.from_pretrained("lerobot/smolvla_base") total = sum(p.numel() for p in policy.parameters()) train = sum(p.numel() for p in policy.parameters() if p.requires_grad) print(f"Total: {total/1e6:.0f}M, Trainable: {train/1e6:.0f}M") print(f"Fixed Term: {((total-train)*2 + train*16)/1e9:.2f} GB (frozen BF16)")

4. よくある質問 (FAQ)

SmolVLAを24GBの単一GPU(RTX 3090/4090)で学習できますか?

はい。標準設定(ビジョン層を固定し、約100Mの行動エキスパートのみ学習)であれば固定メモリは約2.3GBにとどまるため、24GBカードでバッチ4〜8程度で問題なく学習可能です。全パラメータを学習するFull Fine-tuningの場合は固定項が約7.2GBに達するためバッチを小さくする必要があります。

なぜ混合精度Adamはパラメータあたり16バイト消費するのですか?

ZeRO論文(arXiv:1910.02054)によると、FP16重み(2B)、FP16勾配(2B)、FP32マスター重み(4B)、モメンタム(4B)、分散(4B)が必要となり、学習パラメータ1つにつき合計16バイトが消費されます。

推論用VRAM計算機と学習計算機の違いは何ですか?

推論時はオプティマイザ状態や逆伝播用キャッシュが不要で、重み(FP16で1Bあたり2GB)とKVキャッシュのみが必要です。学習時は1パラメータあたり16バイトの学習状態と活性化バッファが加わるため、はるかに大きなVRAMを必要とします。