RDMA Shared Device Plugin#

RDMA Shared Device Plugin (k8s-rdma-shared-dev-plugin) – компонент DropApp, который необходим для использования сетевых устройств RDMA при запуске крупных языковых моделей. Поддерживает сети передачи данных IB и RoCE HCA.

Ключевые функции данного компонента:

  • Регистрация RDMA-устройств.

  • Совместимость с CNI-плагинами.

Использование с CNI macvlan для RDMA#

Данный сценарий показывает совместимость плагина с CNI-плагином, а именно с macvlan, например при создании конфигурации для дополнительного интерфейса macvlan для назначения каждому контейнеру уникального MAC-адреса.

Чтобы использовать плагин устройства с macvlan для RDMA, выполните следующие шаги:

  1. Для настройки, подключения контейнеров к локальной сети, создайте конфигурационный файл для macvlan:

    cat > /etc/cni/net.d/00-macvlan.conf
    

    Пример наполнения конфигурационного файла:

    {
        "cniVersion": "0.3.1",
        "name": "mynet",
        "type": "macvlan",
        "master": "enp0s0f0", # имя контейнера
        "ipam": {
            "type": "host-local",
            "subnet": "<rdma-ip-address>.0/24",
            "rangeStart": "<rdma-ip-address>.171",
            "rangeEnd": "<rdma-ip-address>.181",
            "routes": [
                { "dst": "0.0.0.0/0" }
            ],
            "gateway": "<rdma-ip-address>.1"
        }
    }
    
  2. Разверните плагин устройства:

    • Перейдите в каталог с конфигурацией, например:

      cd deployment/k8s/base/overlay
      
    • Примените конфигурацию:

      kubectl apply -k .
      
  3. Разверните приложение RDMA:

    kubectl create -f rdma-app.yaml
    

    Пример конфигурационного файла rdma-app.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: rdma-app
    spec:
      containers:
        - name: rdma-container
          image: rdma-image:latest
          resources:
            limits:
              cpu: "1"
              memory: "512Mi"
            requests:
              cpu: "0.5"
              memory: "256Mi"
          env:
            - name: 
              value: ""
      nodeSelector:
        rdma: "true"  # Указывает, что pod должен развертываться на узлах, поддерживающих RDMA