我的显卡是4060ti 8G的显卡,我看他们有的可以用,但是我不能够使用,所以就研究了一下
1、打开ComfyUI直接显存爆到7G的情况
这个原因是因为还没有跑模型的时候,直接就预先加载了模型了,把ComfyUI-aki-v1.3\custom_nodes\ComfyUI-MuseTalk这个文件夹里面的nodes.py第34行的模型加载的代码
audio_processor,vae,unet,pe = load_all_model()
这一行代码,放到76行左右的run函数里面
def run(self, video_path,audio_path,bbox_shift,batch_size):
audio_processor, vae, unet, pe = load_all_model()
2、运行ComfyUI的MuseTalk的时候显示显存不够
也就是常说的CUDA out of memory,可以使用半精度的方式量化模型。
找到这个文件ComfyUI-aki-v1.3\custom_nodes\ComfyUI-MuseTalk\musetalk\utils\utils.py
修改28-30的这三行代码
vae = VAE(model_path = f"{
MuseVCheckPointDir}/sd-vae-ft-mse/",use_float16=True)
unet = UNet(unet_config=f"{
MuseVCheckPointDir}/musetalk/musetalk.json",
model_path =f"{
MuseVCheckPointDir}/musetalk/pytorch_model.bin",use_float16=True)
use_float16=True,添加这个参数就可以了,因为作者考虑到了大家显存不够的情况,但是,考虑了一半(痛哭)
还剩下最后的一步:
ComfyUI-aki-v1.3\custom_nodes\ComfyUI-MuseTalk\nodes.py的160行代码里面的
pred_latents = unet.model(latent_batch, timesteps, encoder_hidden_states=audio_feature_batch).sample
这一个代码的latent_batch和encoder_hidden_states=audio_feature_batch的参数一个是float16和float32的,是不能够直接矩阵相乘的会爆这个错误:
Error occurred when executing MuseTalkRun:
expected mat1 and mat2 to have the same dtype, but got: float != struct c10::Half
修改第159行的这一句就可以了
audio_feature_batch = audio_feature_batch.to(torch.float16)
结语
这个量化的方法很暴力,如果大家有更好的量化方法,请告诉我一声喔,谢谢大家啦