GPT-SoVITS icon indicating copy to clipboard operation
GPT-SoVITS copied to clipboard

能否压缩模型部署到移动端?

Open mzdk100 opened this issue 1 year ago • 18 comments

现在模型速度推理本身也不慢,在cpu上的速度都可以接受,所以我感觉是否可以进一步压缩模型,稍微损失音质的情况下部署到没有gpu的设备或移动设备。 例如把模型体积压缩到100MB以内,cpu一秒内可以合成10秒的音频,也希望可以支持c++的推理或rust的推理。

mzdk100 avatar Apr 24 '24 13:04 mzdk100

mark

ZhangJianBeiJing avatar Apr 26 '24 20:04 ZhangJianBeiJing

你那边测试得到的推理效率怎么样?

我自己昨天做了下测试

主分支下,api.py接口

20个参考音频,10个进程并发推理,推理文本17段共计768字符,最终耗时772秒。

单线程推理效率20*768/10/772约等于2字/秒

总体推理效率约等于20字/秒

设备19-1300HX,4080laptop

Downupanddownup avatar Apr 30 '24 02:04 Downupanddownup

您能给一个测试脚本吗,这样统计的性能数据可以尽可能和你那边一致。 我这边没有gpu设备,cpu是i5的也比较老的,实时推理有点慢,但是可接受范围,合成“你好呀,我们是一群追逐梦想的人。”15个字大概需要6秒,输出的音频只有两三秒,显然达不到实时性。

mzdk100 avatar May 01 '24 01:05 mzdk100

您能给一个测试脚本吗,这样统计的性能数据可以尽可能和你那边一致。 我这边没有gpu设备,cpu是i5的也比较老的,实时推理有点慢,但是可接受范围,合成“你好呀,我们是一群追逐梦想的人。”15个字大概需要6秒,输出的音频只有两三秒,显然达不到实时性。 #1044 没有专门的测试脚本,那个测试是在做参考音频筛选的时候顺便看的。

Downupanddownup avatar May 03 '24 12:05 Downupanddownup

只能说,以目前的推理效率,想要在低功耗的手机上运行,不太现实

Downupanddownup avatar May 03 '24 12:05 Downupanddownup

你那边测试得到的推理效率怎么样?

我自己昨天做了下测试

主分支下,api.py接口

20个参考音频,10个进程并发推理,推理文本17段共计768字符,最终耗时772秒。

单线程推理效率20*768/10/772约等于2字/秒

总体推理效率约等于20字/秒

设备19-1300HX,4080laptop

mark

ZhangJianBeiJing avatar May 04 '24 23:05 ZhangJianBeiJing

只能说,以目前的推理效率,想要在低功耗的手机上运行,不太现实

是的

ZhangJianBeiJing avatar May 04 '24 23:05 ZhangJianBeiJing

不知道模型是否还可以继续压缩。

mzdk100 avatar May 06 '24 16:05 mzdk100

您能给一个测试脚本吗,这样统计的性能数据可以尽可能和你那边一致。 我这边没有gpu设备,cpu是i5的也比较老的,实时推理有点慢,但是可接受范围,合成“你好呀,我们是一群追逐梦想的人。”15个字大概需要6秒,输出的音频只有两三秒,显然达不到实时性。

您的推理速度比我的速度快很多(我这里16个字耗时60s+),我的cpu是12核i7-8700K CPU @ 3.70GHz,使用的fast_interence_分支python webui.py,已经勾选了并行。请问您是怎么做的呢?

neuxys avatar May 08 '24 08:05 neuxys

我使用的是主分支推理,我的cpu是Intel(R) Core(TM) i5-4670T CPU @ 2.30GHz,4核心。

mzdk100 avatar May 08 '24 15:05 mzdk100

mark

DonkeyHang avatar May 09 '24 01:05 DonkeyHang

mark

cleardry avatar Aug 10 '24 09:08 cleardry

我之前尝试把模型转换到onnx,然后使用rust的推理方案,这样很容易迁移到移动端,但是不知道bert的模型如何实现,这是我的一部分代码:

mzdk100 avatar Aug 10 '24 09:08 mzdk100

mod audio;
mod text;

use std::time::SystemTime;

use ndarray::Array;
use ort::{CUDAExecutionProvider, inputs, SessionBuilder};

use crate::audio::{pcm_decode, play_sound, SampleRateConverter};


fn main() {
    let sess = SessionBuilder::new()
        .unwrap()
        .with_execution_providers([CUDAExecutionProvider::default().build()])
        .unwrap()
        .commit_from_file("../GPT-SoVITS_inference_rust/xxx_vits-sim.onnx")
        .unwrap();
    let text_seq = Array::from_shape_vec((1, 30), vec![227i64, 167, 158, 119, 318, 101, 1, 316, 232, 225, 144, 251, 214, 318, 169, 247, 312, 320, 280, 320, 256, 225, 148, 317, 183, 127, 134, 248, 141, 0]).unwrap();
    let pred_semantic = Array::from_shape_vec((1, 1, 18), vec![540i64, 14, 656, 420, 245, 0, 321, 304, 169, 166, 147, 335, 342, 190, 768, 753, 399, 666]).unwrap();
    let (pcm, sr) = pcm_decode("../GPT-SoVITS_inference_rust/hello_in_cn.mp3").unwrap();
    let data = SampleRateConverter::new(pcm.into_iter(), sr, 32000, 1).collect::<Vec<f32>>();
    let len = data.len();
    let ref_audio = Array::from_shape_vec((1, len), data).unwrap();

    let time = SystemTime::now();
    let outputs = sess.run(inputs![
        "text_seq" => text_seq.view(),
        "pred_semantic" => pred_semantic.view(),
        "ref_audio" => ref_audio.view()
    ].unwrap()).unwrap();
    let output = outputs["audio"].try_extract_tensor::<f32>().unwrap();
    println!("{:?}, {:?}", time.elapsed().unwrap(), output);
    // let mut output_file = std::fs::File::create("out.wav").unwrap();
    // write_pcm_as_wav(&mut output_file, output.as_slice().unwrap(), 32_000).unwrap();
    play_sound(output.as_slice().unwrap(), 32000);
}

mzdk100 avatar Aug 10 '24 09:08 mzdk100

@mzdk100 我也在研究rust实现推理端的事情。我觉得可以参考这个 repo https://github.com/425776024/GPT-SoVITS-Rust/tree/main

L-jasmine avatar Aug 27 '24 19:08 L-jasmine

他用到了这个库 https://crates.io/crates/tokenizers 看起来好像可以

L-jasmine avatar Aug 27 '24 19:08 L-jasmine

我看看。

mzdk100 avatar Aug 27 '24 19:08 mzdk100

这个仓库的实现挺好的。

mzdk100 avatar Aug 27 '24 19:08 mzdk100