AWS发布ml-container-creator:轻松实现SageMaker上的BYOC部署

AWS宣布推出开源项目ml-container-creator,旨在简化在Amazon SageMaker上构建和部署自定义机器学习容器的过程。该工具通过Yeoman生成器自动创建样板代码和配置文件,支持scikit-learn、xgboost、TensorFlow等主流框架,帮助团队专注于模型性能与优化,而无需深入容器化细节。

AWS很高兴宣布推出开源项目awslabs/ml-container-creator,以简化在Amazon SageMaker上构建和部署自定义机器学习模型的过程。一些客户在尝试利用自带容器(BYOC)范式在Amazon SageMaker AI的托管服务基础设施上托管其预测模型时面临挑战。部署和服务预测及生成模型的方法多种多样,每种都有其自身的优势。这种灵活性可能令人眼花缭乱,引发诸如:我应该用Flask还是FastAPI来服务模型?我应该使用vLLM还是SGLang?实现SageMaker AI所需API端点的最佳方式是什么?通过生成构建精简、高性能的BYOC风格容器所需的样板代码和配置文件,该项目让机器学习(ML)团队能够专注于其预测工作负载、性能、优化和安全性,而无需担心容器化的复杂性。

ml-container-creator提供了一个易于使用的引导流程,让不熟悉BYOC的客户能够立即开始托管他们的模型。同时,它也为高级用户提供了定制生成资产的灵活性。客户可以快速使用他们首选的机器学习框架(包括scikit-learn、xgboost、TensorFlow等)在AWS云中具有成本效益的CPU或GPU加速实例上部署其模型。

SageMaker AI允许客户利用BYOC在托管服务基础设施上托管自定义预测模型。客户可以包含他们首选的库、依赖项和算法,以利用SageMaker AI托管端点进行预测推理。通过使用BYOC,数据科学家和ML工程师无需考虑容器化模型工作负载的一级要求(例如实现用于健康检查的/ping API端点)。当ML团队无需管理样板代码时,他们就有精力专注于其ML工作负载的性能、优化和安全性。

此外,生成的BYOC资产让客户能够完全控制,使容器保持精简,仅使用其模型所需的包。通过导航引导生成过程,客户可以使用该解决方案生成的模板化资产立即开始托管模型。这种REPL风格的交互由一个基于简单决策逻辑的Yeoman生成器驱动,该逻辑可以在仓库根目录的index.js文件中查看。

ml-container-creator如何工作?

ml-container-creator项目通过使用开源Yeoman脚手架框架将模板变量注入样板文件来工作。Yeoman生成器提示用户回答问题,然后使用用户提供的输入生成模板文件。Yeoman生成器可以引入分支逻辑、开放字段和条件生成,以确保最终生成的文件符合用户的规范。

根据生成过程中选择的选项,一个典型项目的结构如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
your-project/
├── code/
│   ├── serve.py              # 主推理服务器
│   ├── model_handler.py      # 框架特定的模型处理
│   ├── wsgi.py              # WSGI入口点(仅限Flask)
│   └── start_server.py      # 服务器启动脚本
├── sample_model/
│   ├── train_abalone.py     # 训练脚本
│   ├── test_inference.py    # 本地推理测试
│   └── abalone_model.*      # 训练好的模型文件
├── test/
│   ├── test_model_handler.py # CLI测试工具
│   └── test_local_image.sh   # Docker容器测试
├── deploy/
│   └── deploy.sh            # SageMaker部署脚本
├── Dockerfile               # 容器定义
├── requirements.txt         # Python依赖项
└── nginx.conf              # 反向代理配置

以requirements.txt文件为例。当用户使用xgboost框架生成BYOC风格容器时,Yeoman会将xgboost依赖项注入requirements文件。同样,如果用户选择scikit-learn作为首选的预测框架,Yeoman会使用如下所示的模板语法注入scikit-learn和joblib依赖项。

