利用AWS IoT Greengrass与Strands Agents大规模部署小型语言模型

本文详细介绍了如何利用AWS IoT Greengrass和Strands Agents框架,在资源受限的边缘设备(如工业网关)上大规模部署和运行小型语言模型,实现本地化的实时数据查询与决策,同时保持与云端的协同。

利用AWS IoT Greengrass与Strands Agents大规模部署小型语言模型

引言 现代制造商面临日益复杂的挑战:需要实施智能决策系统以响应实时操作数据,同时保持安全和性能标准。传感器数据的体量和操作复杂性要求AI驱动的解决方案能够在本地处理信息以实现即时响应,同时利用云资源处理复杂任务。

行业正处于边缘计算与AI融合的关键节点。小型语言模型足够轻量,可以在受限的GPU硬件上运行,同时又足够强大,能够提供上下文感知的洞察。与大型语言模型不同,SLM符合工业PC或网关的功率和热限制,使其成为资源有限且可靠性至关重要的工厂环境的理想选择。出于本文目的,假设一个SLM大约有30亿到150亿个参数。

本文重点介绍作为代表性制造协议的OPC UA。OPC UA服务器提供标准化的实时机器数据,在边缘运行的SLM可以消费这些数据,使操作员能够查询设备状态、解读遥测数据或即时访问文档——即使在没有云连接的情况下也是如此。

AWS IoT Greengrass通过将SLM与AWS Lambda函数一起直接部署到OPC UA网关来实现这种混合模式。本地推理确保了安全关键任务的响应能力,而云端则在更强的安全控制下处理整个车队范围的分析、多站点优化或模型重新训练。

这种混合方法为各行业带来了可能性。汽车制造商可以在车辆计算单元中运行SLM,实现自然语音命令和增强的驾驶体验。能源供应商可以在变电站本地处理SCADA传感器数据。在游戏领域,SLM可以在玩家设备上运行,为游戏中的同伴AI提供动力。除了制造业,高等教育机构可以使用SLM来提供个性化学习、校对、研究辅助和内容生成。

在本文中,我们将探讨如何使用AWS IoT Greengrass无缝且大规模地将SLM部署到边缘。

解决方案概述 该解决方案使用AWS IoT Greengrass在边缘设备上部署和管理SLM,Strands Agents提供本地代理能力。使用的服务包括:

  • AWS IoT Greengrass:一个开源的边缘软件和云服务,允许您部署、管理和监控设备软件。
  • AWS IoT Core:使您能够将IoT设备连接到AWS云的服务。
  • Amazon Simple Storage Service (S3):高度可扩展的对象存储,允许您存储和检索任意数量的数据。
  • Strands Agents:一个轻量级的Python框架,用于使用云和本地推理运行多代理系统。

我们在代码示例中使用工业自动化场景演示代理能力。我们提供了一个OPC UA模拟器,它定义了一个由烤箱和传送带组成的工厂以及作为工业数据源的维护操作规程。该解决方案可以通过使用其他代理工具扩展到其他用例。

下图显示了高级架构:

  1. 用户将GPT生成统一格式的模型文件上传到Amazon S3存储桶,AWS IoT Greengrass设备可以访问该存储桶。
  2. 车队中的设备接收文件下载任务。S3FileDownloader组件处理此任务,并从S3存储桶将模型文件下载到设备。S3FileDownloader组件可以处理大文件大小,这通常是超过原生Greengrass组件构件大小限制的SLM模型文件所需要的。
  3. GGUF格式的模型文件在Strands Agents组件首次调用Ollama时加载到Ollama中。GGUF是用于存储LLM的二进制文件格式。Ollama是加载GGUF模型文件并运行推理的软件。模型名称在组件的recipe.yaml文件中指定。
  4. 用户通过向AWS IoT MQTT代理中的设备特定代理主题发布有效负载,将查询发送到本地代理。
  5. 收到查询后,该组件利用Strands Agents SDK的模型无关编排能力。编排器代理感知查询,推理所需的信息来源,并通过调用适当的专用代理来采取行动,然后在形成响应之前收集全面的数据。
  6. 如果查询涉及可以在文档中找到的信息,编排器代理将调用文档代理。
  7. 文档代理从提供的文档中查找信息并将其返回给编排器代理。
  8. 如果查询涉及当前或历史机器数据,编排器代理将调用OPC-UA代理。
  9. OPC-UA代理根据用户查询向OPC-UA服务器发出查询,并将服务器中的数据返回给编排器代理。
  10. 编排器代理根据收集到的信息形成响应。Strands Agents组件将响应发布到AWS IoT MQTT代理中的设备特定代理响应主题。
  11. Strands Agents SDK使系统能够通过边缘的Ollama与本地部署的基础模型配合工作,同时保留在连接可用时切换到基于云的模型(如Amazon Bedrock中的模型)的选项。
  12. AWS IAM Greengrass服务角色提供对S3资源存储桶的访问权限,以将模型下载到设备。
  13. 附加到IoT事物的AWS IoT证书允许Strands Agents组件接收和发布MQTT有效负载到AWS IoT Core。
  14. Greengrass组件将组件操作记录到本地文件系统。或者,可以启用AWS CloudWatch日志以在CloudWatch控制台中监控组件操作。

