产品展示

  • 首页
  • 产品展示
  • 使用 Amazon SageMaker 微调大型多模态模型 机器学习博客

使用 Amazon SageMaker 微调大型多模态模型 机器学习博客

2026-01-27 12:46:54

使用 Amazon SageMaker 调整大规模多模态模型

由 Changsha Ma、Alfred Shen 和 Jun Shi 于 2024 年 5 月 29 日发布于 Amazon SageMaker 专家 (400) 如何做 永久链接 评论

关键要点

大规模多模态模型 (LMMs) 通过结合文本和图像数据,提升了对多种数据格式的理解能力。这些模型适用于医疗、商业分析、自动驾驶等多个行业,并改变了传统文本模型的局限性。精细调优 LMMs 可以显著提高针对特定任务的表现,开源模型如 LLaVA 因具成本效益和良好性能而成为热门选择。本文展示了如何在 Amazon SageMaker 上调整和部署 LLaVA 模型,提供了数据准备、模型训练的详细步骤。

大型多模态模型LMMs将多种数据类型整合为一个模型。通过在训练过程中将文本数据与图像和其他方式相结合,像 Claude3、GPT4V 和 Gemini Pro Vision 这样的多模态模型获得更全面的理解能力,并且能够处理多样化的数据类型。多模态方法使模型能够完成涉及文本和非文本输入的更广泛实际任务,从而克服纯文本模型的局限。LMMs 在医疗、商业分析、自动驾驶等多个行业具有深远的潜力。

然而,通用语言模型只能处理相对简单的视觉任务,比如对图像回答基本问题或生成简短说明。这主要是因为缺乏对详细像素级信息、对象分割数据和其他细粒度注释的访问,这使得模型难以准确理解和推理图像内的各种元素、关系和上下文。没有这种细致的视觉理解,语言模型只局限于对图像的表面、高层次分析和生成能力。通过在特定领域数据上精细调优 LMMs,可以显著提升其在特定任务上的表现。对于那些寻求灵活与经济解决方案的用户,能够使用和定制这些强大的模型具有巨大潜力。

在本博客文章中,我们将展示如何在 Amazon SageMaker 上精细调优和部署 LLaVA 模型。源代码可在此 GitHub 仓库中找到。

LLaVA 概述

LLaVA 经过端到端训练,以实现视觉和文本数据的通用理解。在 LLaVA 模型架构中,预训练的语言模型如 Vicuna 或 LLaMA 与视觉模型如 CLIP 的视觉编码器结合。这个集成将图像的视觉特征转换为与语言模型的嵌入相匹配的格式,通过投影层实现。

LLaVA 的训练分为两个阶段。第一阶段是预训练,使用图像文本对对齐视觉特征和语言模型的嵌入。在此阶段,视觉编码器和语言模型的权重保持不变,仅训练投影矩阵。第二阶段则是对整个模型进行端到端的精细调优。在这一阶段,视觉编码器的权重被冻结,而投影层和语言模型将被更新。

数据准备

在为特定任务或领域精细调优 LLaVA 模型时,数据准备至关重要。高质量、全面的注释可以使模型学习丰富的表征,并在复杂的视觉推理挑战中达到人类水平的表现。在本文中,我们将专注于准备一个指令数据集。

数据标注

数据集应包含涉及推理的图像文本对,其中文本数据应包含丰富的上下文细节,以帮助模型在训练过程中获得全面的理解。例如,不仅要求模型描述图像,而是针对图像内容提出具体问题。

为了展示 LLaVA 的能力,我们创建了一个小型合成数据集,专注于理解和解释信息图和图表。我们使用了 Amazon Bedrock 和 Python 完成此任务。具体来说,我们利用 Amazon Bedrock 的 LLaMA270B 模型根据描述生成文本描述和问答对。随后,我们使用 Python 生成不同类型的视觉展示,如饼图和漏斗图。如果您已经有现有的数据集,则可以使用这种方法作为数据增强的技术,以扩展数据集并潜在改善精细调优效果。通过创建文本描述、问答对及其对应图表的合成示例,您可以根据具体用例增强多模态示例。

我们创建的数据集由图像文本对组成,每个图像都是一个信息图、图表或其他数据可视化。对应的文本则是关于信息图的一系列问题及其准确答案,格式为问答风格,模仿人类如何向模型询问图像中信息。一些生成问题的示例如图 2 所示,包括:

