通过 SageMaker 和 Amazon Bedrock 微调视觉


通过调整视觉语言模型在Amazon Bedrock和SageMaker生成时尚产品描述

由 Antonia Wiebeler、Fotinos Kyriakides、Lun Yeh 和 Daniel Zagyva 发布于2024年5月22日

关键要点

本文展示了如何利用视觉语言模型VLM通过调整模型来直接从产品图像中预测时尚产品的特性,使用Amazon SageMaker进行训练。使用Amazon Bedrock生成产品描述,提升电商平台的搜索性和个性化体验。提供GitHub存储库代码,供读者跟随操作。

在在线零售领域,为数百万产品创建高质量的产品描述是一个关键但耗时的任务。借助机器学习ML和自然语言处理NLP来自动生成产品描述,有潜力节省人力并改变电商平台的运作模式。高质量的产品描述有助于提升搜索性,使顾客更容易找到准确描述的产品。例如,在搜索“长袖棉质衬衫”时,包含“长袖”和“棉质领口”等词汇的产品更可能被找到。准确的描述不仅能增加顾客满意度,还能提升个性化购物体验,并改善向用户推荐相关产品的算法,从而提高转化率。

随着生成AI的进步,我们可以利用视觉语言模型VLM直接从图像预测产品特性。虽然预训练的图像描述或视觉问答VQA模型善于描述日常图像,但无法捕捉到电商产品所需的特定领域细节。本文将演示如何通过在时尚数据集上调整VLM模型,在使用Amazon SageMaker进行训练后,使用Amazon Bedrock生成产品描述。为便于跟随,我们将代码分享到GitHub存储库。

Amazon Bedrock是一个完全受管理的服务,提供来自领先AI公司的高性能基础模型FM的选择,通过单一API。此外,它提供构建生成AI应用程序所需的广泛功能,并确保安全性、隐私性和负责任的AI。

你可以使用受管理的服务,如Amazon Rekognition,来预测产品属性,如《通过Amazon Bedrock自动生成产品描述》所述。然而,若你希望提取产品或行业的具体信息,选择在Amazon SageMaker上对VLM进行微调则更为必要。

视觉语言模型

自2021年以来,视觉语言模型VLM备受关注,推出了如对比语言图像预训练CLIP和自引导语言图像预训练BLIP等解决方案。VLM在图像描述、文本引导图像生成及视觉问答等任务上具有先进的表现。

本文使用BLIP2模型,该模型在《BLIP2:使用冻结图像编码器和大型语言模型进行自引导语言图像预训练》中介绍。BLIP2由三部分组成:类似CLIP的图像编码器、查询变换器QFormer和大型语言模型LLM,我们使用了一个包含FlanT5XL版本的BLIP2作为LLM。

BLIP2架构概述

BLIP2的预训练版本已在《使用Amazon SageMaker上的多模态模型构建图像到文本生成AI应用程序》和《在Amazon SageMaker JumpStart上构建基于生成AI的内容审核解决方案》中展示。本文将演示如何针对特定领域用例微调BLIP2模型。

解决方案概述

以下图示展示了解决方案架构。

解决方案的高层概述如下:

ML科学家使用SageMaker笔记本处理数据并将其分割为训练数据和验证数据。数据集通过S3客户端上传到Amazon S3。然后,使用SageMaker客户端启动训练作业。训练作业负责将数据集从S3复制到训练容器、训练模型并将其工件保存到S3。通过SageMaker客户端另一个调用,生成端点,将模型工件复制到端点托管容器。接下来,通过AWS Lambda请求调用推理工作流,首先对SageMaker端点发起HTTP请求,然后利用其向Amazon Bedrock发起另一请求。

接下来的部分,我们演示如何:

设置开发环境加载和准备数据集使用SageMaker对BLIP2模型进行微调,学习产品属性部署微调后的BLIP2模型,并使用SageMaker预测产品属性使用Amazon Bedrock根据预测的产品属性生成产品描述

设置开发环境

需要拥有一个AWS账户,并配置AWS身份和访问管理IAM角色,该角色具备管理解决方案所创建资源的权限。有关详细信息,请参见创建AWS账户。

