一文快速学会FastAPI部署Step-Audio-TTS-3B模型

环境准备

首先准备一台显存>=12G的服务器,我这里选用的是4090 24G云服务器

接着先拉取官方代码,然后创建一个虚拟环境,再安装其对应的依赖库

git clone https://github.com/stepfun-ai/Step-Audio.git
conda create -n stepaudio python=3.10
conda activate stepaudio
cd Step-Audio
pip install -r requirements.txt

接着下载部署所需的模型,由于我们仅为部署Step-Audio-TTS-3B模型,所以并不需要全部下载所有模型,仅需下载Step-Audio-Tokenizer和Step-Audio-TTS-3B模型即可。

模型下载上,我们可以从ModelScope上仅需下载,首先需要安装一下其下载器,然后前往对应模型页,即可复制并下载。

pip install modelscope
modelscope download --model stepfun-ai/Step-Audio-TTS-3B --local_dir ./model/Step-Audio-TTS-3B
modelscope download --model stepfun-ai/Step-Audio-Tokenizer --local_dir ./model/Step-Audio-Tokenizer

脚本部署

这里已经准备好了部署脚本,仅需要改变自己的密钥和ip、端口,即可直接部署,快速使用。

import os
import uuid
import time
import asyncio
from enum import Enum
from contextlib import asynccontextmanager
from fastapi import FastAPI, HTTPException, status, Depends, Request
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from fastapi.staticfiles import StaticFiles
from pydantic import BaseModel, Field, validator, ValidationError, field_validator
from typing import Optional, Dict, List
from loguru import logger
import torchaudio
import aiohttp
import base64
from tts import StepAudioTTS
from tokenizer import StepAudioTokenizer
from datetime import datetime
from concurrent.futures import ThreadPoolExecutor
from fastapi.responses import JSONResponse
from fastapi.exceptions import RequestValidationError

# 初始化认证密钥
security = HTTPBearer(auto_error=False)
valid_api_keys = {"你的密钥"}  # 从环境变量读取更安全

# 任务状态枚举
class TaskStatus(str, Enum):
    IN_QUEUE = "InQueue"
    IN_PROGRESS = "InProgress"
    SUCCEEDED = "Succeed"
    FAILED = "Failed"
    CANCELLED = "Cancelled"

# 任务存储结构
class TaskData(BaseModel):
    status: TaskStatus = TaskStatus.IN_QUEUE
    audio_type: str  # "common", "music", "clone"
    params: dict
    created_at: int = Field(default_factory=lambda: int(time.time()))
    started_at: Optional[int] = None
    completed_at: Optional[int] = None
    download_url: Optional[str] = None
    reason: Optional[str] = None

# 生命周期管理
@asynccontextmanager
async def lifespan(app: FastAPI):
    try:
        # 初始化模型
        model_path = os.getenv("MODEL_PATH", "/data/coding/model")
        app.state.encoder = StepAudioTokenizer(os.path.join(model_path, "Step-Audio-Tokenizer"))
        app.state.tts_engine = StepAudioTTS(os.path.join(model_path, "Step-Audio-TTS-3B"), app.state.encoder)

        # 初始化任务系统
        app.state.tasks: Dict[str, TaskData] = {}
        app.state.pending_queue: List[str] = []
        app.state.task_lock = asyncio.Lock()
        app.state.semaphore = asyncio.Semaphore(5)  # 并发数限制(增加到5)
        app.state.base_url = "ip+端口"

        # 启动后台处理器
        asyncio.create_task(task_processor())
        print("✅ 应用初始化完成")
        yield
    finally:
        # 清理资源
        app.state.encoder = None
        app.state.tts_engine = None
        torch.cuda.empty_cache()

app = FastAPI(lifespan=lifespan)
app.mount("/static", StaticFiles(directory="static"), name="static")

# 请求模型
class CommonTTSRequest(BaseModel):
    text:str = Field(..., min_length=1, description="需要合成的文本内容")
    speaker: str = Field(default="Tingting", description="仅支持 Tingting")
    emotion: Optional[str] = Field(None, description="可选值: 高兴1, 高兴2, 生气1, 生气2, 悲伤1, 撒娇1")
    language: Optional[str] = Field(None, description="可选值: 中文, 英文, 韩语, 日语, 四川话, 粤语, 广东话")
    speed: Optional[str] = Field(None, description="可选值: 慢速1, 慢速2, 快速1, 快速2")

    @field_validator("speaker")
    def validate_speaker(cls, v):
        if v not in ["Tingting"]:
            raise ValueError(f"不支持的 speaker: {v}")
        return v

    @field_validator("emotion")
 
内容概要:本文档《opencv高频面试题.docx》涵盖了OpenCV的基础概念、图像处理操作、特征提取与匹配、目标检测与机器学习、实际编程题、性能优化以及进阶问题。首先介绍了OpenCV作为开源计算机视觉库,支持图像/视频处理、目标检测、机器学习等领域,应用于安防、自动驾驶、医学影像、AR/VR等方面。接着详细讲述了图像的存储格式(如Mat类)、通道的概念及其转换方法。在图像处理部分,讲解了图像灰度化、二值化、边缘检测等技术。特征提取方面,对比了Harris和Shi-Tomasi角点检测算法,以及SIFT、SURF、ORB的特征提取原理和优缺点。目标检测部分介绍了Haar级联检测原理,并阐述了如何调用深度学习模型进行目标检测。文档还提供了几个实际编程题示例,如读取并显示图像、图像旋转、绘制矩形框并保存等。最后,探讨了性能优化的方法,如使用cv2.UMat(GPU加速)、减少循环等,以及相机标定、光流等进阶问题。 适合人群:对计算机视觉有一定兴趣,具备一定编程基础的学习者或从业者。 使用场景及目标:①帮助学习者掌握OpenCV的基本概念和技术;②为面试准备提供参考;③为实际项目开发提供技术指导。 阅读建议:由于内容涵盖广泛,建议读者根据自身需求有选择地深入学习相关章节,并结合实际编程练习加深理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knoka705

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值