使用 terraform 添加带有 GPU 的 GKE 节点池

Posted

技术标签:

【中文标题】使用 terraform 添加带有 GPU 的 GKE 节点池【英文标题】:Adding GKE node pool with GPU using terraform 【发布时间】:2021-04-19 20:34:38 【问题描述】:

我尝试使用 GPU 创建 google_container_node_pool。 我尝试了机器类型 nvidia-tesla-p4 和 a2-highgpu-1g,每个都返回不同的错误:

projects/my-project-id/zones/us-central1-a/machineTypes/nvidia-tesla-p4

错误:创建 NodePool 时出错:googleapi:错误 403:不足 满足请求的区域配额:资源 “PREEMPTIBLE_NVIDIA_V100_GPUS”:请求需要“3.0”并且很短 '2.0'。项目的配额为“1.0”,“1.0”可用。查看和 管理配额 https://console.cloud.google.com/iam-admin/quotas?usage=USED&project=my-project-id., 禁止

当我查看配额页面时,相关配额显示“所有99个配额都在限制内”。

根据requirement 我需要配额,但他们没有指定哪个配额。

更新:

将 machine_type 更改为 a2-highgpu-1g 将错误消息更改为与不同的配额 A2_CPUS 相关。 当我将 preemptible 的值更改为 false,而不是 PREEMPTIBLE_NVIDIA_V100_GPUS 或 A2_CPUS 时,NVIDIA_A100_GPUS 出现相同的错误。 A2_CPUS 和 NVIDIA_A100_GPUS 的问题是我无法请求配额,因为 UI 中的复选框已禁用,并且限制显示为“无限制”:

【问题讨论】:

这个问题似乎已经有 2 个答案。如果有一个解决了您的问题,请投票或接受一个详细的here。如果您需要更多说明,请记住您也可以对答案发表评论。 我尝试了几次就放弃了,主要是因为其他紧迫的事情,我希望在下一个版本中恢复它,可能需要几周时间。 请看我更新的答案。 TL;DR 您应该请求增加 REGIONAL 配额,因为区域配额不可操作。 另外,请确保您在该地区有足够的 CPU + A2 CPU 配额 【参考方案1】:

您在配额页面中看不到错误,因为没有违反您的配额,因为没有创建节点。

例如,如果您要创建一个包含 3 个节点的节点池,每个节点有 1 个 V100 GPU,请转到配额页面并请求将 PREEMPTIBLE_NVIDIA_V100_GPUS 的数量从 1 扩展到 3。与相关重复每个 GPU 和区域的数量。 请注意,您应该等到 GCP 批准您的请求后再尝试在 Terraform 中再次创建资源。

如果您不想扩展配额并且只想检查您的 TF 配置,只需将 GPU 节点的数量减少到不违反配额的数量即可。

【讨论】:

【参考方案2】:

显示您看到的第一条消息是因为 GCP 中没有名为 nvidia-tesla-p4 的机器类型。在this document 中有可用机器类型的完整列表,但请确保使用您正在启动 GKE 集群的区域和专区中可用的机器类型。您可以使用以下命令检查区域中可用的有效机器类型:gcloud compute machine-types list --filter="zone:( ZONE … )"

关于第二条消息,很明显您没有足够的配额用于该地区的特定 GPU。正如@hilsenrat 所提到的,您看不到任何配额被用尽,因为从一开始就没有创建集群。

如Availability section 中有关在 GKE 中运行 GPU 的文档中所述:

GPU 在特定地区和地区可用。当您request GPU quota 时,请考虑您打算运行集群的区域。

有关适用区域和可用区的完整列表,请参阅GPUs on Compute Engine。

要查看每个区域支持的所有 GPU 加速器类型的列表,请运行以下命令:gcloud compute accelerator-types list --filter="zone:( ZONE )"

当您向抢占式实例添加 GPU 时,您使用的是常规 GPU 配额,我也会确保 REGION 中 V100 的配额足够.如果您需要单独的抢占式 GPU 配额,请按照here 的说明申请单独的抢占式 GPU 配额。

我建议转到quota page 并过滤这些特定配额,确保您点击详细信息列下的“所有配额”。将显示区域配额。

服务:Compute Engine API

  Name: GPUs (all regions)
  Quota Metric: compute.googleapis.com/gpus_all_regions
  Limit Name: GPUS-ALL-REGIONS-per-project

服务:Compute Engine API

   Name: NVIDIA V100 GPUs
   Quota Metric: compute.googleapis.com/nvidia_v100_gpus
   Limit Name: NVIDIA-V100-GPUS-per-project-zone/NVIDIA-V100-GPUS-per-project-region

服务:Compute Engine API

   Name: Preemptible NVIDIA V100 GPUs
   Quota Metric: compute.googleapis.com/preemptible_nvidia_v100_gpus
   Limit Name: PREEMPTIBLE-NVIDIA-V100-GPUS-per-project-zone/PREEMPTIBLE-NVIDIA-V100-GPUS-per-project-region

确保您有足够的 GLOBAL AND REGIONAL 配额用于您尝试使用的特定 GPU 型号.如here 所述,需要单独请求抢占式 GPU。

--------更新----

另外,请注意,只能申请增加区域配额。列出的任何区域配额取决于相应的区域配额。在此捕获中,即使区域限制为 unlimited,区域配额也是 0,并且尝试在整个区域中使用 GPU 将失败。 (如您所见,版本只能选择区域配额)。

您提到现在您收到一条消息,提示您没有足够的 A2 CPU 配额。请确保区域中有足够的 CPU 配额并且也有足够的 A2 CPU 配额。为此,您必须考虑要部署的 machine type 所需的 vCPU 数量。

您可以阅读有关使用 CPU 配额的更多信息 here。

我希望这些信息对澄清您的问题有用。

【讨论】:

以上是关于使用 terraform 添加带有 GPU 的 GKE 节点池的主要内容,如果未能解决你的问题,请参考以下文章

是否可以重载 terraform 模块?

Terraform 使用带有标签的 count.index

带有 Terraform 的 Google Cloud 凭据

带有特殊字符的 terraform 标签值

Terraform AZ CLI 本地执行命令限制

Azure 磁盘加密 - 通过带有密钥保管库的 Terraform - VmExtensionProvisioningError