我们使用Amazon SageMaker Studio的mlt3medium实例和Data Science 30镜像。然而,您也可以使用Amazon SageMaker笔记本实例或者任何您选择的集成开发环境IDE。

注意: 请确保正确设置您的AWS命令行界面CLI凭证。有关更多信息,请参见配置AWS CLI。

训练作业使用mlg52xlarge实例,端点也使用mlg52xlarge实例。确保您的AWS账户有足够的资源如有必要请求配额增加。同时检查按需实例的价格信息。

您需要克隆这个GitHub存储库,以复制本文演示的解决方案。首先,在SageMaker Studio中通过选择图像为Data Science,内核为Python 3启动mainipynb笔记本。安装requirementstxt中提到的所有所需库。

加载和准备数据集

在本篇文章中,我们使用Kaggle时尚图像数据集,该数据集包含44000个产品,包含多个类别标签、描述和高分辨率图片。本文旨在演示如何微调模型以学习衬衫的面料、剪裁、领子、图案和袖长等属性。

每个产品都由一个如38642的ID标识,stylescsv中有所有产品的映射。我们可以从images/38642jpg获取该产品的图片,从styles/38642json获取完整的元数据。微调模型需要将结构化的示例转换成一对对的问答。经过处理后的最终数据集格式如下:

Id Question Answer 38642 图中服装的面料是什么? 面料:棉

处理完数据集后,我们将其分割为训练集和验证集,创建CSV文件,并上传数据集到Amazon S3。

使用SageMaker对BLIP2模型进行微调以学习产品属性

为了启动SageMaker训练作业,我们需要HuggingFace估算器。SageMaker会为我们启动和管理所需的所有Amazon弹性计算云EC2实例,提供适当的Hugging Face容器,上传指定的脚本,并从我们的S3存储中下载数据到容器的/opt/ml/input/data路径。

我们使用低秩适应LoRA技术对BLIP2进行微调,该方法在保持预训练模型权重静态的同时,为每个变换器结构层添加可训练的秩分解矩阵。此技术能提高训练吞吐量,并将所需的GPU RAM减少至原来的1/3,以此减少训练的参数量,达到1万倍的显著提升。尽管使用了更少的可训练参数,但是LoRA表现不逊于完整的微调技术。

通过 SageMaker 和 Amazon Bedrock 微调视觉

我们准备了entrypointvqafinetuningpy脚本,利用Hugging Face的Transformers、Accelerate与参数高效微调实现可微调BLIP2的LoRA技术。脚本训练完成后将LoRA权重合并到模型权重中。这样,你可以像普通模型一样部署该模型,而无需其他额外代码。

pythonfrom peft import LoraConfig getpeftmodelfrom transformers import Blip2ForConditionalGeneration

model = Blip2ForConditionalGenerationfrompretrained( Salesforce/blip2flant5xl devicemap=auto cachedir=/tmp loadin8bit=True )