先决条件 在开始本演练之前,请确保您拥有:

  • 一个AWS账户。
  • 一台运行AWS IoT Greengrass和SLM的设备(例如,NVIDIA Jetson Orin Nano或Amazon Elastic Compute Cloud GPU实例)。您可以在教程:AWS IoT Greengrass入门文档中了解更多关于部署Greengrass的信息。您可以使用提供的模板将工作环境部署到EC2。
  • 在设备上安装并运行Ollama。
  • 在设备上安装Python 3.10+。
  • 安装AWS IoT Greengrass Development Kit CLI。
  • 一个支持代理和工具调用的SLM(例如Qwen 3)。

演练 在本文中,您将:

  1. 将Strands Agents部署为AWS IoT Greengrass组件。
  2. 将SLM下载到边缘设备。
  3. 测试部署的代理。

组件部署 首先,让我们将StrandsAgentGreengrass组件部署到您的边缘设备。

克隆Strands Agents仓库:

1
2
git clone https://github.com/aws-solutions-library-samples/guidance-for-deploying-ai-agents-to-device-fleets-using-aws-iot-greengrass.git
cd guidance-for-deploying-ai-agents-to-device-fleets-using-aws-iot-greengrass

使用Greengrass Development Kit构建和发布组件:

要发布组件,您需要修改gdk-config.json文件中的区域和存储桶值。推荐的构件存储桶值是greengrass-artifacts。如果尚不存在,GDK将生成一个格式为greengrass-artifacts-<region>-<account-id>的存储桶。您可以在Greengrass Development Kit CLI配置文件文档中了解更多信息。修改存储桶和区域值后,运行以下命令以构建和发布组件。

1
2
gdk component build
gdk component publish

该组件将出现在AWS IoT Greengrass组件控制台中。您可以参考部署组件文档将组件部署到您的设备。

部署后,该组件将在设备上运行。它由Strands Agents、一个OPC-UA模拟服务器和示例文档组成。Strands Agents使用Ollama服务器作为SLM推理引擎。该组件具有OPC-UA和文档工具,用于检索模拟的实时数据和示例设备手册,供代理使用。

如果您想在Amazon EC2实例中测试该组件,可以使用IoTResources.yaml Amazon CloudFormation模板来部署一个安装了必要软件的GPU实例。此模板还创建用于运行Greengrass的资源。堆栈部署后,一个Greengrass Core设备将出现在AWS IoT Greengrass控制台中。CloudFormation堆栈可以在仓库的source/cfn文件夹下找到。您可以在CloudFormation控制台文档的从CloudFormation控制台创建堆栈中阅读如何部署CloudFormation堆栈。

下载模型文件 该组件需要一个GGUF格式的模型文件供Ollama用作SLM。您需要将模型文件复制到边缘设备的/tmp/destination/文件夹下。如果您使用组件recipe.yaml文件中的默认ModelGGUFName参数,模型文件名必须是model.gguf

如果您没有GGUF格式的模型文件,可以从Hugging Face下载一个,例如Qwen3-1.7B-GGUF。在实际应用中,这可以是一个针对您的用例解决特定业务问题的微调模型。

(可选)使用S3FileDownloader下载模型文件 为了大规模管理模型分发到边缘设备,您可以使用S3FileDownloader AWS IoT Greengrass组件。该组件对于在连接不可靠的环境中部署大文件特别有价值,因为它支持自动重试和恢复功能。由于模型文件可能很大,并且在许多IoT用例中设备连接并不可靠,该组件可以帮助您可靠地将模型部署到您的设备车队。

将S3FileDownloader组件部署到您的设备后,您可以使用AWS IoT MQTT Test Client将以下有效负载发布到things/<MyThingName>/download主题。该文件将从Amazon S3存储桶下载并放入边缘设备的/tmp/destination/文件夹:

1
2
3
4
5
{
    "jobId": "filedownload",
    "s3Bucket": "<ModelFileBucket>",
    "key":"model.gguf"
}

如果您使用了仓库中提供的CloudFormation模板,则可以使用此模板创建的S3存储桶。请参考CloudFormation堆栈部署的输出以查看存储桶的名称。

