在Amazon SageMaker上托管Whisper模型:探索推理选项
关键要点
本文将探讨如何在Amazon SageMaker上托管OpenAI的Whisper模型。介绍使用PyTorch和Hugging Face两种框架进行模型托管的方法。深入分析SageMaker的各种推理选项,包括实时推理、批量转换和异步推理。提供详细的步骤和代码示例,帮助开发者做出明智的集成决策。OpenAI Whisper是一个先进的自动语音识别ASR模型,提供MIT许可证。ASR技术在转录服务、语音助手和提升听障人士的无障碍服务方面具有重要应用。该模型通过大量多语言和多任务的监督数据集进行训练,其高准确率和适应性使其成为语音相关任务的宝贵资产。
在不断发展的机器学习和人工智能领域,Amazon SageMaker提供了一个全面的生态系统。SageMaker使数据科学家、开发者和组织能够在大规模下开发、训练、部署和管理机器学习模型。它简化了整个机器学习工作流程,包括数据预处理、模型开发、简便的部署和监控。SageMaker用户友好的界面使其成为释放人工智能潜力的关键平台,确立了它在人工智能领域的革命性解决方案地位。
在本文中,我们将探索SageMaker的能力,特别是如何托管Whisper模型。我们将深入研究两种方法:一种是使用Whisper PyTorch模型,另一种是使用Hugging Face实现的Whisper模型。此外,我们还将对SageMaker的推理选项进行深入分析,比较它们在速度、成本、有效负载大小和可扩展性等参数上的表现。这一分析帮助用户在将Whisper模型集成到特定用例和系统时做出明智的选择。
解决方案概述
以下图示显示了该解决方案的主要组件:
保存模型工件:在Amazon SageMaker上托管模型的第一步是保存模型工件。这些工件指机器学习模型的基本组件,包括部署与再训练所需的模型参数、配置文件、预处理组件以及与其性能相关的元数据。需要注意的是,PyTorch和Hugging Face实现的Whisper模型包含不同的模型工件。
创建自定义推理脚本:在这些脚本中,我们定义模型的加载方式并指定推理过程。此外,我们可以根据需要添加自定义参数,还可以在requirementstxt文件中列出必需的Python包。在模型部署期间,这些Python包将在初始化阶段自动安装。
选择预构建的深度学习容器DLC:从AWS提供和维护的PyTorch或Hugging Face深度学习容器中选择。这些容器是预构建的Docker镜像,包含深度学习框架和其他必需的Python包。更多信息,请查看此链接。
创建SageMaker模型:结合模型工件、自定义推理脚本和选择的DLC,我们将分别为PyTorch和Hugging Face创建Amazon SageMaker模型。
模型部署:将模型部署到SageMaker上,并可以选择以下选项:实时推理端点、批量转换作业和异步推理端点。稍后我们将详细探讨这些选项。
解决方案的示例笔记本和代码可在此GitHub代码库中找到。
图1 解决方案主要组件概述
逐步指南
在Amazon SageMaker上托管Whisper模型
在本节中,我们将解释如何在Amazon SageMaker上托管Whisper模型,分别使用PyTorch和Hugging Face框架。要进行此解决方案的实验,您需要一个AWS账户,并且可以访问Amazon SageMaker服务。
PyTorch框架
保存模型工件托管模型的第一种选择是使用Whisper官方Python包,可以通过pip install openaiwhisper进行安装。该包提供了一个PyTorch模型。在本地存储库中保存模型工件的第一步是将模型的可学习参数如神经网络中每层的权重和偏置保存为“pt”文件。您可以选择不同的模型大小,包括“tiny”、“base”、“small”、“medium”和“large”。较大的模型大小提供更高的精确度,但代价是推理延迟更长。此外,您需要保存模型状态字典和维度字典,这些字典包含一个Python字典,用于将每层或参数映射到其对应的可学习参数,并包含其他元数据和自定义配置。以下代码展示了如何保存Whisper PyTorch工件。
python
PyTorch
import whisper
加载PyTorch模型并保存到本地仓库
model = whisperloadmodel(base)torchsave( { modelstatedict modelstatedict() dims modeldimsdict } basept)
选择DLC下一步是从此链接选择预构建的DLC。在选择映像时,请注意考虑以下设置:框架PyTorch、框架版本、任务推理、Python版本和硬件即GPU。建议尽可能使用最新的框架和Python版本,因为这将提高性能并解决以前版本中的已知问题和缺陷。
创建Amazon SageMaker模型接下来,我们利用SageMaker Python SDK创建PyTorch模型。创建PyTorch模型时,要记得添加环境变量。默认情况下,TorchServe只能处理最大为6MB的文件大小,无论使用什么推理类型。
python
为部署创建PyTorchModel
from sagemakerpytorchmodel import PyTorchModel
whisperpytorchmodel = PyTorchModel( modeldata=modeluri imageuri=image role=role entrypoint=inferencepy sourcedir=code name=modelname env = { TSMAXREQUESTSIZE 100000000 # 最大请求大小 TSMAXRESPONSESIZE 100000000 # 最大响应大小 TSDEFAULTRESPONSETIMEOUT 1000 # 默认响应超时 })
框架环境变量PyTorch 18 (基于TorchServe)TSMAXREQUESTSIZE 100000000 TSMAXRESPONSESIZE 100000000 TSDEFAULTRESPONSETIMEOUT 1000PyTorch 14 (基于MMS)MMSMAXREQUESTSIZE 1000000000 MMSMAXRESPONSESIZE 1000000000 MMSDEFAULTRESPONSETIMEOUT 900在inferencepy中定义模型加载方法在自定义inferencepy脚本中,我们首先检查是否有可用的CUDA兼容GPU。如果有,则将设备分配为cuda;如果没有,则将设备分配为cpu。此步骤确保模型放置在可用的硬件上以进行有效计算。我们使用Whisper Python包加载PyTorch模型。
python
PyTorch
DEVICE = torchdevice(cuda if torchcudaisavailable() else cpu)def modelfn(modeldir) 加载并返回模型 model = whisperloadmodel(ospathjoin(modeldir basept)) model = modelto(DEVICE) return model
Hugging Face框架
保存模型工件第二种选择是使用Hugging Face的Whisper实现。该模型可以使用AutoModelForSpeechSeq2Seq transformers类加载。可学习参数使用savepretrained方法保存在一个二进制bin文件中。tokenizer和预处理器也需要单独保存,以确保Hugging Face模型可以正常工作。此外,您可以通过设置两个环境变量HFMODELID和HFTASK直接从Hugging Face Hub上部署模型。有关更多信息,请参考此网页。
python

Hugging Face
from transformers import WhisperTokenizer WhisperProcessor AutoModelForSpeechSeq2Seq
加载预训练模型
modelname = openai/whisperbasemodel = AutoModelForSpeechSeq2Seqfrompretrained(modelname)tokenizer = WhisperTokenizerfrompretrained(modelname)processor = WhisperProcessorfrompretrained(modelname)
定义要保存模型的目录
savedirectory = /model
保存模型到指定目录
modelsavepretrained(savedirectory)tokenizersavepretrained(savedirectory)processorsavepretrained(savedirectory)
选择DLC与PyTorch框架类似,您可以从同一链接选择一个预构建的Hugging Face DLC。确保选择支持最新Hugging Face transformers且包括GPU支持的DLC。
创建Amazon SageMaker模型同样,我们使用SageMaker Python SDK创建Hugging Face模型。Hugging Face Whisper模型有一个默认限制,仅能处理最大30秒的音频段。为了解决这一限制,您可以在创建Hugging Face模型时在环境变量中包含chunklengths参数,并在加载模型时将该参数传递到自定义推理脚本中。最后,设置环境变量以增加有效负载大小和响应超时时间。
python
为部署创建HuggingFaceModel
from sagemakerhuggingfacemodel import HuggingFaceModel
whisperhfmodel = HuggingFaceModel( modeldata=modeluri role=role imageuri=image entrypoint=inferencepy sourcedir=code name=modelname env={ chunklengths 30 # 设置音频段长度 MMSMAXREQUESTSIZE 2000000000 # 最大请求大小 MMSMAXRESPONSESIZE 2000000000 # 最大响应大小 MMSDEFAULTRESPONSETIMEOUT 900 # 默认响应超时 })
框架环境变量Hugging Face推理容器基于MMSMMSMAXREQUESTSIZE 2000000000 MMSMAXRESPONSESIZE 2000000000 MMSDEFAULTRESPONSETIMEOUT 900在inferencepy中定义模型加载方法在为Hugging Face模型创建自定义推理脚本时,我们利用一个管道,允许我们将chunklengths作为参数传递。该参数使模型能够有效处理推理中的长音频文件。
python
Hugging Face
DEVICE = cuda0 if torchcudaisavailable() else cpuchunklengths = int(osenvironget(chunklengths))def modelfn(modeldir) 加载并返回模型 model = pipeline( automaticspeechrecognition model=modeldir chunklengths=chunklengths device=DEVICE ) return model
在Amazon SageMaker上探索不同的推理选项
选择推理选项的步骤对PyTorch和Hugging Face模型是相同的,因此在下面我们不再区分。然而值得注意的是,在撰写本文时,SageMaker的无服务器推理选项不支持GPU,因此我们将该选项排除在此用例之外。
实时推理我们可以将模型部署为实时端点,提供毫秒级响应。然而,需要注意的是,此选项仅限于处理最大为6MB的输入。我们将序列化器定义为音频序列化器,承担将输入数据转换为适合部署模型的格式。我们利用GPU实例进行推理,加速音频文件处理。推理输入是来自本地存储库的音频文件。
pythonfrom sagemakerserializers import DataSerializerfrom sagemakerdeserializers import JSONDeserializer
飞驰加速器官网定义序列化器和反序列化器
audioserializer = DataSerializer(contenttype=audio/xaudio)deserializer = JSONDeserializer()
部署模型以进行实时推理
endpointname = fwhisperrealtimeendpoint{id}
realtimepredictor = whispermodeldeploy( initialinstancecount=1 instancetype=mlg4dnxlarge endpointname=endpointname serializer=audioserializer deserializer=deserializer)
执行实时推理
audiopath = sampleaudiowav response = realtimepredictorpredict(data=audiopath)
批量转换作业第二种推理选项是批量转换作业,它可以处理最大为100MB的输入有效负载。然而,这种方法可能需要几分钟的延迟。每个实例一次只能处理一个批量请求,实例的启动和关闭也需要几分钟。推理结果将在批量转换作业完成后保存到Amazon简单存储服务Amazon S3桶中。
在配置批量转换器时,请确保包含maxpayload = 100以有效处理较大有效负载。推理输入应为指向Amazon S3中的音频文件或包含一系列音频文件的Amazon S3桶文件夹的路径,每个文件的大小应小于100MB。
批量转换通过键对Amazon S3对象进行分区,并将Amazon S3对象映射到实例。例如,当您有多个音频文件时,一个实例可能处理input1wav,而另一个实例可能处理名为input2wav的文件,以提高可扩展性。批量转换允许您配置maxconcurrenttransforms以增加对每个单独转换器容器的HTTP请求数量。但需注意的是,(maxconcurrenttransforms maxpayload)的值不能超过100MB。
python
创建转换器
whispertransformer = whispermodeltransformer( instancecount=1 instancetype=mlg4dnxlarge outputpath=s3//{}/{}/batchtransform/format(bucket prefix) maxpayload=100)
启动批量转换作业
whispertransformertransform(data=data jobname=jobname wait=False)
异步推理最后,Amazon SageMaker的异步推理非常适合同时处理多个请求,提供适中的延迟,并支持最大为1GB的输入有效负载。此选项提供了出色的可扩展性,使您能够为端点配置自动缩放组。当请求激增时,自动扩展组会自动增加容量以处理流量,而在所有请求处理完后,端点将缩减至0,以节省成本。
通过异步推理,结果将自动保存到Amazon S3桶中。在AsyncInferenceConfig中,您可以配置成功或失败完成的通知。输入路径指向音频文件的Amazon S3位置。有关详细信息,请查阅GitHub上的代码。
pythonfrom sagemakerasyncinference import AsyncInferenceConfig
创建AsyncInferenceConfig对象
asyncconfig = AsyncInferenceConfig( outputpath=fs3//{bucket}/{prefix}/output maxconcurrentinvocationsperinstance=4 # notificationconfig = { # SuccessTopic arnawssnsuseast2123456789012MyTopic # ErrorTopic arnawssnsuseast2123456789012MyTopic # } # 通知配置 )
部署模型以进行异步推理
endpointname = fwhisperasyncendpoint{id}asyncpredictor = whispermodeldeploy( asyncinferenceconfig=asyncconfig initialinstancecount=1 instancetype=mlg4dnxlarge endpointname=endpointname)
执行异步推理
initialargs = {ContentType audio/xaudio}response = asyncpredictorpredictasync(initialargs=initialargs inputpath=inputpath)
可选内容:如前所述,我们可以为异步推理端点配置自动缩放组,使其能够处理突然增加的推理请求。在[GitHub代码库](https//githubcom/awssamples/amazons
发表评论