Herramientas de Ingeniería Physical AI

Calculadora de VRAM y Tamaño de Lote Máximo para Fine-Tuning de VLA

Dimensionamiento de memoria para el ajuste fino en una sola GPU de modelos robóticos Vision-Language-Action (VLA) como SmolVLA y OpenVLA. Calcula la memoria fija de Adam en precisión mixta y deduce el tamaño de lote máximo libre de OOM (B_max).

1. Configuración de Modelo y Fine-Tuning

p. ej., SmolVLA tiene 450M (0,45B), OpenVLA 7.000M (7B).

SmolVLA estándar (solo experto en acción) entrena ~100M; ajuste completo 450M.

2. Mediciones Reales de Pico de VRAM (Sonda)

Ejecute pruebas cortas con lotes de 1, 2 o 4 y registre el pico de VRAM con nvidia-smi para calcular la pendiente de activación.

B = GB
B = GB

3. GPU Objetivo y Margen de Seguridad

GB
90 %

Apuntar a <= 90% de la VRAM previene errores de falta de memoria provocados por fragmentación de CUDA o picos transitorios.

4. Resultados del Cálculo

Tamaño Máximo de Lote (B_max) 8
Pico de VRAM en B_max 20.0 GB
Memoria Fija (Pesos + Opt) 2.30 GB
Viabilidad en GPU Única Viable en GPU única
Memoria de Pesos Congelados 0.70 GB
Estado Entrenable (Pesos + Grad + Opt) 1.60 GB
Término Fijo Total (M_fixed) 2.30 GB
Pendiente de Activación (a) 2.00 GB/batch
Intersección Base de Sobrecarga (M_0) 4.00 GB
Límite Seguro de Memoria (V × Margen) 21.6 GB
Margen de VRAM Restante 1.6 GB

* Nota: Los resultados son estimaciones técnicas basadas en extrapolación lineal. El consumo real depende de la resolución de imagen y del framework de entrenamiento.

Principios de VRAM y Guía Técnica para Fine-Tuning de VLA

Al ajustar modelos grandes de Vision-Language-Action (VLA) como SmolVLA u OpenVLA en una sola GPU, el principal cuello de botella no son solo los pesos, sino los estados del optimizador y la memoria de activación dependiente del tamaño de lote.

1. Desglose de Memoria (ZeRO Adam de Precisión Mixta)

La memoria de GPU en entrenamiento consta de un término fijo (pesos + gradientes + optimizador), memoria de activación dependiente del lote y sobrecarga de 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. Obtención del Tamaño Máximo de Lote (B_max) mediante 2 Sondas

Dado que la memoria de activación varía según cámaras, resolución y tamaño del chunk de acción, una fórmula teórica puede errar. Dos sondas cortas en lotes 2 y 4 permiten una extrapolación lineal confiable:

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

3. Código en Python para Contar Parámetros Entrenables

En el entorno de LeRobot, cuente los parámetros requires_grad directamente para calcular con exactitud el término fijo:

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. Preguntas Frecuentes (FAQ)

¿Se puede entrenar SmolVLA en una sola GPU de 24 GB (RTX 3090/4090)?

Sí. Con la configuración predeterminada (codificador visual congelado, entrenando solo el experto en acción de ~100M), la memoria fija es de solo ~2,3 GB. Esto deja suficiente espacio en una tarjeta de 24 GB para lotes de 4 a 8. El ajuste completo eleva el término fijo a ~7,2 GB.

¿Por qué Adam de precisión mixta consume 16 bytes por parámetro?

Según el artículo de ZeRO (arXiv:1910.02054), Adam de precisión mixta requiere 2 bytes para pesos FP16, 2 bytes para gradientes, 4 bytes para la copia maestra FP32, 4 bytes para el momento y 4 bytes para la varianza: 16 bytes por parámetro.

¿En qué se diferencia la VRAM de inferencia de la de entrenamiento?

La inferencia no requiere estados de optimizador ni grafos de retropropagación, solo pesos del modelo (~2 GB por cada mil millones de parámetros en FP16) y caché KV. El entrenamiento exige 16 bytes por parámetro y grandes búferes de activación.