我试图在GKE上运行一个机器学习作业,并且需要使用GPU。
我用Tesla K80创建了一个节点池,如本演练中所描述的。
我将最小节点大小设置为0,并希望自动分频器将根据我的作业自动确定需要多少节点:
gcloud container node-pools create [POOL_NAME] \
--accelerator type=nvidia-tesla-k80,count=1 --zone [COMPUTE_ZONE] \
--cluster [CLUSTER_NAME] --num-nodes 3 --min-nodes 0 --max-nodes 5 \
--enable-autoscaling最初,不需要GPU的作业,所以集群自动分频器正确地将节点池缩小为0。
但是,当我使用以下规范创建作业时
resources:
requests:
nvidia.com/gpu: "1"
limits:
nvidia.com/gpu: "1"以下是完整的作业配置。(请注意,此配置部分是自动生成的。我还删除了一些与此问题无关的环境变量)。
在我手动将节点池增加到至少一个节点之前,吊舱将被Insufficient nvidia.com/gpu挂起。
这是GPU节点池的当前限制,还是我忽略了什么?
发布于 2019-04-12 12:42:19
自动分频器支持缩放GPU节点池(包括到0和从0)。
造成此问题的一个可能原因是,您是否启用了节点自动配置并设置了资源限制(通过UI或gcloud标志,如--max-cpu、最大内存等)。这些限制适用于集群中的所有自动标度,包括通过启用自动标号手动创建的节点池(请参阅文档:https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#resource_限制中的注释)。
特别是,如果您已经启用了NAP,并且希望使用GPU自动定义节点池,则需要为GPU设置资源限制,如https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#gpu_限制中所述。
最后,自动配置也支持GPU,因此(假设您设置了上述资源限制)实际上不需要为您的GPU工作负载创建节点池- NAP将自动为您创建一个节点池。
===
另外,对于将来的参考--如果自动分词器无法为某些豆荚创建节点,您可以尝试使用自动分词器事件来调试它:
kubectl describe pod <your-pod>)上应该有两个事件中的一个(可能需要一分钟才能出现):kubectl get events -n kube-system | grep cluster-autoscaler将为您提供描述所有自动分号操作的事件(缩放、缩小)。如果试图扩大规模,但由于任何原因而失败,也会发生描述这一情况的事件。请注意,事件在创建后1小时内只能在Kubernetes中使用。您可以通过进入UI并导航到Stackdriver >Logging->Logs并在下拉菜单中选择"GKE集群操作“来查看Stackdriver中的历史事件。
最后,您可以通过运行kubectl get configmap cluster-autoscaler-status -o yaml -n kube-system来检查自动分配器的当前状态。
https://serverfault.com/questions/962259
复制相似问题