在 Amazon SageMaker Studio 中使用 Amazon SageMaker Dis

自定义图像用于地理空间分析的Amazon SageMaker

关键要点

在本文中,我们将探讨如何在 Amazon SageMaker Studio 中创建自定义图像,以针对地理空间分析的需要进行特定配置。通过扩展 SageMaker Distribution,您可以将开源地理空间 Python 库添加到您的环境中,以便有效利用地理空间数据。我们还将提供构建和部署图像的详细步骤,确保数据科学家可以充分利用这些工具来进行分析和处理。

Amazon SageMaker Studio 提供了一套完整的、全面管理的集成开发环境IDE,专门用于机器学习ML,包括JupyterLab、代码编辑器基于 CodeOSS和RStudio。它支持 ML 开发的各个阶段,从数据准备到部署,同时允许您在几秒钟内启动预配置的 JupyterLab IDE 以实现高效编码。其灵活的界面和 AI 驱动的编码助手简化并增强了 ML 工作流的配置、调试和代码测试。

随着卫星图像、坐标轨迹或带有其他业务和环境数据集特征的航空地图等地理空间数据的日益可用,这些数据解锁了环境监测、城市规划、农业、应急响应、交通和公共卫生等领域的宝贵用例。

为了有效利用这些数据集中的丰富信息进行 ML 和分析,访问合适的地理空间数据处理工具至关重要。考虑到地理空间数据通常以专门的文件格式如Cloud Optimized GeoTIFFCOG、Zarr、GeoJSON和GeoParquet的形式出现,因此必须使用专用的软件工具和库来处理它们。

本文将演示如何在 SageMaker Studio 中扩展Amazon SageMaker Distribution,添加额外的依赖项,以创建针对地理空间分析定制的容器图像。虽然本文中的示例集中在地理空间数据科学上,但本方法可以应用于任何基于 SageMaker Distribution 的自定义图像。

SageMaker Distribution 图像是预装数据科学包并经过 JupyterLab IDE 预配置的 Docker 图像,使您能够在 SageMaker Studio UI 中使用这些图像,并用于处理或训练等非交互式工作流。这使您能够在 SageMaker Studio 笔记本和异步作业如处理或训练之间无缝过渡,同时只需维护一个 Docker 图像。

在本文中,我们将逐步指导您如何在 SageMaker Studio 中构建和使用自定义容器图像。具体而言,我们将演示如何通过扩展 SageMaker Distribution 来为地理空间工作流自定义它,添加开源地理空间 Python 库。我们将解释如何使用持续集成和交付CI/CD工具在 AWS 上构建和部署图像,并如何使部署的图像在 SageMaker Studio 中可用。本文中使用的所有代码,包括 Dockerfile 和基础设施即代码IaC模板以实现快速部署,都可以在GitHub 存储库中找到。

解决方案概述

您可以通过以下步骤构建自定义容器图像并在 SageMaker Studio 中使用它:

在 Amazon SageMaker Studio 中使用 Amazon SageMaker Dis创建一个包含额外 Python 库和工具的 Dockerfile。从 Dockerfile 建立自定义容器图像。将自定义容器图像推送到 Amazon Elastic Container RegistryAmazon ECR上的私有存储库。将图像附加到您的Amazon SageMaker Studio 域。从您的 JupyterLab 空间访问该图像。

以下图示说明了解决方案架构。

该解决方案利用了 AWS CodeBuild,这是一个完全托管的服务,可编译源代码并生成可部署的软件工件,以根据 Dockerfile 构建新的容器图像。CodeBuild 支持各种 git 版本控制源,例如 AWS CodeCommit、GitHub 和 GitLab。在本文中,我们将构建文件托管在 Amazon Simple Storage ServiceAmazon S3上,并将其用作 CodeBuild 项目的源提供程序。您可以扩展该解决方案以与包括 GitLab、Jenkins、Harness 等其他工具的 CI/CD 工具一起使用。

CodeBuild 从 Amazon S3 检索构建文件,运行 Docker 构建,并将生成的容器图像推送到私有 ECR 存储库。Amazon ECR 是一个托管容器注册表,便于存储、管理和部署容器图像。

然后,将自定义图像附加到 SageMaker Studio 域,数据科学家和数据工程师可以将其用作 IDE 或 SageMaker 处理或训练作业的运行时。

先决条件

