このチュートリアルでは、Dataflow で GPU を使用して Landsat 8 の衛星画像を処理し、それを JPEG ファイルとしてレンダリングする方法を説明します。このチュートリアルは、GPU を使用した Landsat 衛星画像の処理の例に基づいています。
目標
- GPU サポートがある TensorFlow を含む Dataflow の Docker イメージをビルドする。
- GPU を使用して Dataflow ジョブを実行する。
費用
このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。
- Cloud Storage
- Dataflow
- Artifact Registry
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。
始める前に
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud プロジェクトを作成または選択します。
-
Google Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
PROJECT_ID
は、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_ID
は、実際の Google Cloud プロジェクト名に置き換えます。
-
-
Dataflow, Cloud Build, and Artifact Registry API を有効にします。
gcloud services enable dataflow
cloudbuild.googleapis.com artifactregistry.googleapis.com -
Google アカウントのローカル認証情報を作成します。
gcloud auth application-default login
-
Google アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。EMAIL_ADDRESS
は実際のメールアドレスに置き換えます。ROLE
は、個々のロールに置き換えます。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud プロジェクトを作成または選択します。
-
Google Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
PROJECT_ID
は、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_ID
は、実際の Google Cloud プロジェクト名に置き換えます。
-
-
Dataflow, Cloud Build, and Artifact Registry API を有効にします。
gcloud services enable dataflow
cloudbuild.googleapis.com artifactregistry.googleapis.com -
Google アカウントのローカル認証情報を作成します。
gcloud auth application-default login
-
Google アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。EMAIL_ADDRESS
は実際のメールアドレスに置き換えます。ROLE
は、個々のロールに置き換えます。
Compute Engine のデフォルト サービス アカウントにロールを付与します。IAM ロール
roles/dataflow.admin
、roles/dataflow.worker
、roles/bigquery.dataEditor
、roles/pubsub.editor
、roles/storage.objectAdmin
、roles/artifactregistry.reader
ごとに次のコマンドを 1 回実行します。gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。PROJECT_NUMBER
は、使用するプロジェクト番号に置き換えます。プロジェクト番号の確認方法については、プロジェクトを特定するをご覧ください。SERVICE_ACCOUNT_ROLE
は、個々のロールに置き換えます。
- このチュートリアルから出力された JPEG 画像ファイルを保存するには、Cloud Storage バケットを作成します。
- Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。
- [バケットを作成] をクリックします。
- [バケットの作成] ページでユーザーのバケット情報を入力します。次のステップに進むには、[続行] をクリックします。
- [作成] をクリックします。
作業環境を準備する
スターター ファイルをダウンロードして、Artifact Registry リポジトリを作成します。
スターター ファイルをダウンロードする
スターター ファイルをダウンロードして、ディレクトリを変更します。
python-docs-samples
リポジトリのクローンを作成します。git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
サンプルコードのディレクトリに移動します。
cd python-docs-samples/dataflow/gpu-examples/tensorflow-landsat
Artifact Registry を構成する
アーティファクトをアップロードできるように、Artifact Registry リポジトリを作成します。各リポジトリには、サポートされている単一の形式のアーティファクトを含めることができます。
すべてのリポジトリのコンテンツは、Google が管理する暗号鍵か顧客管理の暗号鍵を使用して暗号化されます。Artifact Registry はデフォルトで Google が管理する暗号鍵を使用するため、このオプションの構成は不要です。
少なくとも、リポジトリに対する Artifact Registry 書き込みアクセス権が必要です。
次のコマンドを実行して新しいリポジトリを作成します。このコマンドは --async
フラグを使用します。実行中のオペレーションの完了を待たずにすぐに戻ります。
gcloud artifacts repositories create REPOSITORY \
--repository-format=docker \
--location=LOCATION \
--async
REPOSITORY は、リポジトリの名前に置き換えます。プロジェクト内のリポジトリのロケーションごとに、リポジトリ名は一意でなければなりません。
イメージを push または pull する前に、Artifact Registry に対するリクエストを認証するように Docker を構成します。Docker リポジトリの認証を設定するには、次のコマンドを実行します。
gcloud auth configure-docker LOCATION-docker.pkg.dev
このコマンドにより、Docker 構成が更新されます。これで、Google Cloud プロジェクトの Artifact Registry に接続して、イメージを push できるようになりました。
Docker イメージをビルドする
Cloud Build を使用すると、Dockerfile を使用して Docker イメージをビルドし、そのイメージを Artifact Registry に保存できます。Artifact 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://
接頭辞なし)。
このパイプラインを実行したら、コマンドが完了するまで待ちます。シェルを終了すると、設定した環境変数が失われる可能性があります。
複数のワーカー プロセス間で GPU を共有しないようにするため、このサンプルでは 1 つの vCPU を持つマシンタイプを使用します。パイプラインのメモリ要件は、13 GB の拡張メモリを使用することで対応できます。詳細については、GPU とワーカーの並列処理をご覧ください。
結果を表示する
tensorflow-landsat/main.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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- Google Cloud コンソールで、[リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
次のステップ
- 最小限の GPU 対応 TensorFlow サンプルを参照する。
- 最小限の GPU 対応の PyTorch サンプルを参照する。
- Dataflow での GPU サポートについて確認する。
- GPU の使用のタスクを確認する。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センター をご覧ください。