当前位置:首页 > 文章列表 > 文章 > python教程 > 适用于您的实时应用程序的 Supersonic GPU MelSpectrogram

适用于您的实时应用程序的 Supersonic GPU MelSpectrogram

来源:dev.to 2024-10-26 10:46:01 0浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《适用于您的实时应用程序的 Supersonic GPU MelSpectrogram》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

适用于您的实时应用程序的 Supersonic GPU MelSpectrogram

在 simli,我们最关心的是延迟。毕竟,这就是我们的目标:低延迟视频。另一方面,音频机器学习中一些最常用的算法的实现速度非常慢。需要明确的是,这些实现通常适合创建模型本身或批量推理。但对于 simli 的我们来说,几毫秒就可能意味着视频是断断续续的混乱还是流畅。
对我来说幸运的是(以及作为读者的代理),本指南不需要太多数学知识,更聪明的人已经弄清楚如何获得正确的答案,我们只是让计算更加高效。如果您需要更多信息来了解 melspectrogram 到底是什么,您可以阅读这篇文章。计算频谱图的方法有多种,这在很大程度上取决于您的应用程序。因此,为了方便作者,我们将重点放在运行内部模型所需的梅尔上。

常见的解决方案:librosa

您很可能是在遇到使用 librosa 的存储库后来到这里的。老实说,这是一个非常方便的图书馆。有大量实用程序、读取磁盘上音频的简单方法以及快速访问许多常用功能(例如音频重采样、通道缩混等)。在我们的例子中,我们对一种特定的功能感兴趣:梅尔谱图计算。在 librosa 中,获取梅尔光谱图非常简单。

import librosa

# load in any audio to test
sampleaudio, sr = librosa.load("sample.mp3", sr=none) # sr=none means the original sampling rate
spectrogram = librosa.feature.melspectrogram(
    y=sampleaudio,
    sr=sr,
    n_fft=int(0.05 * sr),  # 50ms
    hop_length=int(0.0125 * sr),  # 12.5ms
    win_length=int(0.05 * sr),
)

很简单,在 gcp g2 虚拟机上平均需要 2 毫秒左右。嗯,有两个主要问题:

  1. 通常,在使用深度学习模型时,您需要在 gpu 上运行模型。这意味着链的一部分在 cpu 上运行,然后将结果复制回 gpu。对于批量推理,这基本上没问题,因为您应该收集 gpu/传输上能够容纳的尽可能多的数据。然而,在我们的例子中,我们经常一次处理一帧,以减少等待和处理时间。
  2. 我们的总时间预算约为 33 毫秒/帧。这包括从 api 服务器到 ml 推理服务器的传输延迟、cpu 到 gpu 的复制、预处理和模型(包括梅尔谱图)的后处理。当您的预算如此紧张时,每一毫秒都很重要。这两毫秒实际上有助于为 simli 提供一个可工作的实时渲染视频流(当然,这是许多优化,每个优化都值得一两毫秒)。

网上寻找解决方案

在尝试了解其他人是如何做到这一点时(幸运的是,这对我们来说不是一个独特的问题),我发现这篇文章解释了梅尔谱图的工作原理,并提供了一个参考实现,由于某种原因,该实现仅花费了 1 毫秒(50 % 改进)。这是一个好的开始,但仍然存在第一个问题,并非所有内容都在 gpu 上。我们正在使用 pytorch,并一直依赖 torch.compile 和 mode=reduce-overhead 来最大程度地提高速度。然而,像这样的数据传输可能会降低性能,因为 pytorch 编译器也无法优化该函数。解决方案有点繁琐但是相对简单,用torch重写一下即可。 pytorch 团队已确保其许多语法和功能尽可能接近 numpy(一些边缘情况通常都有详细记录,除了让我迷失了几天的情况,但这是另一个博客的故事) .

pytorch 重写

因此,为了成功重写 pytorch 中的所有内容,我们需要执行几个步骤。梅尔谱图可以分为三个步骤:

  • 计算短时傅里叶变换
  • 生成梅尔音阶频率库
  • 生成频谱图。

有好消息也有坏消息。好消息是所有必需的功能都可以在 pytorch 或 torchaudio 中轻松获得。坏消息是默认行为与 librosa 有很大不同,因此需要进行大量配置和反复试验才能使其正确。我经历过这一切,我分享这些信息是因为我什至不希望我最大的敌人遭受这种地狱般的打击。我们需要理解的一件事是,这段代码严重依赖于缓存一些结果以供以后使用。这是在预生成所有静态数组的初始化函数中完成的(例如,梅尔频率库取决于采样率和所需的梅尔数量)。这是我们使用 pytorch 优化的 melspectrogram 函数

import torch

if torch.cuda.is_available
    @torch.compile(mode="reduce-overhead")
else:
    @torch.compile