每天屏幕时间少于 2 小时的人所占的百分比是多少?每周完全不锻炼的人所占的比例是多少?有多少人是教师?

数据结构

这些图像文本对必须采用 JSON 行 (jsonl) 格式,其中每行代表一个训练样本。以下是一个示例训练样本。具体来说,id 字段是训练样本的唯一标识符,image 字段指定图像名称,conversations 字段提供问答对。

json{ id 1 image screentimepng conversations [ { from human value 每个图像中,花费的时间少于 2 小时的人所占的百分比是多少? } { from gpt value 15 } ]}

通过训练模型以回答未见过的信息图的深入和分析性问题,我们旨在增强模型对数据可视化的理解能力,并准确提取见解。

精细调优模型

数据准备完成后,我们将其上传至 Amazon Simple Storage Service (Amazon S3) 作为 SageMaker 的训练输入。在配置 SageMaker 训练作业时,使用 TrainingInput 对象指定 Amazon S3 中的输入数据位置,并定义 SageMaker 在训练过程中如何处理这些数据。在这种情况下,inputmode=FastFile 表示使用 S3 快速文件模式,这在数据集存储为单独的文件时非常理想,同时在处理大型数据集或需要快速访问数据时也很有利。

pythonfrom sagemakerinputs import TrainingInput

使用 Amazon SageMaker 微调大型多模态模型 机器学习博客

