1. 分布式推理网络模型
先看一下 分布式推理 (Distributed Inference) 网络的介绍,全部代码以及相关解读如下:
代码运行示例如下:
保存下来的产出物如下:一个进程对应一个pt文件
补充说明rank与world_size的关系
简单理解:用 4 张gpu卡,则--nproc-per-node=4,rank是对应的进程ID(默认一张卡一个进程)。
2. DDP方式推理bc
2.1 基础示例
参考第一节中的内容,修改为推理bc的示例代码如下
运行方式如下:
补充信息:
上述两个线程控制的都是单算子内部的并发数,并发线程数并不是越大越好,像reduce之类的算子可能有副作用,正常配置为8/16即可,默认值为16,C++ CPU仿真时速度的控制也时通过OMP_NUM_THREADS和 HBTL_THREAD_NUM两个环境变量控制。
下面是一些配置时对应的cpu占用率:

2.2 cpu推理bc多进程示例(推荐)
上述代码,如果只有4张gpu卡,但希望起5个进程,直接在启动时配置torchrun --nproc-per-node=5 会报错
需要进行如下几处修改
去掉 torch.cuda.set_device(rank),因为是 CPU 推理。
分布式后端改为 gloo(支持 CPU)。
使用 torch.multiprocessing.spawn 启动多个子进程,而不是依赖外部 RANK/WORLD_SIZE 环境变量。
在 main(world_size) 里指定进程数(比如 4),自动启动 world_size 个进程。
这样改完后,只需要运行:python3 test.py就会自动在 CPU 上起 world_size 个进程并行推理,每个进程保存自己的输出文件:

全量代码如下:
