为了支持实时数字人LiveTalking多并发时不增加模型占用显存,将模型推理由多进程模式改成了多线程,多个线程共用一份模型做推理。在用多进程时,每个进程都会在显存中拷贝一份模型,导致模型显存占用随并发数线性增长。当然用多线程也有一些弊端,因为在多线程中推理与视频压缩会抢占cpu时间片,如果模型推理速度较慢,会导致整体帧率达不到实时。如果有谁知道怎么在多进程中共用一个模型做推理,欢迎留言讨论。
以下数据都是在4090 24G显卡上测试得出。

1.wav2lip

wav2lip模型推理速度很快,用多线程基本没什么影响。占用显存在1.3G,推理速度能达到750fps。按照每路视频25fps计算,在同时说话时能支持30路。如果数字人不是同时说话,支持的路数更多,基本只受cpu视频压缩性能的限制。

2.musetalk

musetalk对显存和gpu计算性能都要求很高,占用显存12G,推理速度60fps。能够支持2路同时说话。在性能较低的显卡上用多线程可能影响较大,如果只要用一路视频,建议用多进程性能更好。只要修改musereal.py中如下代码

Thread(target=inference, args=(self.render_event,self.batch_size,self.input_latent_list_cycle,
                                           self.asr.feat_queue,self.asr.output_queue,self.res_frame_queue,
                                           self.vae, self.unet, self.pe,self.timesteps)).start()

将其中的Thread改为mp.Process

3.ernerf

ernerf对显存占用不太高,大概2G左右,这里面还包括了音频特征模型占用的的显存;对gpu计算性能要求较高,推理速度45fps。因此改成多进程比较好,因为现在ernerf模型用的比较少,这块还没实现。另外还有个优化点是不说话时用静音帧代替,不占用gpu计算性能。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