专栏算法工具链【J6】多进程加速推理bc模型

【J6】多进程加速推理bc模型

Jade-self2025-09-06
76
0

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占用率:

Description

2.2 cpu推理bc多进程示例(推荐)

上述代码,如果只有4张gpu卡,但希望起5个进程,直接在启动时配置torchrun --nproc-per-node=5 会报错

需要进行如下几处修改

  1. 去掉 torch.cuda.set_device(rank),因为是 CPU 推理。

  2. 分布式后端改为 gloo(支持 CPU)。

  3. 使用 torch.multiprocessing.spawn 启动多个子进程,而不是依赖外部 RANK/WORLD_SIZE 环境变量。

  4. 在 main(world_size) 里指定进程数(比如 4),自动启动 world_size 个进程。

这样改完后,只需要运行:python3 test.py就会自动在 CPU 上起 world_size 个进程并行推理,每个进程保存自己的输出文件:

Description

全量代码如下:

算法工具链
技术深度解析社区征文征程6杂谈
评论0
0/1000