LeaderWorkerSet#

LeaderWorkerSet (LWS) – компонент DropApp, позволяющий управлять группой pod при развертывании языковых моделей, как единицы репликации. В группе pod один pod выступает pod-лидером, координирующим работу остальных рабочих pod в рамках единого объекта развертывания. Представляет собой новый тип контроллера в кластере – LeaderWorkerSet (вместо Deployment, StatefulSet, DaemonSet, Job, CronJob).

Предназначен для решения общих паттернов развертывания нагрузок инференса в области AI/ML, особенно для многохостовых нагрузок инференса, где большие языковые модели (LLM) будут разделены и запускаться на нескольких устройствах на нескольких узлах.

Основные функции и особенности LWS#

  • Двойной шаблон: реплика представляет собой группу, состоящую из одного pod-лидера (leader pod) и набора рабочих pod (worker pod), с возможностью указать шаблон для рабочих pod и опционально для pod-лидера.

  • Группа pod как единица: поддерживает строго управляемую группу, которая представляет собой «супер pod».

  • Уникальная идентичность pod: каждый pod в группе имеет индекс от 0 до n-1.

  • Параллельное создание: pod имеют одинаковый жизненный цикл и создаются одновременно.

  • Множественные реплики с идентичными спецификациями: поддерживает создание нескольких реплик группы pod. Каждая единое целое для поэтапного обновления, масштабирования и соответствует единой эксклюзивной топологии для размещения.

  • Подресурс масштабирования: доступна конечная точка для HPA, позволяющая динамически изменять количество реплик.

  • Обновление (Rollout) и поэтапное обновление (Rolling update): группы pod обновляются поочередно, а pod внутри группы вместе.

  • Topology-aware размещение: позволяет размещать pod из одной группы в одном топологическом домене на выбор.

  • All-or-nothing перезапуск для обработки ошибок: обеспечивает восстановление всех pod в группе, если один из них неисправен или контейнер был перезапущен.

Пример конфигурации#

Пример конфигурационного файла LeaderWorkerSet lws.yaml:

apiVersion: leaderworkerset.x-k8s.io/v1
kind: LeaderWorkerSet
metadata:
  name: leaderworkerset
spec:
  replicas: 3 # Количество реплик
  leaderWorkerTemplate: # Шаблон для pod-лидера и включение размера группы pod
    size: 4 # Количество контейнеров в группе pod-лидера
    workerTemplate:
      spec:
        containers:
        - name: <container-name> # Пример реплицируемого контейнера
          image: <image-name>
          resources:
            limits:
              cpu: "100m"
            requests:
              cpu: "50m"
          ports:
          - containerPort: 8080