【Qwen-Audio部署实战】Qwen-Audio-Chat模型之FastApi部署实战

news2024/9/17 7:46:24

系列篇章💥

No.文章
1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践
2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人
3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用
4【Qwen2部署实战】Ollama上的Qwen2-7B:一键部署大型语言模型指南
5【Qwen2部署实战】llama.cpp:一键部署高效运行Qwen2-7B模型
6【Qwen2部署实战】部署高效AI模型:使用vLLM进行Qwen2-7B模型推理
7【AI大模型Agent探索】Qwen-Agent:基于Qwen的LLM应用开发框架
8【AI大模型Agent探索】深入探索实践 Qwen-Agent 的 Function Calling
9【AI大模型Agent探索】Qwen-Agent之RAG智能助手实践
10【RAG检索增强生成】LlamaIndex与Qwen2的高效检索增强生成实践
11【Qwen2微调实战】Lora微调Qwen2-7B-Instruct实践指南
12【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践
13【Qwen-Audio部署实战】Qwen-Audio-Chat模型之FastApi部署实战

目录

  • 系列篇章💥
  • 引言
  • 一、Qwen-Audio 介绍
  • 二、环境准备
  • 三、安装依赖
    • 1、pip安装依赖包
    • 2、安装ffmpeg
  • 四、模型下载
  • 五、代码准备
  • 六、Api 部署调用
    • 1、测试音频准备
    • 2、启动API服务
    • 3、Curl命令调用API
    • 4、Python代码调用API
  • 结语


引言

在当今的自然语言处理领域,先进的模型不断涌现,为我们带来更出色的语言交互体验。Qwen-Audio-Chat 模型便是其中的佼佼者,本文将详细介绍如何通过 FastApi 对其进行部署,助您在实际应用中充分发挥其强大功能。

一、Qwen-Audio 介绍

Qwen-Audio 是阿里云研发的大规模音频语言模型(Large Audio Language Model)。Qwen-Audio 可以以多种音频 (包括说话人语音、自然音、音乐、歌声)和文本作为输入,并以文本作为输出。Qwen-Audio 系列模型的特点包括:

  1. 音频基石模型:Qwen-Audio是一个性能卓越的通用的音频理解模型,支持各种任务、语言和音频类型。在Qwen-Audio的基础上,我们通过指令微调开发了Qwen-Audio-Chat,支持多轮、多语言、多语言对话。Qwen-Audio和Qwen-Audio-Chat模型均已开源。
  2. 兼容多种复杂音频的多任务学习框架:为了避免由于数据收集来源不同以及任务类型不同,带来的音频到文本的一对多的干扰问题,我们提出了一种多任务训练框架,实现相似任务的知识共享,并尽可能减少不同任务之间的干扰。通过提出的框架,Qwen-Audio可以容纳训练超过30多种不同的音频任务;
  3. 出色的性能:Qwen-Audio在不需要任何任务特定的微调的情况下,在各种基准任务上取得了领先的结果。具体得,Qwen-Audio在Aishell1、cochlscene、ClothoAQA和VocalSound的测试集上都达到了SOTA;
  4. 支持多轮音频和文本对话,支持各种语音场景:Qwen-Audio-Chat支持声音理解和推理、音乐欣赏、多音频分析、多轮音频-文本交错对话以及外部语音工具的使用(如语音编辑)。

在这里插入图片描述

二、环境准备

官方建议配置如下:

  • Python 3.8 及以上版本
  • Pytorch 1.12 及以上版本,建议 2.0 及以上版本
  • 对于 GPU 用户,建议使用 CUDA 11.4 及以上版本

为了方便操作,您可以在 autodl 平台中租用一个拥有 24G 显存(如 3090 显卡)的机器。在镜像选择方面,选择 PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8(11.3 版本以上的均可)。接下来,打开刚刚租用服务器的 JupyterLab 图像,并在其中的终端开始进行环境配置、模型下载和运行演示。
在这里插入图片描述

三、安装依赖

1、pip安装依赖包

