网站首页 > 技术文章 正文
实施需要周密的计划、资源管理以及采用现代部署实践和工具。
译自 A Guide to Model Composition,作者 Sherlock Xu。
考虑一款旨在识别和分类野生动物照片的 AI 驱动的图像识别应用程序。您上传一张远足时拍摄的照片,几分钟后,该应用程序不仅识别出照片中的动物,还提供了有关其物种、栖息地和保护状态的详细信息。这种应用程序可以通过模型组合构建,这是一种多个人工智能模型协作从不同角度分析和解释图像的技术。
在此背景下,模型组合可能涉及一系列专门的模型:一个用于检测图像中的动物,另一个用于将其分类为广泛的类别(例如,鸟类、哺乳动物和爬行动物),还有一组模型共同确定具体物种。这种分层方法提供了细致入微的分析,超出了单个 AI 模型的能力。
什么是模型组合?
从本质上讲,模型组合是一种机器学习策略,它结合了多个模型来解决一个复杂的难题,而单个模型无法轻松解决。这种方法利用了每个单独模型的优势,提供了更细致入微的分析和更高的准确性。模型组合可以看作是组建一个专家团队,每个成员都将专门的知识和技能带到谈判桌上,共同努力实现一个共同的目标。
许多现实世界的问题对于一刀切的模型来说过于复杂。通过协调多个模型,每个模型都经过训练来处理问题或数据类型的特定方面,我们可以创建一个更全面、更有效的解决方案。
有几种方法可以实现模型组合,包括但不限于:
- 顺序处理:模型按流水线排列,其中一个模型的输出作为下一个模型的输入。这通常用于数据预处理、特征提取,然后是分类或预测等任务。
- 并行处理:多个模型并行运行,每个模型独立处理相同的输入。然后通过平均、投票或更复杂的聚合模型将它们的输出组合起来,以产生最终结果。这通常用于集成方法。
与模型组合相关的另一个重要概念是推理图。推理图直观地表示了数据通过各种模型和处理步骤 在模型组合系统中的流程。它概述了模型如何连接、它们之间的依赖关系以及数据如何从输入转换并流向最终预测。图形表示有助于我们设计、实现和理解复杂的模型组合。以下是一个推理图示例:
- 该服务接受文本输入,例如“我有一个主意!”
- 该服务同时将提示发送给三个单独的文本生成模型,这些模型并行运行以使用不同的算法或数据集生成结果。
- 然后将这三个模型的结果发送到文本分类模型。
- 分类模型评估每段生成文本并为其分配分类分数(例如,基于内容的情绪)。
- 最后,该服务聚合生成的文本及其各自的分类分数,并以 JSON 形式返回它们。
我应该在什么时候组合模型?
模型组合是机器学习中广泛挑战的实用解决方案。以下是一些模型组合发挥关键作用的关键用例。
多模态应用程序
在当今的数字世界中,数据以各种形式出现:文本、图像、音频等等。多模态应用程序结合了专门处理不同类型数据的模型。一个典型的组合模型来创建多模态应用程序的例子是 BLIP-2,它专为涉及文本和图像的任务而设计。
BLIP2 集成了三个不同的模型,每个模型都为系统提供了独特的功能:
- 一个冻结大型语言模型(LLM):提供强大的语言生成和零样本迁移能力。
- 一个冻结的预训练图像编码器:从图像中提取和编码视觉信息。
- 轻量级查询转换器模型 (Q-Former):弥合 LLM 和图像编码器之间的模态差距。它将来自编码器的视觉信息与 LLM 集成在一起,重点关注生成文本的最相关的视觉细节。
BLIP-2 架构。来源: 原始 BLIP-2 论文
集成建模
集成建模是一种用于提高机器学习模型预测精度的技术。它通过结合多个模型的预测来产生一个更准确的单一结果。其核心思想是,通过聚合多个模型的预测,通常可以实现比任何单个模型单独实现更好的性能。集成中的模型可以是同类型的(例如,所有决策树),也可以是不同类型的(例如,神经网络、决策树和逻辑回归模型的组合)。集成建模中的关键技术包括:
- Bagging:在训练数据的不同子集上训练多个模型,然后对它们的预测进行平均。这有助于减少方差。
- Boosting:顺序训练模型,其中每个模型都尝试纠正前一个模型所犯的错误。
- Stacking:训练多个模型,然后使用一个更好的模型,该模型利用每个基础模型的优势来提高整体性能并结合它们的预测。
集成建模的一个实际用例是天气预报系统,其中准确性对于各行业和活动中的规划和安全至关重要。天气预报的集成模型可能会整合来自各种模型的输出,每个模型都在不同的数据集上进行训练,使用不同的算法或关注天气现象的不同方面。一些模型可能更擅长预测降水,而另一些模型则在预测温度或风速方面表现得更好。通过聚合这些预测,集成方法可以提供更准确、更细致的预测。
流水线处理
机器学习任务通常需要一系列处理步骤,将原始数据转换为可操作的见解。实现模型组合可以帮助你将这些任务构建为流水线,其中每一步都由针对特定功能进行优化的不同模型处理。
常见用例之一是自动文档分析系统,它能够处理、理解和从文档中提取有意义的信息。该系统可能使用一系列模型,每个模型都专门用于处理流水线中的一个阶段:
- 预处理:第一步可能需要一个 OCR(光学字符识别)模型,该模型从扫描的文档或图像中提取文本。此模型专门用于识别和将各种字体和手写体转换为机器可读文本。
- 预测:在文本提取之后,可以使用文本分类模型根据其内容对文档进行分类,例如法律文件、技术手册或财务报告。此分类步骤对于将文档路由到适当的下游流程非常重要。
- 后处理:在分类之后,可以使用摘要模型生成文档内容的简洁摘要。此摘要提供了对文档的快速见解,为决策和优先级排序提供信息。
除了顺序流水线之外,你还可以实现并行处理,以便多个模型在相同数据上同时运行(如第一张图片所示)。这在以下场景中很有用:
- 集成建模:聚合来自多个模型的预测以提高准确性。
- 计算机视觉任务:图像分割和对象检测模型可以并行运行,以提供对图像的全面分析,将对图像结构的见解与对特定对象的识别相结合。
模型组合有哪些好处?
模型组合提供了许多操作和开发优势。以下是一些主要好处:
提高准确性和性能
在某些情况下,多个模型协同工作的协同作用可以提高准确性和性能。组合中的每个模型可能专注于问题的特定方面,例如不同的数据类型或数据的特定特征,确保组合系统涵盖比任何单个模型更多的整个问题空间。在集成建模中尤其如此,因为聚合来自多个模型的结果可以帮助消除它们的个体偏差和错误,从而产生更准确的预测。
专用基础设施和资源分配
模型组合允许你在各种硬件设备上部署所涉及的模型,优化计算资源的使用。可以根据它们的处理需求和资源可用性将它们分配到最合适的基础设施上——无论是 CPU、GPU 还是边缘设备。这种专用分配还确保可以单独扩展系统的每个部分。
定制和灵活性
模型组合允许你根据特定需求定制和调整系统。你可以选择最适合特定任务的模型,并根据需要轻松添加或删除模型。这种灵活性使你可以快速适应不断变化的业务需求和数据可用性。
模型组合最显著的优势之一是它提供的灵活性。模型可以在系统内轻松添加、移除或替换,使开发人员能够随着新技术的出现或需求的变化来调整和演进他们的应用程序。这种模块化方法简化了更新和维护,确保系统能够快速适应新的挑战和机遇。
更快的开发和迭代
模型组合支持并行开发工作流,允许团队同时处理系统中的不同模型或组件。这有助于加速开发过程,这意味着更快的迭代和更迅速的原型制作。它还使团队能够对反馈和不断变化的需求做出更敏捷的响应,因为可以优化或替换各个模型,而不会中断整个系统。
资源优化
通过在多个模型之间智能地分配工作负载,每个模型针对特定任务或硬件进行优化,您可以最大化资源利用率。这种优化可以带来更有效的处理、更低的延迟和更低的运营成本,尤其是在需要大量计算能力的复杂应用程序中。有效的资源优化还意味着您的应用程序可以更平稳地扩展,以适应数据量或用户需求的增长。
使用 BentoML 组合多个模型
不同的模型服务或模型部署框架可能会采用不同的模型组合方法。在这方面,BentoML 作为一个开源模型服务框架,提供了简单的服务 API 来帮助您封装模型、建立服务间通信并将组合模型公开为 REST API 端点。
下面的代码示例演示了如何使用 BentoML 组合多个模型。在 BentoML 中,每个服务都被定义为一个 Python 类。您可以使用 @bentoml.service 装饰器将其标记为服务并为其分配 CPU 或 GPU 资源。当您将其部署到 BentoCloud 时,不同的服务可以在专用的实例类型上运行,并且可以单独扩展。
在此 BentoML service.py 文件中,GPT2 和 DistilGPT2 被初始化为单独的 BentoML 服务以生成文本。然后,BertBaseUncased 服务获取生成的文本并对其进行分类,提供表示情绪的分数。InferenceGraph 服务协调这些单独的服务,使用 asyncio.gather 从两个 GPT-2 模型同时生成文本,然后使用 BERT 模型对输出进行分类。
在部署到 BentoCloud 后,服务可以在单独的实例类型上运行,如下所示:
监控性能:
有关详细说明,请参阅此示例项目。
常见问题
在结束之前,让我们看看有关模型组合的一些常见问题。
集成建模和多模态应用程序之间有什么区别?
这两个机器学习概念服务于不同的目的,并应用于不同的环境。
- 目的和应用:集成建模通过组合多个模型来提高预测准确性。多模态应用程序集成和解释来自多个来源或类型的的数据,以做出更好的决策或预测。
- 模型与数据:集成建模专注于使用多个模型来增强预测。多模态应用程序专注于集成不同类型的数据(例如,文本、图像、音频)。
- 实现:多模态系统通常需要数据预处理和特征提取技术来有效处理不同类型的数据。另一方面,集成建模需要结合模型预测的策略,这可能涉及直接平均或更复杂的投票系统。
我在应用程序中使用单个模型。我应该转向多模型吗?
重要的是要注意,虽然模型组合提供了如上所述的不同好处,但它并不总是必要的。如果单个模型可以有效且准确地完成手头任务,我建议您坚持使用它。组合多个模型的决策和处理流水线的设计应根据您的具体要求进行指导。
模型组合如何影响生产部署?
集成多个模型会增加生产部署的复杂性。您需要考虑以下因素:
复杂性增加
- 配置和管理:组合中的每个模型可能需要其配置、依赖项和环境。在多个模型中管理这些内容会增加部署过程的复杂性。
- 服务编排:组合多个模型通常需要仔细编排,以确保数据在模型之间正确流动,并且每个模型按要求以正确的顺序或并行执行。
资源分配
- 硬件要求:如上所述,不同的模型可能具有不同的硬件要求。一些模型可能需要 GPU 进行推理,而另一些模型可以在 CPU 上运行。您选择的提供和部署框架应支持灵活的资源分配,以满足您的需求。
- 扩展策略:在生产中扩展多个模型可能不像扩展单个模型那样简单。应用程序的不同组件可能具有不同的负载,需要动态扩展策略,该策略可以根据需求调整各个模型的资源。
监控和维护
- 监控:跟踪生产中不同模型的性能和运行状况需要全面的监控解决方案,这些解决方案可以提供对每个模型的性能、资源使用情况和潜在瓶颈的见解。
- 版本控制和更新:更新复合应用程序中的一个模型可能会对其他模型产生级联影响。必须制定适当的版本控制和测试策略,以便在不中断应用程序整体性能的情况下管理更新。
部署策略
- 微服务架构:采用微服务架构可以通过将每个模型封装为一个单独的服务来简化多个模型的部署。这种方法简化了扩展、更新和管理,但需要灵活的服务编排工具。
- 容器化:使用 容器部署 AI 模型可以帮助管理每个模型的依赖项和环境。容器编排工具(如 Kubernetes)可以帮助管理容器化模型的部署、扩展和网络。
模型组合可以通过需要更多资源和更复杂的部署策略来影响部署。但是,如上例所示,BentoML 和 BentoCloud 等平台可以通过允许开发人员高效地打包、部署和扩展多模型服务,帮助开发人员构建多个模型的 AI 应用程序。
最后的想法
虽然模型组合的好处很明显,从增强的性能到处理多种数据类型的能力,但重要的是要认识到它带来的复杂性,尤其是与生产部署相关的复杂性。成功的实施需要仔细规划、资源管理以及采用现代部署实践和工具来应对配置、扩展和维护方面的挑战。
猜你喜欢
- 2024-10-08 容器化Web应用:从部署到扩展 doctor容器化部署
- 2024-10-08 容器化最佳实践:构建高效开发流程
- 2024-10-08 云时代必修课-云原生CI/CD(持续集成与交付)全流程实战(完结)
- 2024-10-08 Kubernetes vs.Docker:了解容器和编排
- 2024-10-08 docker之容器编排工具-Mesos集群环境搭建
- 2024-10-08 x-cmd pkg | ctop - 针对容器的类 top 命令
- 2024-10-08 起源:Docker容器技术 容器开源
- 2024-10-08 Docker容器集群快速编排工具Compose应用实践
- 2024-10-08 HashiCorp Nomad Enterprise 1.7.6(x64)编排容器工作负载批处理
- 2024-10-08 Docker和Docker-compose docker和docker-compose区别
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)