Shortcuts

hfai.multiprocessing

Process

多进程管理

spawn

功能和 torch.multiprocessing.spawn 类似,但支持自动绑定 NUMA

fork

功能和 spawn() 一样,但是用 fork 的方式启动子进程。

class hfai.multiprocessing.Process(group=None, target=None, *args, **kwargs)[source]

多进程管理

继承自 torch.multiprocessing.Process ,差异如下:

  1. 在捕获到子进程异常或是子进程退出码非0时,会启动自检程序。硬件故障则会重启该任务,否则结束该任务

  2. 修复包括python3.6在内的部分版本无法向子进程传入超过4GB参数的问题

  3. 提供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)