Как правильно назначить поды, чтобы KFServing мог уменьшить количество экземпляров графического процессора до нуля?

Я настраиваю InferenceService с помощью Argo и KFServing с Amazon EKS (Kubernetes). Важно знать, что у нашей команды есть один кластер EKS на среду, а это означает, что в нашем кластере может быть несколько приложений, которые мы не контролируем.

Вот что мы настроили на данный момент

  1. Мы загружаем в Amazon ECR образ докера, который содержит нашу логику для обучения и развертывания нашей модели.
  2. Мы используем argo для отправки рабочих процессов, с которых начинается обучение в №1. При установке argo в наш кластер kubernetes мы замечаем, что его компоненты иногда назначаются узлам GPU.
  3. Мы также используем KFServing. KFServing позволяет нам автоматически масштабировать наш графический процессор вверх и вниз, в частности масштабирование до нуля, когда он не используется. Компоненты в KFServing также назначаются узлам графического процессора при их применении в нашем кластере.

Текущая настройка, которая у нас есть для №2 и №3 (см. Выше), похоже, запрещает масштабирование KFServing до нуля. Нас беспокоит, что наличие этих компонентов в графическом процессоре не позволит графическому процессору масштабироваться.

Какие модули необходимо назначить нашим узлам графического процессора?

(Вариант 1) Нужно ли нам назначать только наш модуль рабочего процесса argo и отталкивать остальных?

-- OR --

(Вариант 2) Требуются ли другие компоненты kfserving в узле GPU для правильной работы?

  • Вариант 1. Как предотвратить попадание всех модулей в наши узлы графического процессора, кроме модуля рабочего процесса argo? Напоминаем, что у нас есть другие приложения, которые мы не можем контролировать, поэтому добавляем привязки узлов для каждого модуля кажется нереальным.

  • Вариант 2: Как узлы GPU масштабируются до нуля, если в этих узлах GPU есть компоненты kfserving? У меня сложилось впечатление, что уменьшение масштаба означает, что в узле нет модулей.


person Daniel Hair    schedule 26.02.2021    source источник


Ответы (1)


tl; dr Вы можете использовать порчи.

Какие поды нужно назначить нашим узлам графического процессора?

Модули заданий, для которых требуется графический процессор.

Если для вашего обучения требуется графический процессор, вам необходимо назначить его с помощью nodeSelector и tolerations в спецификации вашего развертывания обучения / развертывания, см. Хороший пример здесь.

Если ваша модель - CV / NLP (много умножений матриц), вам может потребоваться также служба вывода в графическом процессоре, в этом случае вам необходимо, чтобы она была запрошена в ее спецификации, как описано здесь.

Нужен ли нам только модуль рабочего процесса argo, чтобы он был назначен и отталкивал остальных?

Да, если ваша служба вывода не требует графического процессора.

Нужны ли другие компоненты kfserving в узле GPU для правильной работы?

Нет, единственным компонентом kfserving является kfserving-controller, и он не требует графического процессора, так как он только организует создание ресурсов istio & knative для вашей службы вывода.

Если в вашей группе узлов графического процессора запущены службы вывода, не запрошенные в спецификации графическим процессором, это означает, что группа узлов не настроена на эффект заражения NoSchedule. Убедитесь, что группа узлов gpu в конфигурации eksctl имеет заражение, как описано в документе.

person theofpa    schedule 27.02.2021