traininginput = TrainingInput( s3datatype=S3Prefix # 可用选项:S3Prefix ManifestFile AugmentedManifestFile s3data=s3uri distribution=FullyReplicated # 可用选项:FullyReplicated ShardedByS3Key inputmode=FastFile)

我们将重用 LLaVA 的训练 脚本,该脚本使用 DeepSpeed 提高训练效率。DeepSpeed 是一个加速训练非常大规模深度学习模型的库。ZeROZero Redundancy Optimizer是 DeepSpeed 中一种内存优化技术,通过在数据并行进程中划分优化状态和梯度来减少所需的内存占用,从而在有限的 GPU 内存中实现更大的模型和批量大小。如果您使用此配置遇到 CUDA 内存错误,可以尝试 Stage 3 配置,Stage 3 会将梯度卸载到 CPU,虽然训练速度较慢,但可能解决内存问题。以下是训练命令。有关训练参数的更多细节,请参见 LLaVA Large Language and Vision Assistant 的 GitHub 页面。

bash

!/bin/bash

直接在命令中设置提示和模型版本

deepspeed /root/LLaVA/llava/train/trainmempy deepspeed /root/LLaVA/scripts/zero2json loraenable True lorar 128 loraalpha 256 mmprojectorlr 2e5 bits 4 modelnameorpath /root/LLaVA/llava/llavav157b version llavallama2 datapath /root/dataset/train/datasetjson validationdatapath /root/dataset/validation/datasetjson imagefolder /root/dataset/images/ visiontower openai/clipvitlargepatch14336 mmprojectortype mlp2xgelu mmvisionselectlayer 2 mmuseimstartend False mmuseimpatchtoken False imageaspectratio pad groupbymodalitylength True bf16 True outputdir /root/LLaVA/llava/checkpoints/llama27bchattaskqlora numtrainepochs 500 perdevicetrainbatchsize 32 perdeviceevalbatchsize 32 gradientaccumulationsteps 1 evaluationstrategy “epoch” savestrategy steps savesteps 50000 savetotallimit 1 learningrate 2e4 weightdecay 0 warmupratio 003 lrschedulertype cosine loggingsteps 1 tf32 True modelmaxlength 2048 gradientcheckpointing True dataloadernumworkers 4 lazypreprocess True reportto wandb

LLaVA 允许您精细调优基础模型的所有参数,或使用 LoRA 调整更少的参数。LoRA 的策略保持原有预训练模型的主干不变,并添加新的、易于训练的层。这使得模型能够快速适应新任务,而无需重新训练整个网络。您可以使用 loraenable 参数指定精细调优方法。对于完全参数的精细调优,建议使用 mlp4d24xlarge,而对于使用 LLaMA13B 语言模型的 LoRA 精细调优,mlg512xlarge 则足够使用。

以下代码使用 HuggingFace SDK 初始化一个 SageMaker Estimator。它设置了一个 SageMaker 训练作业,运行来自 LLaVA 的自定义训练脚本。通过在 SageMaker 管理的环境中运行该脚本,您可以利用其可扩展性。随后,我们引入自己的 Docker 容器来运行 SageMaker 训练 作业。您可以从此代码 仓库 下载 Docker 镜像,其中安装了训练 LLaVA 模型的 依赖项。要了解如何使自己的 Docker 容器与 SageMaker 兼容,请参见 适应自己的训练容器。

pythonhuggingfaceestimator = HuggingFace( entrypoint=finetunelorapiechartQAsh sourcedir=/LLaVA instancetype=instancetype instancecount=instancecount pyversion=PYTHONVERSION imageuri=CONTAINERURI role=ROLE metricdefinitions=metricdefinitions environment=environment usespotinstances=usespotinstances maxrun=maxrun maxwait=maxwait outputpath=outputuri checkpoints3uri=checkpointuri)

为了记录目的,您可以使用指标定义从训练脚本的打印日志中提取关键指标,并将其发送到 Amazon CloudWatch。以下是一个记录每个 Epoch 的训练损失、模型的学习率和训练通量的示例指标定义。

pythonmetricdefinitions = [ {Name loss Regex loss ([09](e)[09])} {Name learningrate Regex learningrate ([09](e)[09])} {Name epoch Regex epoch ([09](e)[09])} {Name trainruntime Regex epoch ([09](e)[09])} {Name trainsamplespersecond Regex epoch ([09](e)[09])} {Name trainstepspersecond Regex epoch ([09](e)[09])} {Name trainloss Regex epoch ([09](e)[09])}]

部署和测试

训练作业完成后,精细调优模型被上传到 Amazon S3。然后,您可以使用以下代码在 SageMaker 上部署模型。

pythonHFTASK = questionansweringconfig = dict(HFTASK=HFTASK)

创建 Hugging Face 模型类

huggingfacemodel = HuggingFaceModel( modeldata=s3modelpath role=getexecutionrole() transformersversion=TRANSFORMERSVERSION pytorchversion=PYTORCHVERSION pyversion=PYTHONVERSION modelserverworkers=1 env=config)

部署端点

predictor = huggingfacemodeldeploy( initialinstancecount=instancecount instancetype=instancetype)

进行测试时,提供图像和问题对,并如下对 SageMaker 端点进行推理调用。

飞速加速器客户端

pythonprompt = 这个图表讲的是什么?data = { image httpimgpath question prompt temperature 01}output = predictorpredict(data)

结论

我们对在 SageMaker 上精细调优 LLaVA 视觉语言模型以实现定制视觉问答任务的探索,揭示了在填补文本与视觉理解之间的差距方面取得的进展。LLaVA 代表了多模态 AI 的重大进步,展现了在统一模型中共同理解和推理文本与视觉信息的能力。通过对图像文本对的大规模预训练,LLaVA 获得了强大的视觉语言表征,能够通过精细调优有效适用于下游任务。这使得 LLaVA 在需要深入理解两种模态的任务如视觉问答、图像描述和多模态信息检索中表现出色。然而,精细调优机制也存在局限性。尤其是在冷冻视觉模型的情况下,调整投影层和语言模型本身提出了一系列挑战,例如对海量数据的需求和处理复杂视觉任务的能力不足。直接面对这些挑战使我们能够释放多模态模型的全部潜力,为更复杂的应用铺平道路。

致谢

作者对 Manoj Ravi、Jenny Vega 和 Santhosh Kuriakose 的深刻反馈和审阅表示感谢。

参考文献

LLaVA Visual Instruction Tuning (pdf)

关于作者

Dr Changsha Ma 是 AWS 的 AI/ML 专家。她是一位技术专家,拥有计算机科学博士学位、教育心理学硕士学位,以及多年的数据科学和人工智能/机器学习独立咨询经验。她对研究机器和人类智能的方法论有着浓厚的兴趣。工作之外,她热爱徒步旅行、烹饪、寻找美食和与朋友和家人共度时光。

Jun Shi 是亚马逊网络服务AWS的高级解决方案架构师。他目前的研究重点是人工智能/机器学习基础