Dataproc では、Dataproc クラスタ内の Compute Engine のマスターノードとワーカーノードに、グラフィック プロセッシング ユニット(GPU)を接続できます。これらの GPU を使用して、機械学習やデータ処理などの特定のワークロードをインスタンス上で高速化できます。
GPU の機能と、使用できる GPU ハードウェアのタイプの詳細については、Compute Engine の GPU をご覧ください。
始める前に
- GPU には、特別なドライバとソフトウェアが必要です。これらは Dataproc クラスタにプリインストールされていません。
- お使いのインスタンスで GPU を使用する場合のコストについては、Compute Engine での GPU の料金をご覧ください。
- GPU を使用するインスタンスと GPU を使用しないインスタンスの機能面の違いについては、GPU を使用したインスタンスに関する制限をご覧ください。
- プロジェクトの [割り当て] ページで、プロジェクトに十分な GPU 割り当て(
NVIDIA_T4_GPUS
、NVIDIA_P100_GPUS
、NVIDIA_V100_GPUS
)を使用できることを確認してください。GPU が割り当てページのリストにない場合や、さらに GPU 割り当てが必要な場合には、割り当て量の増加をリクエストしてください。
GPU のタイプ
Dataproc ノードは、以下の GPU タイプをサポートしています。Dataproc クラスタに GPU を接続するときには、GPU のタイプを指定する必要があります。
nvidia-tesla-l4
- NVIDIA® Tesla® L4nvidia-tesla-a100
- NVIDIA® Tesla® A100nvidia-tesla-p100
- NVIDIA® Tesla® P100nvidia-tesla-v100
- NVIDIA® Tesla® V100nvidia-tesla-p4
- NVIDIA® Tesla® P4nvidia-tesla-t4
- NVIDIA® Tesla® T4nvidia-tesla-p100-vws
- NVIDIA® Tesla® P100 仮想ワークステーションnvidia-tesla-p4-vws
- NVIDIA®Tesla®P4 仮想ワークステーションnvidia-tesla-t4-vws
- NVIDIA®Tesla®T4 仮想ワークステーション
クラスタへの GPU の接続
gcloud
‑‑master-accelerator
フラグ、‑‑worker-accelerator
フラグ、‑‑secondary-worker-accelerator
フラグを使用してクラスタを作成する場合は、GPU を Dataproc クラスタのマスター ワーカーノード、プライマリ ワーカーノード、セカンダリ ワーカーノードに接続します。これらのフラグの値は、次の 2 つになります。
- ノードに接続する GPU のタイプ
- ノードに接続する GPU の数
GPU のタイプは必須で、GPU の数は省略可能です(デフォルトは 1 GPU)。
例:
gcloud dataproc clusters create cluster-name \ --region=region \ --master-accelerator type=nvidia-tesla-t4 \ --worker-accelerator type=nvidia-tesla-t4,count=4 \ --secondary-worker-accelerator type=nvidia-tesla-t4,count=4 \ ... other flags
クラスタで GPU を使用するには、GPU ドライバをインストールする必要があります。
REST API
cluster.create API リクエストの一部として InstanceGroupConfig.AcceleratorConfig の acceleratorTypeUri
と acceleratorCount
項目に入力して、GPU を Dataproc クラスタ内のマスター ワーカーノード、プライマリ ワーカーノード、プリエンプティブル ワーカーノードに接続します。
Console
Google Cloud コンソールの [クラスタの作成] ページにある [構成] パネルで、マスターノードとワーカーノードのセクションの [CPU プラットフォームと GPU] > [GPU を追加] をクリックして、ノードの GPU 数と GPU タイプを指定します。
GPU ドライバのインストール
Dataproc ノードに接続された GPU を利用するには、GPU ドライバが必要です。GPU ドライバをインストールするには、この初期化アクションの手順に従ってください。
GPU ドライバのインストールの確認
Dataproc ノードへの GPU ドライバのインストールが終了した後は、ドライバが正常に機能していることを確認できます。Dataproc クラスタのマスターノードに SSH 接続して、次のコマンドを実行します。
nvidia-smi
ドライバが正常に機能している場合は、ドライバのバージョンと GPU の統計情報が出力に表示されます(GPU ドライバのインストールの確認をご覧ください)。
Spark 構成
Spark にジョブを送信する場合は、spark.executorEnv
Spark 構成ランタイム環境プロパティを使用して LD_PRELOAD
環境変数を指定し、必要なライブラリをプリロードできます。
例:
gcloud dataproc jobs submit spark --cluster=CLUSTER_NAME \ --region=REGION \ --class=org.apache.spark.examples.SparkPi \ --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \ --properties=spark.executorEnv.LD_PRELOAD=libnvblas.so,spark.task.resource.gpu.amount=1,spark.executor.resource.gpu.amount=1,spark.executor.resource.gpu.discoveryScript=/usr/lib/spark/scripts/gpu/getGpusResources.sh
GPU ジョブの例
GPU で実行するとメリットのある次のいずれかのジョブを実行することで、Dataproc で GPU をテストできます。
- Spark ML の例のいずれかを実行します。
- 次の例を
spark-shell
で実行して、行列計算を実行します。
import org.apache.spark.mllib.linalg._ import org.apache.spark.mllib.linalg.distributed._ import java.util.Random def makeRandomSquareBlockMatrix(rowsPerBlock: Int, nBlocks: Int): BlockMatrix = { val range = sc.parallelize(1 to nBlocks) val indices = range.cartesian(range) return new BlockMatrix( indices.map( ij => (ij, Matrices.rand(rowsPerBlock, rowsPerBlock, new Random()))), rowsPerBlock, rowsPerBlock, 0, 0) } val N = 1024 * 4 val n = 2 val mat1 = makeRandomSquareBlockMatrix(N, n) val mat2 = makeRandomSquareBlockMatrix(N, n) val mat3 = mat1.multiply(mat2) mat3.blocks.persist.count println("Processing complete!")