测试本地代理 一旦部署完成且模型已下载,我们就可以通过AWS IoT Core MQTT Test Client测试代理。步骤:

  1. 订阅things/<MyThingName>/#主题以查看代理的响应。

  2. 将测试查询发布到输入主题things/<MyThingName>/agent/query

    1
    2
    3
    
    {
        "query": "What is the status of the conveyor belt?"
    }
    

您应该在多个主题上收到响应:

  • 最终响应主题 (things/<MyThingName>/agent/response):包含编排器代理的最终响应:

    1
    2
    3
    4
    5
    6
    
    {
        "query": "What is the status of the oven?",
        "response": "The oven is currently operating at 802.2°F (slightly above the setpoint of 800.0°F), with heating active...",
        "timestamp": 1757677413.6358254,
        "status": "success"
    }
    
  • 子代理响应 (things/<MyThingName>/agent/subagent):包含来自中间代理(如OPC-UA代理和文档代理)的响应:

    1
    2
    3
    4
    5
    6
    
    {
        "agent": "opc factory",
        "query": "Get current oven status",
        "response": "**Oven Status Report:**\n- **Current Temperature:** 802.2°F...",
        "timestamp": 1757677323.443954
    }
    

代理将使用本地SLM处理您的查询,并根据OPC-UA模拟数据和本地存储的设备文档提供响应。

出于演示目的,我们使用AWS IoT Core MQTT测试客户端作为与本地设备通信的简单接口。在生产中,Strands Agents可以完全在设备本身上运行,无需任何云交互。

监控组件 要监控组件的操作,您可以远程连接到您的AWS IoT Greengrass设备并检查组件日志:

1
sudo tail -f /greengrass/v2/logs/com.strands.agent.greengrass.log

这将向您显示代理的实时操作,包括模型加载、查询处理和响应生成。您可以在监控AWS IoT Greengrass日志文档中了解有关Greengrass日志系统的更多信息。

清理 转到AWS IoT Core Greengrass控制台以删除本文中创建的资源:

  1. 转到“部署”,选择您用于部署组件的部署,然后通过移除Strands Agents组件来修订部署。
  2. 如果您部署了S3FileDownloader组件,可以按照上一步的说明从部署中移除它。
  3. 转到“组件”,选择Strands Agents组件并选择“删除版本”以删除组件。
  4. 如果您创建了S3FileDownloader组件,可以按照上一步的说明删除它。
  5. 如果您部署了CloudFormation堆栈以在EC2实例中运行演示,请从AWS CloudFormation控制台删除堆栈。请注意,EC2实例在停止或终止之前将产生每小时费用。
  6. 如果您不需要Greengrass核心设备,可以从Greengrass控制台的“核心设备”部分删除它。
  7. 删除Greengrass核心设备后,删除附加到核心事物的IoT证书。要查找事物证书,请转到AWS IoT Things控制台,选择在本指南中创建的IoT事物,查看“证书”选项卡,选择附加的证书,选择“操作”,然后选择“停用”和“删除”。

结论 在本文中,我们展示了如何使用通过Strands Agents集成在AWS IoT Greengrass上的Ollama本地运行SLM。此工作流演示了如何在受限硬件上部署和管理轻量级AI模型,同时受益于云集成以实现规模和监控。使用OPC-UA作为我们的制造示例,我们强调了边缘的SLM如何使操作员能够实时查询设备状态、解读遥测数据和访问文档——即使在连接有限的情况下。混合模式确保关键决策在本地进行,而复杂的分析和重新训练则在云端安全地处理。

该架构可以扩展以创建一个混合云边缘AI代理系统,其中边缘AI代理(使用AWS IoT Greengrass)与基于云的代理(使用Amazon Bedrock)无缝集成。这实现了分布式协作:边缘代理管理实时、低延迟处理和即时行动,而云代理处理复杂的推理、数据分析、模型优化和编排。

关于作者 Ozan Cihangir 是AWS专家与合作伙伴组织的高级原型工程师。他帮助客户为其在云中的新兴技术项目构建创新解决方案。 Luis Orus 是AWS专家与合作伙伴组织的高级成员,他曾担任多个职位——从在全球范围内构建高绩效团队到通过原型设计帮助客户快速创新和实验。 Amir Majlesi 领导AWS专家与合作伙伴组织内的EMEA原型设计团队。他在帮助客户加速云采用、加快生产路径以及培养创新文化方面拥有丰富经验。通过快速原型设计方法,Amir使客户团队能够构建云原生应用程序,重点关注生成与代理AI、高级分析、无服务器和IoT等新兴技术。 Jaime Stewart 在AWS专家与合作伙伴组织内专注于边缘推理与SLM的解决方案架构师实习。Jaime目前正在攻读人工智能硕士学位。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计