Spaces:
Running on Zero
Running on Zero
| import torch | |
| import mmcv | |
| from . import MMDistributedDataParallel, DistributedDataParallelWrapper, FSDPWrapper, FSDP2Wrapper | |
| def apply_module_wrapper(model, module_wrapper, cfg): | |
| if module_wrapper is None: | |
| model = MMDistributedDataParallel( | |
| model.cuda(), | |
| device_ids=[torch.cuda.current_device()], | |
| broadcast_buffers=False, | |
| find_unused_parameters=cfg.get('find_unused_parameters', False)) | |
| elif module_wrapper.lower() == 'ddp': | |
| mmcv.print_log('Use DDP Wrapper.', 'mmgen') | |
| model = DistributedDataParallelWrapper( | |
| model, | |
| device_ids=[torch.cuda.current_device()], | |
| broadcast_buffers=False, | |
| find_unused_parameters=cfg.get('find_unused_parameters', False)) | |
| elif module_wrapper.lower() == 'fsdp': | |
| mmcv.print_log('Use FSDP Wrapper.', 'mmgen') | |
| fsdp_kwargs = cfg.get('fsdp_kwargs', {}) | |
| model = FSDPWrapper( | |
| model, | |
| device_id=torch.cuda.current_device(), | |
| **fsdp_kwargs) | |
| elif module_wrapper.lower() == 'fsdp2': | |
| mmcv.print_log('Use FSDP2 Wrapper.', 'mmgen') | |
| fsdp_kwargs = cfg.get('fsdp_kwargs', {}) | |
| model = FSDP2Wrapper( | |
| model, | |
| **fsdp_kwargs) | |
| else: | |
| raise ValueError(f'Unsupported module wrapper: {module_wrapper}.') | |
| return model | |