Я пытаюсь запустить задание машинного обучения на GKE, и мне нужно использовать графический процессор.
Я создал пул узлов с 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
Первоначально нет заданий, для которых требуются графические процессоры, поэтому автомасштабирование кластера правильно уменьшает размер пула узлов до 0.
Однако, когда я создаю работу со следующей спецификацией
resources:
requests:
nvidia.com/gpu: "1"
limits:
nvidia.com/gpu: "1"
Вот полная конфигурация работы. (Обратите внимание, что эта конфигурация частично создается автоматически. Я также удалил некоторые переменные среды, которые не имеют отношения к проблеме).
стручок застрял в ожидании Insufficient nvidia.com/gpu
пока я вручную не увеличу пул узлов как минимум до 1 узла.
Это текущее ограничение пулов узлов GPU, или я что-то упустил?
Autoscaler поддерживает масштабирование пулов узлов GPU (в том числе до и от 0).
Одна из возможных причин этой проблемы - если вы включили автоматическую подготовку узлов и установили ограничения ресурсов (с помощью флагов пользовательского интерфейса или gcloud, таких как --max-cpu, max-memory и т. Д.). Эти ограничения применяются ко ВСЕМ автоматическим масштабированием в кластере, включая пулы узлов, которые вы создали вручную с включенным автоматическим масштабированием (см. Примечание в документации: https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#resource_limits).
В частности, если вы включили NAP и хотите автоматически масштабировать пулы узлов с помощью графических процессоров, вам необходимо установить ограничения ресурсов для графических процессоров, как описано в https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#gpu_limits.
Наконец, автоподготовка также поддерживает графические процессоры, поэтому (при условии, что вы установили ограничения ресурсов, как описано выше) вам фактически не нужно создавать пул узлов для вашей рабочей нагрузки графического процессора - NAP создаст его автоматически.
===
Кроме того, для справки в будущем - если автоматическому масштабированию не удается создать узлы для некоторых из ваших модулей, вы можете попытаться отладить его с помощью событий автомасштабирования:
kubectl describe pod <your-pod>
) должно быть одно из двух событий (до их появления может потребоваться минута): kubectl get events -n kube-system | grep cluster-autoscaler
даст вам события, описывающие все действия автомасштабирования (увеличение, уменьшение). Если была предпринята попытка масштабирования, но по какой-либо причине не удалось выполнить масштабирование, в нем также будут описаны события. Обратите внимание, что события доступны в Kubernetes только в течение 1 часа после их создания. Вы можете увидеть исторические события в Stackdriver, перейдя в пользовательский интерфейс и выбрав Stackdriver-> Logging-> Logs и выбрав «GKE Cluster Operations» в раскрывающемся списке.
Наконец, вы можете проверить текущий статус автомасштабирования, запустив kubectl get configmap cluster-autoscaler-status -o yaml -n kube-system
.