nemo-mbridge-resiliency
NVIDIA/skills
Configurar la tolerancia a fallos, la detección de procesos rezagados, la preempción, el reinicio durante el proceso y la máquina de estados de reejecución para los trabajos de entrenamiento de Megatron Bridge.
...Expandir todoResiliencia
Documentación estable: @docs/training/resiliency.md, @docs/training/checkpointing.md Ficha: @skills/nemo-mbridge-resiliency/card.yaml
Habilitación
Tolerancia a fallos (solo Slurm)
Opción 1: Complemento NeMo Run (recomendado)
from megatron.bridge.recipes.run_plugins import FaultTolerancePlugin
import nemo_run as run
task = run.Script(...)
run_plugins = [
FaultTolerancePlugin(
enable_ft_package=True,
calc_ft_timeouts=True,
num_in_job_restarts=3,
num_job_retries_on_failure=2,
initial_rank_heartbeat_timeout=1800,
rank_heartbeat_timeout=300,
)
]
run.run(task, plugins=run_plugins, executor=executor)
| Parámetros del complemento | Valor por defecto | Descripción |
|---|---|---|
num_in_job_restarts |
3 | Número máximo de reinicios dentro de un mismo trabajo |
num_job_retries_on_failure |
2 | Número máximo de nuevos trabajos iniciados en caso de fallo |
tiempo_de_espera_del_latido_inicial_de_rango |
1800 | Tiempo de espera del primer latido (segundos) |
tiempo_de_espera_del_pulso_de_rango |
300 | Tiempo de espera de los latidos posteriores (segundos) |
Opción 2: Configuración directa + ft_launcher
from megatron.bridge.training.config import FaultToleranceConfig
cfg.ft = FaultToleranceConfig(
enable_ft_package=True,
calc_ft_timeouts=True,
simulate_fault=False,
simulated_fault_type="random",
)
Ejecutar con ft_launcher (no con torchrun):
export GROUP_RANK=0 # necesario para entornos que no sean Slurm
ft_launcher \
--rdzv_backend=c10d --rdzv_endpoint=${MASTER_ADDR}:${MASTER_PORT} \
--nnodes=${NUM_NODES} --nproc-per-node=${NUM_GPUS_PER_NODE} \
--ft-rank_section_timeouts=setup:600,step:180,checkpointing:420 \
--ft-rank_out_of_section_timeout=300 \
tu_script_de_entrenamiento.py
| Parámetro de configuración | Por defecto | Descripción |
|---|---|---|
enable_ft_package |
False | Habilitar tolerancia a fallos |
calc_ft_timeouts |
Falso | Calcular automáticamente los tiempos de espera óptimos |
simulate_fault |
Falso | Habilitar la simulación de fallos para las pruebas |
tipo_de_fallo_simulado |
«aleatorio» |
«rank_hung», «rank_killed» o «aleatorio» |
rango_de_fallo_simulado |
Ninguno | Rango específico para el fallo (aleatorio si es «None») |
retardo_base_fallo_simulado |
0 | Retardo base antes de simular el fallo |
La supervisión de tiempos de espera por sección abarca la configuración, los pasos de entrenamiento, los puntos de control
y el tiempo fuera de sección de forma independiente. Los tiempos de espera se guardan en ft_state.json
para ejecuciones posteriores cuando calc_ft_timeouts=True.
Detección de rezagados en NVRx
from megatron.bridge.training.config import NVRxStragglerDetectionConfig
cfg.nvrx_straggler = NVRxStragglerDetectionConfig(
enabled=True,
report_time_interval=300.0,
calc_relative_gpu_perf=True,
calc_individual_gpu_perf=True,
num_gpu_perf_scores_to_print=5,
gpu_relative_perf_threshold=0,7,
umbral_rendimiento_individual_GPU=0,7,
detener_si_se_detecta=False,
habilitar_registro=True,
)
| Parámetro | Valor por defecto | Descripción |
|---|---|---|
activado |
False | Habilitar la detección de rezagados |
intervalo_de_informe |
300,0 | Segundos entre comprobaciones de rezagados |
calc_relative_gpu_perf |
Verdadero | Comparar las clasificaciones entre sí |
calc_individual_gpu_perf |
Verdadero | Realizar un seguimiento de la degradación por rango a lo largo del tiempo |
gpu_relative_perf_threshold |
0,7 | Umbral de rendimiento relativo (0-1) |
gpu_individual_perf_threshold |
0,7 | Umbral de rendimiento individual (0-1) |
stop_if_detected |
Falso | Detener el entrenamiento si se detecta un rezagado |
número_de_puntuaciones_de_rendimiento_de_GPU_a_imprimir |
5 | Número de puntuaciones mejores y peores que se van a mostrar |
intervalo_de_perfilado |
1 | Intervalo de perfilado para el detector |
Preeminencia
Complemento (Slurm)
from megatron.bridge.recipes.run_plugins import PreemptionPlugin
plugins = [
PreemptionPlugin(
preempt_time=60,
enable_exit_handler=True,
enable_exit_handler_for_data_loader=False,
)
]
| Parámetros del complemento | Valor por defecto | Descripción |
|---|---|---|
preempt_time |
60 | Segundos antes del límite de la tarea para enviar la señal |
enable_exit_handler |
Verdadero | Habilitar el gestor de señales durante el entrenamiento |
enable_exit_handler_for_data_loader |
Falso | Habilitar para los trabajadores del cargador de datos |
Configuración directa
import signal
cfg.train.exit_signal_handler = True
cfg.train.exit_signal = signal.SIGTERM
cfg.train.exit_signal_handler_for_dataloader = False
Reejecutar la máquina de estados (experimental)
from megatron.bridge.training.config import RerunStateMachineConfig
cfg.rerun_state_machine = RerunStateMachineConfig(
rerun_mode="validate_results",
check_for_nan_in_loss=True,
check_for_spiky_loss=False,
spiky_loss_factor=10.0,
)
| Parámetro | Valor por defecto | Descripción |
|---|---|---|
rerun_mode |
«desactivado» |
«desactivado», «validar_resultados», «informar_estadísticas_determinismo» |
comprobar_si_hay_nan_en_la_pérdida |
True | Comprobar si hay valores NaN en la pérdida |
check_for_spiky_loss |
Falso | Comprobar si hay una pérdida inesperadamente grande |
factor_pérdida_pico |
10,0 | Se marca la pérdida si es > factor * máximo observado (aumentar para modelos grandes) |
Códigos de salida: 16 = reanudar para resolver la ambigüedad, 17 = validación fallida.
Reinicio en proceso (experimental)
from megatron.bridge.training.config import InProcessRestartConfig
cfg.inprocess_restart = InProcessRestartConfig(
enabled=True,
granularity="node",
soft_timeout=60.0,
hard_timeout=90.0,
)
| Parámetro | Valor por defecto | Descripción |
|---|---|---|
enabled |
False | Habilitar reinicio durante el proceso |
tamaño_mundo_activo |
Ninguno | Número de rangos que ejecutan la carga de trabajo (el resto son reservas en espera) |
granularidad |
«nodo» |
«nodo» o «rango» granularidad de reinicio |
max_iterations |
Ninguna | Número máximo de intentos de reinicio (Ninguno = ilimitado) |
tiempo_de_espera_suave |
60,0 | Detección de bloqueos tras la liberación del GIL (segundos) |
tiempo_de_espera_duro |
90,0 | Forzar la finalización de los rangos bloqueados (segundos) |
heartbeat_interval |
30,0 | Intervalo de pulsación (segundos) |
tiempo_de_espera_del_latido |
60,0 | Tiempo de espera por falta de latido (segundos) |
barrier_timeout |
120,0 | Tiempo de espera de la barrera distribuida (segundos) |
tiempo_de_espera_de_finalización |
120,0 | Tiempo de espera de la barrera de finalización (segundos) |
empty_cuda_cache |
True | Borrar la caché de CUDA durante el reinicio |
max_rank_faults |
Ninguno | Número máximo de fallos de rango antes de la terminación |
monitor_process_logdir |
Ninguno | Directorio para los registros del monitor |
Variables de entorno obligatorias:
export TORCH_CPP_LOG_LEVEL=error
export TORCH_NCCL_RETHROW_CUDA_ERRORS=0
export NCCL_NVLS_ENABLE=0
El tiempo de espera del watchdog de PyTorch NCCL debe superar el valor de hard_timeout. El
ejecutor Slurm de NeMo-Run no es compatible; ejecútalo directamente con srun --kill-on-bad-exit=0.
Guardado asíncrono de puntos de control
cfg.checkpoint.async_save = True
cfg.checkpoint.ckpt_format = "torch_dist"
Puntos de control locales (NVRx)
cfg.checkpoint.non_persistent_local_ckpt_dir = "/local/scratch/ckpt"
cfg.checkpoint.non_persistent_local_ckpt_algo = "fully_parallel"
Anclajes de código
Tolerancia a fallos
- Configuración:
src/megatron/bridge/training/config.py—FaultToleranceConfig - Tiempo de ejecución:
src/megatron/bridge/training/fault_tolerance.py - Complemento:
src/megatron/bridge/recipes/run_plugins.py—FaultTolerancePlugin - Complemento de rendimiento:
scripts/performance/nemo-mbridge-resiliency_plugins.py - Pruebas:
tests/unit_tests/training/test_fault_tolerance.py - Ejemplo:
examples/training_features/nemo-mbridge-resiliency/fault_tolerance/
Detección de rezagados
- Configuración:
src/megatron/bridge/training/config.py—NVRxStragglerDetectionConfig - Tiempo de ejecución:
src/megatron/bridge/training/nvrx_straggler.py - Bucle de entrenamiento:
src/megatron/bridge/training/train.py—check_nvrx_straggler_detection - Pruebas:
tests/unit_tests/training/test_nvrx_straggler.py,tests/functional_tests/training/test_nvrx_straggler.py - Ejemplo:
examples/training_features/nemo-mbridge-resiliency/straggler_detection/
Reinicio en proceso
- Configuración:
src/megatron/bridge/training/config.py—InProcessRestartConfig - Tiempo de ejecución:
src/megatron/bridge/training/inprocess_restart.py - Punto de entrada:
src/megatron/bridge/training/pretrain.py—maybe_wrap_for_inprocess_restart - Pruebas:
tests/unit_tests/training/test_inprocess_restart.py,tests/functional_tests/training/test_inprocess_restart.py
Preemption
- Complemento:
src/megatron/bridge/recipes/run_plugins.py—PreemptionPlugin - Manejador de señales:
src/megatron/bridge/training/utils/sig_utils.py - Pruebas:
tests/unit_tests/recipes/test_run_plugins.py
Máquina de estados de reejecución
- Configuración:
src/megatron/bridge/training/config.py—RerunStateMachineConfig - Inicialización:
src/megatron/bridge/training/initialize.py—init_rerun_state
Puntos de control
- Guardado asíncrono:
src/megatron/bridge/training/checkpointing.py—schedule_async_save - Punto de control local:
src/megatron/bridge/training/checkpointing.py—LocalCheckpointManager - Pruebas:
tests/functional_tests/training/test_local_checkpointing.py
Puntos a tener en cuenta
ft_launcher, no torchrun: la configuración directa de
FaultToleranceConfigrequiereft_launcher. El uso detorchrundesactiva FT de forma silenciosa. Para entornos que no sean Slurm, estableceGROUP_RANK=0.El guardado asíncrono requiere torch_dist:
async_save=Truesolo funciona conckpt_format="torch_dist". Otros formatos fallan de forma silenciosa o dan error.IPR + NeMo-Run: el reinicio durante el proceso no es compatible con NeMo-Run ni con los complementos de preempción de Slurm. Requiere versiones específicas de PyTorch/NCCL y variables de entorno.
NVRx frente al straggler heredado: existen dos detectores. Utiliza NVRx (
nvrx_straggler); no actives ambos.Valor por defecto de stop_if_detected: NVRx registra el evento, pero no detiene el entrenamiento por defecto. Establece
stop_if_detected=Truepara la terminación automática.NCCL watchdog frente a hard_timeout: para IPR, el tiempo de espera de NCCL watchdog debe superar
el valor de hard_timeout; de lo contrario, PyTorch terminará el proceso antes de la recuperación.La máquina de estados de reejecución está en fase alfa: utiliza
check_for_nan_in_loss=Truepara la detección de NaN, pero no confíes todavía en los flujos de trabajo de reejecución completos.
Verificación
Tolerancia a fallos
./examples/training_features/nemo-mbridge-resiliency/fault_tolerance/run_fault_tolerance.sh
./examples/training_features/nemo-mbridge-resiliency/fault_tolerance/run_fault_tolerance.sh --simulate-fault
Busca en los registros de [FaultTolerance] / [RankMonitorServer] las líneas con tiempos de espera de sección
(timeouts). El fallo simulado debería activar el reinicio desde el punto de control.
Detección de nodos rezagados
uv run python -m torch.distributed.run --nproc_per_node=2 \
examples/training_features/nemo-mbridge-resiliency/straggler_detection/straggler_detection_example.py
Busca los informes de rendimiento relativo de las GPU y de rendimiento individual de las GPU
con puntuaciones por rango.
Punto de control asíncrono
Busca en los registros la entrada «Scheduling async checkpoint save ». Las iteraciones de entrenamiento
deben continuar mientras se escriben los archivos de punto de control.
Reinicio en proceso
pytest tests/functional_tests/training/test_inprocess_restart.py -v
Requiere versiones compatibles de PyTorch/NCCL.
---
name: nemo-mbridge-resiliency
description: Configure fault tolerance, straggler detection, preemption, in-process restart, and re-run state machine for Megatron Bridge training jobs.
license: Apache-2.0
---
# Resiliency
Stable docs: @docs/training/resiliency.md, @docs/training/checkpointing.md
Card: @skills/nemo-mbridge-resiliency/card.yaml
## Enablement
### Fault tolerance (Slurm only)
#### Option 1: NeMo Run plugin (recommended)
```python
from megatron.bridge.recipes.run_plugins import FaultTolerancePlugin
import nemo_run as run
task = run.Script(...)
run_plugins = [
FaultTolerancePlugin(
enable_ft_package=True,
calc_ft_timeouts=True,
num_in_job_restarts=3,
num_job_retries_on_failure=2,
initial_rank_heartbeat_timeout=1800,
rank_heartbeat_timeout=300,
)
]
run.run(task, plugins=run_plugins, executor=executor)
```
| Plugin parameter | Default | Description |
|---|---|---|
| `num_in_job_restarts` | 3 | Max restarts within same job |
| `num_job_retries_on_failure` | 2 | Max new job launches on failure |
| `initial_rank_heartbeat_timeout` | 1800 | First heartbeat timeout (seconds) |
| `rank_heartbeat_timeout` | 300 | Subsequent heartbeat timeout (seconds) |
#### Option 2: Direct config + ft_launcher
```python
from megatron.bridge.training.config import FaultToleranceConfig
cfg.ft = FaultToleranceConfig(
enable_ft_package=True,
calc_ft_timeouts=True,
simulate_fault=False,
simulated_fault_type="random",
)
```
Launch with `ft_launcher` (not `torchrun`):
```bash
export GROUP_RANK=0 # required for non-Slurm
ft_launcher \
--rdzv_backend=c10d --rdzv_endpoint=${MASTER_ADDR}:${MASTER_PORT} \
--nnodes=${NUM_NODES} --nproc-per-node=${NUM_GPUS_PER_NODE} \
--ft-rank_section_timeouts=setup:600,step:180,checkpointing:420 \
--ft-rank_out_of_section_timeout=300 \
your_training_script.py
```
| Config parameter | Default | Description |
|---|---|---|
| `enable_ft_package` | False | Enable fault tolerance |
| `calc_ft_timeouts` | False | Auto-compute optimal timeouts |
| `simulate_fault` | False | Enable fault simulation for testing |
| `simulated_fault_type` | `"random"` | `"rank_hung"`, `"rank_killed"`, or `"random"` |
| `simulated_fault_rank` | None | Specific rank to fault (random if None) |
| `simulated_fault_base_delay` | 0 | Base delay before simulating fault |
Section-based timeout monitoring covers setup, training steps, checkpointing,
and out-of-section time independently. Timeouts are saved to `ft_state.json`
for subsequent runs when `calc_ft_timeouts=True`.
### NVRx straggler detection
```python
from megatron.bridge.training.config import NVRxStragglerDetectionConfig
cfg.nvrx_straggler = NVRxStragglerDetectionConfig(
enabled=True,
report_time_interval=300.0,
calc_relative_gpu_perf=True,
calc_individual_gpu_perf=True,
num_gpu_perf_scores_to_print=5,
gpu_relative_perf_threshold=0.7,
gpu_individual_perf_threshold=0.7,
stop_if_detected=False,
enable_logging=True,
)
```
| Parameter | Default | Description |
|---|---|---|
| `enabled` | False | Enable straggler detection |
| `report_time_interval` | 300.0 | Seconds between straggler checks |
| `calc_relative_gpu_perf` | True | Compare ranks against each other |
| `calc_individual_gpu_perf` | True | Track per-rank degradation over time |
| `gpu_relative_perf_threshold` | 0.7 | Threshold for relative performance (0-1) |
| `gpu_individual_perf_threshold` | 0.7 | Threshold for individual performance (0-1) |
| `stop_if_detected` | False | Terminate training on straggler |
| `num_gpu_perf_scores_to_print` | 5 | Number of best/worst scores to print |
| `profiling_interval` | 1 | Profiling interval for detector |
### Preemption
#### Plugin (Slurm)
```python
from megatron.bridge.recipes.run_plugins import PreemptionPlugin
plugins = [
PreemptionPlugin(
preempt_time=60,
enable_exit_handler=True,
enable_exit_handler_for_data_loader=False,
)
]
```
| Plugin parameter | Default | Description |
|---|---|---|
| `preempt_time` | 60 | Seconds before job limit to send signal |
| `enable_exit_handler` | True | Enable signal handler in training |
| `enable_exit_handler_for_data_loader` | False | Enable for dataloader workers |
#### Direct config
```python
import signal
cfg.train.exit_signal_handler = True
cfg.train.exit_signal = signal.SIGTERM
cfg.train.exit_signal_handler_for_dataloader = False
```
### Re-run state machine (experimental)
```python
from megatron.bridge.training.config import RerunStateMachineConfig
cfg.rerun_state_machine = RerunStateMachineConfig(
rerun_mode="validate_results",
check_for_nan_in_loss=True,
check_for_spiky_loss=False,
spiky_loss_factor=10.0,
)
```
| Parameter | Default | Description |
|---|---|---|
| `rerun_mode` | `"disabled"` | `"disabled"`, `"validate_results"`, `"report_determinism_stats"` |
| `check_for_nan_in_loss` | True | Check for NaN in loss |
| `check_for_spiky_loss` | False | Check for unexpectedly large loss |
| `spiky_loss_factor` | 10.0 | Loss flagged if > factor * max observed (increase for large models) |
Exit codes: 16 = resume to disambiguate, 17 = failed validation.
### In-process restart (experimental)
```python
from megatron.bridge.training.config import InProcessRestartConfig
cfg.inprocess_restart = InProcessRestartConfig(
enabled=True,
granularity="node",
soft_timeout=60.0,
hard_timeout=90.0,
)
```
| Parameter | Default | Description |
|---|---|---|
| `enabled` | False | Enable in-process restart |
| `active_world_size` | None | Ranks executing workload (rest are warm reserves) |
| `granularity` | `"node"` | `"node"` or `"rank"` restart granularity |
| `max_iterations` | None | Max restart attempts (None = unlimited) |
| `soft_timeout` | 60.0 | Detect GIL-released hangs (seconds) |
| `hard_timeout` | 90.0 | Force-terminate hung ranks (seconds) |
| `heartbeat_interval` | 30.0 | Heartbeat interval (seconds) |
| `heartbeat_timeout` | 60.0 | Missing heartbeat timeout (seconds) |
| `barrier_timeout` | 120.0 | Distributed barrier timeout (seconds) |
| `completion_timeout` | 120.0 | Completion barrier timeout (seconds) |
| `empty_cuda_cache` | True | Clear CUDA cache during restart |
| `max_rank_faults` | None | Max rank faults before terminating |
| `monitor_process_logdir` | None | Directory for monitor logs |
Required environment variables:
```bash
export TORCH_CPP_LOG_LEVEL=error
export TORCH_NCCL_RETHROW_CUDA_ERRORS=0
export NCCL_NVLS_ENABLE=0
```
The PyTorch NCCL watchdog timeout must exceed `hard_timeout`. NeMo-Run's
Slurm Executor is not supported; launch directly with `srun --kill-on-bad-exit=0`.
### Async checkpoint save
```python
cfg.checkpoint.async_save = True
cfg.checkpoint.ckpt_format = "torch_dist"
```
### Local checkpointing (NVRx)
```python
cfg.checkpoint.non_persistent_local_ckpt_dir = "/local/scratch/ckpt"
cfg.checkpoint.non_persistent_local_ckpt_algo = "fully_parallel"
```
## Code Anchors
### Fault tolerance
- Config: `src/megatron/bridge/training/config.py` — `FaultToleranceConfig`
- Runtime: `src/megatron/bridge/training/fault_tolerance.py`
- Plugin: `src/megatron/bridge/recipes/run_plugins.py` — `FaultTolerancePlugin`
- Perf plugin: `scripts/performance/nemo-mbridge-resiliency_plugins.py`
- Tests: `tests/unit_tests/training/test_fault_tolerance.py`
- Example: `examples/training_features/nemo-mbridge-resiliency/fault_tolerance/`
### Straggler detection
- Config: `src/megatron/bridge/training/config.py` — `NVRxStragglerDetectionConfig`
- Runtime: `src/megatron/bridge/training/nvrx_straggler.py`
- Train loop: `src/megatron/bridge/training/train.py` — `check_nvrx_straggler_detection`
- Tests: `tests/unit_tests/training/test_nvrx_straggler.py`, `tests/functional_tests/training/test_nvrx_straggler.py`
- Example: `examples/training_features/nemo-mbridge-resiliency/straggler_detection/`
### In-process restart
- Config: `src/megatron/bridge/training/config.py` — `InProcessRestartConfig`
- Runtime: `src/megatron/bridge/training/inprocess_restart.py`
- Entry point: `src/megatron/bridge/training/pretrain.py` — `maybe_wrap_for_inprocess_restart`
- Tests: `tests/unit_tests/training/test_inprocess_restart.py`, `tests/functional_tests/training/test_inprocess_restart.py`
### Preemption
- Plugin: `src/megatron/bridge/recipes/run_plugins.py` — `PreemptionPlugin`
- Signal handler: `src/megatron/bridge/training/utils/sig_utils.py`
- Tests: `tests/unit_tests/recipes/test_run_plugins.py`
### Re-run state machine
- Config: `src/megatron/bridge/training/config.py` — `RerunStateMachineConfig`
- Init: `src/megatron/bridge/training/initialize.py` — `init_rerun_state`
### Checkpointing
- Async save: `src/megatron/bridge/training/checkpointing.py` — `schedule_async_save`
- Local ckpt: `src/megatron/bridge/training/checkpointing.py` — `LocalCheckpointManager`
- Tests: `tests/functional_tests/training/test_local_checkpointing.py`
## Pitfalls
1. **ft_launcher, not torchrun**: Direct `FaultToleranceConfig` requires
`ft_launcher`. Using `torchrun` silently disables FT. For non-Slurm,
set `GROUP_RANK=0`.
2. **Async save requires torch_dist**: `async_save=True` only works with
`ckpt_format="torch_dist"`. Other formats silently fail or error.
3. **IPR + NeMo-Run**: In-process restart is not compatible with NeMo-Run
or Slurm preemption plugins. Requires specific PyTorch/NCCL versions
and env vars.
4. **NVRx vs legacy straggler**: Two detectors exist. Use NVRx
(`nvrx_straggler`); do not enable both.
5. **stop_if_detected default**: NVRx logs but does not stop training by
default. Set `stop_if_detected=True` for automatic termination.
6. **NCCL watchdog vs hard_timeout**: For IPR, NCCL watchdog timeout must
exceed `hard_timeout` or PyTorch kills the process before recovery.
7. **Rerun state machine is alpha**: Use `check_for_nan_in_loss=True` for
NaN detection, but don't rely on full rerun workflows yet.
## Verification
### Fault tolerance
```bash
./examples/training_features/nemo-mbridge-resiliency/fault_tolerance/run_fault_tolerance.sh
./examples/training_features/nemo-mbridge-resiliency/fault_tolerance/run_fault_tolerance.sh --simulate-fault
```
Look for `[FaultTolerance]` / `[RankMonitorServer]` log lines with section
timeouts. Simulated fault should trigger restart from checkpoint.
### Straggler detection
```bash
uv run python -m torch.distributed.run --nproc_per_node=2 \
examples/training_features/nemo-mbridge-resiliency/straggler_detection/straggler_detection_example.py
```
Look for `GPU relative performance` and `GPU individual performance` reports
with per-rank scores.
### Async checkpoint
Look for `Scheduling async checkpoint save` in logs. Training iterations
should continue while checkpoint files are being written.
### In-process restart
```bash
pytest tests/functional_tests/training/test_inprocess_restart.py -v
```
Requires compatible PyTorch/NCCL versions.
Todos los archivos
6 archivosInstalar nemo-mbridge-resiliency
Descarga y descomprime los archivos de habilidades en el directorio .claude/skills/.
Descargar ZIPClona el repositorio y copia los archivos de la habilidad a tu proyecto.
git clone https://github.com/NVIDIA/skills/tree/main/skills/nemo-mbridge-resiliency # Copy SKILL.md to your .claude/skills/ directory
Copiar





Hogar
