在 AWS Inferentia2 上经济高效地部署视觉语言模型进行宠物行为检测
Tomofun 公司利用 AWS Inferentia2 芯片将其 Furbo 宠物相机的推理成本降低了 83%,同时保持高精度和低延迟。本文详细介绍了从 GPU 迁移到 Inferentia2 的过程,包括 BLIP 模型适配、架构设计、压力测试结果等。
Tomofun 是一家总部位于台湾的宠物科技初创公司,其产品 Furbo 宠物相机通过智能摄像头与 AI 技术相结合,能够实时检测宠物的吠叫、奔跑或其他异常行为,并及时向主人发送警报。该系统的核心是计算机视觉和视觉语言模型,它们从视频流中解读宠物的动作。
最初,Furbo 的推理工作负载运行在基于 GPU 的 Amazon EC2 实例上。虽然 GPU 提供了高吞吐量,但由于需要持续进行实时推理以支持大规模宠物活动检测,成本高昂。为了降低成本并保持准确性,Tomofun 转向了由 AWS 自研 AI 芯片 Inferentia2 驱动的 EC2 Inf2 实例。
挑战:降低实时视觉语言模型的大规模 GPU 推理成本
运行先进的视觉语言模型(如 BLIP)在 GPU 实例上对于始终在线、实时推理的工作负载而言成本效益较低。Tomofun 面临双重挑战:需要为数十万台设备提供近乎连续的宠物行为监控,同时保持模型保真度和吞吐量,并且无需重写已针对 PyTorch 优化的大部分 BLIP 代码。
解决方案概述
系统采用两层架构。第一层通过 Elastic Load Balancing (ELB) 和 Auto Scaling 组托管 API 服务器,处理来自 Furbo 相机的图像流。第二层运行推理实例,将图像送入 BLIP 模型。BLIP 模型被分解为三个组件:图像编码器、文本编码器和文本解码器。每个组件通过轻量级封装器与 torch_neuronx 结合,独立编译为 Neuron 优化的 TorchScript 工件,然后集成到推理流水线中。这种模块化方法未改变 BLIP 的原始架构。
在早期实现中,Furbo 的 API 仅将推理调用路由到 GPU 容器,但现在也可以将请求定向到基于 Inf2 的容器,而无需更改上游 API 或下游警报逻辑。这使得 Tomofun 能够实时地在 GPU 和 Inferentia2 后端之间切换推理请求,从而保持高可用性并灵活扩展成本高效的推理能力。
Amazon CloudWatch 监控推理集群的关键运营指标,包括延迟、吞吐量和错误率。ELB 根据 CloudWatch 指标中的请求数量自动调整实例池大小,因为每种实例类型的吞吐量基准已通过压力测试确定,因此扩展决策可以直接由图像请求量驱动。
在 Inferentia2 上优化 BLIP
BLIP 由三个组件组成——图像编码器、文本编码器和文本解码器。为了在 Inferentia2 上支持,Tomofun 将模型分解为组件并创建了轻量级封装器,以适配输入和输出形状。每个组件使用 torch_neuronx 独立编译,然后组合到推理流水线中。
在编译阶段,原始模型组件直接传递给 torch_neuronx.trace() 并编译为 Neuron 优化的 TorchScript 工件。在部署阶段,编译后的子模块通过封装器类加载,以组装最终的 BLIP 推理流水线。封装器仅在部署时用于加载编译模型和格式化 I/O,从而保持原始代码不变。
压力测试
Tomofun 进行了模拟真实 Furbo 相机工作负载的压力测试。每个视频流触发了诸如“狗在叫吗?”、“狗在玩吗?”或“狗在咬家具吗?”等动作检测查询。测试证实,Inf2 实例(一个 Inferentia2 芯片,32 GB 内存)能够维持所需的吞吐量并保持低延迟。与按需 GPU 实例相比,迁移到 Inf2.xlarge 实例后成本降低了 83%,且性能未受影响。
结论
通过将 BLIP 推理迁移到基于 AWS Inferentia 的 EC2 Inf2 实例,Tomofun 将 Furbo 应用的部署成本降低了 83%。迁移过程无缝,仅需轻量级包装类,未改动 BLIP 核心逻辑。测试确认,使用 Inferentia2 不仅降低了部署成本,还保持了大规模实时推理的高吞吐量。Tomofun 计划将更多工作负载迁移到 Inferentia2,并计划采用 AWS 深度学习容器简化依赖管理。