使用 GPU 处理 Landsat 卫星图像

本教程介绍如何在 Dataflow 上使用 GPU 处理 Landsat 8 卫星图像并将其渲染为 JPEG 文件。

目标

  • 为支持 TensorFlow 和 GPU 的 Dataflow 构建 Docker 映像。
  • 使用 GPU 运行 Dataflow 作业。

费用

本教程使用 Google Cloud 的以下收费组件:

  • Cloud Storage
  • Dataflow
  • Container Registry

您可使用价格计算器根据您的预计使用情况来估算费用。

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 Dataflow and Cloud Build API。

    启用 API

  5. 创建服务帐号:

    1. 在 Cloud Console 中,转到创建服务帐号页面。

      转到“创建服务帐号”
    2. 选择一个项目。
    3. 服务帐号名称字段中,输入一个名称。 Cloud Console 会根据此名称填充服务帐号 ID 字段。

      服务帐号说明字段中,输入说明。例如,Service account for quickstart

    4. 点击创建并继续
    5. 点击选择角色字段。

      快速访问下,点击基本,然后点击所有者

    6. 点击继续
    7. 点击完成以完成服务帐号的创建过程。

      不要关闭浏览器窗口。您将在下一步骤中用到它。

  6. 创建服务帐号密钥:

    1. 在 Cloud Console 中,点击您创建的服务帐号的电子邮件地址。
    2. 点击密钥
    3. 依次点击添加密钥创建新密钥
    4. 点击创建。JSON 密钥文件将下载到您的计算机上。
    5. 点击关闭
  7. 将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含您的服务帐号密钥的 JSON 文件的路径。 此变量仅适用于当前的 shell 会话,因此,如果您打开新的会话,请重新设置该变量。

  8. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  9. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  10. 启用 Dataflow and Cloud Build API。

    启用 API

  11. 创建服务帐号:

    1. 在 Cloud Console 中,转到创建服务帐号页面。

      转到“创建服务帐号”
    2. 选择一个项目。
    3. 服务帐号名称字段中,输入一个名称。 Cloud Console 会根据此名称填充服务帐号 ID 字段。

      服务帐号说明字段中,输入说明。例如,Service account for quickstart

    4. 点击创建并继续
    5. 点击选择角色字段。

      快速访问下,点击基本,然后点击所有者

    6. 点击继续
    7. 点击完成以完成服务帐号的创建过程。

      不要关闭浏览器窗口。您将在下一步骤中用到它。

  12. 创建服务帐号密钥:

    1. 在 Cloud Console 中,点击您创建的服务帐号的电子邮件地址。
    2. 点击密钥
    3. 依次点击添加密钥创建新密钥
    4. 点击创建。JSON 密钥文件将下载到您的计算机上。
    5. 点击关闭
  13. 将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含您的服务帐号密钥的 JSON 文件的路径。 此变量仅适用于当前的 shell 会话,因此,如果您打开新的会话,请重新设置该变量。

  14. 要存储本教程中的输出 JPEG 图片文件,请创建一个 Cloud Storage 存储桶:
    1. 在 Cloud Console 中,转到 Cloud Storage 浏览器页面。

      转到浏览器

    2. 点击创建存储分区
    3. 创建存储分区页面上,输入您的存储分区信息。要转到下一步,请点击继续
      • 指定存储分区的名称中,输入唯一的存储分区名称。请勿在存储分区名称中添加敏感信息,因为存储分区命名空间是全局性的,公开可见。
      • 对于选择数据存储位置,执行以下操作:
        • 选择位置类型选项。
        • 选择位置选项。
      • 对于为数据选择一个默认存储类别,选择以下项: Standard
      • 对于选择如何控制对象的访问权限,请选择访问权限控制选项。
      • 对于高级设置(可选),请指定加密方法保留政策存储分区标签
    4. 点击创建

准备工作环境

在学习本教程之前,您必须先设置开发环境并下载入门版文件。

  1. 克隆 python-docs-samples 代码库。

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. 导航到示例代码目录

    cd python-docs-samples/dataflow/gpu-examples/tensorflow-landsat
    

构建 Docker 映像

借助 Cloud Build,您可以使用 Dockerfile 构建 Docker 映像,并将其保存到 Container Registry 中,供其他 Google Cloud 产品访问。

我们使用 build.yaml 配置文件构建容器映像。

gcloud builds submit --config build.yaml

使用 GPU 运行 Dataflow 作业

以下代码块演示了如何使用 GPU 启动此 Dataflow 流水线。

我们使用 run.yaml 配置文件运行 Dataflow 流水线。

export PROJECT=PROJECT_NAME
export BUCKET=BUCKET_NAME

export JOB_NAME="satellite-images-$(date +%Y%m%d-%H%M%S)"
export OUTPUT_PATH="gs://$BUCKET/samples/dataflow/landsat/output-images/"
export REGION="us-central1"
export GPU_TYPE="nvidia-tesla-t4"

gcloud builds submit \
    --config run.yaml \
    --substitutions _JOB_NAME=$JOB_NAME,_OUTPUT_PATH=$OUTPUT_PATH,_REGION=$REGION,_GPU_TYPE=$GPU_TYPE \
    --no-source

替换以下内容:

  • PROJECT_NAME:Google Cloud 项目名称
  • BUCKET_NAME:Cloud Storage 存储桶名称(不带 gs:// 前缀)

运行此流水线后,等待命令完成。如果退出 shell,则可能会丢失设置的环境变量。

为避免在多个工作器进程之间共享 GPU,此示例使用了配备 1 个 vCPU 的机器类型。流水线的内存要求是使用 13 GB 的扩展内存。如需了解详情,请参阅 GPU 和工作器并行

查看结果

tensorflow-landsat/main.py 中的流水线会处理 Landsat 8 卫星图像,并将其渲染为 JPEG 文件。请按照以下步骤查看这些文件。

  1. 使用 gsutil 列出带有详细信息的输出 JPEG 文件。

    gsutil ls -lh "gs://$BUCKET/samples/dataflow/landsat/"
    
  2. 将文件复制到您的本地目录中。

    mkdir outputs
    gsutil -m cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
    
  3. 使用您选择的图片查看器打开这些图片文件。

清除数据

为避免因本教程中使用的资源导致您的 Google Cloud 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

为了避免产生费用,最简单的方法是删除您为本教程创建的项目。

如需删除项目,请执行以下操作:

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