hfai.multiprocessing¶
多进程管理 |
|
功能和 |
|
功能和 |
- class hfai.multiprocessing.Process(group=None, target=None, *args, **kwargs)[source]¶
多进程管理
继承自 torch.multiprocessing.Process ,差异如下:
在捕获到子进程异常或是子进程退出码非0时,会启动自检程序。硬件故障则会重启该任务,否则结束该任务
修复包括python3.6在内的部分版本无法向子进程传入超过4GB参数的问题
提供numa选项,其余参数与 torch.multiprocessing.Process 一致
- Parameters
numa (int) – 该子进程对应的 numa(不指定则选用默认numa)
Examples:
from hfai.multiprocessing import Process from hfai.utils import which_numa Process(target=..., args=(), numa=which_numa(i_gpu=0))
- hfai.multiprocessing.spawn(fn, args=(), nprocs=1, join=True, daemon=False, bind_numa=True)[source]¶
功能和
torch.multiprocessing.spawn
类似,但支持自动绑定 NUMA绑定 NUMA 的功能假设第
i
个进程对应着第i
个 GPU。- Parameters
bind_numa (bool) – 是否绑定 NUMA,默认是
True
Examples:
import torch import hfai def main(gpu_id): torch.cuda.set_device(gpu_id) # ...... if __name__ == "__main__": ngpus = torch.cuda.device_count() hfai.multiprocessing.spawn(main, args=(), nprocs=ngpus, bind_numa=True)
- hfai.multiprocessing.fork(fn, args=(), nprocs=1, join=True, daemon=False, bind_numa=True)[source]¶
功能和
spawn()
一样,但是用 fork 的方式启动子进程。绑定 NUMA 的功能假设第
i
个进程对应着第i
个 GPU。- Parameters
bind_numa (bool) – 是否绑定 NUMA,默认是
True
Examples:
import torch import hfai def main(gpu_id): torch.cuda.set_device(gpu_id) # ...... if __name__ == "__main__": ngpus = hfai.utils.num_gpus() # 调用 cuda 函数会导致子进程产生错误 hfai.multiprocessing.fork(main, args=(), nprocs=ngpus, bind_numa=True)