PaddlePaddle / Parakeet

PAddle PARAllel text-to-speech toolKIT (supporting Tacotron2, Transformer TTS, FastSpeech2/FastPitch, SpeedySpeech, WaveFlow and Parallel WaveGAN)
Other
599 stars 83 forks source link

parallel_wavegan 第一次执行非常慢(10多秒)请看下什么原因 #206

Closed outman2008 closed 2 years ago

outman2008 commented 3 years ago

代码段: with paddle.no_grad(): print('speedyspeech_inference begin', datetime.datetime.now()) mel = speedyspeech_inference(part_phone_ids, part_tone_ids) print('pwg_inference begin', datetime.datetime.now()) temp_wav = pwg_inference(mel)
print('pwg_inference end', datetime.datetime.now())

输出: phone_ids [Tensor(shape=[33], dtype=int64, place=CPUPlace, stop_gradient=True, [47, 3 , 49, 51, 58, 73, 5 , 48, 26, 23, 15, 65, 24, 14, 15, 46, 38, 46, 24, 11, 18, 47, 73, 62, 56, 51, 87, 3 , 49, 16, 46, 32, 62])] tone_ids [Tensor(shape=[33], dtype=int64, place=CPUPlace, stop_gradient=True, [0, 3, 0, 4, 0, 4, 1, 0, 2, 0, 2, 0, 3, 0, 5, 0, 1, 0, 4, 0, 1, 0, 4, 0, 0, 4, 0, 4, 0, 2, 0, 2, 0])] speedyspeech_inference begin 2021-10-28 15:23:37.029224 pwg_inference begin 2021-10-28 15:23:37.185222 pwg_inference end 2021-10-28 15:23:48.643371 001 done! phone_ids [Tensor(shape=[4], dtype=int64, place=CPUPlace, stop_gradient=True, [50, 24, 23, 8 ])] tone_ids [Tensor(shape=[4], dtype=int64, place=CPUPlace, stop_gradient=True, [0, 2, 0, 3])] speedyspeech_inference begin 2021-10-28 15:23:48.650615 pwg_inference begin 2021-10-28 15:23:48.676380 pwg_inference end 2021-10-28 15:23:50.339365 002 done!

第一次执行用了11秒左右,第二次用了1秒, speedyspeech 模型还大些,执行都没这么慢,1秒不到

yt605155624 commented 3 years ago

执行 python 文件的时候删掉这两句试试呢? FLAGS_allocator_strategy=naive_best_fit \ FLAGS_fraction_of_gpu_memory_to_use=0.01 \ paddle 默认的 FLAGS_allocator_strategy 是 auto_grouth,可能会爆显存,这两句话的含义是默认分配 0.01 的显存,不够再每次按照需求申请显存, 每次申请 0.01*GPU 显存的显存,或者您把FLAGS_fraction_of_gpu_memory_to_use 值调大一点,猜测是您的机器显存较小,刚开始分配的不够,需要申请好几个 0.01

yt605155624 commented 3 years ago

或者您注释掉关于动转静的代码 image “爆显存”这件事是动转静引起的,注释掉之后即使不加上面两个命令也可以,如果您不需要保存静态模型或者已经保存了,可以注释掉

outman2008 commented 3 years ago

或者您注释掉关于动转静的代码 image “爆显存”这件事是动转静引起的,注释掉之后即使不加上面两个命令也可以,如果您不需要保存静态模型或者已经保存了,可以注释掉

你看我给你代码,是在里面去打印的时间,已经转为静态了, 那个地方仅仅是执行了 temp_wav = pwg_inference(mel) 这个估计是 PaddlePaddle 底层框架的问题?

以上代码是在 aistudio 里面执行的: CPU 2 RAM 8GB 磁盘 100GB

outman2008 commented 3 years ago

image 这是我在自己电脑上用C执行打印出来的性能分析图片,你看看

yt605155624 commented 3 years ago

你注释掉我标注的代码,用动态图模型看看,我这里对静态图的调用不规范,确实是paddle 框架对(我这里的)静态图处理不太好 如果你想用静态图,直接调用 inference.py 看看还有这种问题吗

outman2008 commented 3 years ago

aistudio 上 python 改为静态图调用,本机 paddle_inference_c.dll 调用一样的,第一次都要8秒左右,第二次就1秒 估计是cpu版本的问题,gpu的机器上应该不会这么慢?我试试看