当前位置: 首页 > news >正文

超详细fish-speech本地部署教程

本人配置:

windows x64系统

cuda12.6

rtx4070

一、下载fish-speech模型

注意:提前配置好git,教程可在自行搜索

git clone https://gitclone.com/github.com/fishaudio/fish-speech.git 
cd fish-speech

或者直接进GitHub中下载也可以

GitHub地址如下:GitHub - fishaudio/fish-speech: SOTA Open Source TTS

二、模型权重下载

huggingface-cli download fishaudio/fish-speech-1.5 --local-dir checkpoints/fish-speech-1.5
# 或者
git clone https://hf-mirror.com/fishaudio/fish-speech-1.5

如果huggingface-cli报错如网络问题等,可先执行 set HF_ENDPOINT=https://hf-mirror.com

注意:如果使用git clone的话记得新建一个checkpoints文件夹,并且把fish-speech-1.5下载到checkpoints文件夹中

三、conda环境配置

1.conda环境创建

conda create -n fish-speech python=3.10
conda activate fish-speech

2.torch安装

注意:以下torch安装的是cuda12.1的版本,可根据自己的cuda版本安装对应版本的torch,或者保证自己的cuda版本在12.1以上

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

3.安装fish-speech

pip3 install -e .

四、webui运行测试

在命令行中运行:

python tools/run_webui.py --llama-checkpoint-path checkpoints/fish-speech-1.5 --decoder-checkpoint-path checkpoints/fish-speech-1.5/firefly-gan-vq-fsq-8x1024-21hz-generator.pth

运行成功后会弹出网址,进入网址可进行tts测试

左侧是输入文本,输入后在右侧点击运行即可得到语音输出

有一些其他参数可以在左边进行调试,如果有兴趣的话可以自己玩一玩,这里不做过多介绍。

五、代码测试

网上没有相应的单独代码测试,此处给出python代码

import time
import os
from pathlib import Path
import numpy as np
import pyrootutils
import torch
from loguru import logger
import scipy.io.wavfile as wavpyrootutils.setup_root(__file__, indicator=".project-root", pythonpath=True)from fish_speech.inference_engine import TTSInferenceEngine
from fish_speech.models.text2semantic.inference import launch_thread_safe_queue
from fish_speech.models.vqgan.inference import load_model as load_decoder_model
from fish_speech.utils.schema import ServeTTSRequest# 配置参数
llama_checkpoint_path = Path("checkpoints/fish-speech-1.5")
# llama_checkpoint_path = Path("checkpoints/fish-speech-1.5/female-voice-model")decoder_checkpoint_path = Path("checkpoints/fish-speech-1.5/firefly-gan-vq-fsq-8x1024-21hz-generator.pth")
decoder_config_name = "firefly_gan_vq"
device = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"
precision = torch.float16  # 可改为 torch.bfloat16 或 torch.float32
compile_model = False# 日志
logger.info(f"Using device: {device}")# 加载模型
logger.info("Loading Llama model...")
llama_queue = launch_thread_safe_queue(checkpoint_path=llama_checkpoint_path,device=device,precision=precision,compile=compile_model,
)logger.info("Loading VQ-GAN model...")
decoder_model = load_decoder_model(config_name=decoder_config_name,checkpoint_path=decoder_checkpoint_path,device=device,
)# 构建推理引擎
inference_engine = TTSInferenceEngine(llama_queue=llama_queue,decoder_model=decoder_model,compile=compile_model,precision=precision,
)# 输入文本
text_input = "你好"# 构造请求
request = ServeTTSRequest(text=text_input,references=[],reference_id=None,max_new_tokens=1024,chunk_length=200,top_p=0.7,repetition_penalty=1.5,temperature=0.7,format="wav",
)# 执行推理并记录时间
start_time = time.time()  # 记录开始时间output_dir = Path("output_audio")
output_dir.mkdir(exist_ok=True)logger.info("Running inference...")
results = list(inference_engine.inference(request))# 计算推理时间
end_time = time.time()  # 记录结束时间
elapsed_time = end_time - start_time  # 计算经过的时间logger.info(f"Inference completed in {elapsed_time:.2f} seconds.")# 打印 results 以调试其结构
for i, result in enumerate(results):logger.info(f"Result {i}: {result}")  # 打印结果对象# 提取音频数据if isinstance(result.audio, tuple):_, audio_data = result.audio  # 提取音频数据else:audio_data = result.audio  # 如果不是元组,直接获取音频数据# 将音频数据归一化到 [-1, 1] 范围,并转换为 16-bit 整数audio_data = np.int16(audio_data / np.max(np.abs(audio_data)) * 32767)# 保存为 .wav 文件output_path = output_dir / f"output_{i}.wav"wav.write(str(output_path), 44100, audio_data)  # 44100 是采样率logger.info(f"Saved audio to {output_path}")

在输入文本处修改需要进行语音转换的文字,相应的.wav文件会保存在output_audio文件夹中

运行效果如下:

运行“你好,这是一个语音合成测试。”需要3.98s

http://www.xdnf.cn/news/373123.html

相关文章:

  • 【Bootstrap V4系列】学习入门教程之 组件-输入组(Input group)
  • [虚幻官方教程学习笔记]深入理解实时渲染(An In-Depth Look at Real-Time Rendering)
  • golang常用库之-protojson 库(json.Marshal 和 protojson.Marshal 序列化对比)
  • Go基于plugin的热更新初体验
  • LeetCode 270:在二叉搜索树中寻找最接近的值(Swift 实战解析)
  • 使用 JAX-RS 创建 REST 服务/微服务
  • adb 实用命令汇总
  • LVGL图像导入和解码
  • Java后端开发day46--多线程(二)
  • 关于单片机的基础知识(一)
  • 两数相加(2)
  • ThreadLocalMap
  • 自主shell命令行解释器
  • STM32f103 标准库 零基础学习之点灯
  • 初等数论--莫比乌斯反演
  • spark-Join Key 的基数/rand函数
  • 设计模式【cpp实现版本】
  • 从前端视角看网络协议的演进
  • 从 SpringBoot 到微服务架构:Java 后端开发的高效转型之路
  • 访问者模式(Visitor Pattern)详解
  • FPGA笔试题review
  • 【Linux系列】跨平台安装与配置 Vim 文本编辑器
  • 开疆智能Canopen转Profinet网关连接工博士GBS20机器人配置案例
  • redis八股--1
  • HunyuanCustom:文生视频框架论文速读
  • 2025盘古石初赛WP
  • Anaconda的简单使用
  • 垃圾对象回收
  • 从杰夫・托尔纳看 BPLG 公司的技术创新与发展
  • 学习黑客5 分钟深入浅出理解Linux Packages Software Repos