Dataproc 允许将图形处理单元 (GPU) 连接到 Dataproc 集群中的主实例和工作器 Compute Engine 节点。您可以使用这些 GPU 加速实例上的特定工作负载,例如机器学习和数据处理。
要详细了解可以使用 GPU 执行的操作以及可用的 GPU 硬件类型,请参阅 Compute Engine 上的 GPU。
准备工作
- GPU 需要特殊的驱动程序和软件。这些组件未预先安装在 Dataproc 集群上。
- 请参阅 Compute Engine 上的 GPU 价格以了解在您的实例中使用 GPU 所需支付的费用。
- 请参阅包含 GPU 的实例的限制以了解这些实例与不包含 GPU 的实例在功能上有何不同。
- 检查项目的配额页面以确保项目中有足够的 GPU 配额(
NVIDIA_T4_GPUS
、NVIDIA_P100_GPUS
或NVIDIA_V100_GPUS
)。如果配额页面上未列出 GPU,或者您需要额外的 GPU 配额,请申请增加配额。
GPU 的类型
Dataproc 节点支持以下 GPU 类型。将 GPU 挂接到 Dataproc 集群时,您必须指定 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
在使用以下标志创建集群时,将 GPU 挂接到 Dataproc 集群中的主实例以及主要和辅助工作器节点:‑‑master-accelerator
、‑‑worker-accelerator
和 ‑‑secondary-worker-accelerator
标志。这些标志具有以下两个值:
- 要连接到节点的 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
通过填写 InstanceGroupConfig.AcceleratorConfig acceleratorTypeUri
和 acceleratorCount
字段(在 cluster.create API 请求中),将 GPU 挂接到 Dataproc 集群中的主实例以及主要工作器节点和次要工作器节点。
控制台
在 Google Cloud 控制台中的创建集群页面上,点击“配置节点”面板的“主节点”和“工作器节点”部分中的“CPU 平台和 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 运行时会受益:
- 运行其中一个 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!")