代码之家  ›  专栏  ›  技术社区  ›  mon

SageMaker-澄清CloudFormation中的SageMaker实体

  •  0
  • mon  · 技术社区  · 5 年前

    提问

    我想澄清一下AWS中的实体:SageMaker。

    SageMaker模型

    当查看图表时 Deploy a Model on Amazon SageMaker Hosting Services ,the 模型 SageMaker中的工件是ML算法docker容器在模型训练阶段生成的数据,并存储在S3 bucket中。

    enter image description here

    然而,AWS:SageMaker::Model似乎已经捕获了一个docker镜像,以便在SageMaker端点实例中运行推理代码。S3存储桶中没有引用模型数据。因此,我想知道为什么它被称为AWS::SageMaker:: 模型 以及为什么不称为AWS::SageMaker:: 推断图片 .

    1-1. 是什么 模型 AWS SageMaker?

    1-2. 它是一个docker镜像(算法)来进行预测/推理,而不是运行算法的数据吗?

    1-3. AWS是否将运行时(docker runtime+用于推理的docker镜像)称为Model?

    AWS::SageMaker::Model

    Type: AWS::SageMaker::Model
    Properties: 
      Containers: 
        - ContainerDefinition
      ExecutionRoleArn: String
      ModelName: String
      PrimaryContainer: 
        ContainerDefinition
      Tags: 
        - Tag
      VpcConfig: 
        VpcConfig
    

    S3中模型数据的SageMaker端点或SageMaker估计器

    SageMaker估计器有一个参数 输出路径 如in Python SDK Estimators .

    S3位置,用于保存训练结果(模型工件和输出文件)。如果未指定,结果将存储到默认存储桶中。如果具有特定名称的bucket不存在,则估计器在fit()方法执行期间创建bucket。

    对于Python ML环境,我们可以使用 pickle 导出数据并重新加载回模型,如所示 3.4. Model persistence 我们也可以这样做 Spark ML .

    2-1. SageMaker中与AWS::SageMaker::Model中没有引用S3存储桶中数据的参数的等效物是什么?

    2-2. SageMaker Estimator可以使用S3存储桶中的模型数据重新创建吗?

    SageMaker估算器

    我原以为在CloudFormation中会有一个资源来定义SageMaker估计器,但看起来没有。

    3-1. 请帮助理解是否有原因。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Thom Lane    3 年前

    首先澄清一些概念:Amazon SageMaker模型是对模型工件(即训练模型)、相关推理环境(即Docker容器)和推理源代码的引用。估计器用于训练模型并输出模型数据(即。 model.tar.gz )由模型使用。模型不引用训练代码(因此无法从模型构建估计器),也不引用任何推理数据:这些数据被传递给端点或批处理变换。

    解决您的大部分问题:您可以指定 ModelDataUrl 在a ContainerDefinition 对于 AWS::SageMaker::Model 。您通常会将Amazon S3路径引用到 model.tar.gz 这是亚马逊SageMaker培训作业的输出。

        2
  •  0
  •   Tobias Senst    2 年前

    我会尽量为你提供更多的背景。也许引起一点困惑的是你混淆了 Sagemaker Python SDK 与实际 Sagemaker API 由于SDK实现了API调用,因此来自SDK的构造没有反映在API中:

    1-1:A 模型 在sagemaker中,指的是模型伪影和推理图像,两者都必须与模型的容器规范一起给出。请参阅 CreateModel API

    "Containers": [ 
          { 
             ...
             "Image": "string",
             "ModelDataUrl": "string",
             "ModelPackageName": "string",
             ...
          }
       ],
    

    还有 模型数据URL 是您打包的模型artificiat(例如model.tar.gz)的s3位置吗 图片 给出包含推理代码的图像的位置。如果你使用 [CreateTrainingJob][4] 你在当地储存的一切 /opt/ml/output/ 文件夹将被压缩并存储到 S3输出路径 你设置。指定模型工件和图像的另一种方法是,将模型注册到Sagemaker模型注册表中,通过创建模型,您必须在字段中提供模型包arn 模型包名称 但模型包中包含了图像和模型伪影。(请注意 图片 模型数据URL 或仅 模型包名称 可用于创建模型。 创建Sagemaker模型 CDK 使用这个类 https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_sagemaker.CfnModel.html .

    1-2:用于预测的docker镜像必须实现一个能够处理请求的Rest Service /ping 用于活性检查和 /invocations 其包含有效载荷。要设置这样的服务,您可以使用例如我们的FAST-API Multi Model Server 来自亚马逊。请参阅 Use your own inference code 。您也可以在一个图像中包含训练和推理代码。为了表明图像是在推理模式下运行的,Sagemaker使用参数调用python脚本 serve .

    2-1. 培训作业期间存储在本地目录中的所有内容 /opt/ml/输出/ 被压缩并作为模型工件model.tar.gz存储在您提供的s3输出路径中。是否将其他文件存储在那里取决于您。如果模型是由Sagemaker端点部署的。docker镜像将包含一个 /opt/ml/model 复制模型工件解压缩内容的目录。对于推理代码,您可以从那里加载模型。

    2-2. 我还没有看到用现有的模型工件重新创建Sagemaker Estimator。你要找的也许是 incremental training 但是,如果你需要从头开始进行初始化,最好的方法是将现有的模型工件作为训练的输入或使用检查点。两者都允许您在训练期间加载模型并继续。

    3-1. 估算师属于 Sagemaker Python SDK SDK包含类似Estimator的类,该类使用 Sagemaker API 例如,Estimator类使用 CreateTrainingJob 设置并开始模型训练。Cloudformation仅包含来自API的构造,而不包含来自SDK的构造。不幸的是,CDK也不完整。例如,目前它不支持CreateModelPackage API。但我想在未来。