快橙加速器ios企业版

公司动态

使用 Amazon SageMaker 推理 AudioCraft MusicGen 模型 机器学习

使用 Amazon SageMaker 进行 AudioCraft MusicGen 模型推理

作者:Pavan Kumar Rao Navule David John Chakram Sudhanshu Hate 和 Rupesh Bajaj 发表日期:2024年8月6日

关键要点

MusicGen 模型能够将自然语言文本转化为高质量的音乐,赋予用户更多音乐创作的自由。文章详解如何在 Amazon SageMaker 上部署 MusicGen 模型,使用异步推理进行音乐生成。通过使用异步推理,处理大型数据和长时间运行的音乐生成任务显得更为高效。

随着人工智能和深度学习技术的进步,音乐生成模型逐渐成为强大的工具,能够将自然语言文本转化为音乐作品。这些模型旨在理解并将描述性的文本翻译为连贯且优美的音乐,极大地降低了音乐创作的门槛,使没有专业培训的人也能轻松创作高质量的音乐。

生成式 AI 模型正在彻底改变音乐的创作和消费方式。公司可以利用这一技术开发新品、简化流程,发掘潜在机会,从而产生显著的商业影响。音乐生成模型的多样应用包括为多媒体和游戏创作个性化的音乐配乐、为探索音乐风格和结构的学生提供教育资源,帮助艺术家和作曲家激发创意和合作。

其中一款著名的音乐生成模型是 AudioCraft MusicGen,由 Meta 开发。MusicGen 的代码遵循 MIT 协议,模型权重遵循 CCBYNC 40 协议。MusicGen 可以基于文本或旋律输入创作音乐,使用户对输出有更好的控制。下图展示 MusicGen 如何通过文本描述或音频提示生成高质量音乐:

快橙加速器免费破解版下载

MusicGen 利用先进的 AI 技术生成各种音乐风格和类型,满足不同创作需求。与传统方法例如级联多个模型不同,MusicGen 作为单一的语言模型操作,处理多个压缩离散音乐表示流标记。这一简化的方法赋予用户在生成高质量单声道和立体声样本时更精确的控制,彻底改变了 AI 驱动的音乐创作。

MusicGen 模型可广泛应用于教育、内容创作和音乐作曲,能够帮助学生实验不同音乐风格,为多媒体项目生成自定义配乐,并创作个性化音乐作品。此外,MusicGen 也可以帮助音乐家和作曲家,促进创造力与创新。

本文展示了如何通过 Amazon SageMaker 使用异步推理部署 MusicGen 音乐生成模型,重点阐述基于文本条件生成音乐样本的过程。

使用 Amazon SageMaker 推理 AudioCraft MusicGen 模型 机器学习

解决方案概述

生成音频、音乐或视频的生成 AI 模型通常计算密集且耗时。具备音频、音乐及视频输出的生成 AI 模型可采用异步推理,通过队列处理入站请求以异步方式进行处理。我们的解决方案涉及在 SageMaker 上部署 AudioCraft MusicGen 模型,使用 SageMaker 的异步推理端点,这需要把从 Hugging Face Model Hub 获取的 AudioCraft MusicGen 模型部署到 SageMaker 基础设施上。

下方的解决方案架构图展示用户如何通过将自然语言文本作为输入提示,使用在 SageMaker 上部署的 AudioCraft MusicGen 模型生成音乐。

以下步骤详细描述了从用户输入到音乐生成的工作流程:

用户通过 Amazon SageMaker Studio 笔记本调用 SageMaker 异步端点。输入负载上传到 Amazon Simple Storage Service (S3) 桶中进行推理。负载包括提示及音乐生成参数。生成的音乐将从 S3 桶中下载。将 facebook/musicgenlarge 模型部署至 SageMaker 异步端点,用于音乐生成推理。使用 HuggingFace 推理容器 的映像作为基础图像,支持 PyTorch 210 和 Hugging Face Transformers 框架。将 SageMaker HuggingFaceModel 部署到 SageMaker 异步端点。在部署时,将 Hugging Face 模型facebook/musicgenlarge上传至 Amazon S3。同时,推理期间生成的输出也将上传至 Amazon S3。利用 Amazon Simple Notification Service (SNS) 主题来通知成功与失败,作为 SageMaker 异步推理配置的一部分。

前提条件

确保您已具备以下前提条件:

