本教程介绍如何在 Dataflow 上使用 GPU 处理 Landsat 8 卫星图像并将其渲染为 JPEG 文件。
目标
- 为支持 TensorFlow 和 GPU 的 Dataflow 构建 Docker 映像。
- 使用 GPU 运行 Dataflow 作业。
费用
本教程使用 Google Cloud 的以下收费组件:
- Cloud Storage
- Dataflow
- Container Registry
您可使用价格计算器根据您的预计使用情况来估算费用。
准备工作
-
登录您的 Google 帐号。
如果您还没有 Google 帐号,请注册新帐号。
-
在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能。
- 启用 Dataflow and Cloud Build API。
- 设置身份验证:
-
在 Cloud Console 中,转到创建服务帐号密钥页面。
转到“创建服务帐号密钥”页面 - 从服务帐号列表中,选择新的服务帐号。
- 在服务帐号名称字段中,输入一个名称。
从角色列表中,选择 Project > Owner。
- 点击创建。包含密钥的 JSON 文件就会下载到计算机。
-
-
将环境变量
GOOGLE_APPLICATION_CREDENTIALS
设置为包含您的服务帐号密钥的 JSON 文件的路径。 此变量仅适用于当前的 shell 会话,因此,如果您打开新的会话,请重新设置该变量。 - 要存储本教程中的输出 JPEG 图片文件,请创建一个 Cloud Storage 存储分区:
- 在 Cloud Console 中,转到 Cloud Storage 浏览器页面。
- 点击创建存储分区。
- 在创建存储分区对话框中,指定以下特性:
- 名称:唯一的存储分区名称。请勿在存储分区名称中添加敏感信息,因为存储分区命名空间属于全局性质,并会公开显示。
- 默认存储类别: Standard
- 存储分区数据的存储位置。
- 点击创建。
准备工作环境
在学习本教程之前,您必须先设置开发环境并下载入门版文件。
克隆
python-docs-samples
代码库。git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
导航到示例代码目录。
cd python-docs-samples/dataflow/gpu-workers
设置 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
。安装示例要求。
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 文件。请按照以下步骤查看这些文件。
使用
gsutil
列出带有详细信息的输出 JPEG 文件。gsutil ls -lh "gs://$BUCKET/samples/dataflow/landsat/"
将文件复制到您的本地目录中。
mkdir outputs gsutil -m cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
使用您选择的图片查看器打开这些图片文件。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
如需删除项目,请执行以下操作:
- 在 Cloud Console 中,转到管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。
后续步骤
- 详细了解 Dataflow 上的 GPU 支持。
- 查看使用 GPU 的任务。
- 试用其他 Google Cloud 功能。查阅我们的教程。