livetalking实时数字人多并发
为了支持实时数字人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计算性能。