在终端中依次执行以下命令,完成相关依赖的安装:

# 升级pip
python -m pip install --upgrade pip
# 更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

pip install modelscope==1.9.5

pip install accelerate
pip install tiktoken
pip install einops
pip install transformers_stream_generator==0.0.4
pip install scipy
pip install torchvision
pip install pillow
pip install tensorboard
pip install matplotlib
pip install transformers==4.32.0
pip install gradio==3.39.0
pip install nest_asyncio

执行如下:
在这里插入图片描述

2、安装ffmpeg

打开终端,输入以下命令安装ffmpeg:

sudo apt update
sudo apt install ffmpeg

安装完成后,检查ffmpeg是否已经添加到环境变量中。在终端中输入以下命令:

ffmpeg -version

如果显示ffmpeg的版本信息,说明已经成功添加到环境变量中。如果没有显示,则需要将其添加到环境变量中
在这里插入图片描述

四、模型下载

使用 modelscope 中的 snapshot_download 函数下载模型。第一个参数为模型名称,参数 cache_dir 用于指定模型的下载路径。
在 /root/autodl-tmp 路径下新建 d.py 文件,并在其中输入以下内容:

import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
from modelscope import GenerationConfig
model_dir = snapshot_download('qwen/Qwen-Audio-Chat', cache_dir='/root/autodl-tmp', revision='master')

在这里插入图片描述

运行 python /root/autodl-tmp/d.py 执行下载。需注意,模型大小约为 20 GB,下载模型大概需要 10 - 20 分钟,请耐心等待。
在这里插入图片描述

五、代码准备

在 /root/autodl-tmp 路径下新建 api-test.py 文件,并在其中输入以下内容:

from fastapi import FastAPI, Request, File, UploadFile, Query
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
import uvicorn
import json
import datetime
import torch
import os
import nest_asyncio
nest_asyncio.apply()

# 设置设备参数
DEVICE = "cuda"  # 使用CUDA
DEVICE_ID = "0"  # CUDA设备ID,如果未设置则为空
CUDA_DEVICE = f"{DEVICE}:{DEVICE_ID}" if DEVICE_ID else DEVICE  # 组合CUDA设备信息

# 清理GPU内存函数
def torch_gc():
    if torch.cuda.is_available():  # 检查是否可用CUDA
        with torch.cuda.device(CUDA_DEVICE):  # 指定CUDA设备
            torch.cuda.empty_cache()  # 清空CUDA缓存
            torch.cuda.ipc_collect()  # 收集CUDA内存碎片

# 创建FastAPI应用
app = FastAPI()

# 处理POST请求的端点
@app.post("/audio/")
async def create_audio_item(file: UploadFile = File(...)):
    global model, tokenizer  # 使用全局变量
    # 保存音频文件到临时路径
    temp_file_path = f"temp/{file.filename}"
    with open(temp_file_path, 'wb') as f:
        f.write(file.file.read())
    file.file.close()

    # 1st dialogue turn
    query = tokenizer.from_list_format([
        {'audio': temp_file_path},  # 使用保存的临时音频文件路径
        {'text': 'what does the person say?'},
    ])
    response, history = model.chat(tokenizer, query=query, history=None)

    # 清理临时文件
    os.remove(temp_file_path)

    now = datetime.datetime.now()  # 获取当前时间
    time = now.strftime("%Y-%m-%d %H:%M:%S")  # 格式化时间为字符串
    # 构建响应JSON
    answer = {
        "response": response,
        "status": 200,
        "time": time
    }
    print(f"[{time}] Response: {response}")  # 打印日志
    torch_gc()  # 执行GPU内存清理
    return answer

@app.get("/test-audio/")
def test_audio(audio_file_path: str = Query('/root/autodl-tmp/1272-128104-0000.flac', alias='audio'),
               text_query: str = Query('what does the person say?', alias='text')):
    """
    测试音频接口,用户可以指定音频文件路径和文本查询
    :param audio_file_path: 音频文件的路径
    :param text_query: 文本查询内容
    """

    # 使用model和tokenizer处理音频和文本
    query = tokenizer.from_list_format([
        {'audio': audio_file_path},
        {'text': text_query},
    ])
    response, history = model.chat(tokenizer, query=query, history=None)

    return {"response": response}

