亚马逊 SageMaker 构造库
本单元中更高层次的构件的API是实验性的并正在积极开发中. 在今后任何版本中,它们都须作非背向相容的修改或去除。 这些是 不适用 语义版本 模型和断开的更改 在发行笔记中宣布. 这意味着虽然你可能使用它们,但可能需要更新 当更新到此软件包的更新版本时,您的源代码.
Amazon SageMaker向每个开发者和数据科学家提供建设、培训以及开发的能力 迅速部署机器学习模型. Amazon SageMaker是一个完全管理的服务,涵盖 整个机器学习工作流程来标记和准备您的数据,选择一个算法,训练 模型,调和和优化它用于部署,作出预测,并采取行动。 你们的模特儿都到了 生产速度快得多,努力少得多,成本更低.
型号
为了与亚马逊·塞克制作人一起创建机器学习模型 Model 构造。 这个构造
包括可用于定义模型组件的属性,包括模型推论
代码作为多克图像和一组单独的模型数据文物。 见 自动取款机
文档
学习更多关于SageMaker模型.
单一集装箱模型
如果单个容器足以进行推断,则可以定义一个 单容器模型 :
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
import * as path from 'path';
const image = sagemaker.ContainerImage.fromAsset(path.join('path', 'to', 'Dockerfile', 'directory'));
const modelData = sagemaker.ModelData.fromAsset(path.join('path', 'to', 'artifact', 'file.tar.gz'));
const model = new sagemaker.Model(this, 'PrimaryContainerModel', {
containers: [
{
image: image,
modelData: modelData,
}
]
});
推论管道模型
推导管是一种亚马逊SageMaker模型,由多相的线性序列组成 处理数据推断请求的容器。 见 自动取款机 文档 学习 更多关于SageMaker推断管道。 为了定义推论管道,你可以提供 您的型号的额外容器 :
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
declare const image1: sagemaker.ContainerImage;
declare const modelData1: sagemaker.ModelData;
declare const image2: sagemaker.ContainerImage;
declare const modelData2: sagemaker.ModelData;
declare const image3: sagemaker.ContainerImage;
declare const modelData3: sagemaker.ModelData;
const model = new sagemaker.Model(this, 'InferencePipelineModel', {
containers: [
{ image: image1, modelData: modelData1 },
{ image: image2, modelData: modelData2 },
{ image: image3, modelData: modelData3 }
],
});
模型属性
网络隔离
如果您启用 网络隔离,容器无法发出任何外出网络呼叫,甚至无法向亚马逊S3等其他AWS服务. 此外,没有向集装箱运行时间环境提供AWS证书.
为了实现网络隔离,设置 networkIsolation 属性改为 true数字 :
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
declare const image: sagemaker.ContainerImage;
declare const modelData: sagemaker.ModelData;
const model = new sagemaker.Model(this, 'ContainerModel', {
containers: [
{
image,
modelData,
}
],
networkIsolation: true,
});
容器图像
推论代码可以储存在亚马逊EC2集装箱登记簿(Amazon ECR)中,该登记簿是指定的
通过 ContainerDefinition是因为 image 属性,该属性接受扩展的类 ContainerImage
抽象基础课.
资产图像
引用包含 Docker 文件的本地目录 :
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
import * as path from 'path';
const image = sagemaker.ContainerImage.fromAsset(path.join('path', 'to', 'Dockerfile', 'directory'));
ECR 图像
引用 ECR 中可用的图像 :
import * as ecr from 'aws-cdk-lib/aws-ecr';
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
const repository = ecr.Repository.fromRepositoryName(this, 'Repository', 'repo');
const image = sagemaker.ContainerImage.fromEcrRepository(repository, 'tag');
DLC 图像
参考深层学习容器图像 :
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
const repositoryName = 'huggingface-pytorch-training';
const tag = '1.13.1-transformers4.26.0-gpu-py39-cu117-ubuntu20.04';
const image = sagemaker.ContainerImage.fromDlc(repositoryName, tag);
型号活体
如果你选择从你的推论代码中解开你的模型文物(这是自然的)
推论代码和模型文物之间的变化率不同,这些文物可以是:
通过 modelData 属性,该属性接受扩展的类 ModelData 抽象
基础课。 默认是没有模型文物与模型相关.
资产模型数据
引用本地模型数据 :
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
import * as path from 'path';
const modelData = sagemaker.ModelData.fromAsset(path.join('path', 'to', 'artifact', 'file.tar.gz'));
S3 模型数据
将一个S3桶和物件键作为模型的文物:
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
const bucket = new s3.Bucket(this, 'MyBucket');
const modelData = sagemaker.ModelData.fromBucket(bucket, 'path/to/artifact/file.tar.gz');
模式主机
Amazon SageMaker为模型部署提供模型托管服务. 亚马逊 SageMaker 提供 HTTPS 端点 : 您的机器学习模型可以提供推论 .
端点配置
通过使用 EndpointConfig 构造,您可以定义一组端点配置
用于提供一个或多个终点。 在此配置中,您可识别一个或多个模式
部署以及您想要提供 Amazon SageMaker 的资源。 您定义一个或多个
生产变体,每个变体都确定一个模型. 每个生产变体还描述了
您想要提供 Amazon SageMaker 的资源。 如果您正在托管多个模型, 您也会
指定一个变量加权,以指定要分配给每个模型的流量。 譬如说,
假设你想 托管两个型号,A和B, 你分配交通重量 2 对于型号A和1
b. Amazon SageMaker将三分之二的流量分配给A型模型,三分之一的流量分配给
模式B:
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
declare const modelA: sagemaker.Model;
declare const modelB: sagemaker.Model;
const endpointConfig = new sagemaker.EndpointConfig(this, 'EndpointConfig', {
instanceProductionVariants: [
{
model: modelA,
variantName: 'modelA',
initialVariantWeight: 2.0,
},
{
model: modelB,
variantName: 'variantB',
initialVariantWeight: 1.0,
},
]
});
集装箱启动健康检查超时
您可以指定您推断容器的超时值, 以配置方式通过健康检查
页:1 containerStartupHealthCheckTimeout 属性。 当模型需要更长的时间,这个就有用了
初始化并避免过早健康检查失败 :
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
declare const model: sagemaker.Model;
const endpointConfig = new sagemaker.EndpointConfig(this, 'EndpointConfig', {
instanceProductionVariants: [
{
model: model,
variantName: 'my-variant',
containerStartupHealthCheckTimeout: cdk.Duration.minutes(5), // 5 minutes timeout
},
]
});
超时值必须在60秒到1小时(3600秒)之间. 如未指明, Amazon SageMaker使用默认超时行为.
无服务器推论
Amazon SageMaker 无服务器 推论(英語:Introduction)是一种目的所建的推论选项,它使您易于部署并缩放ML模型. 无服务器端点会根据流量自动启动计算资源并进行大小调整,从而无需选择实例类型或管理缩放政策. 更多信息见 SageMaker 无服务器推论。 。 。 .
要创建无服务器端点配置,请使用 serverlessProductionVariant 属性 :
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
declare const model: sagemaker.Model;
const endpointConfig = new sagemaker.EndpointConfig(this, 'ServerlessEndpointConfig', {
serverlessProductionVariant: {
model: model,
variantName: 'serverlessVariant',
maxConcurrency: 10,
memorySizeInMB: 2048,
provisionedConcurrency: 5, // optional
},
});
无服务器推论对于断断续续或无法预测的流量模式的工作量来说是理想的. 您可以配置 :
maxConcurrency: 最大同时援引(1-200)memorySizeInMB: 1GB增量的内存分配(1024,2048,3072,4096,5120,或6144 MB)provisionedConcurrency: 可选预武装能力来减少起冷
说明: 即使终点不是处理请求,提供货币也会产生费用。 只有在你需要尽可能地减少寒冷的起动时才使用.
您不能在同一端点配置中混合无服务器和实例变量 .
终点
当你从一个 EndpointConfig,亚马逊 SageMaker 启动 ML 计算
实例和部署配置中指定的模型。 来得到推断
模式,客户端应用程序向亚马逊 SageMaker 运行时 HTTPS 端点发送请求. 对于
有关API的更多信息,参见
输入端点
API (英语). 定义终点至少需要相关的终点配置:
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
declare const endpointConfig: sagemaker.EndpointConfig;
const endpoint = new sagemaker.Endpoint(this, 'Endpoint', { endpointConfig });
自动缩放
为了能够在生产变体上自动缩放,请使用 autoScaleInstanceCount 方法 :
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
declare const model: sagemaker.Model;
const variantName = 'my-variant';
const endpointConfig = new sagemaker.EndpointConfig(this, 'EndpointConfig', {
instanceProductionVariants: [
{
model: model,
variantName: variantName,
},
]
});
const endpoint = new sagemaker.Endpoint(this, 'Endpoint', { endpointConfig });
const productionVariant = endpoint.findInstanceProductionVariant(variantName);
const instanceCount = productionVariant.autoScaleInstanceCount({
maxCapacity: 3
});
instanceCount.scaleOnInvocations('LimitRPS', {
maxRequestsPerSecond: 30,
});
关于每例确定最大要求的负载测试指南,请参见 这个 文档。 。 。 .
计量
为监测生产变体的 " 云表 " 计量标准,使用一个或多个计量便利 方法:
import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
declare const endpointConfig: sagemaker.EndpointConfig;
const endpoint = new sagemaker.Endpoint(this, 'Endpoint', { endpointConfig });
const productionVariant = endpoint.findInstanceProductionVariant('my-variant');
productionVariant.metricModelLatency().createAlarm(this, 'ModelLatencyAlarm', {
threshold: 100000,
evaluationPeriods: 3,
});