You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Dataproc中正确配置spark.task.resource.gpu.amount

解决Google Dataproc上Spark GPU调度配置问题

问题背景

在Dataproc上运行TensorFlow MirroredStrategyRunner时,因缺失spark.task.resource.gpu.amount配置报错;单独配置该参数会触发executor GPU资源未定义的错误;使用Workflow模板配置时出现类型错误。以下是两种场景的正确配置方法:


场景1:使用gcloud dataproc clusters create创建集群后,在脚本内配置

Spark的GPU调度需同时配置executor级和task级的GPU资源参数,仅配置task参数会导致Spark无法识别executor的GPU资源。

步骤1:创建GPU集群(必须)

先确保集群使用带GPU的机器类型,开启GPU加速:

gcloud dataproc clusters create <集群名称> \
  --region <区域> \
  --worker-machine-type n1-standard-8 \
  --worker-accelerator type=nvidia-tesla-t4,count=1 \
  --master-machine-type n1-standard-8 \
  --image-version 2.1-debian11

步骤2:脚本内配置完整GPU参数

在SparkSession构建时,同时配置executor和task的GPU参数:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("GPU_TensorFlow_App") \
    .config("spark.executor.resource.gpu.amount", "1") \
    .config("spark.task.resource.gpu.amount", "1") \
    .config("spark.executor.resource.gpu.discoveryScript", "/usr/lib/spark/scripts/gpu/getGpusResources.sh") \
    .getOrCreate()

简化方案:创建集群时直接配置默认Spark参数,后续脚本无需重复配置:

gcloud dataproc clusters create <集群名称> \
  --region <区域> \
  --worker-machine-type n1-standard-8 \
  --worker-accelerator type=nvidia-tesla-t4,count=1 \
  --master-machine-type n1-standard-8 \
  --image-version 2.1-debian11 \
  --properties spark.executor.resource.gpu.amount=1,spark.task.resource.gpu.amount=1,spark.executor.resource.gpu.discoveryScript=/usr/lib/spark/scripts/gpu/getGpusResources.sh

场景2:使用DataprocInstantiateInlineWorkflowTemplateOperator模板配置

需满足两个核心要求:集群配置为GPU类型,且Spark参数完整、值为字符串类型。

完整模板配置示例

{
  "project_id": "<项目ID>",
  "region": "<区域>",
  "jobs": [
    {
      "step_id": "<任务步骤ID>",
      "pyspark_job": {
        "args": ["<参数1>", "<参数2>"],
        "main_python_file_uri": "<GCS上的脚本路径>",
        "properties": {
          "spark.executor.resource.gpu.amount": "1",
          "spark.task.resource.gpu.amount": "1",
          "spark.executor.resource.gpu.discoveryScript": "/usr/lib/spark/scripts/gpu/getGpusResources.sh"
        },
        "jar_file_uris": [
          "gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar",
          "gs://onedemand-analytics/jars/spark-tensorflow-connector_2.12-1.11.0.jar"
        ]
      }
    }
  ],
  "cluster_config": {
    "master_config": {
      "machine_type_uri": "n1-standard-8"
    },
    "worker_config": {
      "machine_type_uri": "n1-standard-8",
      "accelerators": [
        {
          "accelerator_type_uri": "nvidia-tesla-t4",
          "accelerator_count": 1
        }
      ]
    },
    "software_config": {
      "image_version": "2.1-debian11"
    }
  }
}

关键注意事项

  • 所有properties的值必须为字符串类型(如"1"而非1),否则会触发类型错误。
  • cluster_config中必须定义accelerators字段,确保集群具备GPU硬件资源。

内容的提问来源于stack exchange,提问作者Anirban Saha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:24:55