亚马逊蓝鸟SageMaker多模型终端使Veriff部署时间减少了80%
亚马逊蓝鸟SageMaker多模型终端显著减少Veriff部署时间80%
Veriff 是一个身份验证平台合作伙伴,为创新型增长驱动型组织提供服务,包括金融服务、金融科技、加密货币、游戏、移动性和在线市场的先驱。他们提供先进的技术,结合人工智能驱动的自动化、人工反馈、深入见解和专业知识。
Veriff 提供了一种经过验证的基础设施,使他们的客户能够在用户在客户旅程的所有相关时刻对其身份和个人属性具有信任。Veriff 的客户包括 Bolt、Deel、Monese、Starship、Super Awesome、Trustpilot 和 Wise。
作为一种人工智能解决方案,Veriff 需要以高效的方式创建和运行数十个机器学习(ML)模型。这些模型包括轻量级树状模型和深度学习计算机视觉模型,需要在 GPU 上运行,以实现低延迟和提高用户体验。Veriff 目前还在不断添加更多产品,为客户提供超个性化的解决方案。为不同客户提供不同的模型增加了对可扩展的模型服务解决方案的需求。
- 医学影像在深色皮肤上失败研究人员修复了这个问题
- 谷歌的绿色交通灯项目,减少30%的停车次数
- 互联网公司报告了史上最大规模的拒绝服务攻击行动 (Hùliánwǎng gōngsī bàogào le shǐshàng zuìdà guīmó de jùjué fúwù gōngjīng)
在本文中,我们将展示给您 Veriff 如何使用 Amazon SageMaker 标准化其模型部署工作流程,从而降低成本和开发时间。
基础设施和开发挑战
Veriff 的后端架构基于微服务模式,各个服务运行在托管在 AWS 基础设施上的不同 Kubernetes 集群上。最初,该方法用于所有公司服务,包括运行昂贵的计算机视觉机器学习模型的微服务。
其中一些模型需要在 GPU 实例上部署。考虑到 GPU 支持的实例类型相对较高的成本,Veriff 在 Kubernetes 上开发了一种定制解决方案,以在不同服务副本之间共享给定 GPU 的资源。单个 GPU 通常具有足够的 VRAM,可以在内存中保存多个 Veriff 计算机视觉模型。
虽然该解决方案确实减轻了 GPU 成本,但它也带来了一个限制,即数据科学家需要事先指示他们的模型需要多少 GPU 内存。此外,DevOps 需要根据需求模式手动规划 GPU 实例。这导致了操作开销和实例过度配置,从而产生了次优的成本配置。
除了 GPU 规划外,此设置还要求数据科学家为每个模型构建一个 REST API 封装器,该封装器用于为其他公司服务提供通用接口,并封装模型数据的预处理和后处理。这些 API 需要具备生产级代码的能力,这使得数据科学家在将模型投入生产中遇到了挑战。
Veriff 的数据科学平台团队寻找了替代方式来解决这个问题。主要目标是通过提供更简化的部署管道,为公司的数据科学家提供更好地从研究到生产的过渡支持。其次目标是降低规划 GPU 实例的运营成本。
解决方案概述
Veriff 需要一个新的解决方案来解决两个问题:
- 便捷地构建围绕 ML 模型的 REST API 封装器
- 优化管理配备的 GPU 实例容量,并在可能的情况下自动管理
最终,ML 平台团队决定使用 Sagemaker 多模型终端(MME)。这个决定是基于 MME 支持 NVIDIA 的 Triton 推理服务器(一种专注于 ML 的服务器,可将模型作为 REST API 封装,Veriff 还在试验 Triton)以及其通过简单的自动扩展策略本地管理 GPU 实例的能力。
Veriff 创建了两个 MME,一个用于分段,一个用于生产。这种方法使他们能够在分段环境中运行测试步骤,而不影响生产模型。
SageMaker MMEs
SageMaker是一种完全托管的服务,为开发人员和数据科学家提供了快速构建、训练和部署机器学习模型的能力。SageMaker MMEs提供了一种可扩展且具有成本效益的解决方案,用于实时推理中部署大量模型。MMEs使用共享服务容器和一组资源,可以使用加速实例(如GPU)托管您的所有模型。这与使用单一模型端点相比,通过最大化端点利用率来降低托管成本。它还降低了部署开销,因为SageMaker管理内存中的模型加载和卸载,并根据端点的流量模式进行扩缩。此外,所有SageMaker实时端点都具有管理和监控模型的内置功能,例如包括影子变体、自动扩缩和与Amazon CloudWatch的原生集成(有关更多信息,请参阅CloudWatch多模型端点部署指标)。
自定义Triton集成模型
Veriff决定使用Triton推断服务器存在以下几个原因:
- 它允许数据科学家通过将模型工件文件按标准目录格式排列来构建REST API(无代码解决方案)
- 它与所有主要的AI框架兼容(PyTorch、Tensorflow、XGBoost等)
- 它提供针对机器学习的低级别和服务器优化,例如批量处理请求的动态批处理
使用Triton允许数据科学家轻松部署模型,因为他们只需要构建格式化的模型库而不需要编写构建REST API的代码(如果需要自定义推断逻辑,Triton还支持Python模型)。这减少了模型部署时间,并使数据科学家有更多时间专注于构建模型而不是部署模型。
Triton的另一个重要特性是允许构建模型集成,即将多个模型链接在一起形成一个模型集成。这些集成可以像单个Triton模型一样运行。Veriff目前使用此功能部署每个ML模型的预处理和后处理逻辑,使用Python模型(如前面所提到的),以确保在模型在生产环境中使用时,输入数据或模型输出不会发生错误。
以下是这个工作负载的典型Triton模型库的外观:
model.py
文件包含预处理和后处理的代码。训练模型的权重以及模型版本1
存储在screen_detection_inferencer
目录下(此示例中模型以ONNX格式存储,但也可以是TensorFlow、PyTorch格式或其他格式)。集成模型定义在screen_detection_pipeline
目录中,其在配置文件中映射了步骤之间的输入和输出关系。
运行Python模型需要的其他依赖项详细说明在一个requirements.txt
文件中,并需要通过conda打包构建Conda环境(python_env.tar.gz)
)。有关更多信息,请参阅Managing Python Runtime and Libraries。此外,Python步骤的配置文件需要使用EXECUTION_ENV_PATH指令指向python_env.tar.gz
。
然后,需要将模型文件夹进行TAR压缩,并使用model_version.txt
重命名。最后,将生成的<model_name>_<model_version>.tar.gz
文件复制到连接到MME的Amazon Simple Storage Service(Amazon S3)存储桶,以便SageMaker检测和提供模型。
模型版本管理和持续部署
正如前一节所述,构建Triton模型仓库非常简单。然而,如果手动运行所有必要的部署步骤,将变得繁琐且容易出错。为了克服这个问题,Veriff建立了一个monorepo,其中包含所有要部署到MME的模型,数据科学家在类似Gitflow的方式下协作。这个monorepo具有以下特点:
- 使用Pants进行管理。
- 使用Pants应用Code quality工具,如Black和MyPy。
- 为每个模型定义单元测试,检查模型输出是否符合给定模型输入的预期输出。
- 模型权重存储在模型仓库旁边。这些权重可能是大型二进制文件,因此使用DVC以版本化的方式与Git同步。
这个monorepo与持续集成(CI)工具集成。对于每次对仓库的新推送或新模型,将执行以下步骤:
- 通过代码质量检查。
- 下载模型权重。
- 构建Conda环境。
- 使用Conda环境启动Triton服务器,并使用它来处理在单元测试中定义的请求。
- 构建最终的模型TAR文件(
<model_name>_<model_version>.tar.gz
)。
这些步骤确保模型具备部署所需的质量,因此对于对仓库分支的每次推送,结果的TAR文件将在另一步骤中被复制到暂存S3存储桶中。当在主分支中推送完成时,模型文件将被复制到生产S3存储桶。下图显示了这个CI/CD系统。
成本和部署速度的优势
使用MME允许Veriff采用monorepo方法将模型部署到生产环境。简而言之,Veriff的新模型部署工作流程包括以下步骤:
- 在monorepo中创建包含新模型或模型版本的分支。
- 在开发机器上定义和运行单元测试。
- 当模型准备好在暂存环境中进行测试时,推送分支。
- 当模型准备好在生产环境中使用时,将分支合并到主分支。
通过这个新的解决方案,Veriff的模型部署成为开发过程中简单的一部分。新模型开发时间从10天缩短到平均2天。
SageMaker的托管基础设施配置和自动扩展功能为Veriff带来了额外的好处。他们使用InvocationsPerInstance的CloudWatch指标根据流量模式进行扩展,节省成本而不牺牲可靠性。为了定义该指标的阈值,他们在暂存端点上进行了负载测试,以找到延迟和成本之间的最佳折衷。
在将七个生产模型部署到MME并分析开销后,Veriff报告了75%的GPU模型服务成本降低,相比原始基于Kubernetes的解决方案。运营成本也得到了降低,因为从公司的DevOps工程师身上解放出了手动提供实例的负担。
结论
在本文中,我们回顾了为什么Veriff选择了Sagemaker MME而不是在Kubernetes上进行自我管理的模型部署。SageMaker承担了无差别的重活,使Veriff能够缩短模型开发时间,提高工程效率,并显著降低实时推理的成本,同时保持了业务关键操作所需的性能。最后,我们展示了Veriff简单而有效的模型部署CI/CD流水线和模型版本管理机制,这可以作为软件开发最佳实践和SageMaker MME的参考实现。您可以在GitHub上找到使用SageMaker MME托管多个模型的代码示例。