(config, model, find_unused_parameters=True)
| 249 | |
| 250 | |
| 251 | def parallelize(config, model, find_unused_parameters=True): |
| 252 | |
| 253 | if config.gpu is not None: |
| 254 | torch.cuda.set_device(config.gpu) |
| 255 | model = model.cuda(config.gpu) |
| 256 | |
| 257 | config.multigpu = False |
| 258 | if config.distributed: |
| 259 | # Use DDP |
| 260 | config.multigpu = True |
| 261 | config.rank = config.rank * config.ngpus_per_node + config.gpu |
| 262 | dist.init_process_group(backend=config.dist_backend, init_method=config.dist_url, |
| 263 | world_size=config.world_size, rank=config.rank) |
| 264 | config.batch_size = int(config.batch_size / config.ngpus_per_node) |
| 265 | # config.batch_size = 8 |
| 266 | config.workers = int( |
| 267 | (config.num_workers + config.ngpus_per_node - 1) / config.ngpus_per_node) |
| 268 | print("Device", config.gpu, "Rank", config.rank, "batch size", |
| 269 | config.batch_size, "Workers", config.workers) |
| 270 | torch.cuda.set_device(config.gpu) |
| 271 | model = nn.SyncBatchNorm.convert_sync_batchnorm(model) |
| 272 | model = model.cuda(config.gpu) |
| 273 | model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[config.gpu], output_device=config.gpu, |
| 274 | find_unused_parameters=find_unused_parameters) |
| 275 | |
| 276 | elif config.gpu is None: |
| 277 | # Use DP |
| 278 | config.multigpu = True |
| 279 | model = model.cuda() |
| 280 | model = torch.nn.DataParallel(model) |
| 281 | |
| 282 | return model |
| 283 | |
| 284 | |
| 285 | ################################################################################################# |
nothing calls this directly
no outgoing calls
no test coverage detected