| import subprocess, torch |
| from fastai.script import * |
|
|
| @call_parse |
| def main( |
| gpus:Param("The GPUs to use for distributed training", str)='all', |
| script:Param("Script to run", str, opt=False)='', |
| args:Param("Args to pass to script", nargs='...', opt=False)='' |
| ): |
| "PyTorch distributed training launch helper that spawns multiple distributed processes" |
| |
| current_env = os.environ.copy() |
| gpus = list(range(torch.cuda.device_count())) if gpus=='all' else list(gpus) |
| current_env["WORLD_SIZE"] = str(len(gpus)) |
| current_env["MASTER_ADDR"] = '127.0.0.1' |
| current_env["MASTER_PORT"] = '29500' |
|
|
| processes = [] |
| for i,gpu in enumerate(gpus): |
| current_env["RANK"] = str(i) |
| cmd = [sys.executable, "-u", script, f"--gpu={gpu}"] + args |
| process = subprocess.Popen(cmd, env=current_env) |
| processes.append(process) |
|
|
| for process in processes: process.wait() |
|
|
|
|