基于开发机进行推理

以近期开源的音频基础模型 Higgs Audio v2 为例,演示如何使用英博云开发机实现将文本转换为音频,并且本地部署。开源 GitHub 链接:higgs-audioopen in new window

本示例为一个小规模的推理实例,旨在帮助用户快速上手并验证模型推理流程。运行时间约 1 小时,使用计算资源:单卡 NVIDIA RTX 4090 + 256G 共享存储,成本消耗约 5 元

该示例仅用于演示和验证,所需资源较少,部署和运行均较为便捷,适合新手快速体验完整的模型推理流程。

下载模型代码

从 GitHub 拉取项目

git clone https://github.com/boson-ai/higgs-audio.git
cd higgs-audio

创建环境并安装依赖

conda create -n higgs python=3.12 -y
conda activate higgs
pip install -r requirements.txt
pip install -e .

零样本语音克隆

生成与提供的参考音频相似的音频。

python3 examples/generation.py \
--transcript "The sun rises in the east and sets in the west. This simple fact has been observed by humans for thousands of years." \
--ref_audio belinda \
--temperature 0.3 \
--out_path generation.wav
  • 支持尝试其他声音。在 examples/voice_prompts 中查看更多示例声音。
  • 支持将自己的声音添加到文件夹中。

FastAPI 本地加载模型

在开发机创建一个 server.py 脚本

import subprocess
import uuid
import os
from fastapi import FastAPI, Form
from fastapi.responses import FileResponse

app = FastAPI(title="Higgs Audio API", description="语音合成接口,调用本地 generation.py 生成语音")

OUTPUT_DIR = "outputs"
os.makedirs(OUTPUT_DIR, exist_ok=True)
OUT_FILE = os.path.join(OUTPUT_DIR, "generation.wav")  # 固定输出路径

@app.post("/generate", summary="生成语音")
async def generate_audio(
    transcript: str = Form(..., description="要合成的文本"),
    temperature: float = Form(0.3, description="生成温度,越低越稳定"),
):
    """
    调用本地 generation.py 脚本,把输入文本合成为语音文件并返回。
    """
    out_file = os.path.join(OUTPUT_DIR, f"{uuid.uuid4().hex}.wav")

    # 调用你现有的 generation.py 脚本
    cmd = [
        "python3", "./examples/generation.py",
        "--transcript", transcript,
        "--temperature", str(temperature),
        "--model_path", "/data/higgs-audio/higgs-audio-v2-generation-3B-base",
        "--device_id", "0",
        "--ref_audio_in_system_message",
        "--out_path", OUT_FILE
    ]
    result = subprocess.run(cmd, capture_output=True, text=True)

    # 打印日志方便调试
    print("stdout:", result.stdout)
    print("stderr:", result.stderr)

    # 如果生成失败,返回报错信息
    if result.returncode != 0 or not os.path.exists(OUT_FILE):
        return {"error": "生成失败", "stderr": result.stderr}

    # 返回音频文件
    return FileResponse(OUT_FILE, media_type="audio/wav", filename="generation.wav")

启动服务

uvicorn server:app --host 0.0.0.0 --port 8000

在本机 CMD 或 PowerShell 中执行以下命令,通过 SSH 隧道访问开发机上的服务:

ssh -p 3xxxx -L 8000:127.0.0.1:8000 root@ssh-cn-huabei1.ebcloud.com

-p 是登录服务器用的端口,在开发机远程连接的地方获得端口号和密码(端口密码复制到本地即可显现)

-L 把本地的 8000 端口转发到远端的 127.0.0.1:8000(FastAPI 服务),这个端口和启动服务的端口保持一致即可

输入密码并等待连接成功后,即可通过本地访问开发机服务。

fastapi 网页调用教程

打开浏览器访问 http://127.0.0.1:8000/docs

点击 default -> Try It out,输入文本和生成温度,等待几分钟,生成音频,可下载查看。 这是一张图片

网页端生成音频的速度通常低于直接在开发机上使用 Python 命令执行,该网页仅提供简易测试功能,一些高级功能尚未实现,如需完整功能和最佳性能,请直接在开发机上运行 Python 脚本进行实验。