config = LoraConfig( r=8 # LoRA注意力维度 loraalpha=32 # LoRA缩放的alpha参数 loradropout=005 # LoRA层的丢弃概率 bias=none # LoRA的偏置类型 targetmodules=[q v])

model = getpeftmodel(model config)

飞驰加速器免费永久版

我们将entrypointvqafinetuningpy作为Hugging Face估算器中的entrypoint。

pythonfrom sagemakerhuggingface import HuggingFace

hyperparameters = { epochs 10 filename vqatraincsv}

estimator = HuggingFace( entrypoint=entrypointvqafinetuningpy sourcedir=/src role=role instancecount=1 instancetype=mlg52xlarge transformersversion=426 pytorchversion=113 pyversion=py39 hyperparameters=hyperparameters basejobname=VQA sagemakersession=sagemakersession outputpath=f{outputpath}/models codelocation=f{outputpath}/code volumesize=60 metricdefinitions=[ {Name batchloss Regex Loss ([09])} {Name epochloss Regex Epoch Loss ([09])} ])

我们可以通过运行fit()方法,并传入我们的Amazon S3图像路径和输入文件来开始我们的训练作业。

pythonestimatorfit({images imagesinput inputfile inputfile})

部署微调后的BLIP2模型并使用SageMaker预测产品属性

我们使用Hugging Face推理容器将微调后的BLIP2模型部署到SageMaker实时端点中。您还可以使用大型模型推理LMI容器,该容器在构建基于生成AI的内容审核解决方案在Amazon SageMaker JumpStart中有更详细的描述,它会部署一个预训练的BLIP2模型。在这里,我们将引用我们在Amazon S3中的微调模型,而不是Hugging Face中心中可用的预训练模型。我们首先创建模型并部署端点。

pythonfrom sagemakerhuggingface import HuggingFaceModel

model = HuggingFaceModel( modeldata=estimatormodeldata role=role transformersversion=428 pytorchversion=20 pyversion=py310 modelserverworkers=1 sagemakersession=sagemakersession)

endpointname = endpointfinetunedblip2modeldeploy(initialinstancecount=1 instancetype=mlg52xlarge endpointname=endpointname)

当端点状态变为in service时,我们可以使用输入图像和问题提示来调用端点进行图像到语言生成任务:

pythoninputs = { prompt 图中衬衫的袖长是什么? image image # 用Base64编码的图像}

输出响应如下:

{Sleeve Length 长袖}

使用Amazon Bedrock从预测的产品属性生成产品描述

要开始使用Amazon Bedrock,需要请求对基础模型的访问默认情况下未启用。您可以按照文档中的步骤来启用模型访问。此文中,我们使用Anthropic的Claude模型在Amazon Bedrock生成产品描述,特别是使用anthropicclaude3sonnet20240229v1,因为该模型表现良好且响应快速。

创建Amazon Bedrock的boto3客户端后,我们创建一个提示字符串,指定我们希望使用产品属性生成产品描述。

你是衬衫产品描述的写作专家。请利用下面数据为网站创建一份产品描述。产品描述应包含所有给定属性。提供一些启发性的句子,例如,面料的移动感。考虑潜在顾客可能想了解的衬衫信息。以下是创建产品描述所需的事实:[在这里插入BLIP2模型预测的属性]

将提示和模型参数包括响应中使用的最大标记数量和温度传入请求体。在打印最终行时,必须解析JSON响应以提取生成的文本。

pythonbedrock = boto3client(servicename=bedrockruntime regionname=uswest2)

modelid = anthropicclaude3sonnet20240229v1

body = jsondumps( {system prompt messages attributescontent maxtokens 400 temperature 01 anthropicversion bedrock20230531})

response = bedrockinvokemodel( body=body modelId=modelid accept=application/json contentType=application/json)

生成的产品描述响应如下:

经典条纹衬衫。轻松融入舒适休闲风格,这款经典的翻领条纹衬衫具有常规合身设计,既不太紧也不太松,适合叠穿毛衣或外套

结论

我们展示了如何将SageMaker中的VLM与Amazon Bedrock中的LLM结合,提供了自动化生成时尚产品描述的强大方案。通过使用Amazon SageMaker对BLIP2模型进行微调,您可以直接从图像中预测特定领域和细致的产品属性。然后利用Amazon Bedrock的功能,您可以根据预测的产品属性生成产品描述,增强电商平台的搜索性和个性化体验。在持续探索生成AI的潜力时,LLM和VLM成为革新在线零售界内容生成的有前景的途径。作为下一步,您可以使用本文提供的代码在自己的数据集上尝试微调该模型,以测试和评估结果是否适合您的用例。

作者介绍

Antonia Wiebeler 是AWS生成AI创新中心的数据科学家,致力于为客户构建概念验证。她热衷于探索生成AI如何解决实际问题并为客户创造价值。闲暇时间喜欢跑步和参加铁人三项比赛。

Daniel Zagyva 是AWS专业服务的数据科学家,专注于为AWS客户开发可扩展的、生产级机器学习解决方案。他的经验跨越不同领域,包括自然语言处理、生成AI和机器学习操作。

[Lun Yeh](https