确认您可以访问 AWS 管理控制台,以创建和管理 SageMaker、AWS 身份与访问管理 (IAM) 及其他 AWS 服务的资源。如果您是首次使用 SageMaker Studio,请创建 SageMaker 域。请参阅 Amazon SageMaker 快速设置指南 以建立具有默认设置的 SageMaker 域。从 预构建的 HuggingFace 推理容器 获取 AWS 深度学习容器以进行大模型推理。

部署解决方案

要将 AudioCraft MusicGen 模型部署到 SageMaker 异步推理端点,请完成以下步骤:

创建 MusicGen 的模型服务包。创建 Hugging Face 模型。定义异步推理配置。在 SageMaker 上部署模型。

我们将详细介绍每一步,并展示如何将 MusicGen 模型部署到 SageMaker。为了简洁起见,仅包含重要代码片段。有关部署 MusicGen 模型的完整源代码,请查看 GitHub 仓库。

创建 MusicGen 的模型服务包

为部署 MusicGen,我们首先创建模型服务包。模型包中包含一个 requirementstxt 文件,列出了用于提供 MusicGen 模型所需安装的 Python 包。模型包还包含一个 inferencepy 脚本,负责提供 MusicGen 模型的逻辑。

让我们看看在 SageMaker 上提供 MusicGen 模型推理时使用的主要函数:

pythondef modelfn(modeldir) 加载模型 model = MusicgenForConditionalGenerationfrompretrained(facebook/musicgenlarge) return model

modelfn 函数将从 Hugging Face Model Hub 加载 MusicGen 模型 facebook/musicgenlarge。我们依赖 MusicgenForConditionalGeneration Transformers 模块来加载预先训练的 MusicGen 模型。

您也可以参考 musicgenlargeloadfroms3/deploymusicgenlargefroms3ipynb,这演示了从 Hugging Face Hub 下载模型至 Amazon S3 并将模型工件重新用于后续部署的最佳实践。正确地下载模型至 Amazon S3 后可重用,避免每次部署或扩展时都需从 Hugging Face 下载模型,从而提高下载速度,尤其是大模型,有助于避免从 AWS 外部网站进行下载。同时,这种最佳实践保持了一致性,使相同的模型可以在不同的测试和生产环境中进行部署。

predictfn 函数利用推理请求中提供的数据及通过 modelfn 加载的模型进行推理:

pythontexts generationparams = processinput(data)processor = AutoProcessorfrompretrained(facebook/musicgenlarge)inputs = processor ( text = texts padding=True returntensors=pt)

通过数据字典中的信息,我们处理输入数据以获取用于生成音乐的提示和生成参数。我们稍后将更详细地讨论生成参数。

pythondevice = torchdevice(cuda if torchcudaisavailable() else cpu)modelto(device)audiovalues = modelgenerate(inputsto(device) generationparams)

我们将模型加载到设备上,然后将输入及生成参数作为输入发送至模型。这一过程生成的音乐以三维 Torch 张量的形式呈现,形状为 (batchsize numchannels sequencelength)。

pythonsamplingrate = modelconfigaudioencodersamplingratediskwavlocations = writewavstodisk(samplingrate audiovalues)

上传 wav 文件至 S3

resultdict[generatedoutputss3] = uploadwavfiles(diskwavlocations bucketname)

清理磁盘

for wavondisk in diskwavlocations deletefileondisk(wavondisk)

接下来,我们使用张量生成 wav 音乐,并将这些文件上传到 Amazon S3,然后清理保存至磁盘的 wav 文件。我们获取 wav 文件的 S3 URI,并在响应中发送位置。

现在我们创建推理脚本的归档并将其上传至 S3 桶:

pythonmusicgenprefix = musicgenlarges3modelkey = f{musicgenprefix}/model/modeltargzs3modellocation = fs3//{sagemakersessionbucket}/{s3modelkey}s3 = boto3resource(s3)s3Bucket(sagemakersessionbucket)uploadfile(modeltargz s3modelkey)

此对象在 Amazon S3 的上传 URI 将在稍后用于创建 Hugging Face 模型。

创建 Hugging Face 模型

现在,我们使用必要的参数初始化 HuggingFaceModel。在部署过程中,存储在 s3modellocation 的模型服务工件将被部署。在模型服务之前,将根据 modelfn 中的逻辑从 Hugging Face 下载 MusicGen 模型。

