AWS发布SageMaker SDK v3边缘视觉模型全生命周期参考架构
AWS机器学习博客发布一套基于SageMaker SDK v3的示例架构,按摄像头分别训练、质量门控并用SageMaker Neo编译模型,由Step Functions控制整支摄像头的重训节奏。
AI解读:AWS博客作者Kiowa Jackson更新了 2023 年边缘视觉质检MLOps系列,把方案迁移到当前Amazon SageMaker Python SDK v3,并用SageMaker Neo取代已弃用的SageMaker Edge Manager做边缘优化。
方案的核心主张是“每个摄像头一个模型”:作者称在实际生产部署中,用混合画面训练的单一模型表现不佳,最终各摄像头都拥有微调后的独立模型,难点转为无人值守地训练、评估、版本化和分发数千个模型。
每条摄像头流水线每次执行 13 个步骤,训练一个卷积自编码器做异常检测、一个ResNet18分类器确认缺陷;两支分别导出ONNX并在导出产物上评估,通过质量门控后才经Neo编译并注册到模型注册表。
编排层用SQS FIFO队列接收重训请求,Lambda启动Step Functions执行,执行前通过DynamoDB信号量获取并发许可,默认最多同时运行 5 条流水线,以落在账户标准配额内。
作者称在合成数据上完整跑一次流水线的计算成本约 0.07 美元;编译本身不收费,只需为驱动编译的处理实例和S3存储付费。
作者提醒SDK v3在合成流水线定义时会校验执行角色,因此示例采用两阶段部署,并需要为角色授予较宽的ECR权限。上述数字与效果均来自该博客的示例,未给出真实产线的验证数据。
AWS机器学习博客发布一篇技术文章,由Kiowa Jackson撰写,介绍如何用Amazon SageMaker Python SDK v3管理覆盖整支摄像头的计算机视觉模型生命周期。文章更新了 2023 年的边缘视觉质检MLOps系列,并以SageMaker Neo替代已弃用的SageMaker Edge Manager。
按摄像头训练与双分支流水线
文章给出的场景是:一条产线质检的概念验证成功后,工厂要求把同样结果复制到 40 条产线、每条配备多台摄像头,而每台摄像头的角度、同一不锈钢表面的反光和环境光都不同。作者称在其参与的生产部署中,用汇总画面训练的单一模型表现不足以覆盖各摄像头,最终每台摄像头都拥有自己的微调模型。
训练部分是一条以摄像头为参数的SageMaker Pipeline,每次执行 13 个步骤。三个入口步骤并行运行:预处理、获取该摄像头最新的异常检测模型、获取最新的分类器模型。随后分别训练一个小型卷积自编码器(以重建误差标记异常)和一个微调过的ResNet18分类器(确认缺陷)。
- 每条分支把模型导出为ONNX,并在留出数据上评估导出产物
- 通过门控后经SageMaker Neo针对配置的边缘目标编译,再注册进SageMaker Model Registry
- 模型包携带摄像头ID元数据,重训从该摄像头自己的历史模型热启动;首次运行时回退到冷启动初始化
质量门控与缺陷数据的不平衡
评估针对导出的ONNX产物而非内存中的PyTorch模型,文章称这样做可以保证被门控的产物就是被分发的产物。异常检测分支要求AUROC至少 0.8。
分类器分支同时门控两个指标:平衡准确率至少 0.6、缺陷召回率至少 0.5。文章解释,示例中约 90% 的图像为良品,单纯准确率没有意义,因为全部预测为良品也能得到约 0.9 的分数;而平衡准确率单独使用也有盲区——良品召回 100%、缺陷召回 20% 时仍有 0.6。两个阈值都是流水线参数,可在不重新部署的情况下按次调整。门控失败时FailStep会标记该次执行失败,该分支模型不进入注册表,产线继续使用该摄像头此前批准的模型。
- 分类器训练用逆类别频率的WeightedRandomSampler平衡批次,损失函数不加权,文章称两者同时加权会过度偏向少数类
- 两个分支独立门控,一支失败不影响另一支注册
编排、并发与部署注意事项
编排层用于控制整支摄像头的重训节奏。重训请求进入Amazon SQS FIFO队列,Lambda为每个请求启动一次Step Functions执行;执行在启动流水线前通过DynamoDB原子条件更新获取信号量槽位,默认最多 5 条流水线同时运行。文章强调该上限在单次原子操作中强制执行,避免状态机先读后写产生竞态。完成后通过Amazon SNS发布通知,失败执行经EventBridge规则转发到同一主题并保留原始错误。
文章还列出两处SDK v3在CDK应用中的行为:SDK v3在合成流水线定义时会针对实时IAM校验执行角色,因此示例分两阶段部署,且角色ARN必须是具体字符串而非未解析的CDK token;角色校验器模拟ECR拉取权限时不带资源ARN,只限定单个仓库的角色会校验失败。部署需要Python 3.10至 3.12、Docker和AWS CDK CLI 2.1131.0或更高版本,不需要申请配额提升。
- 输出为带版本、经质量门控的每摄像头模型产物:注册表保存可移植的ONNX,S3保存Neo编译后的优化库
- Neo编译步骤会先重打包仅含ONNX的tarball、将动态批次轴固定为 1,并用执行ID派生确定的任务名以便重试
- 默认编译目标为LINUX/X86_64,可在提交具体设备前先行验证;仓库还包含对已注册模型为其他设备类型追加编译的脚本