1
2
3
4
5
6
7
8
<% if (framework === 'sklearn') { %># Scikit-learn依赖项
scikit-learn==1.7.1
joblib==1.4.2
<% } else if (framework === 'xgboost') { %># XGBoost依赖项
xgboost==2.1.3
<% } else if (framework === 'tensorflow') { %># Tensorflow依赖项
setuptools>=65.0.0
tensorflow==2.20.0

ml-container-creator生成脚本也具备分支逻辑。客户可以选择使用Abalone数据集生成示例训练和推理脚本。如果客户选择生成这些文件,生成的项目将包含使用所选框架的示例训练和测试脚本。或者,客户可以拒绝生成此示例模型。生成的项目文件将仅包含部署客户提供的模型文件所需的资产。

生成时提供哪些选项?

ml-container-creator项目是一个JavaScript项目,使用Yeoman生成模板化的Dockerfile、配置文件、Python文件和Shell脚本。当客户初始化一个ml-container-creator项目时,他们首先选择一个项目名称,然后选择生成文件存放的目录。项目名称用于少数几个地方(如生成的Dockerfile)以标记资产并保持生成文件的组织性。它还用于提供默认的输出目录名称,该名称后缀当前时间戳。所有生成的文件都位于此目录中。

1
2
3
📋 项目配置
? 项目名称是什么? ml-container-creator
? 输出目录将在哪里? ./ml-container-creator-2025-10-30T01-08-04

在该仓库发布时,客户可以选择以下几种预测框架进行模型托管:

  • scikit-learn(支持pkl和joblib格式)
  • xgboost(支持json、model和ubj格式)
  • tensorflow(支持keras、h5和SavedModel格式)
  • transformers(实验性,未完全支持)
1
2
3
4
5
6
🔧 核心配置
? 您使用哪个ML框架? (使用箭头键)
❯ sklearn 
  xgboost 
  tensorflow 
  transformers

目前,ml-container-creator仅支持将模型部署到Amazon SageMaker AI的us-east-1区域。客户可以选择两种实例类型:CPU优化实例(ml.m6g.large)和GPU启用实例(ml.g5.xlarge)。

1
2
3
4
5
💪 基础设施与性能
? 部署目标? sagemaker
? 实例类型? cpu-optimized
? 目标AWS区域? (使用箭头键)
❯ us-east-1

客户可以通过修改生成的文件来更改部署区域和实例类型(或者任何模板化的变量):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{project_name}/deploy/build_and_push.sh

# 配置
IMAGE_NAME="sagemaker-generate-byoc"
AWS_REGION="us-east-1"
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
ECR_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${IMAGE_NAME}"
TIMESTAMP=$(date +%s)
MODEL_NAME="sklearn-model-${TIMESTAMP}"
ENDPOINT_CONFIG_NAME="sklearn-endpoint-config-${TIMESTAMP}"
ENDPOINT_NAME="sklearn-endpoint-${TIMESTAMP}"
INSTANCE_TYPE="ml.m6g.large"

生成容器后如何测试模型?

ml-container-creator项目包含一个基本的测试套件,用于测试容器化模型是否存在基本操作问题。测试脚本是通用的,但ml-container-creator以Abalone分类器为例进行基本测试。示例模型是预设的且未经优化,始终返回相同的输出。此模型仅用于概念验证,不应用于生产工作负载。

1
2
3
4
5
6
7
📦 模块选择
? 包含示例Abalone分类器? No
? 包含测试套件? Yes
? 测试类型? (按<空格>选择,<a>切换全选,<i>反转选择,<回车>继续)
❯◉ local-model-cli
 ◉ local-model-server
 ◉ hosted-model-endpoint

通过选择加入Abalone分类器和测试套件,客户可以运行四种可能的测试,其范围涵盖BYOC范式的不同层面:

  1. 最内层是模型层。模型层的测试确认模型可以接收数据点向量并返回输出预测。sample_model/test_inference.py代码文件在sample_model/train_abalone.py训练完示例Abalone模型后,将预定义的数据向量发送给它。此测试确认模型可以对新数据执行推理。
  2. 第二层是模型处理程序层。模型处理程序层的测试确认模型处理程序代码可以使用客户指定的框架(例如tensorflow、xgboost等)来服务模型。此测试将模型加载到内存中,并以与打包到容器后相同的方式执行推理。
  3. 第三层是容器层。此测试构建容器,启动Flask或FastAPI服务器,并通过/invocations API端点处理推理请求。默认情况下,所有这些都在本地的8080端口上完成。
  4. 第四层,也是最外层,是端点层。此测试要求容器已构建并推送到ECR仓库,随后部署到AWS SageMaker AI托管的推理端点。要运行此测试,您必须将端点名称作为命令行参数传递给脚本。此测试获取推理请求,并通过Internet将其发送到托管您刚刚构建的BYOC容器的端点。

如果所有这些测试都通过,那么您已成功使用BYOC范式将容器部署到SageMaker端点。

ml-container-creator目前还不擅长的方面

ml-container-creator项目旨在帮助客户轻松地将预测推理模型部署到SageMaker。在发布时,它对基于Transformer的容器的支持能力有限,仅提供vLLM和SGLang的模板容器镜像。对基于Transformer的服务架构和远程容器构建的配置支持已在路线图中。

如何开始使用这个包?

要开始使用ml-container-creator,请从GitHub下载该仓库并导航到仓库目录。然后,安装必要的库,并将生成器链接到您的npm安装。接着,调用yo并从已安装的生成器列表中选择该生成器。

1
2
3
4
5
git clone https://www.github.com/awslabs/ml-container-creator
cd ml-container-creator/
npm install
npm link
yo
1
2
3
4
5
6
7
8
9
? 'Allo Ferguson! 您想做什么? (使用箭头键)
  运行一个生成器
❯ Ml Container Creator 
  ──────────────
  更新您的生成器 
  安装一个生成器 
  寻求帮助 
  退出! 
(上下移动以显示更多选项)

总结

通过简化BYOC部署流程,ml-container-creator赋能客户(无论新手还是老手),让他们能够专注于核心的机器学习挑战,并快速将其预测模型投入生产。这个开源项目进一步推动了使机器学习对各种规模的企业都更易于访问和更高效的目标。我们欢迎社区的反馈和贡献。请通过awslabs/ml-container-creator加入我们,无论是提交问题、贡献代码、识别错误还是提议路线图项目。

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