

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS Marketplace 中的机器学习产品
<a name="machine-learning-products"></a>

作为 AWS Marketplace 卖家，您可以创建机器学习（ML）算法和模型，供买家在 AWS 中部署。本主题提供 AWS Marketplace 中上架的 Amazon SageMaker AI 产品类型的相关信息。

AWS Marketplace 中提供两种 SageMaker AI 产品类型：

**模型包**  
 一种预训练模型，用于进行预测，无需买家进一步培训。

**算法**  
 一种模型，要求买家在做出预测之前提供训练数据。包括训练算法。

买家可通过 Amazon SageMaker AI 控制台或者 AWS Marketplace 购买这些产品。买家可以查看产品描述、文档、客户评价、定价及支持信息。当他们订阅模型包产品或算法产品时，该产品会自动添加至其 SageMaker AI 控制台的产品列表中。买家还可以使用 AWS SDK、AWS Command Line Interface（AWS CLI）或 SageMaker AI 控制台来创建完全托管的 REST 推理端点或对批量数据执行推理。

 要获得有关使用 Amazon SageMaker AI 创建机器学习产品的支持，请联系 [AWS Marketplace 卖家运营](https://aws.amazon.com/marketplace/management/contact-us/)团队。

# 了解机器学习产品
<a name="ml-overview"></a>

 AWS Marketplace 支持两种使用 Amazon A SageMaker I 的机器学习产品类型。模型包产品和算法产品这两种类型都会生成用于预测的可部署推理模型。

## SageMaker AI 模型包
<a name="ml-amazon-sagemaker-model-package"></a>

 A [mazon SageMaker AI 模型包](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-marketplace.html#sagemaker-mkt-model-package)产品包含预训练模型。预训练的模型可以部署在 SageMaker AI 中，以便实时或分批进行推断或预测。本产品包含经过训练的推理组件，其中包含模型构件（如有）。作为卖家，您可以使用 SageMaker AI 训练模型或自带模型。

## SageMaker 人工智能算法
<a name="ml-amazon-sagemaker-algorithm"></a>

 买家可以使用 A [SageMaker I 算法](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-marketplace.html#sagemaker-mkt-algorithm)产品来执行完整的机器学习工作负载。一个算法产品有两个逻辑组件：训练和推理。在 SageMaker AI 中，买家使用自己的数据集使用您的训练组件创建训练作业。训练组件中的算法完成后，它会生成机器学习模型的模型工件。 SageMaker AI 将模型工件保存在买家的亚马逊简单存储服务 (Amazon S3) 存储桶中。 然后，在 SageMaker AI 中，购买者可以部署您的推理组件以及生成的模型工件，以实时或批量执行推理（或预测）。

## 部署推理模型
<a name="ml-deploying-an-inference-model"></a>

 无论推理模型是根据模型包还是算法创建的，都有两种部署方法：
+  **端点**-此方法使用 SageMaker AI 来部署模型并创建 API 端点。买家可以将此端点用作其后端服务的一部分，为其应用程序提供支持。当数据发送到端点时， SageMaker AI 会将其传递到模型容器，并以 API 响应的形式返回结果。端点和容器会继续运行，直到被买家停止。
**注意**  
 在中 AWS Marketplace，端点方法被称为*实时推理*，在 SageMaker AI 文档中，它被称为*托管服务*。有关更多信息，请参阅[在 Amazon A SageMaker I 中部署模型](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-deployment.html)。
+  **批量转换任务** – 在此方法中，买家将数据集存储在 Amazon S3 中进行推理。当批量转换任务启动时， SageMaker AI 会部署模型，将数据从 S3 存储桶传递到模型的容器，然后将结果返回到 Amazon S3 存储桶。任务完成后， SageMaker AI 会停止作业。有关更多信息，请参阅[使用批量转换](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html)。
**注意**  
 这两种方法对模型都是透明的，因为 SageMaker AI 会将数据传递给模型并将结果返回给买方。

# 机器学习产品生命周期
<a name="ml-product-lifecycle"></a>

中的机器学习产品由一个或多个软件版本和关联的元数据 AWS Marketplace 组成。产品配置包括名称、描述、使用说明、定价、分类和搜索关键字等基本属性。

## 机器学习产品创建流程
<a name="ml-publication-process"></a>

 要在中发布机器学习产品 AWS Marketplace，您必须完成以下操作：

1. [在 SageMaker AI 中准备您的产品](ml-prepare-your-product-in-sagemaker.md)

1. [将您的商品发布在 AWS Marketplace](ml-publishing-your-product-in-aws-marketplace.md)

 创建机器学习产品后，您可以对其进行编辑和管理。有关更多信息，请参阅[管理机器学习产品](ml-product-management.md)。

## 机器学习产品状态
<a name="ml-product-status"></a>

 新产品初始状态下可见性受限，只有被列入允许列表的账户和产品创建者才能访问。经过测试和验证后，您可以发布您的商品，使其在 AWS Marketplace 目录中可供所有买家购买。中的产品 AWS Marketplace 可以具有以下状态值：


| Status | 定义 | 
| --- |--- |
| 生产前调试 |  该状态表示产品信息尚未完善，您仍在补充相关内容。首次保存并退出自助服务体验后， AWS Marketplace 创建一个未发布的产品，其中包含已完成步骤中的信息。处于该状态时，您可以继续添加信息或修改已提交的详细信息。  | 
| 有限 | 产品在提交给 AWS Marketplace 并通过所有验证检查后即获得此状态。此时，该商品的详情页面仅供您的账户和列入许可名单的实体访问。您可以通过此详情页面进行商品测试。 | 
| Public | 当您准备让买家可以看到您的商品以供订阅时，请在控制台中更新商品的可见性。处理完毕后，产品将从 “受限” 状态转换为 “公开” 状态。有关 AWS 指导方针的信息，请参阅[创建机器学习产品的要求和最佳实操](ml-listing-requirements-and-best-practices.md)。 | 
| 受限 |  为防止新用户订阅您的产品，您可以通过更新可见性设置进行限制。“受限”状态下，已有被列入允许列表的用户可继续使用产品，但产品将不再对公众可见，也不再向新用户开放。  | 

 如需更多信息或帮助，请联系 [AWS Marketplace 卖家运营团队](https://aws.amazon.com/marketplace/management/contact-us/)。

# 的机器学习产品定价 AWS Marketplace
<a name="machine-learning-pricing"></a>

您可以在中为您的 Amazon A SageMaker I 产品从多种可用的定价模式中进行选择 AWS Marketplace。订阅你的产品的买家在自己的 SageMaker AI 中运行它 AWS 账户。买家的价格是在其 AWS 账户 中运行的资源的基础设施费用和您设定的产品定价的组合。以下各节提供有关 SageMaker AI 产品定价模型的信息 AWS Marketplace

**Topics**
+ [基础设施定价](#ml-infrastructure-pricing)
+ [软件定价](#ml-software-pricing)

## 基础设施定价
<a name="ml-infrastructure-pricing"></a>

购买者在使用您的产品时应承担 SageMaker 人工智能的所有基础设施成本。这些费用由 Amazon AI 定价页面设定， AWS 并可在 [Amazon A SageMaker I 定价](https://aws.amazon.com/sagemaker/pricing/)页面上找到。

## 软件定价
<a name="ml-software-pricing"></a>

由您决定向买家 AWS Marketplace 收取使用您的产品的软件价格。在向 AWS Marketplace中添加机器学习产品时，您可以设置定价和条款。

每种实例类型的所有基础设施和软件价格均在买家订阅 AWS Marketplace 之前的产品列表页面上显示给买家。

**Topics**
+ [免费定价](#ml-pricing-free)
+ [每小时定价](#ml-pricing-hourly)
+ [推理定价](#ml-pricing-inference)
+ [免费试用](#ml-pricing-free-trial)

### 免费定价
<a name="ml-pricing-free"></a>

您可以选择免费提供您的产品。在这种情况下，买家只需支付基础设施成本。

### 每小时定价
<a name="ml-pricing-hourly"></a>

您可以按照 SageMaker AI 中运行的软件的每小时价格向您的产品提供每小时的价格。您可以为运行软件的每种实例类型收取不同的小时价格。当买家运行您的软件时， AWS Marketplace 跟踪使用情况，然后相应地向买家开具账单。用量按比例计算到分钟。

对于*模型包*产品，买家可以通过两种不同的方式运行您的软件。他们可以持续托管端点以执行实时推理或对数据集运行批量转换作业。您可以为买家运行软件的两种方式设置不同的定价。

对于*算法*产品，除了确定执行推理的价格（如前所述）外，您还可以确定训练作业的每小时价格。您可以为训练图像支持的每种实例类型收取不同的小时价格。

### 推理定价
<a name="ml-pricing-inference"></a>

当买家通过托管端点来运行您的软件以持续执行实时推理时，您可以选择设置每次推理的价格。

**注意**  
以下 ML 产品类型始终使用按小时定价：  
Batch 转换作业
异步推理端点
算法产品的训练作业
您可以独立于推理定价和推理定价来设置每种类型的价格。

默认情况下，在推理定价中，每次调用您的终端节点都会向您的买家 AWS Marketplace 收费。但是，在某些情况下，您的软件会在一次调用（也称为*迷你批处理*）中处理一批推理。对于端点部署，您可以指定 AWS Marketplace 应向买家收取单次调用费用的自定义推理数量。为此，请在调用的 HTTP 响应头中加入自定义计量头，如以下示例所示。此示例显示了一个向买家收取三次推理费用的调用。

```
X-Amzn-Inference-Metering: {"Dimension": "inference.count", "ConsumedUnits": 3}
```

**注意**  
对于推理定价， AWS Marketplace 仅向 HTTP 响应代码所在的请求向买方收费。`2XX`

### 免费试用
<a name="ml-pricing-free-trial"></a>

或者，您可以为产品创建免费试用并定义免费试用的天数。免费试用可能为 5–31 天。在免费试用期间，买家可以随意运行您的软件，无需为软件付费。在免费试用期间，买家仅需要支付基础设施费用。试用期结束后，他们将按正常的软件价格和基础设施成本收费。

当买家订阅免费试用的产品时，他们会收到一封欢迎电子邮件。该消息包括免费试用期限、计算的到期日期以及取消订阅的详细信息。在到期日期的前 3 天，将发送提醒电子邮件。

如果您在中为产品提供免费试用 AWS Marketplace，则表示您同意免费试[用的特定退款政策](https://docs.aws.amazon.com/marketplace/latest/userguide/refunds.html#refund-policy)。

**注意**  
有关机器学习专属优惠的信息，请参阅[专属优惠](https://docs.aws.amazon.com/marketplace/latest/userguide/private-offers-overview.html)。

# 中机器学习产品的服务限制和配额 AWS Marketplace
<a name="ml-service-restrictions-and-limits"></a>

本部分介绍 AWS Marketplace中的机器学习 (ML) 产品的限制和限额。

**Topics**
+ [网络隔离](#ml-network-isolation)
+ [映像大小](#ml-image-size)
+ [存储大小](#ml-storage-size)
+ [实例大小](#ml-instance-size)
+ [推理的有效负载大小](#ml-payload-size-for-inference)
+ [推理的处理时间](#ml-processing-time-for-inference)
+ [服务配额](#ml-service-quotas)
+ [无服务器推理](#severless-inference)
+ [托管的竞价型训练](#ml-managed-spot-training)
+ [Docker 镜像和 AWS 账户](#ml-docker-images-and-aws-accounts)
+ [根据内置算法发布模型包或 AWS Marketplace](#ml-publishing-model-packages-from-built-in-algorithms-or-aws-marketplace)
+ [AWS 区域 支持发布](#ml-supported-aws-regions-for-publishing)

## 网络隔离
<a name="ml-network-isolation"></a>

出于安全目的，当买家订阅您的容器化产品时，Docker 容器在隔离（无网络访问）的环境中运行。在您创建容器时，请勿通过互联网进行传出调用，否则将失败。对的调用 AWS 服务 也会失败。

## 映像大小
<a name="ml-image-size"></a>

您的 Docker 映像大小受 Amazon Elastic Container Registry (Amazon ECR) [服务限额](https://docs.aws.amazon.com/AmazonECR/latest/userguide/service_limits.html)的约束。Docker 映像大小会影响训练作业、批量转换作业和端点创建期间的启动时间。为了获得更好的性能，请保持最佳 Docker 映像大小。

## 存储大小
<a name="ml-storage-size"></a>

当您创建终端节点时，Amazon SageMaker AI 会将亚马逊弹性区块存储 (Amazon EBS) 存储卷附加到托管该终端节点的每个机器学习计算实例。（终端节点也称为*实时推理*或 *Amazon A SageMaker I 托管服务*。） 存储卷的大小取决于实例类型。有关更多信息，请参阅 *Amazon A SageMaker I 开发人员指南*中的[主机实例存储卷](https://docs.aws.amazon.com/sagemaker/latest/dg/host-instance-storage.html)。 

有关批量转换，请参阅 *Amazon A SageMaker I 开发者指南*[中的批量转换中的存储](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform-storage.html)。

## 实例大小
<a name="ml-instance-size"></a>

SageMaker AI 提供了一系列针对不同机器学习用例进行了优化的实例类型。实例类型包括 CPU、GPU、内存和网络容量的不同组合。实例类型便于您灵活选择适合构建、训练和部署机器学习模型的资源组合。有关更多信息，请参阅 [Amazon SageMaker AI ML 实例类型](https://aws.amazon.com/sagemaker/pricing/instance-types/)。

## 推理的有效负载大小
<a name="ml-payload-size-for-inference"></a>

 对于终端节点，将每次调用的输入数据的最大大小限制为 25 MB。此值无法调整。

对于批量转换，每次调用输入数据的最大大小为 100 MB。此值无法调整。

## 推理的处理时间
<a name="ml-processing-time-for-inference"></a>

对于一个端点，单次调用的最长处理时间为：常规响应 60 秒，流式响应 8 分钟。此值无法调整。

对于批量转换，每次调用的最大处理时间为 60 分钟。此值无法调整。

## 服务配额
<a name="ml-service-quotas"></a>

有关与训练和推理相关的配额的更多信息，请参阅 [Amazon A SageMaker I Service Q](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html#limits_sagemaker) uotas。

## 无服务器推理
<a name="severless-inference"></a>

中发布的模型包和算法 AWS Marketplace 无法部署到为 [Amazon A SageMaker I 无服务器推](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html)理配置的终端节点。为无服务器推理配置的端点要求模型具有网络连接。所有 AWS Marketplace 型号均在网络隔离下运行。有关更多信息，请参阅[无网络访问](https://docs.aws.amazon.com/marketplace/latest/userguide/ml-security-and-intellectual-property.html#ml-no-network-access)。

## 托管的竞价型训练
<a name="ml-managed-spot-training"></a>

对于来自的所有算法 AWS Marketplace，的值设置`MaxWaitTimeInSeconds`为 3,600 秒（60 分钟），即使实施了[托管点训练的检查点](https://docs.aws.amazon.com/sagemaker/latest/dg/model-managed-spot-training.html)。此值无法调整。

## Docker 镜像和 AWS 账户
<a name="ml-docker-images-and-aws-accounts"></a>

要发布，图片必须存储在卖家拥有的 Amazon ECR 存储库中。 AWS 账户 不可能发布存储在他人拥有的存储库中的图像 AWS 账户。

## 根据内置算法发布模型包或 AWS Marketplace
<a name="ml-publishing-model-packages-from-built-in-algorithms-or-aws-marketplace"></a>

无法发布使用 [Amazon A SageMaker I 内置算法](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html)或订 AWS Marketplace 阅算法的训练作业创建的模型包。

您仍然可以使用训练作业中的模型构件，但是发布模型包需要您自己的推理映像。

## AWS 区域 支持发布
<a name="ml-supported-aws-regions-for-publishing"></a>

AWS Marketplace 支持在符合以下条件 AWS 区域 的情况下发布模型包和算法资源：
+ [Amazon A SageMaker I 支持](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)的地区 
+ 默认选择加入的[可用区域](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)（例如，[ describe-regions](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html#ec2-describe-regions) 返回 `"OptInStatus": "opt-in-not-required"`） 

发布模型包或算法产品所需的所有资产都必须存储在您选择发布的同一区域。这包括以下这些：
+ 在 Amazon A SageMaker I 中创建的模型包和算法资源 
+ 上传到 Amazon ECR 存储库的推理和训练映像 
+ 存储在 Amazon Simple Storage Service 中并在模型包资源的模型部署期间动态加载的模型构件（如有） 
+ 存储在 Amazon S3 中的用于推理和训练验证的测试数据 

您可以在 SageMaker AI 支持的任何地区开发和培训您的产品。但是，在发布之前，您必须将所有资源复制到 AWS Marketplace 支持发布的区域，并在该区域中重新创建资源。

# Amazon A SageMaker I 的安全和知识产权
<a name="ml-security-and-intellectual-property"></a>

Amazon SageMaker AI 可保护您的知识产权和买家数据，以保护从中获得的模型和算法 AWS Marketplace。以下各节提供了有关 SageMaker 人工智能如何保护知识产权和客户数据安全的更多信息。

**Topics**
+ [保护知识产权](#ml-protecting-intellectual-property)
+ [无网络访问](#ml-no-network-access)
+ [客户数据安全](#ml-security-of-customer-data)

## 保护知识产权
<a name="ml-protecting-intellectual-property"></a>

 创建产品时，代码将打包在 Docker 容器映像中。有关更多信息，请参阅本指南下文中的[在 SageMaker AI 中准备您的产品](ml-prepare-your-product-in-sagemaker.md)。上传容器映像时，映像和构件在传输过程中和静止状态都会被加密。在发布之前，还会对映像进行漏洞扫描。

 为了帮助保护您的知识产权， SageMaker AI 仅允许买家通过 AWS 服务 端点访问您的产品。买家无法直接访问或拉取容器镜像或模型构件，也无法访问底层基础设施。

## 无网络访问
<a name="ml-no-network-access"></a>

 与买家创建 SageMaker 的人工智能模型和算法不同，当买家推出您的产品时 AWS Marketplace，模型和算法是在没有网络访问权限的情况下部署的。 SageMaker AI 在无法访问网络或 AWS 服务 端点的环境中部署映像。例如，容器映像无法对互联网、[VPC 端点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)上的服务或任何其他 AWS 服务进行出站 API 调用。

## 客户数据安全
<a name="ml-security-of-customer-data"></a>

 您的产品在买家的内部使用 SageMaker 人工智能运行 AWS 账户。因此，当买家使用您的产品进行数据推理时，您作为卖家无法访问他们的数据。

 对于算法产品，模型构件在每次训练作业结束后由您的训练映像输出。模型构件存储在买家的账户中。当买家使用您的推理映像部署模型时，会使用训练作业中的模型构件。要保护模型构件中可能包含的任何知识产权，请在输出之前对其进行加密。

**重要**  
 此安全模型可防止您的代码在运行时访问互联网。因此，您的代码无法使用互联网上的资源或库，因此请将依赖项打包到 Docker 容器映像中。如果您选择对训练作业中输出的构件进行加密，这一点尤为重要。运行时无法通过互联网访问加密和解密构件的密钥。它们必须与您的映像打包在一起。

 有关更多信息，请参阅 [Amazon A SageMaker I 中的安全性](https://docs.aws.amazon.com/sagemaker/latest/dg/security.html)。

# 中的机器学习报告 AWS Marketplace
<a name="ml-reporting"></a>

AWS Marketplace 为您的 Amazon A SageMaker I 产品生成报告，其中包括有关买家、财务、使用情况和税收的数据。所有报告均可在 “[报告” 页面 AWS Marketplace 管理门户 上找到](https://aws.amazon.com/marketplace/management/reports)。有关更多信息，请参阅[卖家报告](https://docs.aws.amazon.com/marketplace/latest/userguide/Reporting.html)。以下各节提供了机器学习产品报告的摘要信息。

**Topics**
+ [每日业务报告](#ml-daily-business-report)
+ [月度收入报告](#ml-monthly-revenue-report)
+ [支付报告](#ml-disbursement-report)
+ [其他报告和分析](#ml-other-reports)

## 每日业务报告
<a name="ml-daily-business-report"></a>

 每日业务报告为每个买家和产品提供实例类型、使用时长、软件费用收入以及其他详细信息。可以通过买家的 AWS 账户 身份证识别买家。有关更多信息，请参阅[每日业务报告](https://docs.aws.amazon.com/marketplace/latest/userguide/daily-business-report.html)。

## 月度收入报告
<a name="ml-monthly-revenue-report"></a>

 月度收入报告为您提供因使用您的软件而向买家收取的月度收入。有关更多信息，请参阅[月度账单收入报告](https://docs.aws.amazon.com/marketplace/latest/userguide/monthly-billed-revenue-report.html)。

## 支付报告
<a name="ml-disbursement-report"></a>

 月度支付报告提供了在软件费用结算周期内代表您收取的所有资金的明细。报告中反映的结算总金额应与存入您银行账户的金额一致。有关更多信息，请参阅[支付报告](https://docs.aws.amazon.com/marketplace/latest/userguide/monthly-disbursement-report.html)。

## 其他报告和分析
<a name="ml-other-reports"></a>

 有关其他可用报告，请参阅[卖家报告](https://docs.aws.amazon.com/marketplace/latest/userguide/dashboards.html)。

您也可以使用 AWS Marketplace中的可用[AWS Marketplace 中的卖家传输数据源](data-feed-service.md)创建自定义报告。

# 在 SageMaker AI 中准备您的产品
<a name="ml-prepare-your-product-in-sagemaker"></a>

在 AWS Marketplace 中发布产品之前，您必须在 Amazon SageMaker AI 中进行准备。AWS Marketplace 中提供两种 SageMaker AI 产品类型：模型包和算法。有关更多信息，请参阅 [AWS Marketplace 中的机器学习产品](machine-learning-products.md)。本主题概述了准备产品所需的三个步骤：

1. [将您的代码打包成图像以供机器学习产品使用 AWS Marketplace](ml-packaging-your-code-into-images.md) - 要准备模型包或算法产品，必须为产品创建 Docker 容器映像。

1. [将映像上传到 Amazon Elastic Container Registry](ml-uploading-your-images.md) - 将您的代码打包到容器映像中并在本地对其进行测试后，上传映像并对其进行扫描以查找已知漏洞。先修复所有漏洞，然后再继续。

1.  [创建你的 Amazon SageMaker AI 资源](ml-creating-your-amazon-sagemaker-resource.md) - 成功扫描映像后，您可以使用它们在 SageMaker AI 中创建模型包或算法资源。

# 将您的代码打包成图像以供机器学习产品使用 AWS Marketplace
<a name="ml-packaging-your-code-into-images"></a>

正在销售的机器学习产品 AWS Marketplace 使用 Amazon SageMaker AI 来创建和运行您为买家提供的机器学习逻辑。 SageMaker AI 运行包含你的逻辑的 Docker 容器镜像。 SageMaker AI 在安全且可扩展的基础架构中运行这些容器。有关更多信息，请参阅 [Amazon A SageMaker I 的安全和知识产权](ml-security-and-intellectual-property.md)。以下各节提供有关如何将代码打包到适用于 SageMaker AI 的 Docker 容器镜像中的信息。

**Topics**
+ [我要创建哪种类型的容器映像？](#ml-which-type-of-container-image-do-i-create)
+ [创建模型包映像](ml-model-package-images.md)
+ [创建算法映像](ml-algorithm-images.md)

## 我要创建哪种类型的容器映像？
<a name="ml-which-type-of-container-image-do-i-create"></a>

 两种类型的容器映像，即推理映像和训练映像。

 要创建模型包产品，您只需要一个推理映像。有关详细说明，请参阅[创建模型包映像](ml-model-package-images.md)。

 要创建算法产品，您需要训练映像和推理映像。有关详细说明，请参阅[创建算法映像](ml-algorithm-images.md)。

 要将代码正确打包到容器镜像中，容器必须符合 SageMaker AI 文件结构。容器必须公开正确的端点，以确保服务可以将数据传入和传出您的容器。以下各部分解释了此过程的细节。

**重要**  
 出于安全目的，当买家订阅您的容器化产品时，Docker 容器在隔离（无互联网连接）的环境中运行。在您创建容器时，请勿通过互联网进行传出调用，否则将失败。对的调用 AWS 服务 也会失败。想要了解更多信息，请参阅[Amazon A SageMaker I 的安全和知识产权](ml-security-and-intellectual-property.md)部分。

 或者，在创建推理和训练映像时，可以使用[可用的深度学习容器映像](https://aws.amazon.com/releasenotes/available-deep-learning-containers-images/)中的容器作为起点。这些映像已经用不同的机器学习框架正确打包。

# 创建模型包映像
<a name="ml-model-package-images"></a>

Amazon SageMaker AI 模型包是一种预先训练的模型，可以进行预测，不需要买家进行任何进一步的培训。您可以在 A SageMaker I 中创建模型包并在上发布您的机器学习产品 AWS Marketplace。以下各节将介绍如何为其创建模型包 AWS Marketplace。这包括创建容器映像以及在本地构建和测试映像。

**Topics**
+ [概述](#ml-model-package-images-overview)
+ [为模型包创建推理映像](#ml-creating-an-inference-image-for-model-packages)

## 概述
<a name="ml-model-package-images-overview"></a>

 模型包包含以下组件：
+  存储在 [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/) (Amazon ECR) 中的推理映像 
+  （可选）模型构件，单独存储在 [Amazon S3](https://aws.amazon.com/s3/) 中 

**注意**  
模型构件是模型用来进行预测的文件，通常是您自己的训练过程的结果。构件可以是模型所需的任何文件类型，但必须压缩为 .tar.gz。对于模型包，它们可以捆绑在您的推理图像中，也可以单独存储在 Ama SageMaker zon AI 中。存储在 Amazon S3 中的模型构件将在运行时加载到推理容器中。发布您的模型包时，这些项目会发布并存储在买家无法直接访问的 AWS Marketplace 自有的 Amazon S3 存储桶中。

**提示**  
如果您的推理模型是使用 Gluon、Keras、、、、 TensorFlow-Lite 或 ONNX 等深度学习框架构建的 MXNet PyTorch TensorFlow，请考虑使用 Amazon AI Neo。 SageMaker Neo 可以自动优化部署到特定云实例类型（例如，`ml.c4` 和 `ml.p2` 等）的推理模型。有关更多信息，请参阅 *Amazon A SageMaker I 开发者指南*中的[使用 Neo 优化模型性能](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html)。

下图显示了发布和使用模型包产品的工作流程。

![\[卖家如何创建模型包映像以及买家如何使用它的示意图。\]](http://docs.aws.amazon.com/zh_cn/marketplace/latest/userguide/images/ml-model-package-images.png)


为创建 A SageMaker I 模型包的工作流程 AWS Marketplace 包括以下步骤：

1. 卖家创建推理映像（部署后无法访问网络）并将其推送到 Amazon ECR 注册表。

   模型构件可以捆绑在推理映像中，也可以单独存储在 S3 中。

1. 然后，卖家在 Amazon A SageMaker I 中创建模型包资源并在上发布其机器学习产品 AWS Marketplace。

1. 买家订阅机器学习产品并部署模型。
**注意**  
 该模型可以部署为实时推理端点，也可以部署为批处理作业，以一次性获取整个数据集的预测。有关更多信息，请参阅[部署模型以进行推理](https://docs.aws.amazon.com/sagemaker/latest/dg/deploy-model.html)。

1. SageMaker AI 运行推理图像。卖家提供的任何未捆绑在推理映像中的模型构件都将在运行时动态加载。

1.  SageMaker AI 使用容器的 HTTP 端点将买方的推理数据传递到容器并返回预测结果。

## 为模型包创建推理映像
<a name="ml-creating-an-inference-image-for-model-packages"></a>

本部分提供了将推理代码打包成模型包产品的推理映像的演练。此过程包括以下步骤：

**Topics**
+ [第 1 步：创建容器映像](#ml-step-1-creating-the-container-image)
+ [第 2 步：在本地构建和测试映像](#ml-step-2-building-and-testing-the-image-locally)

推理映像是包含您的推理逻辑的 Docker 映像。容器在运行时会公开 HTTP 端点，以允许 SageMaker AI 将数据传入和传出您的容器。

**注意**  
 以下只是推理映像打包代码的一个示例。有关更多信息，请参阅[使用带有 SageMaker AI 的 Docker 容器和](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html)上 GitHub的 [AWS Marketplace SageMaker AI 示例](https://github.com/aws/amazon-sagemaker-examples/tree/master/aws_marketplace)。  
为了简单起见，以下示例使用了 Web 服务 [Flask](https://pypi.org/project/Flask/)，但不被视为生产就绪。

### 第 1 步：创建容器映像
<a name="ml-step-1-creating-the-container-image"></a>

 为了使推理映像与 SageMaker AI 兼容，Docker 镜像必须公开 HTTP 端点。当您的容器运行时，SageMaker AI 会将买方输入传递给容器的 HTTP 端点，以进行推理。推理结果返回在 HTTP 响应的正文中。

 以下演练在使用 Linux Ubuntu 发行版的开发环境中使用 Docker CLI。
+ [创建 Web 服务器脚本](#ml-create-the-web-server-script)
+ [为容器运行创建脚本](#ml-create-the-script-for-the-container-run)
+ [创建 `Dockerfile`](#ml-create-the-dockerfile)
+ [打包或上传模型构件](#ml-package-or-upload-the-model-artifacts)

#### 创建 Web 服务器脚本
<a name="ml-create-the-web-server-script"></a>

 此示例使用名为 [Flask](https://pypi.org/project/Flask/) 的 Python 服务器，但您可以使用任何适用于您的框架的 Web 服务器。

**注意**  
为了简单起见，这里使用 [Flask](https://pypi.org/project/Flask/)。它不被视为生产就绪的 Web 服务器。

 创建一个 Flask Web 服务器脚本，在 SageMaker AI 使用的 TCP 端口 8080 上为两个 HTTP 端点提供服务。以下是两个预期的端点：
+  `/ping`— SageMaker AI 向此端点发出 HTTP GET 请求，以检查您的容器是否准备就绪。当您的容器准备就绪时，它会使用 HTTP 200 响应代码来响应此端点的 HTTP GET 请求。
+  `/invocations`— SageMaker AI 向此端点发出 HTTP POST 请求以进行推理。用于推理的输入数据在请求正文中发送。用户指定的内容类型在 HTTP 头中传递。响应的主体是推理输出。有关超时的详细信息，请参阅[创建机器学习产品的要求和最佳实操](ml-listing-requirements-and-best-practices.md)。

 **`./web_app_serve.py`** 

```
# Import modules
import json
import re
from flask import Flask
from flask import request
app = Flask(__name__)

# Create a path for health checks
@app.route("/ping")
def endpoint_ping():
  return ""
 
# Create a path for inference
@app.route("/invocations", methods=["POST"])
def endpoint_invocations():
  
  # Read the input
  input_str = request.get_data().decode("utf8")
  
  # Add your inference code between these comments.
  #
  #
  #
  #
  #
  # Add your inference code above this comment.
  
  # Return a response with a prediction
  response = {"prediction":"a","text":input_str}
  return json.dumps(response)
```

在前面的示例中，没有实际的推理逻辑。对于实际的推理映像，请将推理逻辑添加到 Web 应用中，以便它处理输入并返回实际预测。

您的推理图像必须包含其所有必需的依赖项，因为它无法访问互联网，也无法调用任何 AWS 服务依赖项。

**注意**  
实时推断和批量推断都需要同样的代码

#### 为容器运行创建脚本
<a name="ml-create-the-script-for-the-container-run"></a>

 创建一个名为 SageMaker AI `serve` 在运行 Docker 容器镜像时运行的脚本。以下脚本启动 HTTP Web 服务器。

 **`./serve`** 

```
#!/bin/bash

# Run flask server on port 8080 for SageMaker
flask run --host 0.0.0.0 --port 8080
```

#### 创建 `Dockerfile`
<a name="ml-create-the-dockerfile"></a>

 在您的构建上下文中创建 `Dockerfile`。此示例使用 Ubuntu 18.04，但您可以从适用于您的框架的任何基础映像开始。

 `./Dockerfile` 

```
FROM ubuntu:18.04

# Specify encoding
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8

# Install python-pip
RUN apt-get update \
&& apt-get install -y python3.6 python3-pip \
&& ln -s /usr/bin/python3.6 /usr/bin/python \
&& ln -s /usr/bin/pip3 /usr/bin/pip;

# Install flask server
RUN pip install -U Flask;

# Add a web server script to the image
# Set an environment to tell flask the script to run
COPY /web_app_serve.py /web_app_serve.py
ENV FLASK_APP=/web_app_serve.py

# Add a script that Amazon SageMaker AI will run
# Set run permissions
# Prepend program directory to $PATH
COPY /serve /opt/program/serve
RUN chmod 755 /opt/program/serve
ENV PATH=/opt/program:${PATH}
```

 `Dockerfile` 将之前创建的两个脚本添加到映像中。`serve` 脚本的目录已添加到 PATH 中，因此它可以在容器运行时运行。

#### 打包或上传模型构件
<a name="ml-package-or-upload-the-model-artifacts"></a>

 提供从训练模型到推理映像的模型构件的两种方法如下：
+  与推理映像一起静态打包。
+  在运行时动态加载。由于它是动态加载的，因此您可以使用相同的映像来打包不同的机器学习模型。

 如果要将模型构件与推理映像打包，请将构件包含在 `Dockerfile` 中。

 如果您想动态加载模型构件，请将这些构件单独存储在 Amazon S3 的压缩文件 (.tar.gz) 中。创建模型包时，请指定压缩文件的位置， SageMaker AI `/opt/ml/model/` 会在运行容器时提取内容并将其复制到容器目录中。发布您的模型包时，这些构件会发布并存储在买家无法直接访问的 AWS Marketplace 所有 Amazon S3 存储桶中。

### 第 2 步：在本地构建和测试映像
<a name="ml-step-2-building-and-testing-the-image-locally"></a>

 在构建上下文中，现在存在以下文件：
+  `./Dockerfile` 
+  `./web_app_serve.py` 
+  `./serve` 
+  您的推理逻辑和（可选）依赖项 

 接下来，构建、运行和测试容器镜像。

#### 构建映像：
<a name="ml-build-the-image"></a>

 在构建上下文中运行 Docker 命令来构建和标记映像。此示例使用标记 `my-inference-image`。

```
sudo docker build --tag my-inference-image ./
```

 运行此 Docker 命令构建映像后，当 Docker 根据您的 `Dockerfile` 的每一行构建映像时，您该会看到输出。完成后，您应看到类似如下所示的内容：

```
Successfully built abcdef123456
Successfully tagged my-inference-image:latest
```

#### 本地运行
<a name="ml-run-locally"></a>

 构建完成后，您可以在本地测试映像。

```
sudo docker run \
  --rm \
  --publish 8080:8080/tcp \
  --detach \
  --name my-inference-container \
  my-inference-image \
  serve
```

 下面是有关命令的详细信息：
+ `--rm` – 容器停止后自动将其移除。
+ `--publish 8080:8080/tcp`— 公开端口 8080 以模拟 SageMaker AI 向其发送 HTTP 请求的端口。
+ `--detach` – 在后台运行容器。
+ `--name my-inference-container` – 为正在运行的容器提供名称。
+ `my-inference-image` – 运行构建的映像。
+ `serve`— 运行与 SageMaker AI 在运行容器时运行的脚本相同的脚本。

 运行此命令后，Docker 会根据您构建的推理映像创建一个容器并在后台运行它。容器运行 `serve` 脚本，该脚本会启动您的 Web 服务器以进行测试。

#### 测试 ping HTTP 端点
<a name="ml-test-the-ping-http-endpoint"></a>

 当 SageMaker AI 运行您的容器时，它会定期 ping 终端节点。 当终端节点返回状态代码为 200 的 HTTP 响应时，它会向 SageMaker AI 发出信号，表示容器已准备好进行推理。您可以通过运行以下命令进行测试，将测试端点并包含响应头。

```
curl --include http://127.0.0.1:8080/ping
```

示例输出如下：

```
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 0
Server: MyServer/0.16.0 Python/3.6.8
Date: Mon, 21 Oct 2019 06:58:54 GMT
```

#### 测试推理 HTTP 端点
<a name="ml-test-the-inference-http-endpoint"></a>

 当容器通过向你的 ping 返回 200 状态码来表示已准备就绪时， SageMaker AI 会通过`POST`请求将推理数据传递到 `/invocations` HTTP 终端节点。通过运行以下命令来测试推理点。

```
curl \
  --request POST \
  --data "hello world" \
  http://127.0.0.1:8080/invocations
```

 示例输出如下：

 `{"prediction": "a", "text": "hello world"}` 

 在这两个 HTTP 端点工作后，推理图像现在与 SageMaker AI 兼容。

**注意**  
 您的模型包产品的模型可以通过两种方式部署：实时部署和批量部署。在这两个部署中， SageMaker 人工智能在运行 Docker 容器时使用相同的 HTTP 端点。

 要停止容器，请运行以下命令。

```
sudo docker container stop my-inference-container
```

 当您的推理映像准备就绪并经过测试后，您可以继续[将映像上传到 Amazon Elastic Container Registry](ml-uploading-your-images.md)。

# 创建算法映像
<a name="ml-algorithm-images"></a>

Amazon SageMaker AI 算法要求买家在做出预测之前带上自己的数据进行训练。作为 AWS Marketplace 卖家，您可以使用 SageMaker AI 来创建机器学习 (ML) 算法和模型，供买家部署 AWS。以下各节将介绍如何为其创建算法图像 AWS Marketplace。这包括创建用于训练算法的 Docker 训练映像以及包含推理逻辑的推理映像。发布算法产品时，需要同时提供训练映像和推理映像。

**Topics**
+ [概述](#ml-algorithm-images-overview)
+ [为算法创建训练映像](#ml-creating-a-training-image-for-algorithms)
+ [为算法创建推理映像](#ml-creating-an-inference-image-for-algorithms)

## 概述
<a name="ml-algorithm-images-overview"></a>

算法包括以下组件：
+  存储在 [Amazon ECR](https://aws.amazon.com/ecr/) 中的训练映像 
+  存储在 Amazon Elastic Container Registry (Amazon ECR) 中的推理映像 

**注意**  
 对于算法产品，训练容器会生成模型构件，这些构件在模型部署时加载到推理容器中。

下图显示了发布和使用算法产品的工作流程。

![\[卖家如何创建算法包映像以及买家如何使用它的示意图。\]](http://docs.aws.amazon.com/zh_cn/marketplace/latest/userguide/images/ml-algorithm-package-images.png)


为创建 A SageMaker I 算法的工作流程 AWS Marketplace 包括以下步骤：

1. 卖家创建训练映像和推理映像（部署后无法访问网络），然后将其上传到 Amazon ECR Registry。

1. 然后，卖家在 Amazon A SageMaker I 中创建算法资源，并在上发布其机器学习产品 AWS Marketplace。

1. 买家订阅机器学习产品。

1. 买方使用兼容的数据集和适当的超参数值创建训练作业。 SageMaker AI 运行训练图像并将训练数据和超参数加载到训练容器中。训练作业完成后，位于 `/opt/ml/model/` 中的模型构件会被压缩并复制到买家的 [Amazon S3](https://aws.amazon.com/s3/) 存储桶中。

1. 买家使用存储在 Amazon S3 中的训练模型构件创建模型包，然后部署模型。

1. SageMaker AI 运行推理图像，提取压缩后的模型工件，并将文件加载到推理容器目录路径`/opt/ml/model/`中，用于推理的代码将在该路径中使用这些文件。

1.  无论模型是作为终端节点部署还是批量转换作业， SageMaker AI 都会通过容器的 HTTP 端点代表买方将用于推理的数据传递到容器并返回预测结果。

**注意**  
 有关更多信息，请参阅[训练模型](https://docs.aws.amazon.com/sagemaker/latest/dg/train-model.html)。

## 为算法创建训练映像
<a name="ml-creating-a-training-image-for-algorithms"></a>

 本部分提供了将训练代码打包成训练映像的演练。创建算法产品需要训练映像。

 *训练映像* 是包含您的训练算法的 Docker 映像。容器遵循特定的文件结构，允许 SageMaker AI 将数据复制到您的容器或从您的容器中复制数据。

 发布算法产品时，需要同时提供训练映像和推理映像。创建训练映像后，必须创建推理映像。这两个映像可以合并为一个映像，也可以作为单独的映像保留。是合并映像还是将它们分开由您决定。通常，推理比训练简单，您可能需要单独的映像来提高推理性能。

**注意**  
 以下只是训练映像打包代码的一个示例。有关更多信息，请参阅[使用您自己的算法和模型以及开启 AWS Marketplace](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-marketplace.html)的 [AWS Marketplace SageMaker AI 示例](https://github.com/aws/amazon-sagemaker-examples/tree/master/aws_marketplace) GitHub。

**Topics**
+ [步骤 1：创建容器映像](#ml-step-1-creating-the-container-image-1)
+ [第 2 步：在本地构建和测试映像](#ml-step-2-building-and-testing-the-image-locally-1)

### 步骤 1：创建容器映像
<a name="ml-step-1-creating-the-container-image-1"></a>

 为了使训练图像与 Amazon A SageMaker I 兼容，它必须遵循特定的文件结构，以允许 SageMaker AI 将训练数据和配置输入复制到容器中的特定路径。训练完成后，生成的模型工件将存储在 A SageMaker I 从中复制的容器中的特定目录路径中。

 以下内容使用安装在 Linux 的 Ubuntu 发行版的开发环境中的 Docker CLI。
+ [准备好程序以读取配置输入](#ml-prepare-your-program-to-read-configuration-inputs)
+ [准备好程序以读取数据输入](#ml-prepare-your-program-to-read-data-inputs)
+ [准备好程序以编写训练输出](#ml-prepare-your-program-to-write-training-outputs)
+ [为容器运行创建脚本](#ml-create-the-script-for-the-container-run-1)
+ [创建 `Dockerfile`](#ml-create-the-dockerfile-1)

#### 准备好程序以读取配置输入
<a name="ml-prepare-your-program-to-read-configuration-inputs"></a>

 如果您的训练程序需要买家提供的任何配置输入，则以下是运行时将这些内容复制到容器中的位置。如果需要，您的程序必须从这些特定的文件路径中读取。
+  `/opt/ml/input/config` 是包含控制程序运行方式的信息的目录。
  +  `hyperparameters.json` 是 JSON 格式的超参数名称和值字典。这些值是字符串，因此您可能需要对其进行转换。
  +  `resourceConfig.json` 是一个 JSON 格式的文件，描述了用于[分布式训练](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training)的网络布局。如果您的训练映像不支持分布式训练，则可以忽略此文件。

**注意**  
 有关配置输入的更多信息，请参阅 [Amazon A SageMaker I 如何提供训练信息](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html)。

#### 准备好程序以读取数据输入
<a name="ml-prepare-your-program-to-read-data-inputs"></a>

 训练数据可以通过以下两种模式之一传递到容器。在容器中运行的训练程序会以这两种模式之一提取训练数据。

 **文件模式** 
+  `/opt/ml/input/data/<channel_name>/` 包含该渠道的输入数据。渠道是根据对 `CreateTrainingJob` 操作的调用创建的，但通常重要的是渠道必须与算法的预期相匹配。每个渠道的文件都从 [Amazon S3](https://aws.amazon.com/s3/) 复制到此目录，同时保留 Amazon S3 密钥结构所指示的树结构。

 **管道模式** 
+  `/opt/ml/input/data/<channel_name>_<epoch_number>` 是给定纪元的管道。纪元从零开始，每次读取时都会增加一个。可以运行的纪元数没有限制，但是在读取下一个纪元之前，必须关闭每个管道。

#### 准备好程序以编写训练输出
<a name="ml-prepare-your-program-to-write-training-outputs"></a>

 训练的输出将写入以下容器目录：
+  `/opt/ml/model/` 是您编写模型或训练算法生成的模型构件的目录。您的模型可以采用任意格式。它可以是单个文件或整个目录树。 SageMaker AI 将此目录中的所有文件打包成压缩文件 (.tar.gz)。此文件位于 `DescribeTrainingJob` API 操作返回的 Amazon S3 位置。
+  `/opt/ml/output/` 是一个目录，算法可以在其中写入描述任务失败原因的 `failure` 文件。此文件的内容将在 `DescribeTrainingJob` 结果的 `FailureReason` 字段中返回。对于成功的作业，无需编写此文件，将被忽略。

#### 为容器运行创建脚本
<a name="ml-create-the-script-for-the-container-run-1"></a>

 创建 A SageMaker I 在运行 Docker 容器镜像时运行的 `train` shell 脚本。训练完成并将模型构件写入各自的目录后，退出脚本。

 **`./train`** 

```
#!/bin/bash

# Run your training program here
#
#
#
#
```

#### 创建 `Dockerfile`
<a name="ml-create-the-dockerfile-1"></a>

 在您的构建上下文中创建 `Dockerfile`。此示例使用 Ubuntu 18.04 作为基础映像，但您可以从适用于您的框架的任何基础映像开始。

 **`./Dockerfile`** 

```
FROM ubuntu:18.04

# Add training dependencies and programs
#
#
#
#
#
# Add a script that SageMaker AI will run
# Set run permissions
# Prepend program directory to $PATH
COPY /train /opt/program/train
RUN chmod 755 /opt/program/train
ENV PATH=/opt/program:${PATH}
```

 `Dockerfile` 将之前创建的 `train` 脚本添加到映像中。脚本的目录已添加到 PATH 中，因此它可以在容器运行时运行。

 在前面的示例中，没有实际的训练逻辑。对于实际的训练映像，将训练依赖项添加到 `Dockerfile` 中，然后添加读取训练输入的逻辑，以训练和生成模型构件。

 您的训练映像必须包含其所有必需的依赖项，因为它无法访问互联网。

 有关更多信息，请参阅[使用您自己的算法和模型以及开启 AWS Marketplace](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-marketplace.html)的 [AWS Marketplace SageMaker AI 示例](https://github.com/aws/amazon-sagemaker-examples/tree/master/aws_marketplace) GitHub。

### 第 2 步：在本地构建和测试映像
<a name="ml-step-2-building-and-testing-the-image-locally-1"></a>

 在构建上下文中，现在存在以下文件：
+ `./Dockerfile`
+ `./train`
+ 您的训练依赖项和逻辑

 接下来，您可以构建、运行和测试此容器映像。

#### 构建映像：
<a name="ml-build-the-image-1"></a>

 在构建上下文中运行 Docker 命令来构建和标记映像。此示例使用标记 `my-training-image`。

```
sudo docker build --tag my-training-image ./
```

 运行此 Docker 命令构建映像后，当 Docker 根据您的 `Dockerfile` 的每一行构建映像时，您该会看到输出。完成后，您应看到类似如下所示的内容：

```
Successfully built abcdef123456
Successfully tagged my-training-image:latest
```

#### 本地运行
<a name="ml-run-locally-1"></a>

 完成后，在本地测试映像，如以下示例中所示。

```
sudo docker run \
  --rm \
  --volume '<path_to_input>:/opt/ml/input:ro' \
  --volume '<path_to_model>:/opt/ml/model' \
  --volume '<path_to_output>:/opt/ml/output' \
  --name my-training-container \
  my-training-image \
  train
```

 以下是命令的详细信息：
+  `--rm` – 容器停止后自动将其移除。
+  `--volume '<path_to_input>:/opt/ml/input:ro'` – 将测试输入目录设置为只读供容器使用。
+  `--volume '<path_to_model>:/opt/ml/model'` – 训练测试完成后，绑定挂载模型构件在主机上的存储路径。
+  `--volume '<path_to_output>:/opt/ml/output'` – 绑定挂载主机上 `failure` 文件中写入失败原因的路径。
+  `--name my-training-container` – 为正在运行的容器提供名称。
+  `my-training-image` – 运行构建的映像。
+  `train`— 运行 SageMaker AI 在运行容器时运行的相同脚本。

 运行此命令后，Docker 会根据您构建的训练映像创建一个容器并运行它。容器运行 `train` 脚本，从而启动您的训练程序。

 训练程序完成且容器退出后，请检查输出模型构件是否正确。此外，请检查日志输出以确认它们没有生成您不想要的日志，同时确保提供了有关训练作业的足够信息。

 这样就完成了算法产品的训练代码打包。由于算法产品还包括推理映像，因此请继续下一部分[为算法创建推理映像](#ml-creating-an-inference-image-for-algorithms)。

## 为算法创建推理映像
<a name="ml-creating-an-inference-image-for-algorithms"></a>

 本部分提供了将推理代码打包成算法产品的推理映像的演练。

 推理映像是包含您的推理逻辑的 Docker 映像。容器在运行时会公开 HTTP 端点，以允许 SageMaker AI 将数据传入和传出您的容器。

 发布算法产品时，需要同时提供训练映像和推理映像。如果您尚未执行此操作，请参阅前面的部分[为算法创建训练映像](#ml-creating-a-training-image-for-algorithms)。这两个映像可以合并为一个映像，也可以作为单独的映像保留。是合并映像还是将它们分开由您决定。通常，推理比训练简单，您可能需要单独的映像来提高推理性能。

**注意**  
 以下只是推理映像打包代码的一个示例。有关更多信息，请参阅[使用您自己的算法和模型以及开启 AWS Marketplace](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-marketplace.html)的 [AWS Marketplace SageMaker AI 示例](https://github.com/aws/amazon-sagemaker-examples/tree/master/aws_marketplace) GitHub。  
为了简单起见，以下示例使用了 Web 服务 [Flask](https://pypi.org/project/Flask/)，但不被视为生产就绪。

**Topics**
+ [步骤 1：创建推理映像](#ml-step-1-creating-the-inference-image)
+ [第 2 步：在本地构建和测试映像](#ml-step-2-building-and-testing-the-image-locally-2)

### 步骤 1：创建推理映像
<a name="ml-step-1-creating-the-inference-image"></a>

 为了使推理映像与 SageMaker AI 兼容，Docker 镜像必须公开 HTTP 端点。当您的容器运行时，SageMaker AI 会将买方提供的推理输入传递给您的容器的 HTTP 终端节点。推理结果返回在 HTTP 响应的正文中。

 以下内容使用安装在 Linux 的 Ubuntu 发行版的开发环境中的 Docker CLI。
+ [创建 Web 服务器脚本](#ml-create-the-web-server-script-1) 
+ [为容器运行创建脚本](#ml-create-the-script-for-the-container-run-2)
+ [创建 `Dockerfile`](#ml-create-the-dockerfile-2)
+ [准备程序以动态加载模型构件](#ml-preparing-your-program-to-dynamically-load-model-artifacts)

#### 创建 Web 服务器脚本
<a name="ml-create-the-web-server-script-1"></a>

 此示例使用名为 [Flask](https://pypi.org/project/Flask/) 的 Python 服务器，但您可以使用任何适用于您的框架的 Web 服务器。

**注意**  
为了简单起见，这里使用 [Flask](https://pypi.org/project/Flask/)。它不被视为生产就绪的 Web 服务器。

 创建 Flask Web 服务器脚本，该脚本在 SageMaker AI 使用的 TCP 端口 8080 上为两个 HTTP 端点提供服务。以下是两个预期的端点：
+  `/ping`— SageMaker AI 向此端点发出 HTTP GET 请求，以检查您的容器是否准备就绪。当您的容器准备就绪时，它会使用 HTTP 200 响应代码来响应此端点的 HTTP GET 请求。
+  `/invocations`— SageMaker AI 向此端点发出 HTTP POST 请求以进行推理。用于推理的输入数据在请求正文中发送。用户指定的内容类型在 HTTP 头中传递。响应的主体是推理输出。

 **`./web_app_serve.py`** 

```
# Import modules
import json
import re
from flask import Flask
from flask import request
app = Flask(__name__)

# Create a path for health checks
@app.route("/ping")
def endpoint_ping():
  return ""
 
# Create a path for inference
@app.route("/invocations", methods=["POST"])
def endpoint_invocations():
  
  # Read the input
  input_str = request.get_data().decode("utf8")
  
  # Add your inference code here.
  #
  #
  #
  #
  #
  # Add your inference code here.
  
  # Return a response with a prediction
  response = {"prediction":"a","text":input_str}
  return json.dumps(response)
```

 在前面的示例中，没有实际的推理逻辑。对于实际的推理映像，请将推理逻辑添加到 Web 应用中，以便它处理输入并返回预测。

 您的推理映像必须包含其所有必需的依赖项，因为它无法访问互联网。

#### 为容器运行创建脚本
<a name="ml-create-the-script-for-the-container-run-2"></a>

 创建一个名为 SageMaker AI `serve` 在运行 Docker 容器镜像时运行的脚本。在此脚本中，启动 HTTP Web 服务器。

 **`./serve`** 

```
#!/bin/bash

# Run flask server on port 8080 for SageMaker AI
flask run --host 0.0.0.0 --port 8080
```

#### 创建 `Dockerfile`
<a name="ml-create-the-dockerfile-2"></a>

 在您的构建上下文中创建 `Dockerfile`。此示例使用 Ubuntu 18.04，但您可以从适用于您的框架的任何基础映像开始。

 **`./Dockerfile`** 

```
FROM ubuntu:18.04

# Specify encoding
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8

# Install python-pip
RUN apt-get update \
&& apt-get install -y python3.6 python3-pip \
&& ln -s /usr/bin/python3.6 /usr/bin/python \
&& ln -s /usr/bin/pip3 /usr/bin/pip;

# Install flask server
RUN pip install -U Flask;

# Add a web server script to the image
# Set an environment to tell flask the script to run
COPY /web_app_serve.py /web_app_serve.py
ENV FLASK_APP=/web_app_serve.py

# Add a script that Amazon SageMaker AI will run
# Set run permissions
# Prepend program directory to $PATH
COPY /serve /opt/program/serve
RUN chmod 755 /opt/program/serve
ENV PATH=/opt/program:${PATH}
```

 `Dockerfile` 将之前创建的两个脚本添加到映像中。`serve` 脚本的目录已添加到 PATH 中，因此它可以在容器运行时运行。

#### 准备程序以动态加载模型构件
<a name="ml-preparing-your-program-to-dynamically-load-model-artifacts"></a>

 对于算法产品，买家使用自己的数据集和您的训练映像来生成独特的模型构件。训练过程完成后，您的训练容器会将模型工件输出到容器目录` /opt/ml/model/`。 SageMaker AI 将该目录中的内容压缩成.tar.gz 文件，并将其存储在买家的 Amazon S3 中。 AWS 账户 

 部署模型时， SageMaker AI 会运行您的推理图像，从 Amazon S3 中买家账户中存储的.tar.gz 文件中提取模型工件，然后将其加载到目录中的推理容器中。`/opt/ml/model/`在运行时，您的推理容器代码使用模型数据。

**注意**  
 要保护可能包含在模型构件文件中的知识产权，您可以选择在输出前对文件加密。有关更多信息，请参阅 [Amazon A SageMaker I 的安全和知识产权](ml-security-and-intellectual-property.md)。

### 第 2 步：在本地构建和测试映像
<a name="ml-step-2-building-and-testing-the-image-locally-2"></a>

 在构建上下文中，现在存在以下文件：
+ `./Dockerfile`
+ `./web_app_serve.py`
+ `./serve`

 接下来，您可以构建、运行和测试此容器映像。

#### 构建映像：
<a name="ml-build-the-image-2"></a>

 运行 Docker 命令来构建和标记映像。此示例使用标签 `my-inference-image`。

```
sudo docker build --tag my-inference-image ./
```

 运行此 Docker 命令构建映像后，当 Docker 根据您的 `Dockerfile` 的每一行构建映像时，您该会看到输出。完成后，您应看到类似如下所示的内容：

```
Successfully built abcdef123456
Successfully tagged my-inference-image:latest
```

#### 本地运行
<a name="ml-run-locally-2"></a>

 构建完成后，您可以在本地测试映像。

```
sudo docker run \
  --rm \
  --publish 8080:8080/tcp \
  --volume '<path_to_model>:/opt/ml/model:ro' \
  --detach \
  --name my-inference-container \
  my-inference-image \
  serve
```

 以下是命令的详细信息：
+  `--rm` – 容器停止后自动将其移除。
+  `--publish 8080:8080/tcp`— 公开端口 8080 以模拟 SageMaker AI 向其发送 HTTP 请求的端口。
+  `--volume '<path_to_model>:/opt/ml/model:ro'` –将测试模型构件在主机上存储的路径绑定挂载为只读，以便容器中的推理代码可以使用它们。
+  `--detach` – 在后台运行容器。
+  `--name my-inference-container` – 为正在运行的容器提供名称。
+  `my-inference-image` – 运行构建的映像。
+  `serve`— 运行 SageMaker AI 在运行容器时运行的相同脚本。

 运行此命令后，Docker 会根据推理映像创建一个容器并在后台运行它。容器运行 `serve` 脚本，该脚本会启动您的 Web 服务器以进行测试。

#### 测试 ping HTTP 端点
<a name="ml-test-the-ping-http-endpoint-1"></a>

 当 SageMaker AI 运行您的容器时，它会定期 ping 终端节点。 当终端节点返回状态代码为 200 的 HTTP 响应时，它会向 SageMaker AI 发出信号，表示容器已准备好进行推理。

 运行以下命令以测试端点并包含响应头。

```
curl --include http://127.0.0.1:8080/ping
```

 示例输出如以下示例中所示。

```
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 0
Server: MyServer/0.16.0 Python/3.6.8
Date: Mon, 21 Oct 2019 06:58:54 GMT
```

#### 测试推理 HTTP 端点
<a name="ml-test-the-inference-http-endpoint-1"></a>

 当容器通过返回 200 状态码表示已准备就绪时， SageMaker AI 会通过`POST`请求将推理数据传递到 `/invocations` HTTP 终端节点。

 运行以下命令以测试推理端点。

```
curl \
  --request POST \
  --data "hello world" \
  http://127.0.0.1:8080/invocations
```

 示例输出如以下示例中所示：

```
{"prediction": "a", "text": "hello world"}
```

 在这两个 HTTP 端点工作后，推理图像现在与 SageMaker AI 兼容。

**注意**  
 您的算法产品的模型可以通过两种方式部署：实时部署和批量部署。对于这两种部署， SageMaker AI 在运行 Docker 容器时使用相同的 HTTP 端点。

 要停止容器，请运行以下命令。

```
sudo docker container stop my-inference-container
```

 算法产品的训练和推理映像都准备好并经过测试后，请继续[将映像上传到 Amazon Elastic Container Registry](ml-uploading-your-images.md)。

# 将映像上传到 Amazon Elastic Container Registry
<a name="ml-uploading-your-images"></a>

创建推理和训练映像后，您可以将它们上传到 Amazon Elastic Container Registry。[Amazon ECR](https://aws.amazon.com/ecr/) 是一个完全托管的 Docker 注册表。 Amazon SageMaker AI 从 Amazon ECR 中提取图像来创建用于推理的模型包或用于训练作业的算法。 AWS Marketplace 还会从 Amazon ECR 检索这些图像以发布您的模型包和算法产品。本主体介绍如何将推理和训练映像上传到 Amazon ECR。

**Topics**
+ [我必须上传哪些映像？](#ml-which-images-must-i-upload)
+ [需要哪些 IAM 权限？](#ml-what-iam-permissions-are-required)
+ [将你的 Docker 客户端登录到 AWS](#ml-log-in-your-docker-client)
+ [创建存储库并上传映像](#ml-create-repository-and-upload-image)
+ [扫描上传的映像](#ml-scan-your-uploaded-image)

## 我必须上传哪些映像？
<a name="ml-which-images-must-i-upload"></a>

 如果您要发布模型包，请仅上传推理映像。如果您要发布算法，请同时上传推理映像和训练映像。如果推理映像和训练映像合并在一起，则仅上传一次合并后的映像。

## 需要哪些 IAM 权限？
<a name="ml-what-iam-permissions-are-required"></a>

 以下步骤假设本地计算机具有卖家中某个 AWS Identity and Access Management (IAM) 角色或用户的正确 AWS 证书 AWS 账户。角色或用户必须为两者 AWS Marketplace 和 Amazon ECR 制定正确的策略。例如，您可以使用以下 AWS 托管策略：
+  [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSMarketplaceSellerProductsFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSMarketplaceSellerProductsFullAccess.html)— 用于访问 AWS Marketplace 
+  [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryFullAccess.html) – 用于访问 Amazon ECR 

**注意**  
点击这些链接可跳转至 *AWS 托管式策略参考*。

## 将你的 Docker 客户端登录到 AWS
<a name="ml-log-in-your-docker-client"></a>

 为要从中发布 AWS 区域 的设置变量（请参阅[AWS 区域 支持发布](ml-service-restrictions-and-limits.md#ml-supported-aws-regions-for-publishing)）。对于本示例，请选择美国东部（俄亥俄州）区域。

```
region=us-east-2
```

 运行以下命令以使用您的 AWS 账户 ID 设置变量。此示例假设当前 AWS Command Line Interface (AWS CLI) 证书属于卖家的 AWS 账户。

```
account=$(aws sts get-caller-identity --query Account --output text)
```

 要使用您所在地区的 AWS 账户 Amazon ECR Docker 注册表对您的 Docker CLI 客户端进行身份验证，请运行以下命令。

```
aws ecr get-login-password \
--region ${region} \
| sudo docker login \
--username AWS \
--password-stdin \
${account}.dkr.ecr.${region}.amazonaws.com
```

## 创建存储库并上传映像
<a name="ml-create-repository-and-upload-image"></a>

 为上传映像的标签设置一个变量，为上传的映像存储库的名称设置另一个变量。

```
image=my-inference-image
repo=my-inference-image
```

**注意**  
 在本指南的前几节中，推理和训练图像是生成的，它们分别被标记为**my-inference-image**和**my-training-image**。在本示例中，创建推理映像并将其上传到同名的存储库。

 运行以下命令，在 Amazon ECR 中创建映像存储库。

```
aws ecr --region ${region} create-repository --repository-name "${repo}"
```

 Amazon ECR 存储库位置的全名由以下部分组成：` <account-id>.dkr.ecr.<region>.amazonaws.com/<image-repository-name>`

 要将映像推送到存储库，必须使用存储库位置的全名对其进行标记。

 为映像存储库位置的全名和 `latest` 标签设置一个变量。

```
fullname="${account}.dkr.ecr.${region}.amazonaws.com/${repo}:latest"
```

 用全名标记映像。

```
sudo docker tag ${image} ${fullname}
```

 最后，将推理映像推送到 Amazon ECR 中的存储库。

```
sudo docker push ${fullname}
```

 上传完成后，该映像将出现在您要从中发布的区域的 [Amazon ECR 控制台的存储库列表](https://console.aws.amazon.com/ecr/repositories?region=us-east-2)中。在前面的示例中，映像被推送到美国东部（俄亥俄州）区域的存储库中。

## 扫描上传的映像
<a name="ml-scan-your-uploaded-image"></a>

 在 [Amazon ECR 控制台](https://console.aws.amazon.com/ecr/repositories?region=us-east-2)中 AWS 区域 ，选择您要发布的，然后打开上传图像的存储库。选择您上传的图像并开始扫描以检查是否存在已知漏洞。 AWS Marketplace 在发布之前，请检查您的 Amazon A SageMaker I 资源中使用的容器映像的 Amazon ECR 扫描结果。在创建产品之前，必须修复存在严重程度为“严重”或“高”的漏洞的容器映像。

 成功扫描映像后，它们可用于创建模型包或算法资源。

如果您认为自己的产品在扫描中存在误报错误，请联系 [AWS Marketplace 卖家运营](https://aws.amazon.com/marketplace/management/contact-us)团队并提供有关错误的信息。

 **后续步骤** 
+  查看[创建机器学习产品的要求和最佳实操](ml-listing-requirements-and-best-practices.md)中的文件大小限制 
+  继续[创建你的 Amazon SageMaker AI 资源](ml-creating-your-amazon-sagemaker-resource.md) 

# 创建你的 Amazon SageMaker AI 资源
<a name="ml-creating-your-amazon-sagemaker-resource"></a>

 要发布模型包或算法产品，您必须在 Amazon A SageMaker I 中创建相应的[模型包资源](https://docs.aws.amazon.com/marketplace/latest/userguide/ml-creating-your-amazon-sagemaker-resource.html#ml-creating-your-model-package-product)[或算法资源](https://docs.aws.amazon.com/marketplace/latest/userguide/ml-creating-your-amazon-sagemaker-resource.html#ml-creating-your-algorithm-product)。在为 AWS Marketplace 产品创建资源时，必须通过验证步骤对其进行认证。验证步骤要求您在发布模型包或算法资源之前提供数据对其进行测试。以下各节介绍如何创建 A SageMaker I 资源，包括模型包资源或算法资源。这包括设置验证规范，告诉 SageMaker AI 如何执行验证。

**注意**  
如果您尚未为产品创建映像并将其上传到 Amazon Elastic Container Registry (Amazon ECR)，请参阅[将您的代码打包成图像以供机器学习产品使用 AWS Marketplace](ml-packaging-your-code-into-images.md)和[将映像上传到 Amazon Elastic Container Registry](ml-uploading-your-images.md)，了解有关如何操作的信息。

**Topics**
+ [创建模型包](#ml-creating-your-model-package-product)
+ [创建算法](#ml-creating-your-algorithm-product)

## 创建模型包
<a name="ml-creating-your-model-package-product"></a>

 以下是为 AWS Marketplace创建模型包的要求：
+  存储在 [Amazon ECR](https://aws.amazon.com/ecr/) 中的推理映像 
+  （可选）模型构件，单独存储在 [Amazon S3](https://aws.amazon.com/s3/) 中 
+ 您用于推理的测试数据，存储在 Amazon Simple Storage Service 中 

**注意**  
 以下是关于创建模型包产品的信息。有关 SageMaker AI 中模型包的更多信息，请参阅[创建模型包资源](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-mkt-create-model-package.html)。

### 创建模型包资源
<a name="ml-create-model-package"></a>

以下过程将引导您完成模型包资源的创建。

**第 1 步：创建模型包资源**

1. 打开[亚马逊 A SageMaker I 控制台](https://us-east-2.console.aws.amazon.com/sagemaker/home)。

1. 请查看页面的右上角，确保您位于要发布的 AWS 区域。有关发布的信息，请参阅[AWS 区域 支持发布](ml-service-restrictions-and-limits.md#ml-supported-aws-regions-for-publishing)部分。您在之前的步骤中上传到 Amazon ECR 的推理映像必须位于同一区域。

1. 在左侧导航菜单中，选择**模型包**。

1. 选择**创建模型包**。

创建包后，您需要设置推理包的规格。

**步骤 2：设置推理规格**

1.  为您的模型包提供一个**名称**（例如，*my-model-package*）。

1.  对于**推理映像的位置**，请输入上传到 Amazon ECR 的推理映像的 URI。您可以通过在 [Amazon ECR 控制台](https://us-east-2.console.aws.amazon.com/ecr/repositories)中找到您的映像来检索 URI。

1.  如果训练模型构件与推理映像中的逻辑捆绑在一起，请将**模型数据构件的位置**留空。否则，请指定模型构件压缩文件 (.tar.gz) 的完整 Amazon S3 位置。

1.  使用下拉框为实时推理（也称为*端点*）和批量转换作业选择推理映像支持的实例类型。

1.  选择**下一步**。

 在创建和发布模型包之前，必须进行验证以确保其按预期运行。这要求您使用您提供的用于推理的测试数据运行批处理转换作业。验证规范告诉 SageMaker AI 如何执行验证。

**步骤 3：设置验证规格**

1.  将**发布此模型包**设置为 AWS Marketplace**是**。如果您将其设置为**否**，则以后将无法发布此模型包。选择 “**是”** [将对您的模型包进行认证](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-CertifyForMarketplace)， AWS Marketplace 并且需要执行验证步骤。

1.  如果这是首次完成此过程，请选择为 **IAM 角色****创建新角色**。Amazon SageMaker AI 在部署您的模型包时会使用此角色。这包括一些操作，例如从 Amazon ECR 中拉取映像和从 Amazon S3 拉取构件。查看设置，然后选择**创建角色**。 在此处创建角色会[ AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)将 IAM 策略描述的权限授予您创建的角色。

1.  在验证配置文件中编辑 **JSON**。 有关允许值的详细信息，请参阅[TransformJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformJobDefinition.html)。

   1.  `TransformInput.DataSource.S3Uri`：设置为用于推理的测试数据的存储位置。

   1.  `TransformInput.ContentType`：指定您的测试数据内容类型（例如`application/json`、`text/plain``image/png `、或任何其他值）。 SageMaker AI 不验证实际的输入数据。此值将在 `Content-type` 头值中传递到您的容器 HTTP 端点。

   1.  `TransformInput.CompressionType`：如果您在 Amazon S3 中用于推理的测试数据未压缩，则设置为 `None`。

   1.  `TransformInput.SplitType`：设置为 `None` 以将 Amazon S3 中的每个对象作为一个整体传递以供推理。

   1.  `TransformOutput.S3OutputPath`：设置为推理输出的存储位置。

   1.  `TransformOutput.AssembleWith`：设置为 `None` 以将每个推理作为单独的对象输出到 Amazon S3 中。

1.  选择**创建模型包**。

 SageMaker AI 从 Amazon ECR 中提取推理图像，将所有工件复制到推理容器，然后使用您的测试数据运行批量转换任务进行推理。验证成功后，状态将更改为**已完成**。

**注意**  
 验证步骤不会使用您的测试数据来评估模型的准确性。验证步骤检查容器是否按预期运行和响应。

 您已完成模型产品资源的创建。继续[将您的商品发布在 AWS Marketplace](ml-publishing-your-product-in-aws-marketplace.md)。

## 创建算法
<a name="ml-creating-your-algorithm-product"></a>

 以下是在 AWS Marketplace中创建算法的要求：
+ 存储在 Amazon ECR 中的推理映像 
+ 存储在 Amazon ECR 中的训练映像 
+  用于训练的测试数据，存储在 Amazon S3 中 
+ 用于推理的测试数据，存储在 Amazon S3 中 

**注意**  
 以下演练创建了一个算法产品。有关更多信息，请参阅[创建算法资源](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-mkt-create-algo.html)。

### 创建算法资源
<a name="ml-create-algorithm"></a>

以下过程将引导您完成在算法包中创建资源的过程。

**步骤 1：创建算法资源**

1.  打开[亚马逊 A SageMaker I 控制台](https://us-east-2.console.aws.amazon.com/sagemaker/home)。

1.  查看页面的右上角，确保您位于要发布的 AWS 区域（请参阅[AWS 区域 支持发布](ml-service-restrictions-and-limits.md#ml-supported-aws-regions-for-publishing)）。您在之前的步骤中上传到 Amazon ECR 的训练和推理映像必须位于同一区域。

1.  在左导航窗格中，选择**算法**。

1.  选择**创建算法**。

创建算法包后，必须为模型的训练和调整设置规格。

**第 2 步：设置训练和调整规格**

1.  输入算法的**名称**（例如，*my-algorithm*）。

1.  对于**训练映像**，请粘贴上传到 Amazon ECR 的训练映像的完整 URI 位置。您可以通过在 [Amazon ECR 控制台](https://us-east-2.console.aws.amazon.com/ecr/repositories)中找到您的映像来检索 URI。

1.  使用下拉框选择您的训练映像支持的**训练实例类型**。

1.  在**渠道规格**部分下，为算法支持的每个输入数据集添加一个渠道，最多可添加 20 个渠道的输入源。（有关更多信息，请参阅[输入数据配置](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-inputdataconfig)。） 

1.  选择**下一步**。

1. 如果您的算法支持超参数和超参数调整，则必须指定调整参数。

1.  选择**下一步**。

**注意**  
 我们强烈建议您的算法支持超参数调整并使适当的参数可调。这使数据科学家能够调整模型以获得最佳结果。

设置调整参数（如果有）后，必须为推理映像设置规格。

**步骤 3：设置推理映像规格**

1.  对于**推理映像的位置**，请粘贴上传到 Amazon ECR 的推理映像的 URI。您可以通过在 [Amazon ECR 控制台](https://us-east-2.console.aws.amazon.com/ecr/repositories)中找到您的映像来检索 URI。

1.  使用下拉框为实时推理（也称为*端点*）和批量转换作业选择推理映像支持的实例类型。

1.  选择**下一步**。

 在创建和发布算法之前，必须进行验证以确保算法按预期运行。这要求您同时运行包含用于训练的测试数据的训练作业，以及使用您提供的用于推理的测试数据的批量转换作业。验证规范告诉 SageMaker AI 如何执行验证。

**步骤 4：设置验证规格**

1.  将**发布此算法**设置 AWS Marketplace为**是**。如果将其设置为**否**，则以后将无法发布此算法。选择 “**是”** 将[验证您的](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAlgorithm.html#sagemaker-CreateAlgorithm-request-CertifyForMarketplace)算法， AWS Marketplace 并且需要验证规范。

1.  如果这是您第一次为其创建机器学习包 AWS Marketplace，请选择为 **IAM **角色创建新**角色**。Amazon SageMaker AI 在训练您的算法和部署后续模型包时使用此角色。这包括从 Amazon ECR 拉取映像、在 Amazon S3 中存储构件以及从 Amazon S3 复制训练数据等操作。查看设置，然后选择**创建角色**。 在此处创建角色会[ AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)将 IAM 策略描述的权限授予您创建的角色。

1.  编辑**训练作业定义**的验证配置文件中的 **JSON** 文件。有关允许值的更多信息，请参阅[ TrainingJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TrainingJobDefinition.html)。

   1.  `InputDataConfig`：在此 JSON 数组中，为您在训练规格步骤中指定的每个渠道添加一个[渠道对象](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html)。对于每个渠道，指定用于训练的测试数据的存储位置。

   1.  `OutputDataConfig`：训练完成后，训练容器目录路径 `/opt/ml/model/` 中的模型构件会被压缩并复制到 Amazon S3。指定存储压缩文件 (.tar.gz) 的 Amazon S3 位置。

1.  编辑**转换作业定义**的验证配置文件中的 JSON 文件。有关允许值的更多信息，请参阅[ TransformJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformJobDefinition.html)。

   1.  `TransformInput.DataSource.S3Uri`：设置为用于推理的测试数据的存储位置。

   1.  `TransformInput.ContentType`：指定您的测试数据内容类型。例如，`application/json`、`text/plain`、`image/png` 或任何其他值。Amazon SageMaker AI 不会验证实际的输入数据。此值将在 `Content-type` 头值中传递到您的容器 HTTP 端点。

   1.  `TransformInput.CompressionType`：如果您在 Amazon S3 中用于推理的测试数据未压缩，则设置为 `None`。

   1.  `TransformInput.SplitType`：选择您希望在 S3 中拆分对象的方式。例如，`None` 将 Amazon S3 中的每个对象作为一个整体传递以进行推理。如需了解更多详情，请参阅[ SplitType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#sagemaker-Type-TransformInput-SplitType)《亚马逊 AI AP SageMaker I 参考》。

   1.  `TransformOutput.S3OutputPath`：设置为推理输出的存储位置。

   1.  `TransformOutput.AssembleWith`：设置为 `None` 以将每个推理作为单独的对象输出到 Amazon S3 中。

1. 选择**创建算法包**。

 SageMaker AI 从 Amazon ECR 中提取训练图像，使用您的数据运行测试训练作业，并将模型工件存储在 Amazon S3 中。然后，它从 Amazon ECR 中拉取推理映像，将构件从 Amazon S3 复制到推理容器中，然后使用您的测试数据运行批量转换作业进行推理。验证成功后，状态将更改为**已完成**。

**注意**  
 验证步骤不会使用您的测试数据来评估训练或模型的准确性。验证步骤检查容器是否按预期运行和响应。  
验证步骤仅验证批处理。由您来验证实时处理是否适用于您的产品。

 您已完成算法产品资源的创建。继续[将您的商品发布在 AWS Marketplace](ml-publishing-your-product-in-aws-marketplace.md)。

# 将您的商品发布在 AWS Marketplace
<a name="ml-publishing-your-product-in-aws-marketplace"></a>

将代码打包成模型包图像或算法图像、上传图像并创建 Amazon A SageMaker I 资源后，即可在中发布您的机器学习产品 AWS Marketplace。以下各节将引导您完成发布过程，包括创建产品上架信息、测试产品以及确认发布。产品发布后，您可以通过提交更改请求来更新上架信息。有关更多信息，请参阅[管理机器学习产品](ml-product-management.md)。

**Topics**
+ [先决条件](ml-publishing-prereq.md)
+ [步骤 1：创建新列表](create-new-listing.md)
+ [第 2 步：提供产品信息](provide-general-info.md)
+ [第 3 步：添加初始产品版本](add-initial-version.md)
+ [步骤 4：配置定价模式](set-pricing-model.md)
+ [步骤 5：配置退款政策](configure-refund-policy.md)
+ [第 6 步：配置 EULA](configure-eula.md)
+ [步骤 7：配置允许列表](configure-allowlist.md)

# 先决条件
<a name="ml-publishing-prereq"></a>

在发布模型包或算法之前 AWS Marketplace，必须具备以下条件：
+  已注册为 AWS Marketplace 卖家的。 AWS 账户 您可以在 [AWS Marketplace 管理门户](https://aws.amazon.com/marketplace/management/)中执行此操作。
+  在 AWS Marketplace 管理门户中的[设置](https://aws.amazon.com/marketplace/management/seller-settings)页面下填写完整的卖家资料。
+  要发布付费产品，您必须填写税务调查和银行表格。发布免费产品则无需填写。有关更多信息，请参阅[卖家注册流程](https://docs.aws.amazon.com/marketplace/latest/userguide/registration-process.html)。
+ 您必须拥有访问 AWS Marketplace 管理门户 和 Amazon A SageMaker I 的权限。有关更多信息，请参阅 [所需的权限](#ml-permissions-required)。

## 所需的权限
<a name="ml-permissions-required"></a>

要发布 Amazon SageMaker AI 产品，您必须指定与 AWS Marketplace 服务委托人有信任关系的有效 IAM 角色 ARN。此外，您登录时使用的 IAM 用户或角色需具备必要的权限。

**设置登录权限**
+  为 IAM 角色添加以下权限：

  1. **sagemaker: DescribeModelPackage** — 用于列出模型包 

  1.  **sagemaker: DescribeAlgorithm** — 用于列出算法 

------
#### [ JSON ]

****  

     ```
     { 
         "Version":"2012-10-17",		 	 	 
         "Statement": [ 
             { 
                 "Effect": "Allow", 
                 "Action": [ 
                     "sagemaker:DescribeModelPackage", 
                     "sagemaker:DescribeAlgorithm"
                 ],
                 "Resource": "*"  
            }
         ] 
     }
     ```

------

**设置 IAM 角色 AddVersion/Create 产品**

1. 按以下步骤创建具有自定义信任策略的角色。有关更多信息，请参阅[使用自定义信任策略创建 IAM 角色（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-custom.html)。

1. 为自定义信任策略语句输入以下内容：

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Statement1",
               "Effect": "Allow",
               "Principal": {
                   "Service": "assets.marketplace.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 输入以下权限策略：

------
#### [ JSON ]

****  

   ```
   { 
       "Version":"2012-10-17",		 	 	 
       "Statement": [ 
           { 
               "Effect": "Allow", 
               "Action": [ 
                   "sagemaker:DescribeModelPackage", 
                   "sagemaker:DescribeAlgorithm"
               ],
               "Resource": "*"  
          }
       ] 
   }
   ```

------

1. 按要求提供该角色 ARN。角色 ARN 需遵循以下格式：`arn:aws:iam::<account-id>:role/<role-name>`。

 要了解所需的 AWS Marketplace 权限或管理您的卖家账户，[请参阅 AWS Marketplace 卖家政策和权限](https://docs.aws.amazon.com/marketplace/latest/userguide/detailed-management-portal-permissions.html)。

## 所需资产
<a name="ml-required-assets"></a>

在创建机器学习产品列表之前，请确保您拥有以下必需的资产：
+ **Amazon 资源名称 (ARN)** — 提供您要发布的模型包或算法资源 AWS 区域 的 ARN（参见）。[AWS 区域 支持发布](ml-service-restrictions-and-limits.md#ml-supported-aws-regions-for-publishing)
  +  模型包的 ARN 格式如下：`arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>`

     要查找您的模型包 ARN，请参阅[我的市场模型包](https://console.aws.amazon.com/sagemaker/home#/model-packages/my-resources)。
  +  算法的 ARN 格式如下：`arn:aws:sagemaker:<region>:<account-id>:algorithm/<algorithm-name>`

     要查找您的算法资源 ARN，请参阅[我的算法](https://console.aws.amazon.com/sagemaker/home#/algorithms/my-resources)。
+ [使用信息要求](ml-listing-requirements-and-best-practices.md#ml-requirements-for-usage-information) - 提供有关输入、输出和代码示例的详细信息。
+  [输入和输出的要求](ml-listing-requirements-and-best-practices.md#ml-requirements-for-inputs-and-outputs) - 提供文件或文本。
+ [Jupyter 笔记本的要求](ml-listing-requirements-and-best-practices.md#ml-requirements-for-jupyter-notebook) - 演示完整的产品使用情况。

# 步骤 1：创建新列表
<a name="create-new-listing"></a>

 要开始发布机器学习产品，您需启动发布流程，具体操作包括设置产品名称、添加用于整理分类的可选资源标签，以及生成产品 ID。产品 ID 用于在产品的整个生命周期中对其进行跟踪。

**注意**  
 在创建列表之前，请确保已在 [创建机器学习产品的要求和最佳实操](ml-listing-requirements-and-best-practices.md) 中指定所需的资源。

1. 登录您的卖家 AWS 账户，并进入 [AWS Marketplace 管理门户](https://aws.amazon.com/marketplace/management)。

1.  在顶部菜单中，转到**产品**，然后选择**机器学习**。

1.  选择**创建机器学习产品**。

1. 在**产品名称**下，输入唯一产品名称，该名称将在产品目录页面的顶部和搜索结果中向买家显示。

1.  （可选）在**标签**下，输入要与产品关联的所有标签。有关更多信息，请参阅[标记AWS资源](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html)。

1.  在**产品 ID 和代码**下，选择**生成产品 ID 和代码**。

1.  选择**继续进入向导**。您将开始在向导中添加详细的产品信息。

# 第 2 步：提供产品信息
<a name="provide-general-info"></a>

 在 AWS Marketplace 上架您的机器学习产品时，提供全面且准确的产品信息至关重要。通过向导中的**提供产品信息**步骤填写您产品的基本详细信息，例如产品类别和支持信息。

1.  输入您产品的相关信息。

1.  选择**下一步**，继续完成向导中的后续步骤。

# 第 3 步：添加初始产品版本
<a name="add-initial-version"></a>

 本页面将指导您添加产品的初始版本。您的产品在整个生命周期中可能包含多个版本，每个版本均由唯一的 SageMaker AI ARN 标识。

1.  在 **Amazon 资源名称（ARN）**下：

   1.  输入模型或算法的 Amazon SageMaker AI ARN。
      +  模型包 ARN 示例：`arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>`

         要查找您的模型包 ARN，请参阅[我的市场模型包](https://console.aws.amazon.com/sagemaker/home#/model-packages/my-resources)。
      +  算法 ARN 示例：`arn:aws:sagemaker:<region>:<account-id>:algorithm/<algorithm-name>`

         要查找您的算法资源 ARN，请参阅[我的算法](https://console.aws.amazon.com/sagemaker/home#/algorithms/my-resources)。

   1.  输入 IAM 访问角色 ARN。

       IAM ARN 示例：`arn:aws:iam::<account-id>:role/<role-name>`

1.  在**版本信息**下，输入**版本名称**和**发行说明**。

1.  在**模型输入详细信息**下，输入模型输入的摘要，并为实时和批量作业输入提供示例输入数据。您也可以选择提供任何输入限制说明。

1.  （可选）在**输入参数**下，提供产品支持的每个输入参数的详细信息。您可以提供参数名称、描述、约束条件，并指定该参数是必需项还是可选项。最多可提供 24 个输入参数。

1.  （可选）在**自定义属性**下，提供产品支持的任何自定义调用参数。对于每个属性，您可以提供名称、描述、约束条件，并指定该属性是必需项还是可选项。

1.  在**模型输出详细信息**下，输入模型输出的摘要，并为实时和批量作业输出提供示例输出数据。您也可以选择提供任何输出限制说明。

1.  （可选）在**输出参数**下，提供产品支持的每个输出参数的详细信息。您可以提供参数名称、描述、约束条件，并指定该参数是必需项还是可选项。最多可提供 24 个输出参数。

1.  在**使用说明**下，提供有效使用模型的明确指南，例如最佳实践、常见边缘情况处理方法或性能优化建议。

1.  在 **Git 存储库和笔记本链接**下，提供示例笔记本和 Git 存储库的链接。示例笔记本应包含如何调用您的模型。您的 Git 存储库应包含笔记本、数据文件和其他开发人员工具。

1.  在**推荐的实例类型**下，选择为您的产品推荐的实例类型。

   对于*模型包*，您需要为批量转换和实时推理分别选择推荐的实例类型。

   对于*算法包*，您需要为训练作业选择推荐的实例类型。
**注意**  
 可供选择的实例类型仅限于您的模型或算法包支持的实例类型。这些支持的实例类型是在您最初于 Amazon SageMaker AI 中创建资源时确定的。这可确保您的产品仅与能够有效运行您的机器学习解决方案的硬件配置相关联。

1. 选择**下一步**，继续完成向导中的后续步骤。

# 步骤 4：配置定价模式
<a name="set-pricing-model"></a>

 在配置产品的定价模式时，您可以免费提供产品，也可以实施基于用量的定价模式。产品一旦发布，便不能更改定价模式。

1.  选择定价模式。批量转换和算法训练产品只能免费提供或按小时收费。
   +  如果您选择免费提供产品，请选择**下一步**并继续完成向导。
   +  如果您选择按用量定价，请继续执行以下步骤。

1.  如果您选择根据用量收费，可以输入使用成本。您可以选择输入适用于所有实例类型的价格，也可以输入每种实例类型的价格，以实现更精细的定价。

1.  如果您想提供产品的免费试用，请选择**是，提供免费试用**。

1. 选择**下一步**，继续完成向导中的后续步骤。

# 步骤 5：配置退款政策
<a name="configure-refund-policy"></a>

 虽然 AWS 不强制要求提供退款服务，但您必须向 AWS Marketplace 提交正式的退款政策。

1. 输入退款政策内容。

1.  选择**下一步**，继续完成向导中的后续步骤。

# 第 6 步：配置 EULA
<a name="configure-eula"></a>

 在此步骤中，您将选择一份规范客户使用您产品的方式的法律协议。您可以选择 AWS 的标准合同条款，也可以上传自定义的最终用户许可协议（EULA）。

1.  选择标准合同或提供自定义的最终用户许可协议。

1.  选择**下一步**，继续完成向导中的后续步骤。

# 步骤 7：配置允许列表
<a name="configure-allowlist"></a>

 在提交产品之前，您需要指定哪些 AWS 账户可以访问该产品。这一可选步骤将控制产品的初始可见范围，仅允许您自己的账户以及添加到允许列表中的特定授权 AWS 账户访问。

1.  输入您希望授予产品访问权限的 AWS 账户 ID。

1.  选择**提交**以完成产品提交。

    您的产品将处于**有限可见性**状态，并且仅对创建该产品的 AWS 账户及其他已列入允许列表的 AWS 账户可见。

    有关状态的更多信息，请参阅[机器学习产品状态](ml-product-lifecycle.md#ml-product-status)。

 当产品列表处于**有限可见性**状态时，您可以查看并测试产品列表。若要更改产品的可见性，请参阅[更新产品可见性](ml-update-visibility.md)。

# 管理机器学习产品
<a name="ml-product-management"></a>

在 AWS Marketplace 管理门户中，选择**请求更改**以在 AWS Marketplace 中修改产品或版本。提交更改后，系统将对其进行处理。处理时长因修改类型而异，短则数分钟，长则数天。您可以在 AWS Marketplace 管理门户中查看更改请求的状态。

**Topics**
+ [更新产品信息](ml-update-product.md)
+ [更新产品可见性](ml-update-visibility.md)
+ [更新允许列表](ml-update-allowlist.md)
+ [管理产品版本](ml-manage-product-version.md)
+ [更新产品定价](ml-update-public-offer.md)
+ [更新退款政策](ml-update-refund-policy.md)
+ [更新 EULA](ml-update-eula.md)
+ [移除产品](ml-remove-a-product.md)

**注意**  
 除通过 AWS Marketplace 管理门户进行更改外，您还可以使用 [AWS Marketplace Catalog API](https://docs.aws.amazon.com/marketplace/latest/APIReference/welcome.html) 执行更改操作。

# 更新产品信息
<a name="ml-update-product"></a>

 创建机器学习（ML）产品后，您可在 AWS Marketplace 中修改该产品的部分信息，例如产品描述、核心优势、产品名称、SKU、产品类别及关键词等。

1.  登录您在 [AWS Marketplace 管理门户](https://aws.amazon.com/marketplace/management/tour/)中的卖家账户。

1.  前往**机器学习产品**页面并选择您的目标产品。

1.  选择**请求更改**，然后选择**更新产品信息**。

1.  根据需要更新字段。
**注意**  
 有关徽标规格，请参阅[公司和产品徽标要求](product-submission.md#seller-and-product-logos)。

1.  选择**提交**。

 您可通过**机器学习产品**页面的**请求**选项卡查看请求进度。有关状态的更多信息，请参阅[机器学习产品状态](ml-product-lifecycle.md#ml-product-status)。

# 更新产品可见性
<a name="ml-update-visibility"></a>

1.  登录您在 [AWS Marketplace 管理门户](https://aws.amazon.com/marketplace/management/tour/)中的卖家账户。

1.  前往**机器学习产品**页面并选择您的产品。

1.  选择**请求更改**，选择**更新产品可见性**，然后选择**公开**或**受限**。

1.  检查更改，然后选择**提交**。

 您可通过**机器学习产品**页面的**请求**选项卡查看请求进度。有关状态的更多信息，请参阅[机器学习产品状态](ml-product-lifecycle.md#ml-product-status)。

# 更新允许列表
<a name="ml-update-allowlist"></a>

1.  登录您在 [AWS Marketplace 管理门户](https://aws.amazon.com/marketplace/management/tour/)中的卖家账户。

1.  前往**机器学习产品**页面并选择您的产品。

1.  选择**请求更改**，然后选择**更新允许列表**。

1.  修改需要更改的信息，然后选择**提交**。有关更多信息，请参阅[步骤 7：配置允许列表](configure-allowlist.md)。

 您可通过**机器学习产品**页面的**请求**选项卡查看请求进度。有关状态的更多信息，请参阅[机器学习产品状态](ml-product-lifecycle.md#ml-product-status)。

# 管理产品版本
<a name="ml-manage-product-version"></a>

 作为卖家，您可在 AWS Marketplace 中管理产品版本：更新现有版本信息、添加新版本，或移除不再支持的版本。每个版本均有唯一的 SageMaker AI ARN 及相关信息，供买家评估并部署您的产品。

**注意**  
 添加版本前，请创建产品 ID 并设置定价。有关更多信息，请参阅[步骤 1：创建新列表](create-new-listing.md)。

## 更新版本信息
<a name="ml-updating-versions"></a>

 创建一个版本后，您可修改其相关信息，例如版本说明、使用说明和实例建议。

**注意**  
 版本名称和 ARN 不可修改，如需更改需创建新版本。

1.  登录您在 [AWS Marketplace 管理门户](https://aws.amazon.com/marketplace/management/tour/)中的卖家账户。

1.  前往**机器学习产品**页面并选择您的产品。

1.  选择**请求更改**，然后选择**更新版本信息**。

1.  选择要更新的版本。

1.  选择**编辑版本**。

1.  修改所需字段，然后选择**下一步**。

1.  输入您的定价信息，然后选择**提交**。有关更多信息，请参阅[步骤 4：配置定价模式](set-pricing-model.md)。

 您可通过**机器学习产品**页面的**请求**选项卡查看请求进度。有关状态的更多信息，请参阅[机器学习产品状态](ml-product-lifecycle.md#ml-product-status)。

## 添加新版本
<a name="ml-adding-new-versions"></a>

 您可以添加产品的新版本以引入功能、更新或改进，同时保留对先前版本的访问权限。

1.  登录您在 [AWS Marketplace 管理门户](https://aws.amazon.com/marketplace/management/tour/)中的卖家账户。

1.  前往**机器学习产品**页面并选择您的产品。

1.  选择**版本**，然后选择**添加新版本**。

1.  按照[第 3 步：添加初始产品版本](add-initial-version.md)中的步骤输入新版本的信息。

1.  输入您的定价信息，然后选择**提交**。有关更多信息，请参阅[步骤 4：配置定价模式](set-pricing-model.md)。

成功添加新版本后，买家会收到一封电子邮件通知，告知有新版本可用。

## 限制版本
<a name="ml-restricting-versions"></a>

 当某个版本过时或您希望停止提供该版本时，可限制买家对该版本的访问权限，同时保留对其他版本的访问权限。

1.  登录您在 [AWS Marketplace 管理门户](https://aws.amazon.com/marketplace/management/tour/)中的卖家账户。

1.  前往**机器学习产品**页面并选择您的产品。

1.  选择**版本**，然后选择**限制版本**。
**注意**  
 您必须始终保持至少一个版本可供使用。

1.  选择**提交**。

 成功限制某个版本后，买家会收到一封电子邮件通知，告知该版本已被限制访问。

# 更新产品定价
<a name="ml-update-public-offer"></a>

 您可在 AWS Marketplace 中修改机器学习产品的费率和免费试用期限，但定价模式本身无法更改。请注意，对于付费模式的产品，涨价需经过 90 天的通知期，生效时间为通知期结束后次月的第一天。通知期内不得进行其他价格调整。

1.  登录您在 [AWS Marketplace 管理门户](https://aws.amazon.com/marketplace/management/tour/)中的卖家账户。

1.  前往**机器学习产品**页面并选择您的产品。

1.  依次选择**请求更改**、**更新公开优惠**和**编辑优惠信息**。

1.  修改需要更改的信息，然后选择**提交**。

 您可通过**机器学习产品**页面的**请求**选项卡查看请求进度。有关状态的更多信息，请参阅[机器学习产品状态](ml-product-lifecycle.md#ml-product-status)。

# 更新退款政策
<a name="ml-update-refund-policy"></a>

1.  登录您在 [AWS Marketplace 管理门户](https://aws.amazon.com/marketplace/management/tour/)中的卖家账户。

1.  前往**机器学习产品**页面并选择您的产品。

1.  依次选择**请求更改**、**更新公开优惠**和**更新退款政策**。

1.  修改需要更改的信息，然后选择**提交**。

 您可通过**机器学习产品**页面的**请求**选项卡查看请求进度。有关状态的更多信息，请参阅[机器学习产品状态](ml-product-lifecycle.md#ml-product-status)。

# 更新 EULA
<a name="ml-update-eula"></a>

1.  登录您在 [AWS Marketplace 管理门户](https://aws.amazon.com/marketplace/management/tour/)中的卖家账户。

1.  前往**机器学习产品**页面并选择您的产品。

1.  依次选择**请求更改**、**更新公开优惠**和**更新 EULA**。

1.  修改需要更改的信息，然后选择**提交**。

 您可通过**机器学习产品**页面的**请求**选项卡查看请求进度。有关状态的更多信息，请参阅[机器学习产品状态](ml-product-lifecycle.md#ml-product-status)。

# 移除产品
<a name="ml-remove-a-product"></a>

 您可将已发布的产品从 AWS Marketplace 中移除（即下架）。产品移除后，新客户将无法订阅，但您必须为现有客户提供至少 90 天的支持服务。

 以下是从 AWS Marketplace 中移除产品的相关条件：
+  产品将从 AWS Marketplace 的搜索和发现工具中移除。
+  订阅功能将被停用。
+  产品详细信息页面仍可通过直接 URL 访问。
+  现有订阅用户在取消订阅前，可继续使用该产品。
+  AWS Marketplace 会就产品下架事宜通知当前买家。

**要移除您的机器学习产品，请按以下步骤操作：**

1.  登录您在 [AWS Marketplace 管理门户](https://aws.amazon.com/marketplace/management/tour/)中的卖家账户。

1.  前往**机器学习产品**页面并选择您的产品。

1.  依次选择**请求更改**、**更新产品可见性**和**受限**。

1.  （可选）输入替换产品 ID。

1.  检查更改，然后选择**提交**。

 您可通过**机器学习产品**页面的**请求**选项卡查看请求进度。有关状态的更多信息，请参阅[机器学习产品状态](ml-product-lifecycle.md#ml-product-status)。

 产品移除后，会显示在**当前产品**列表中，您只能在此列表中下载产品电子表格。如果您对产品移除有任何疑问，请联系 [AWS Marketplace 卖家运营](https://aws.amazon.com/marketplace/management/contact-us/)团队。

# 为机器学习产品创建专属优惠
<a name="machine-learning-private-offers"></a>

 您可以为您的机器学习产品直接与客户协商并提供专属优惠。有关专属优惠的更多信息，请参阅[为您的 AWS Marketplace 产品准备私人报价](private-offers-overview.md)。

**先决条件：**
+  您必须有付费房源 AWS Marketplace。
+  您必须有权访问 AWS Marketplace 管理门户 (AMMP)。

**要为机器学习产品创建专属优惠，请执行以下操作：**

1.  登录 AWS Marketplace 管理门户。

1. 选择**优惠**，然后选择**创建专属优惠**

1.  在**创建专属优惠**页面上，选择要为其创建专属优惠的产品。仅可为“已上线产品”创建优惠。

1.  在**优惠详情**页面上：

   1.  输入优惠名称和描述。

   1.  选择续订选项。

   1.  设置优惠到期日期。优惠将于设定日期的 UTC 23:59:59 到期。

1. 选择**下一步**两次。

1.  在**配置优惠定价和期限**页面上，指定：
   +  定价选项

     （有关更多信息，请参阅[机器学习产品的私人优惠](https://docs.aws.amazon.com/marketplace/latest/userguide/private-offers-supported-product-types.html#ml-private-offers)）
   + 使用或合同期限
   + 优惠货币
   + 定价维度。

     （对于使用量定价，基于使用量的费率仅在优惠期限内适用。 对于合同，基于使用量的费率仅在合同期限到期且为永久性时适用。）
**注意**  
有关分期付款计划的更多信息，请参阅[专属优惠分期付款计划](installment-plans.md)。

1. 选择**下一步**。

1. 在**添加买家**页面上， AWS 账户 IDs 为您的买家输入。然后选择**下一步**。
**重要**  
如果关联账户需享受专属优惠权益，需满足以下条件：  
包括付款人 AWS 账户 ID。
付款人账户必须首先接受该专属优惠的按小时计费条款。
付款人账户接受后，关联账户方可接受该专属优惠。

1. 在**配置法律条款和优惠文档**页面上，添加任何自定义条款，然后选择**下一步**。
**注意**  
 您最多可添加五个文件（包括法律条款、工作说明书、物料清单、定价表或附录）。系统会将这些文件合并为一个文档。

1. 在**审核和创建**页面上，验证优惠详细信息无误后，选择**创建优惠**。

1. 优惠显示在**管理专属报价**页面后，打开**操作**菜单，选择**复制优惠 URL**，然后通过电子邮件将其发送给买家。
**注意**  
 优惠发布可能需要一定时间。在买家接受优惠前，您可在**管理专属优惠**页面上编辑优惠内容。

# 创建机器学习产品的要求和最佳实操
<a name="ml-listing-requirements-and-best-practices"></a>

务必使买家能够轻松测试您的模型包和算法产品。以下各节介绍了关于机器学习产品的最佳实践。有关要求和建议的完整摘要，请参阅[机器学习产品列表的要求和建议摘要](#ml-summary-table-of-requirements-and-recommendations)。

**注意**  
如果您发布的商品不符合这些要求，销售 AWS Marketplace 代表可能会与您联系以帮助您满足这些要求。

**Topics**
+ [机器学习产品的一般最佳实操](#ml-general-best-practices)
+ [使用信息要求](#ml-requirements-for-usage-information)
+ [输入和输出的要求](#ml-requirements-for-inputs-and-outputs)
+ [Jupyter 笔记本的要求](#ml-requirements-for-jupyter-notebook)
+ [机器学习产品列表的要求和建议摘要](#ml-summary-table-of-requirements-and-recommendations)

## 机器学习产品的一般最佳实操
<a name="ml-general-best-practices"></a>

 为您的机器学习产品提供以下信息：
+  对于产品描述，请包括以下内容：
  +  模型的作用 
  +  目标客户 
  +  最重要的用例 
  +  模型训练方式及使用的数据量 
  +  性能指标及使用的验证数据 
  +  如果是医疗用途，则您的模型是否用于诊断 
+ 默认情况下，机器学习产品配置为公开可见。但是，您可以创建具有有限可见性的产品。有关更多信息，请参阅 [步骤 7：配置允许列表](configure-allowlist.md)。
+  （可选）对于付费产品，提供 14-30 天的免费试用，让客户试用您的产品。有关更多信息，请参阅 [的机器学习产品定价 AWS Marketplace](machine-learning-pricing.md)。

## 使用信息要求
<a name="ml-requirements-for-usage-information"></a>

描述产品预期输入和输出的清晰使用信息（附示例）对于提供积极的买家体验至关重要。

对于添加到产品列表中的每个新资源版本，都必须提供使用信息。

要编辑特定版本的现有使用情况信息，请参阅[更新版本信息](ml-manage-product-version.md#ml-updating-versions)。

## 输入和输出的要求
<a name="ml-requirements-for-inputs-and-outputs"></a>

清晰解释支持的输入参数和返回的输出参数，并附上示例，这对于帮助买家了解并使用您的产品至关重要。这种理解可以帮助您的买家对输入数据进行任何必要的转换，以获得最佳的推理结果。

将您的 Amazon A SageMaker I 资源添加到您的产品清单时，系统会提示您输入以下信息。

### 推理输入和输出
<a name="ml-inference-inputs-and-outputs"></a>

对于推理输入，需说明您的产品对实时端点和批量转换作业所期望的输入数据。包括用于对数据进行任何必要预处理的代码片段。说明适用的限制条件。提供托管在上的输入示例[GitHub](https://github.com)。

对于推理输出，需说明您的产品对实时端点和批量转换作业返回的输出数据。说明适用的限制条件。提供托管在上的输出示例[GitHub](https://github.com)。

对于示例，请提供适用于您的产品的输入文件。如果您的模型执行多分类器，请为每个类提供至少一个示例输入文件。

### 训练输入
<a name="ml-training-inputs"></a>

在**训练模型的信息**部分，提供输入数据格式和代码片段，以便对数据进行任何必要的预处理。描述数值含义及限制条件（如适用）。提供托管在上的输入示例[GitHub](https://github.com)。

解释买家可以提供的可选和必备特征，并指定是否支持 `PIPE` 输入模式。如果支持[分布式训](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training)练（使用超过 1 个 CPU/GPU 实例进行训练），请指定此项。要进行调整，请列出推荐的超参数。

## Jupyter 笔记本的要求
<a name="ml-requirements-for-jupyter-notebook"></a>

将你的 SageMaker AI 资源添加到产品列表时，请提供一个指向托管的 Jupyter 笔记本的示例 Jupyter 笔记本的链接 [GitHub](https://github.com)，该笔记本演示了完整的工作流程，而无需要求买家上传或查找任何数据。

使用 AWS SDK for Python (Boto)。精心开发的示例笔记本可以让买家更轻松地尝试使用您的产品。

对于模型包产品，您的示例笔记本演示了输入数据的准备、实时推理端点的创建以及批量转换作业的性能。有关更多信息，请参阅上的 [Model Package 列表和示例笔记本](https://github.com/aws/amazon-sagemaker-examples/tree/main/aws_marketplace/curating_aws_marketplace_listing_and_sample_notebook/ModelPackage) GitHub。有关示例笔记本，请参阅 [auto\$1insurance](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/aws_marketplace/using_model_packages/auto_insurance)。这款笔记本可以正常工作 AWS 区域，无需输入任何参数，买家也无需查找样本数据。

**注意**  
开发不足的 Jupyter 笔记本示例无法显示多个可能的输入和数据预处理步骤，这可能会使买家难以完全了解您产品的价值主张。

对于算法产品，示例笔记本演示了完整的训练、调整、模型创建、实时推理端点的创建以及批处理转换作业的性能。有关更多信息，请参阅[算法列表和示例笔记本](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/aws_marketplace/curating_aws_marketplace_listing_and_sample_notebook/Algorithm) GitHub。[有关示例笔记本，请参阅 [amazon\$1demo\$1pro](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/aws_marketplace/using_algorithms/amazon_demo_product) duct 和 automl on。](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/aws_marketplace/using_algorithms/automl) GitHub这些示例笔记本可在所有区域使用，无需输入任何参数，也无需买家查找示例数据。

**注意**  
缺少示例训练数据可能会使您的买家无法成功运行 Jupyter 笔记本。开发不足的示例笔记本可能会使您的买家无法使用您的产品并阻碍其采用。

## 机器学习产品列表的要求和建议摘要
<a name="ml-summary-table-of-requirements-and-recommendations"></a>

下表提供了机器学习产品列表页面要求和建议的摘要。


|  **详细信息**  |  **对于模型包列表**  |  **对于算法列表**  | 
| --- |--- |--- |
| **Product descriptions** | 
| --- |
| 详细解释产品对支持的内容类型（例如，“检测图像中的 X”）的作用。 |  必需  |  必需  | 
| 提供有关产品的有说服力和差异化的信息（避免使用诸如 “最佳” 或未经证实的说法之类的形容词）。 |  推荐  |  推荐  | 
| 列出该产品最重要的用例。 |  必需  |  必需  | 
| 描述其训练所依据的数据（来源和大小），并列出所有已知的限制。 |  必需  |  不适用 | 
| 描述模型所依据的核心框架。 |  推荐  |  推荐  | 
| 根据验证数据汇总模型性能指标（例如，“使用 Z 数据集进行基准测试的 XX.YY 精度百分比”）。 |  必需  |  不适用 | 
| 根据建议的实例类型汇总模型延迟 and/or 吞吐量指标。 |  必需  |  不适用 | 
| 描述算法类别。例如，“这种决策森林回归算法基于树结构分类器的集合，这些分类器是使用引导聚合的通用技术和随机选择的特征构建的。”  |  不适用 |  必需  | 
| **Usage information** | 
| --- |
| 为了进行推断，请描述实时端点和批量转换作业的预期输入格式。说明适用的限制条件。请参阅[输入和输出的要求](#ml-requirements-for-inputs-and-outputs)。 |  必需  |  必需  | 
| 为了进行推理，请为实时端点和批量转换作业提供输入样本。样品必须托管在 GitHub。请参阅[输入和输出的要求](#ml-requirements-for-inputs-and-outputs)。 |  必需  |  必需  | 
| 为了进行推理，请提供每个输入参数的名称和描述。提供有关其限制的详细信息，并指定它是必需的还是可选的。 | 推荐 | 推荐 | 
| 为了进行推断，请提供有关您的产品为实时终端节点和批量转换作业返回的输出数据的详细信息。包括任何限制（如果适用）。请参阅[输入和输出的要求](#ml-requirements-for-inputs-and-outputs)。 |  必需  |  必需  | 
| 为了进行推理，请为实时端点和批量转换作业提供输出样本。样品必须托管在 GitHub。请参阅[输入和输出的要求](#ml-requirements-for-inputs-and-outputs)。 |  必需  |  必需  | 
| 为了进行推理，请举一个使用端点或批处理转换作业的示例。包括使用 AWS Command Line Interface (AWS CLI) 命令或使用 AWS SDK 的代码示例。 |  必需  |  必需  | 
| 为了进行推断，请提供每个输出参数的名称和描述。指定是否总是返回。 | 推荐 | 推荐 | 
| 对于训练，请提供有关训练模型的必要信息的详细信息，例如所需的最少数据行数。 见[输入和输出的要求](#ml-requirements-for-inputs-and-outputs)。 |  不适用 |  必需  | 
| 要进行训练，请提供托管在上的输入样本 GitHub。请参阅[输入和输出的要求](#ml-requirements-for-inputs-and-outputs)。 |  不适用 |  必需  | 
| 对于培训，请提供执行训练作业的示例。描述支持的超参数、其范围及其总体影响。指定算法是否支持超参数调整、分布式训练或 GPU 实例。包括代码示例，例如 AWS CLI 命令或使用 S AWS DK。 |  不适用 |  必需  | 
| 提供一本 Jupyter 笔记本，用于 GitHub 演示产品的完整使用情况。请参阅[Jupyter 笔记本的要求](#ml-requirements-for-jupyter-notebook)。 |  必需  |  必需  | 
| 提供与产品使用相关的技术信息，包括用户手册和样本数据。 |  推荐  |  推荐  | 

# 机器学习产品的故障排除
<a name="ml-troubleshooting"></a>

 本部分为您在机器学习产品的发布过程中可能遇到的一些常见错误提供帮助。如果您的问题未列出，请联系 [AWS Marketplace 卖家运营](https://aws.amazon.com/marketplace/management/contact-us/)团队。

## 常规：当我在模型包或算法中添加我的模型包的 Amazon 资源名称 (ARN) 时，出现了 400 错误 AWS Marketplace 管理门户
<a name="troubleshooting_error_code_400"></a>

### 常见原因
<a name="troubleshooting_common_cause"></a>

 在 SageMaker AI 中创建机器学习产品时，您没有选择在中发布产品 AWS Marketplace。

### 解决方案
<a name="troubleshooting_resolution"></a>

 如果您使用 Amazon SageMaker AI 控制台创建资源，则必须在 “**发布此模型包” 的最后一页上选择 “**是**”， AWS Marketplace或者在 “发布此****算法**” 时选择 “**是**” AWS Marketplace。您不能选择**否**然后稍后再发布。选择**是**不会发布模型包或算法。但是，它会在创建模型包或算法资源时对其进行验证，这是在 AWS Marketplace中使用所必需的。

 如果您使用 AWS 软件开发工具包[创建模型包](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-CertifyForMarketplace)或[创建算法](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAlgorithm.html#sagemaker-CreateAlgorithm-request-CertifyForMarketplace)，请确保将参数设置`CertifyForMarketplace`为`true`。

重新创建经过认证和验证的模型包或算法资源后，在 AWS Marketplace 管理门户中添加新的 ARN。

## 一般：当我在模型包或算法中添加模型包或算法的 ARN 时，出现了 404 错误 AWS Marketplace 管理门户
<a name="troubleshooting_error_code_404"></a>

### 常见原因
<a name="troubleshooting_common_cause"></a>

 此错误可能是由于以下几个原因引起的：
+  ARN 可能无效。
+  模型包或算法资源不是在与卖家账户 AWS 账户 相同的情况下创建的。
+  您用于发布的用户或角色没有访问模型包或算法资源的正确 IAM 权限。

### 解决方案
<a name="troubleshooting_resolution"></a>

1.  检查 ARN，确保它是正确的 ARN 并符合预期格式：

    对于模型包， ARNs 应类似于`arn:aws:sagemaker:us-east-2:000123456789:model-package/my-model-package-name`。

    对于算法， ARNs 应类似于`arn:aws:sagemaker:us-east-2:000123456789:algorithm/my-algorithm`。

1.  确保所有用于发布的资源和资产都在您发布内容的卖家账户中。

1.  确保您的用户或角色拥有以下权限：

    对于模型包，必须允许对模型包资源执行 `sagemaker:DescribeModelPackage` 操作。

    对于算法，必须允许对算法资源执行 `sagemaker:DescribeAlgorithm` 操作。

## Amazon SageMaker AI：创建模型包或算法资源时收到 “客户端错误：注册表访问被拒绝” 失败消息
<a name="troubleshooting_error_sm_access_denied"></a>

### 常见原因
<a name="troubleshooting_common_cause"></a>

当用于创建模型包或算法的映像存储在属于另一个 AWS 账户的 [Amazon ECR](https://aws.amazon.com/ecr/) 存储库中时，可能会发生此错误。模型包或算法验证不支持跨账户映像。

### 解决方案
<a name="troubleshooting_resolution"></a>

将该映像复制到您用来发布的 Amazon ECR 存储库中。 AWS 账户 然后，使用新的映像位置继续创建资源。

## Amazon SageMaker AI：我收到 “未启动” 和 “客户端错误：未计划扫描...” 失败消息
<a name="troubleshooting_error_sm_failure"></a>

### 常见原因
<a name="troubleshooting_common_cause"></a>

当 SageMaker AI 无法开始扫描存储在 Amazon ECR 中的 Docker 容器镜像时，就会发生此错误。

### 解决方案
<a name="troubleshooting_resolution"></a>

如果发生这种情况，请打开 [Amazon ECR 控制台](https://console.aws.amazon.com/ecr/repositories?region=us-east-2)，找到您的映像上传到的存储库，选择映像，然后选择**扫描**。