GPU を使用して開発する

このページでは、GPU を使用してパイプラインを構築するためのデベロッパー ワークフローの例について説明します。

Dataflow で GPU を使用する方法については、Dataflow での GPU のサポートをご覧ください。Dataflow ジョブで GPU を有効にする方法と例については、GPU の使用GPU を使用した Landsat 衛星画像の処理をご覧ください。

Apache Beam を NVIDIA GPU とともに使用すると、前処理と推論を処理する大規模なデータ処理パイプラインを作成できます。ローカル開発に GPU を使用する場合は、次の情報を検討してください。

  • 多くの場合、データ処理ワークフローでは追加ライブラリを使用します。このようなライブラリは、Dataflow ワーカーの起動環境と実行環境にインストールする必要があります。この構成により、パイプライン要件を構成したり、Dataflow でカスタム コンテナを使用するための開発ワークフローに手順が追加されます。本番環境を可能な限り再現するローカル開発環境が必要になる場合があります。

  • NVIDIA GPU を暗黙的に使用するライブラリを使用しており、コードで GPU をサポートするための変更を必要としない場合は、開発ワークフローを変更してパイプライン要件を構成したり、カスタム コンテナをビルドする必要はありません。

  • 一部のライブラリでは CPU 使用率と GPU 使用量が透過的に切り替わらないため、特定のビルドやさまざまなコードパスが必要になります。このシナリオように code-run-code 開発のライフサイクルを複製するには、追加の手順が必要です。

  • ローカルテストを実行する場合は、Dataflow ワーカーの環境を可能な限り複製すると便利です。ライブラリによっては、GPU を備えたマシンと必要な GPU ライブラリがインストールされている場合があります。このタイプのマシンは、ローカル環境に対応していない可能性があります。GPU を搭載した Google Cloud 仮想マシンで実行されているコンテナを使用して、Dataflow ランナー環境をエミュレートできます。

  • GPU を必要とする変換のみでパイプラインが構成されることはありません。一般的なパイプラインには、Apache Beam が提供する多くのソースの一つを使用する取り込みステージがあります。そのステージの後に、データ操作またはシェーピング変換が GPU 変換にフィードされます。

次の 2 段階のワークフローは、GPU を使用してパイプラインを構築する方法を示しています。このフローでは、GPU と非 GPU の問題を別々に処理し、フィードバック ループを短縮します。

  1. パイプラインを作成する

    Dataflow で実行できるパイプラインを作成します。GPU を必要とする変換を、GPU を使用しない機能的に同等の変換に置き換えます。

    1. データの取り込みや操作など、GPU の使用に関連するすべての変換を作成します。

    2. 単純なパススルーにより、またはスキーマ変更を行い GPU 変換のスタブを作成します。

  2. ローカルでテストする

    Dataflow ワーカーの実行環境を模倣した環境で、パイプライン コードの GPU 部分をテストします。次の手順では、このテストを実行する 1 つの方法について説明します。

    1. 必要なすべてのライブラリを含む Docker イメージを作成します。

    2. GPU コードの開発を開始します。

    3. Docker イメージを含む Google Cloud 仮想マシンを使用して code-run-code サイクルを開始します。ライブラリの非互換性を排除するには、Apache Beam パイプラインとは別にローカルの Python プロセスで GPU コードを実行します。次に、ダイレクト ランナーでパイプライン全体を実行するか、Dataflow でパイプラインを起動します。

コンテナ用に最適化されたオペレーティング システムを実行している VM の使用

最小環境の場合は、コンテナ用に最適化された仮想マシン(VM)を使用します。詳細については、GPU が接続された VM を作成するをご覧ください。

一般的なフローは次のとおりです。

  1. VM を作成します。

  2. VM に接続して、次のコマンドを実行します。

    cos-extensions install gpu
    sudo mount --bind /var/lib/nvidia /var/lib/nvidia
    sudo mount -o remount,exec /var/lib/nvidia /var/lib/nvidia/bin/nvidia-smi
    
  3. GPU が使用可能であることを確認します。

    ./nvidia-smi
    
  4. VM から GPU ドライバをボリュームとしてマウントして、Docker コンテナを起動します。例:

    docker run --rm -it --entrypoint /bin/bash
    --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64
    --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin
    --privileged gcr.io/bigdatapivot/image_process_example:latest
    

サンプル Dockerfile については、カスタム コンテナ イメージのビルドをご覧ください。パイプラインに必要なすべての依存関係を Dockerfile に追加します。

GPU を使用するために事前に構成されている Docker イメージの使用方法については、GPU を使用するために構成された既存のイメージの使用をご覧ください。

コンテナ用に最適化されたシステムを操作する場合に有効なツール

  • docker-credential-gcr を Google Container Registry(GCR)のデフォルト セットの認証情報ヘルパーとして使用するように Docker CLI を構成するには、次のコマンドを使用します。

    docker-credential-gcr configure-docker
    

    Docker 認証情報の設定の詳細については、docker-credential-gcr をご覧ください。

  • VM 間でパイプライン コードなどのファイルをコピーするには、toolbox を使用します。この方法は、カスタム最適化イメージを使用する場合に便利です。次に例を示します。

    toolbox /google-cloud-sdk/bin/gsutil cp gs://bucket/gpu/image_process/* /media/root/home/<userid>/opencv/
    

    詳細については、ツールボックスを使用したノードの問題のデバッグをご覧ください。

次のステップ