def melspecrogram_torch(wav:torch.tensor,sample_rate:int, hann_window: torch.tensor, mel_basis: torch.tensor):
    stftwav = torch.stft(
            wav,
            n_fft=int(sample_rate*0.05),
            win_length=int(sample_rate*0.05),
            hop_length=int(sample_rate*0.0125),
            window=hann_window,
            pad_mode="constant",
            return_complex=true,
        ).abs()
    stftwav = stftwav.squeeze()
    mel_stftwav = torch.mm(mel_basis, stftwav)
    return mel_stftwav

device = "cuda" if torch.cuda.is_available() else "cpu"

melspectrogram_torch(
    sampleaudio,
    sr,
    torch.hann_window(int(sample_rate*0.05), device=device, dtype=torch.float32),
    torchaudio.functional.melscale_fbanks(
        sample_rate=sr,
        n_freqs=(int(sample_rate*0.05) // 2 + 1),
        norm="slaney", # this is the normalization algorithm used by librosa
        # this is an example that's related to our own pipeline, check what you need for yours
        n_mels=80,
        f_min=55,
        f_max=7600,
    )
    .t.to(device)
)

初始编译运行后,我们使用 nvidia l4 gpu(缓存 hann_window 和 melscale_fbanks)测量该函数需要 350 微秒。调整后的调用将如下所示:

hann=torch.hann_window(int(sample_rate*0.05), device=device, dtype=torch.float32),
melscale=torchaudio.functional.melscale_fbanks(
        sample_rate=sr,
        n_freqs=(int(sample_rate*0.05) // 2 + 1),
        norm="slaney", # this is the normalization algorithm used by librosa
        # this is an example that's related to our own pipeline, check what you need for yours
        n_mels=80,
        f_min=55,
        f_max=7600,
    )
    .T.to(device)
melspectrogram_torch(
    sampleAudio,
    sr,
    hann,
    melscale,
)

这是关于我们如何优化部署的预训练模型、优化预处理和后处理步骤的一系列文章的一部分。您可以查看 https://www.simli.com/demo 查看已部署的模型以及我们提供的最低延迟的头像

到这里,我们也就讲完了《适用于您的实时应用程序的 Supersonic GPU MelSpectrogram》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

版本声明
本文转载于:dev.to 如有侵犯,请联系study_golang@163.com删除
PHP 函数中变量类型如何影响结果?PHP 函数中变量类型如何影响结果?
上一篇
PHP 函数中变量类型如何影响结果?
函数式编程与MapReduce并行计算模式的比较
下一篇
函数式编程与MapReduce并行计算模式的比较
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • SEO标题协启动:AI驱动的智能对话与内容生成平台 - 提升创作效率
    协启动
    SEO摘要协启动(XieQiDong Chatbot)是由深圳协启动传媒有限公司运营的AI智能服务平台,提供多模型支持的对话服务、文档处理和图像生成工具,旨在提升用户内容创作与信息处理效率。平台支持订阅制付费,适合个人及企业用户,满足日常聊天、文案生成、学习辅助等需求。
    9次使用
  • Brev AI:零注册门槛的全功能免费AI音乐创作平台
    Brev AI
    探索Brev AI,一个无需注册即可免费使用的AI音乐创作平台,提供多功能工具如音乐生成、去人声、歌词创作等,适用于内容创作、商业配乐和个人创作,满足您的音乐需求。
    9次使用
  • AI音乐实验室:一站式AI音乐创作平台,助力音乐创作
    AI音乐实验室
    AI音乐实验室(https://www.aimusiclab.cn/)是一款专注于AI音乐创作的平台,提供从作曲到分轨的全流程工具,降低音乐创作门槛。免费与付费结合,适用于音乐爱好者、独立音乐人及内容创作者,助力提升创作效率。
    9次使用
  • SEO标题PixPro:AI驱动网页端图像处理平台,提升效率的终极解决方案
    PixPro
    SEO摘要PixPro是一款专注于网页端AI图像处理的平台,提供高效、多功能的图像处理解决方案。通过AI擦除、扩图、抠图、裁切和压缩等功能,PixPro帮助开发者和企业实现“上传即处理”的智能化升级,适用于电商、社交媒体等高频图像处理场景。了解更多PixPro的核心功能和应用案例,提升您的图像处理效率。
    9次使用
  • EasyMusic.ai:零门槛AI音乐生成平台,专业级输出助力全场景创作
    EasyMusic
    EasyMusic.ai是一款面向全场景音乐创作需求的AI音乐生成平台,提供“零门槛创作 专业级输出”的服务。无论你是内容创作者、音乐人、游戏开发者还是教育工作者,都能通过EasyMusic.ai快速生成高品质音乐,满足短视频、游戏、广告、教育等多元需求。平台支持一键生成与深度定制,积累了超10万创作者,生成超100万首音乐作品,用户满意度达99%。
    12次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码