# 主函数入口
if __name__ == '__main__':
    mode_name_or_path = '/root/autodl-tmp/qwen/Qwen-Audio-Chat'
    # 加载预训练的分词器和模型
    tokenizer = AutoTokenizer.from_pretrained(mode_name_or_path, trust_remote_code=True)
    model = AutoModelForCausalLM.from_pretrained(mode_name_or_path, trust_remote_code=True,torch_dtype=torch.bfloat16,  device_map="auto")
    model.generation_config = GenerationConfig.from_pretrained(mode_name_or_path)
    model.generation_config.pad_token_id = model.generation_config.eos_token_id
    model.eval()  # 设置模型为评估模式
    # 启动FastAPI应用
    # 用6006端口可以将autodl的端口映射到本地,从而在本地使用api
uvicorn.run(app, host='0.0.0.0', port=6006, workers=1)  # 在指定端口和主机上启动应用

六、Api 部署调用

1、测试音频准备

执行以下命令获取测试音频文件:

wget -O /root/autodl-tmp/1272-128104-0000.flac https://github.com/QwenLM/Qwen-Audio/raw/main/assets/audio/1272-128104-0000.flac

在这里插入图片描述

2、启动API服务

在终端输入以下命令启动api服务

cd /root/autodl-tmp
python api-test.py

加载完毕后出现如下信息说明成功。
在这里插入图片描述

3、Curl命令调用API

默认部署在 6006 端口,通过 POST 方法进行调用,可以使用curl调用,如下所示:

curl http://127.0.0.1:6006/test-audio/

