4核CPU配Nvidia Jetson Nano如何部署4个CPU进程+1个GPU进程
问题1:4核CPU平台上原代码的f_5运行状态
你当前代码里Pool()没有指定processes参数,默认会创建和CPU核心数相等的工作进程,也就是4个。你提交了5个永久运行的while True死循环任务,会有4个任务立刻被调度执行,剩下的1个任务(可能是f_5,也可能是其他任务,取决于系统调度)会一直停留在任务队列里,永远拿不到执行资源,不会实际运行。
问题2:让f_5使用GPU运行的方法
首先纠正一个认知误区:不存在“进程完全跑在GPU上”的说法,所有进程的控制逻辑、内存调度、IO操作都是跑在CPU上的,GPU仅负责处理你传入的计算密集型算子任务。你之前的猜测是对的,只需要保证f_5的目标检测逻辑显式绑定GPU设备,同时给f_5分配独立的CPU调度资源即可,具体修改步骤如下:
- 调整进程池大小为5,保证5个进程都能拿到CPU调度权限
- 在f_5函数开头显式指定GPU设备,同时可以把前4个CPU进程绑定到固定CPU核心,避免和f_5抢占CPU资源
修改后的参考代码如下:
# 在process1-process4开头加入CPU绑核逻辑 import os os.sched_setaffinity(0, {0,1,2,3}) # 绑定到前4个CPU核心 # 在process5开头加入绑核和GPU指定逻辑 import os os.sched_setaffinity(0, {3}) # 单独绑定到第4个核心,减少CPU资源抢占 # 以下根据你使用的推理框架选对应配置,Jetson Nano默认GPU id为0 # PyTorch框架 import torch torch.cuda.set_device(0) # TensorRT框架 # 创建推理引擎时指定device_id=0即可 def main(): f_1 = functools.partial(process1,variable,variable_2,...) f_2 = functools.partial(process2,variable,...) f_3 = functools.partial(process3,variable,variable_2,...) f_4 = functools.partial(process4,variable,variable_2,variable_3) f_5 = functools.partial(process5,variable,variable_2,...) # 进程池指定大小为5 with Pool(processes=5) as pool: res = pool.map(smap, [f_1, f_2, f_3, f_4, f_5])
原来的Manager共享变量机制不需要修改,进程绑核、GPU调用都不会影响共享内存的读写。
问题3:比进程池性能更好的并行方案
Jetson Nano属于嵌入式平台,进程池的动态调度开销相对更高,针对你的固定5个进程的场景,有两个更优的实现方案:
- 直接创建独立Process实例:不需要进程池的动态调度逻辑,开销更低、调度更可控,参考代码如下:
from multiprocessing import Process def main(): p1 = Process(target=process1, args=(variable, variable_2, ...)) p2 = Process(target=process2, args=(variable, ...)) p3 = Process(target=process3, args=(variable, variable_2, ...)) p4 = Process(target=process4, args=(variable, variable_2, variable_3, ...)) p5 = Process(target=process5, args=(variable, variable_2, ...)) p1.start() p2.start() p3.start() p4.start() p5.start() p1.join() p2.join() p3.join() p4.join() p5.join()
- 替换Manager为原生共享内存:Manager的底层是走IPC通信,开销大,你可以用
multiprocessing.Array或者multiprocessing.shared_memory直接创建共享内存,数据交互速度比Manager高30%以上,更适合嵌入式高频数据交互的场景。 - 优先用Queue做进程通信:如果你的进程是生产者消费者模式,用
multiprocessing.Queue传递数据不需要手动加锁,更安全,开销也更低。
内容的提问来源于stack exchange,提问作者YusufUcan
相关产品推荐
相关产品推荐

