Physical AI Engineering-Tools

VLA-Fine-Tuning VRAM- & Max-Batch-Rechner

Speicherdimensionierung für das Single-GPU-Fine-Tuning von Vision-Language-Action (VLA) Robotikmodellen wie SmolVLA und OpenVLA. Berechnet den festen Speicher aus Mixed-Precision-Adam und leitet die maximale OOM-freie Batch-Größe (B_max) her.

1. Modell- & Fine-Tuning-Konfiguration

z. B. SmolVLA 450M (0,45B), OpenVLA 7.000M (7B).

SmolVLA-Standard (nur Action-Expert) trainiert ~100M; Full-Fine-Tuning 450M.

2. Gemessene Peak-VRAM-Werte (Probe)

Führen Sie kurze Tests mit Batch 1, 2 oder 4 durch und erfassen Sie den Peak-VRAM mit nvidia-smi, um die Aktivierungssteigung zu bestimmen.

B = GB
B = GB

3. Ziel-GPU & Sicherheitsmarge

GB
90 %

Ein Richtwert von <= 90% des VRAM verhindert Out-of-Memory-Fehler durch CUDA-Speicherfragmentierung und plötzliche Spitzen.

4. Berechnungsergebnisse

Max. sichere Batch-Größe (B_max) 8
Peak-VRAM bei B_max 20.0 GB
Fester Speicher (Gewichte + Opt) 2.30 GB
Single-GPU-Machbarkeit Auf Single-GPU machbar
Eingefrorene Gewichte 0.70 GB
Trainierbarer Zustand (Gewichte + Grad + Opt) 1.60 GB
Gesamter fester Term (M_fixed) 2.30 GB
Aktivierungssteigung (a) 2.00 GB/batch
Basis-Overhead-Achsenabschnitt (M_0) 4.00 GB
Sichere Speichergrenze (V × Marge) 21.6 GB
Verbleibender Speicherpuffer 1.6 GB

* Hinweis: Ergebnisse sind technische Schätzungen basierend auf linearer Extrapolation. Der tatsächliche Verbrauch hängt von Bildauflösung, Sequenzlänge und Framework ab.

VLA-Fine-Tuning VRAM-Prinzipien & Formeln

Beim Fine-Tuning großer VLA-Modelle wie SmolVLA oder OpenVLA auf einer einzelnen Workstation- oder Consumer-GPU liegt der größte Engpass nicht bei den Modellgewichten, sondern bei den Optimierer-Zuständen und dem mit der Batch-Größe skalierenden Aktivierungsspeicher.

1. Speicherzusammensetzung (ZeRO Mixed-Precision Adam)

Der Trainingsspeicher setzt sich aus festen Termen (Gewichte + Gradienten + Optimierer), batchabhängigem Aktivierungsspeicher und CUDA-Overhead zusammen:

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. Maximale Batch-Größe (B_max) aus 2 kurzen Proben

Da der Aktivierungsspeicher stark von Kameras, Bildauflösung und Chunk-Größe abhängt, ist eine reine Theorieformel oft ungenau. Kurze Proben bei Batch 2 und 4 mit anschließender linearer Extrapolation liefern zuverlässige Werte:

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-Code zum Zählen trainierbarer Parameter

In LeRobot können Sie die Parameter über requires_grad direkt zählen, um den festen Speicher exakt zu bestimmen:

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. Häufig gestellte Fragen (FAQ)

Kann SmolVLA auf einer einzelnen 24GB-GPU (RTX 3090/4090) trainiert werden?

Ja. Im Standard-Setup (Vision-Encoder eingefroren, nur ~100M Action-Expert) beträgt der feste Speicher nur etwa 2,3 GB. Auf einer 24GB-Karte bleibt damit ausreichend Spielraum für Batch-Größen von 4 bis 8. Ein Full-Fine-Tuning erhöht den festen Term auf ca. 7,2 GB.

Warum benötigt Mixed-Precision Adam 16 Bytes pro trainierbarem Parameter?

Laut ZeRO-Paper (arXiv:1910.02054) benötigt Mixed-Precision Adam 2 Bytes für FP16-Gewichte, 2 Bytes für Gradienten, 4 Bytes für die FP32-Master-Kopie, 4 Bytes für das Momentum und 4 Bytes für die Varianz – in Summe 16 Bytes pro Parameter.

Wie unterscheidet sich der Trainings-VRAM vom Inferenz-VRAM?

Die Inferenz benötigt weder Optimierer noch Backprop-Graphen, sondern nur Gewichte (ca. 2 GB pro Milliarde Parameter in FP16) und den KV-Cache. Das Training erfordert dagegen 16 Bytes pro Parameter plus umfangreiche Aktivierungspuffer.