老张上周找我喝酒,愁眉苦脸地说他碰上了“三体问题”——车载边缘设备上要同时跑YOLO检测行人、DeepSORT跟踪轨迹、再送一个轻量级姿态分类器识别动作。
他试了最粗暴的方式:三个模型按顺序串行调用,结果帧率从30fps直接掉到8fps,GPU利用率像心电图一样忽高忽低。“我明明买了块RTX 3060,怎么感觉被三个模型轮番抢劫?”
我笑着给他倒了杯酒:“你这是典型的‘多模型单线程’思维——让GPU在三个模型之间反复横跳,每次切换都像换工作台,光清理上下文就能浪费一半时间。” 今天这篇,我们就来解决这个“模型接力”的痛点。
痛点拆解:串行调用的三大死穴
大多数人的第一版代码长这样——看起来逻辑清晰,实际上每行都在“犯罪”:
importtorchimporttimedefnaive_pipeline(frame):# 模型加载(每次推理都重新加载?有人真这么干)detecto