使用 Transformers 优化文本转语音模型 Bark

🤗 Transformers 提供了许多最新最先进 (state-of-the-art, SoTA) 的模型,这些模型横跨多个领域及任务。为了使这些模型能以最佳性能运行,我们需要优化其推理速度及内存使用。

🤗 Hugging Face 生态系统为满足上述需求提供了现成且易于使用的优化工具,这些工具可应用于库中的所有模型。用户只需添加几行代码就可以轻松 减少内存占用提高推理速度

在本实战教程中,我将演示如何用三个简单的优化技巧来优化 Bark 模型。Bark 是🤗 Transformers 支持的一个文本转语音 (Text-To-Speech, TTS) 模型。所有优化仅依赖于 Transformers、Optimum 以及 Accelerate 这三个 🤗 生态系统库。

本教程还演示了如何对模型及其不同的优化方案进行性能基准测试。

本文对应的 Google Colab 在:https://colab.research.google.com/github/ylacombe/notebooks/blob/main/Benchmark_Bark_HuggingFace.ipynb

本文结构如下:

目录

  1. Bark 模型简介

  2. 不同优化技巧及其优点概述

  3. 基准测试结果展示

Bark 模型架构

Bark 是 Suno AI 提出的基于 transformer 的 TTS 模型,其原始代码库为 suno-ai/bark。该模型能够生成各种音频输出,包括语音、音乐、背景噪音以及简单的音效。此外,它还可以产生非语言语音,如笑声、叹息声和抽泣声等。

自 v4.31.0 起,Bark 已集成入 🤗 Transformers!

你可以通过 这个 notebook 试试 Bark 并探索其功能。

Bark 主要由 4 个模型组成:

  • BarkSemanticModel (也称为 文本 模型): 一个因果自回归 transformer 模型,其输入为分词后的词元序列,并输出能捕获文义的语义词元。

  • BarkCoarseModel (也称为 粗声学 模型): 一个因果自回归 transformer 模型,其接收 BarkSemanticModel 模型的输出,并据此预测 EnCodec 所需的前两个音频码本。

  • BarkFineModel (也称为 细声学 模型),这次是个非因果自编码器 transformer 模型,它对 先前码本的嵌入和 进行迭代,从而生成最后一个码本。

  • EncodecModel 的编码器部分预测出所有码本通道后,Bark 继续用其解码器来解码并输出音频序列。

截至本文撰写时,共有两个 Bark checkpoint 可用,其中一个是 小版,一个是 大版。

加载模型及其处理器

预训练的 Bark 小 checkpoint 和 大 checkpoint 均可从 Hugging Face Hub 上加载。你可根据实际需要加载相应的 repo-id。

为了使实验运行起来快点,我们默认使用小 checkpoint,即 “suno/bark-small” 。但你可以随意改成 “suno/bark” 来尝试大 checkpoint。

from transformers import BarkModel

model = BarkModel.from_pretrained("suno/bark-small")

将模型放到加速器上以优化其速度:

import torch

device = "cuda:0" if torch.cuda.is_available() else "cpu"
model = model.to(device)

加载处理器,它主要处理分词以及说话人嵌入 (若有)。

from transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("suno/bark-small")

优化技巧

本节,我们将探索如何使用 🤗 Optimum 和 🤗 Accelerate 库中的现成功能来以最少的代码改动达到优化 Bark 模型的目的。

设置实验环境

首先,我们准备一个输入文本并定义一个函数来测量 Bark 生成过程的延迟及其 GPU 显存占用情况。

text_prompt = "Let'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值