将 GPU 挂接到集群

Dataproc 允许将图形处理单元 (GPU) 连接到 Dataproc 集群中的主实例和工作器 Compute Engine 节点。您可以使用这些 GPU 加速实例上的特定工作负载,例如机器学习和数据处理。

要详细了解可以使用 GPU 执行的操作以及可用的 GPU 硬件类型,请参阅 Compute Engine 上的 GPU

准备工作

  • GPU 需要特殊的驱动程序和软件。这些组件未预先安装在 Dataproc 集群上。
  • 请参阅 Compute Engine 上的 GPU 价格以了解在您的实例中使用 GPU 所需支付的费用。
  • 请参阅包含 GPU 的实例的限制以了解这些实例与不包含 GPU 的实例在功能上有何不同。
  • 检查项目的配额页面以确保项目中有足够的 GPU 配额(NVIDIA_T4_GPUSNVIDIA_P100_GPUSNVIDIA_V100_GPUS)。如果配额页面上未列出 GPU,或者您需要额外的 GPU 配额,请申请增加配额

GPU 的类型

Dataproc 节点支持以下 GPU 类型。将 GPU 挂接到 Dataproc 集群时,您必须指定 GPU 类型。

  • nvidia-tesla-l4 - NVIDIA® Tesla® L4
  • nvidia-tesla-a100 - NVIDIA® Tesla® A100
  • nvidia-tesla-p100 - NVIDIA® Tesla® P100
  • nvidia-tesla-v100 - NVIDIA® Tesla® V100
  • nvidia-tesla-p4 - NVIDIA® Tesla® P4
  • nvidia-tesla-t4 - NVIDIA® Tesla® T4
  • nvidia-tesla-p100-vws - NVIDIA® Tesla® P100 虚拟工作站
  • nvidia-tesla-p4-vws - NVIDIA® Tesla® P4 虚拟工作站
  • nvidia-tesla-t4-vws - NVIDIA® Tesla® T4 虚拟工作站

将 GPU 挂接到集群

gcloud

在使用以下标志创建集群时,将 GPU 挂接到 Dataproc 集群中的主实例以及主要和辅助工作器节点:‑‑master-accelerator‑‑worker-accelerator‑‑secondary-worker-accelerator 标志。这些标志具有以下两个值:

  1. 要连接到节点的 GPU 类型,以及
  2. 要连接到节点的 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

通过填写 InstanceGroupConfig.AcceleratorConfig acceleratorTypeUriacceleratorCount 字段(在 cluster.create API 请求中),将 GPU 挂接到 Dataproc 集群中的主实例以及主要工作器节点和次要工作器节点。

控制台

在 Google Cloud 控制台中,点击 Create a cluster(创建集群)页面上“配置节点”面板的“主节点”和“工作器节点”部分中的“CPU PLATFORM AND GPU→GPUs→ADD GPU”,以指定节点的 GPU 数量和 GPU 类型。

安装 GPU 驱动程序

要使用连接到 Dataproc 节点的任何 GPU,需要安装 GPU 驱动程序。您可以按照此初始化操作的说明来安装 GPU 驱动程序。

验证 GPU 驱动程序安装

在 Dataproc 节点上完成 GPU 驱动程序的安装之后,您可以验证该驱动程序是否正常运行。通过 SSH 连接到 Dataproc 集群的主节点,然后运行以下命令:

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 作业示例

您可以通过运行以下任何作业在 Dataproc 上测试 GPU,这些作业在使用 GPU 运行时会受益:

  1. 运行其中一个 Spark ML 示例
  2. 使用 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!")

后续步骤