feat: FSDP training failures now fallback to next strategy

This commit is contained in:
Christian Medina
2026-07-02 11:48:03 -04:00
parent ac1417567c
commit 5a13ca1d1c

View File

@@ -176,6 +176,7 @@ def train(config_path):
) )
# Manually wrap model with FSDP before passing to trainer # Manually wrap model with FSDP before passing to trainer
try:
from torch.distributed.fsdp import FullyShardedDataParallel as FSDP from torch.distributed.fsdp import FullyShardedDataParallel as FSDP
from torch.distributed.fsdp.wrap import transformer_auto_wrap_policy from torch.distributed.fsdp.wrap import transformer_auto_wrap_policy
from functools import partial from functools import partial
@@ -191,7 +192,6 @@ def train(config_path):
return partial( return partial(
transformer_auto_wrap_policy, transformer_auto_wrap_policy,
transformer_layer_cls={Qwen3_5MoeDecoderLayer}, transformer_layer_cls={Qwen3_5MoeDecoderLayer},
min_num_params=1,
) )
# Wrap model with FSDP on CPU first # Wrap model with FSDP on CPU first
@@ -247,6 +247,20 @@ def train(config_path):
print(f"Training complete! Model saved to {config['train_params']['output_dir']}") print(f"Training complete! Model saved to {config['train_params']['output_dir']}")
# Cleanup distributed process group
if dist.is_initialized():
dist.destroy_process_group()
# Return early - success
return
except Exception as e:
errors.append(("QLoRA 4-bit FSDP training", e))
print(f"✗ Failed during FSDP training: {e}")
# Cleanup distributed process group if initialized
if dist.is_initialized():
dist.destroy_process_group()
# Fall through to next strategy
def main(): def main():
parser = argparse.ArgumentParser(description="Train LoRA adapter") parser = argparse.ArgumentParser(description="Train LoRA adapter")