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

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

目標

  • GPU サポートがある TensorFlow を含む 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. [ロール] リストから、プロジェクト > オーナー

    5. [作成] をクリックします。キーが含まれている JSON ファイルがパソコンにダウンロードされます。
  6. 環境変数 GOOGLE_APPLICATION_CREDENTIALS を、サービス アカウント キーが含まれる JSON ファイルのパスに設定します。 この変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定します。

  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 をインストールしていない場合、Python をインストールする 1 つの方法として、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 に保存できます。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"

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

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

次のステップ