pythonhuggingfacemodel = HuggingFaceModel( name=asyncendpointname modeldata=s3modellocation # 模型工件的路径 role=role env= { TSMAXREQUESTSIZE 100000000 TSMAXRESPONSESIZE 100000000 TSDEFAULTRESPONSETIMEOUT 3600 } # 具备创建端点权限的 IAM 角色 transformersversion=437 # 使用的 transformers 版本 pytorchversion=21 # 使用的 pytorch 版本 pyversion=py310 # 使用的 python 版本)

env 参数接受字典格式的参数,如 TSMAXREQUESTSIZE 和 TSMAXRESPONSESIZE,用于定义异步推理端点请求及响应数据包的字节大小。TSDEFAULTRESPONSETIMEOUT 字典中的键表示异步推理端点在多长时间后停止响应。

您可以从版本 4310 开始使用 Hugging Face Transformers 库运行 MusicGen。这里我们将 transformersversion 设置为 437。MusicGen 至少需要 PyTorch 21 或最新版本,因此我们将 pytorchversion 设置为 21。

定义异步推理配置

使用文本提示输入进行音乐生成过程可能计算密集且耗时。SageMaker 的异步推理旨在解决这些需求。处理音乐生成模型时,过程通常会耗时超过 60 秒。

SageMaker 异步推理通过队列接收请求并进行异步处理,尤其适合请求包含大负载最大可达 1 GB、较长处理时间最长可达 1 小时、近乎实时延迟要求的情况。通过队列接收请求并异步处理,该功能高效地处理了音乐生成任务固有的延迟。同时,异步推理还支持无缝的自动扩展,确保仅在需要时分配资源,从而节省成本。

在进行异步推理配置之前,我们创建成功和失败的 SNS 主题,用于在后续任务中使用:

pythonfrom utilssnsclient import SnsClientimport timesnsclient = SnsClient(boto3client(sns))timestamp = timetimens()topicnames = [fmusicgenlargetopicSuccessTopic{timestamp} fmusicgenlargetopicErrorTopic{timestamp}]

topicarns = []for topicname in topicnames print(f正在创建主题 {topicname}) response = snsclientcreatetopic(topicname) topicarnsappend(responseget(TopicArn))

现在我们通过指定 AsyncInferenceConfig 对象来创建异步推理端点配置:

python

创建异步端点配置

asyncconfig = AsyncInferenceConfig( outputpath=s3pathjoin( s3// sagemakersessionbucket musicgenlarge/asyncinference/output ) # 结果存储位置 # 如果需要,添加通知 SNS notificationconfig={ SuccessTopic topicarns[0] ErrorTopic topicarns[1] } # 通知配置)

AsyncInferenceConfig 的参数详细如下:

outputpath 异步推理端点输出存储位置,其文件将具有 out 扩展名,包含 MusicGen 模型推理执行的详细信息。notificationconfig 可选地,您可以关联成功和错误的 SNS 主题。依赖于这些主题的工作流可以根据推理结果做出明智的决策。

在 SageMaker 上部署模型

定义完异步推理配置后,我们可以部署 Hugging Face 模型,初始实例数设置为 1:

python

部署端点

asyncpredictor = huggingfacemodeldeploy( initialinstancecount=1 instancetype=instancetype asyncinferenceconfig=asyncconfig endpointname=asyncendpointname)

成功部署后,您还可以选择对异步端点配置 自动扩展。使用异步推理,还可以将异步端点的实例缩减到零。

接下来我们深入探讨基于 MusicGen 模型进行推理。

推理

在这一部分,我们展示如何使用 MusicGen 模型实现异步推理端点的推理。为了简洁起见,仅包含重要的代码片段。有关 MusicGen 模型推理的完整源代码,请查看 GitHub 仓库。下图展示了调用异步推理端点的步骤序列。

下面,我们详细说明如何通过自然语言提示用户想要的情感,调用 SageMaker 异步推理端点,以推理 MusicGen。我们将展示如何下载和播放用户提示生成的 wav 文件,最后介绍如何清理此次部署过程中创建的资源。

准备提示和指令

为了使用 MusicGen 模型进行受控的音乐生成,理解不同的生成参数尤为重要:

pythongenerationparams = { guidancescale 3 maxnewtokens 1200 dosample True temperature 1 }

从以上代码中,理解生成参数如下:

guidancescale guidancescale 用于无分类器引导 (CFG),设置条件 logits由文本提示预测的权重和无条件 logits由无条件或“空”提示预测之间的权重。较高的 guidancescale 值鼓励模型生成与输入提示更密切相关的样本,但通常会降低音质。通过设定 guidancescale gt 1 启用 CFG。建议最优值为 guidancescale = 3,这是我们的默认设置。maxnewtokens maxnewtokens 参数指定生成的新标记数量。生成受限于正弦位置嵌入,不超过 30 秒的输入,意味着 MusicGen 不能生成超过 30 秒的音频1503 个标记。我们的默认设置为 256。do