本文涵盖了 SageMaker Studio 的默认方法,该方法涉及一个管理的网络接口,允许互联网通信。此外,我们还包括了如何在私有虚拟私有云VPC中进行适应的步骤。

在开始之前,请确保您已满足以下前提条件:

SageMaker Studio V2 确保您使用的是 Amazon SageMaker Studio 域和用户配置文件的最新版本。如果您当前使用的是 SageMaker Studio Classic,请参考从 Amazon SageMaker Studio Classic 迁移。有关如何创建新域的信息,请参见快速设置 Amazon SageMaker。正确的 IAM 权限 您需要确保用于 CodeBuild 的AWS 身份和访问管理IAM角色具有正确权限以执行构建、在 Amazon ECR 中创建存储库和将图像推送到该存储库。有关详细信息,请参阅使用 Amazon SageMaker Studio 图像构建 CLI 从 Studio 笔记本中构建容器图像。如果您选择使用提供的 IaC 示例部署此解决方案,则这些权限将自动设置。

如果您打算遵循本文章并使用 IaC 部署 CodeBuild 项目和 ECR 存储库,您还需要在本地机器上安装AWS Cloud Development KitAWS CDK。有关说明,请参阅获取 AWS CDK 的入门指南。如果您使用的是 AWS Cloud9 等基于云的 IDE,AWS CDK 通常会预先安装。

如果您希望安全地使用私有 VPC 部署自定义容器,您还需要以下内容:

一个具有私有子网的 VPC适用于以下服务的VPC 端点: Amazon S3SageMakerAmazon ECRAWS 安全令牌服务AWS STS用于构建 Docker 容器的 CodeBuild

有关在私有 VPC 中设置 SageMaker Studio 域的信息,请参见将 Studio 笔记本连接到 VPC 中的外部资源。

扩展 SageMaker Distribution

默认情况下,SageMaker Studio 提供了一系列作为 SageMaker Distribution 一部分的策划预构建 Docker 图像。这些图像包含 ML、数据科学和可视化的流行框架,包括深度学习框架如 PyTorch、TensorFlow 和 Keras;流行的 Python 包如 NumPy、scikitlearn 和 pandas;以及 IDE如 JupyterLab 和代码编辑器。所有安装的库和包是相互兼容的,并提供其最新兼容版本。每个发行版版本有 CPU 和 GPU 两种变体,并托管在Amazon ECR 公共存储库。为了能够在 SageMaker Studio 中处理地理空间数据,您需要扩展 SageMaker Distribution,添加所需的地理空间库如 gdal、geospandas、leafmap、或rioxarray,并通过 SageMaker Studio 使其对用户可访问。

首先,让我们回顾一下如何针对地理空间分析和 ML 扩展 SageMaker Distribution。为此,我们主要遵循 SageMaker 中为创建自定义 Docker 文件提供的模板,并根据我们希望安装的地理空间库做一些细微但重要的调整。完整的 Dockerfile 如下:

dockerfile

设置发行版类型cpu 或 gpu

ARG DISTRIBUTIONTYPE

获取 SageMaker Distribution 基础图像

使用固定版本以便于重现,如果使用 latest 则为最新版本

FROM publicecraws/sagemaker/sagemakerdistribution180DISTRIBUTIONTYPE

设置 SageMaker 特定参数和参数

此处查看支持的值 https//docsawsamazoncom/sagemaker/latest/dg/studioupdatedjlimagespecificationshtml#studioupdatedjladminguidecustomimagesuserandfilesystem

ARG NBUSER=sagemakeruserARG NBUID=1000ARG NBGID=100

ENV MAMBAUSER=NBUSER

USER ROOT

设置 GDAL 所需的环境变量

ARG CPLUSINCLUDEPATH=/usr/include/gdalARG CINCLUDEPATH=/usr/include/gdal

安装 GDAL 和其他所需的 Linux 包

RUN aptget allowreleaseinfochange update y qq ampamp aptget update ampamp apt install y softwarepropertiescommon ampamp addaptrepository yes ppaubuntugis/ppa ampamp aptget update ampamp aptget install qq y groff unzip libgdaldev gdalbin ffmpeg libsm6 libxext6 ampamp aptget install y reinstall buildessential ampamp aptget clean ampamp rm fr /var/lib/apt/lists/

使用 micromamba 包管理器安装所需的地理空间 Python 包

USER MAMBAUSER

飞跃vnp加速器

