GPU を使用した Landsat 衛星画像の処理

このチュートリアルでは、Dataflow で GPU を使用して Landsat 8 の衛星画像を処理し、それを JPEG ファイルとしてレンダリングする方法を説明します。

目標

  • GPU サポートがある TensorFlow を含む Dataflow の Docker イメージをビルドする。
  • GPU を使用して Dataflow ジョブを実行する。

費用

このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

  • Cloud Storage
  • Dataflow
  • Container Registry

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $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 ファイルのパスに設定します。 この変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定します。

  8. このチュートリアルから出力された 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-workers
    
  3. Python 仮想環境を設定して有効にします。このチュートリアルを完了したら、deactivate を実行して仮想環境を終了します。

  4. サンプルの要件をインストールします。

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

Docker イメージのビルド

Cloud Build を使用すると、Dockerfile を使用して Docker イメージをビルドし、そのイメージを Container Registry に保存できます。Container Registry では、他の Google Cloud プロダクトからそのイメージを利用できます。

export PROJECT=PROJECT_NAME
export BUCKET=BUCKET
export IMAGE="samples/dataflow/tensorflow-gpu:latest"
export PYTHON_VERSION=`python -c 'import platform; print(platform.python_version())'`

gcloud --project $PROJECT builds submit \
  --substitutions _IMAGE=$IMAGE,_PYTHON_VERSION=$PYTHON_VERSION \
  --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 "gcr.io/$PROJECT/$IMAGE" \
    --worker_zone "$WORKER_ZONE" \
    --experiment "worker_accelerator=type:$GPU_TYPE;count:1;install-nvidia-driver" \
    --experiment "use_runner_v2"

このパイプラインを実行したら、コマンドが完了するまで待ちます。シェルを終了すると、設定した環境変数が失われる可能性があります。

複数のワーカー プロセス間で 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 を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