输出:( api-test.py代码中可以看到test-audio会默认调用模型解析音频文件/root/autodl-tmp/1272-128104-0000.flac
在这里插入图片描述

语音识别成功
从输出结果中可以看到,返回了音频中的人说的内容:mister quilter is the apostle of the middle classes and we are glad to welcome his gospel

4、Python代码调用API

也可以使用python中的requests库进行调用,如下所示:

import requests

def get_audio_response(audio_file_path, text_query):
    # 设置API的URL
    url = 'http://127.0.0.1:6006/test-audio/'

    # 设置音频文件路径和文本查询的参数
    params = {
        'audio': audio_file_path,  # 音频文件路径
        'text': text_query         # 文本查询
    }

    # 发送GET请求
    response = requests.get(url, params=params)

    # 提取所需信息
    result = {
        "response": response.json(),
        "status_code": response.status_code,
        "time": response.headers.get('Date')  # 获取响应头中的时间信息
    }
    return result

if __name__ == '__main__':
    # 测试请求
    audio_file = '/root/autodl-tmp/1272-128104-0000.flac'
    text_query = '这是男生还是女生说的?'
    completion = get_audio_response(audio_file, text_query)
print(completion)

得到的返回值如下所示:

{'response': {'response': '根据音色判断,这是男性说的。'}, 'status_code': 200, 'time': 'Sun, 28 Jul 2024 13:30:44 GMT'}

结语

通过以上详细的步骤,您已经成功地完成了 Qwen-Audio-Chat 模型的 FastApi 部署,并能够通过多种方式进行调用和测试。希望这一部署过程能为您的项目和应用带来新的可能性和价值。在实际应用中,您可以根据具体需求进一步优化和扩展功能,充分发挥 Qwen-Audio-Chat 模型的强大能力,为用户提供更智能、便捷的音频交互服务。

在这里插入图片描述
🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。
💘精心准备📚500本编程经典书籍、💎AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1958842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10 BERT

目录 1 综述 1.1 BERT的核心思想 1.2 BERT的关键技术:预训练阶段 1.3 微调阶段 2 BERT的架构 2.1 输入处理 3. 特征选择/学习模块 BERT 的自注意力过程 4. 预训练任务:同时进行 4.1 Next Sentence Prediction (NSP) 4.2 Masked Language Model…

Url图标实现

Url图标实现 效果如下&#xff1a; 1.引入样式 <link rel"icon" href"favicon.ico"> favicon.ico和对应的html一般需要在同一个目录下&#xff08;同级别&#xff09;。 2.title是用来设置在url页签中显示的名称。 可能存在的问题&#xff1a; …

如何通过前端表格控件实现自动化报表?

背景 最近伙伴客户的项目经理遇见一个问题&#xff0c;他们在给甲方做自动化报表工具&#xff0c;项目已经基本做好了&#xff0c;但拿给最终甲方&#xff0c;业务人员不太买账&#xff0c;项目经理为此也是天天抓狂&#xff0c;没有想到合适的应对方案。 现阶段主要面临的问…

filament 初使用记录

安装初始化 一、环境准备 官网要的 我安装的 二、下载安装 安装laravel composer create-project --prefer-dist laravel/laravel 项目名称 10.*导入 filament composer require filament/filament注册 filament 管理面板 php artisan filament:install --panels初始化…

KubeSphere部署:(一)环境准备

本文介绍windows系统&#xff0c;安装wsl虚拟机&#xff08;ubuntu&#xff09;&#xff0c;并在ubruntu中配置连接私有harbor及阿里云镜像等。 在确定该方式前&#xff0c;博主也曾尝试过通过安装Docker Desktop的方式&#xff0c;但每次重启电脑之后&#xff0c;docker桌面端…

Photoshop 2023:创意无限的图像编辑神器

Photoshop 2023 是一款专为 Mac 和 Windows 系统设计的强大图像编辑软件&#xff0c;为专业设计师和业余爱好者提供了无与伦比的创作工具和功能。 一、强大的编辑工具 Photoshop 2023 拥有丰富的编辑工具&#xff0c;如选择工具、画笔工具、橡皮擦工具等。其选择工具能够精确…

Matlab编程资源库(14)常微分方程初值问题的数值解法

一、 龙格&#xff0d;库塔法简介 龙格-库塔法&#xff08;Runge-Kutta method&#xff09;是一种常用的数值解微分方程的方法&#xff0c;由德国数学家卡尔龙格&#xff08;Carl Runge&#xff09;和马丁威尔海尔姆库塔&#xff08;Martin Wilhelm Kutta&#xff09;在20世纪…

Windows11下 Visual Studio 2022 + Qt6 的 WebSocket 线程池异步 客户端

Windows11下 Visual Studio 2022 + Qt6 的 WebSocket 线程池异步 客户端 1 开发 WebSocket 客户端1.1 开发环境1.1.1 为Qt 6安装 websockets1.2 .基于Qt6的 QWebSocket 客户端示例1.2.1 实现 WebSocket 客户端1.2.2 创建 QtQWesocketClient1.2.3 创建QWebsocket对象1.2.3.1 添加…

轻松实现人声与伴奏分离,轻松获取纯净音质

SpleeterGui是一款用于人声与伴奏分离的开源软件&#xff0c;基于Python的Spleeter库开发而成。SpleeterGui支持的操作系统包括Windows、macOS和Linux&#xff0c;用户可以根据自己的需求选择合适的版本进行下载和使用。 使用教程 1、解压 人声伴奏分离软件-SpleeterGUI_2.9.5…

前端必知必会-html实体与保留字转换和符号

文章目录 HTML 实体HTML 字符实体一些有用的 HTML 字符实体HTML 符号HTML 符号实体数学符号希腊字母其他一些实体总结 HTML 实体 HTML 中的保留字符必须用实体替换&#xff1a; <&#xff08;小于&#xff09; < >&#xff08;大于&#xff09; >HTML 字符实体 …

C#体检系统源码,医院健康体检系统PEIS,C#+VS2016+SQLSERVER

体检中心/医院体检科PEIS系统源码&#xff0c;C#健康体检信息系统源码&#xff0c;PEIS源码 开发环境&#xff1a;C/S架构C#VS2016SQLSERVER 2008 检前&#xff1a; 多种预约方式网站预约、电话预约、微信平台预约及检前沟通&#xff0c;提前制作套餐&#xff0c;客人到达体检…

内网穿透的应用-中文版个人知识库Trilium笔记本地安装结合内网穿透远程协作

文章目录 前言1. 安装docker与docker-compose2. 启动容器运行镜像3. 本地访问测试4.安装内网穿透5. 创建公网地址6. 创建固定公网地址 前言 今天和大家分享一款在G站获得了26K的强大的开源在线协作笔记软件&#xff0c;Trilium Notes的中文版如何在Linux环境使用docker本地部署…

使用 WeNet 训练 AISHELL-1 模型的详细入门指南

使用 WeNet 训练 AISHELL-1 模型的详细入门指南 在这篇文章中&#xff0c;我们将通过 WeNet 框架详细介绍如何训练 AISHELL-1 数据集的语音识别模型。我们将逐步解释各个阶段的操作&#xff0c;适合初学者入门。 1. 环境准备 1.1 安装miniconda miniconda官网 1. 获取下载链…

【Dash】Dash模块介绍

什么是Dash&#xff1f; Dash 是一个开源的 Python 框架&#xff0c;用于创建基于 Web 的应用程序。它由 Plotly 公司开发&#xff0c;专为数据科学家和分析师设计&#xff0c;以便他们可以构建自定义的数据可视化 Web 应用程序&#xff0c;而无需具备前端开发知识。Dash 提供…

Scrapy 爬取旅游景点相关数据(五)

本期内容&#xff1a;&#xff08;1&#xff09;爬取日本其他城市数据存入数据库&#xff08;2&#xff09;爬取景点评论数据 1 爬取其他城市景点数据 只爬取一个城市的数据对于做数据可视化系统可能是不够的&#xff0c;因为数据样本量少嘛&#xff0c;本期来爬取其他城市的景…

Qt之详解QPainter

文章目录 前言QPainter 是干什么的如何使用 QPainter在哪个函数使用 QPainter为什么要在这里使用 QPainter最简单的示例代码 QPainter 函数构造函数与析构函数QPainter()QPainter(QPaintDevice *device)~QPainter() 初始化和结束绘图bool begin(QPaintDevice *device)bool end(…

x-cmd pkg | yazi - 超快终端文件管理器

目录 简介快速入门功能特点竞品和相关项目进一步阅读 简介 yazi 是由 github.com/sxyazi 用 Rust 开发的终端文件管理器&#xff0c;支持预览文本文件、pdf 文件、图像、视频&#xff0c;内置代码高亮功能。在内部&#xff0c;它使用 Tokio 作为其异步运行时&#xff0c;以非阻…

【百度超级智能体】零代码构建趣味语言游戏:秋日寻宝知识问答

前言 文心智能体平台AgentBuilder是由百度推出的一个创新平台&#xff0c;该平台基于其先进的文心大模型。这个平台旨在帮助开发者根据各自的专业领域和应用场景&#xff0c;以灵活多样的开发方法构建定制化的智能体&#xff08;Agent&#xff09;。通过简单易用的prompt编排功…

详解Qt 定时器QTimer

文章目录 前言QTimer 是什么什么时候使用 QTimer定时器时间到了调用什么函数 QTimer 的所有函数构造函数与析构函数QTimer(QObject *parent nullptr) 基本操作void start(int msec)void start()void stop()bool isActive() const 定时器属性void setInterval(int msec)int int…

瑞芯微平台RK3568系统开发(1)安卓环境搭建

1 开发环境搭建 注意: 重要&#xff01;重要&#xff01;重要&#xff01;自己编译后的固件&#xff0c; 必须先确认io_domains(4.2章节)后&#xff0c;才可以下载到板子运行&#xff0c; 否则可能造成烧坏RK3568的情况。 1.1 更新系统 ~$ sudo apt-get update 1.2 安装依…