RUN micromamba install gdal==364 yes channel condaforge name base ampamp micromamba install geopandas==0132 rasterio==138 leafmap==0313 rioxarray==0151 yes channel condaforge name base ampamp micromamba clean a

设置入口点和 Jupyter 服务器参数

ENTRYPOINT [jupyterlab]CMD [ServerAppip=0000 ServerAppport=8888 ServerAppalloworigin= ServerApptoken= ServerAppbaseurl=/jupyterlab/default]

让我们分解一下与地理空间相关的关键修改。

首先,您需要在 Linux 上安装 地理空间数据抽象库GDAL。GDAL 是一个开源库,提供读取和写入栅格和矢量地理空间数据格式的驱动程序。它为许多开源和专有 GIS 应用提供了基础,本文中使用的库就是基于此实现。如下实现有关更详细信息,请参见为 Python 安装 GDAL:

dockerfile

安装 GDAL 和其他所需的 Linux 包

RUN aptget allowreleaseinfochange update y qq ampamp aptget update ampamp apt install y softwarepropertiescommon ampamp addaptrepository yes ppaubuntugis/ppa ampamp aptget update ampamp aptget install qq y groff unzip libgdaldev gdalbin ffmpeg libsm6 libxext6 ampamp aptget install y reinstall buildessential ampamp aptget clean ampamp rm fr /var/lib/apt/lists/

您还需要设置以下特定于 GDAL 的环境变量:

dockerfileARG CPLUSINCLUDEPATH=/usr/include/gdalARG CINCLUDEPATH=/usr/include/gdal

安装 GDAL 后,您可以使用推荐的 micromamba 包管理器 安装所需的地理空间 Python 库,如下代码段所示:

dockerfile

使用 micromamba 包管理器安装所需的地理空间 Python 包

USER MAMBAUSER

RUN micromamba install gdal==364 yes channel condaforge name base ampamp micromamba install geopandas==0132 rasterio==138 leafmap==0313 rioxarray==0151 yes channel condaforge name base ampamp micromamba clean a

这里定义的版本已经过与底层 SageMaker Distribution 的测试。您可以自由添加所需的附加库。确定正确版本可能需要一定程度的实验。

现在,您已经创建了自定义的地理空间 Dockerfile,可以构建并将该图像推送到 Amazon ECR。

构建自定义地理空间图像

要构建 Docker 图像,您需要一个配备 Docker 和AWS 命令行界面AWS CLI的构建环境。该环境可以在本地计算机、AWS Cloud9 等基于云的 IDE 中,或作为持续集成服务如 CodeBuild的一部分进行设置。

在构建 Docker 图像之前,确定您将推送图像的 ECR 存储库位置。您的图像必须以以下格式标记:ltyourawsaccountidgtdkrecrltyourawsregiongtamazonawscom/ltyourrepositorynamegtlttaggt。没有此标签,无法将其推送到 ECR 存储库。如果您使用 AWS CDK 部署解决方案,将自动创建 ECR 存储库,并配置 CodeBuild 项目以将该存储库作为推送图像的目标。当您启动 CodeBuild 构建时,图像会构建、标记,然后推送到之前创建的 ECR 存储库。

以下步骤仅在您选择手动执行这些操作时适用。

要手动构建图像,请在与 Dockerfile 相同的目录中运行以下命令:

bashdocker build buildarg DISTRIBUTIONTYPE=cpu t {ECRACCOUNTID}dkrecr{ECRREGION}amazonawscom/{ECRREPONAME}latestcpu

构建图像后,您必须在推送图像之前使用此命令登录到 ECR 存储库:

bashaws ecr getloginpassword region {ECRREGION} docker login username AWS passwordstdin {ECRACCOUNTID}dkrecr{ECRREGION}amazonawscom

接下来,使用以下命令推送您的 Docker 图像:

bashdocker push {ECRACCOUNTID}dkrecr{ECRREGION}amazonawscom/{ECRREPONAME}latestcpu

您的图像现在已被推送到 ECR 存储库,您可以继续将其附加到 SageMaker。

将自定义地理空间图像附加到 SageMaker Studio

在您自定义图像成功推送到 Amazon ECR 后,您需要将其附加到 SageMaker 域,以便在 SageMaker Studio 中使用。

在 SageMaker 控制台上,选择导航窗格中的 Domains 下的 Admin configurations。

如果您尚未设置 SageMaker 域,可以创建一个。

从可用域列表中,选择您希望附加地理空间图像的域。在 Domain details 页面上,选择 Environment 选项卡。在