使用 GPU 处理 Landsat 卫星图像

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

目标

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

费用

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

  • Cloud Storage
  • Dataflow
  • Container Registry

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

准备工作

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册新帐号

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

    转到项目选择器页面

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

  4. 启用 Dataflow and Cloud Build API。

    启用 API

  5. 设置身份验证:
    1. 在 Cloud Console 中,转到创建服务帐号密钥页面。

      转到“创建服务帐号密钥”页面
    2. 服务帐号列表中,选择新的服务帐号
    3. 服务帐号名称字段中,输入一个名称。
    4. 角色列表中,选择 Project > Owner

    5. 点击创建。包含密钥的 JSON 文件就会下载到计算机。
  6. 将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含您的服务帐号密钥的 JSON 文件的路径。 此变量仅适用于当前的 shell 会话,因此,如果您打开新的会话,请重新设置该变量。

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

      转到“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-workers
    
  3. 设置 Python 3.6 虚拟环境。

    此示例要求使用 Python 3.6。您使用的 Python 版本必须与通过 Dockerfile 构建的自定义容器映像中使用的 Python 版本相匹配。

    • 如果您已安装 Python 3.6,请创建一个 Python 3.6 虚拟环境并将其激活。

      python3.6 -m venv env
      source env/bin/activate
      
    • 如果您尚未安装 Python 3.6,则可以通过 Miniconda 进行安装。

      a.按照适用于您操作系统的说明安装 Miniconda。

      b. (可选)配置 conda,以便默认不激活其基本环境。

      conda config --set auto_activate_base false
      

      c.创建并激活 Python 3.6 虚拟环境。

      conda create --name dataflow-gpu-env python=3.6
      conda activate dataflow-gpu-env
      

    完成本教程后,您可以运行 deactivate 来退出 virtualenv

  4. 安装示例要求。

    pip install -U pip
    pip install -r requirements.txt
    

构建 Docker 映像

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

export PROJECT=PROJECT_NAME
export BUCKET=BUCKET
export IMAGE="gcr.io/$PROJECT/samples/dataflow/tensorflow-gpu:latest"
gcloud --project $PROJECT builds submit -t $IMAGE . --timeout 20m

请替换以下内容:

  • PROJECT:Google Cloud 项目名称
  • BUCKET:Cloud Storage 存储分区

使用 GPU 运行 Dataflow 作业

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

export REGION="us-central1"
export WORKER_ZONE="us-central1-f"
export GPU_TYPE="nvidia-tesla-t4"

python landsat_view.py \
    --output-path-prefix "gs://$BUCKET/samples/dataflow/landsat/" \
    --runner "DataflowRunner" \
    --project "$PROJECT" \
    --region "$REGION" \
    --worker_machine_type "custom-1-13312-ext" \
    --worker_harness_container_image "$IMAGE" \
    --worker_zone "$WORKER_ZONE" \
    --experiment "worker_accelerator=type:$GPU_TYPE;count:1;install-nvidia-driver" \
    --experiment "use_runner_v2"

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

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

查看结果

landsat_view.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,然后点击关闭以删除项目。

后续步骤