• Русский
  • Установка для Huawei Ascend NPU

    В этой главе описаны пошаговые действия по установке для кластеров с Huawei Ascend NPU. Для NVIDIA GPU см. Установка для NVIDIA GPU.

    Начиная с Alauda Build of Hami v2.8, в форме развертывания доступен переключатель Enable Ascend, который позволяет hami-scheduler планировать Huawei Ascend NPU совместно с NVIDIA GPU (или вместо них).

    В отличие от NVIDIA, где при включении переключателя развертываются и hami-scheduler, и device plugin для NVIDIA, при включении Enable Ascend выполняется только настройка hami-scheduler с поддержкой Ascend и поставляется ConfigMap hami-scheduler-device, содержащий шаблоны виртуализации Ascend. DaemonSet Ascend device plugin не входит в комплект чарта HAMi и должен быть установлен отдельно.

    Предварительные требования

    • Права администратора кластера в вашем кластере ACP
    • Версия Kubernetes: v1.16+
    • Версия ACP: v4.0+
    • Один или несколько узлов с поддерживаемым Huawei Ascend NPU (Ascend 910B, Ascend 310P и т. д.)

    Шаг 1: Установите драйвер Ascend и Ascend Docker Runtime

    Alauda Build of NPU Operator — рекомендуемый способ установки драйвера Ascend, прошивки и Ascend Docker Runtime на узлах NPU. Следуйте инструкции Установка Alauda Build of NPU Operator и обратите внимание на параметры формы развертывания:

    КомпонентПараметрПричина
    DriverEnabledУстанавливает драйвер Ascend и прошивку на каждом узле NPU.
    Ascend Docker RuntimeEnabledУстанавливает runtime, чтобы контейнеры могли подключать устройства Ascend.
    Ascend Device PluginDisabledHAMi поставляет собственный ascend-device-plugin (устанавливается на шаге 3). Включение plugin оператора приведет к конфликту с plugin HAMi и ConfigMap hami-scheduler-device.
    NPU exporterНеобязательноВключите, если вам нужны метрики NPU.

    После завершения работы оператора проверьте драйвер на каждом узле NPU:

    npu-smi info

    Шаг 2: Включите Ascend в форме развертывания HAMi

    1. Откройте Administrator -> Marketplace -> Cluster Plugin, переключитесь на целевой кластер, затем разверните или обновите Alauda Build of Hami.
    2. В форме развертывания включите Enable Ascend.
    3. Enable NVIDIA можно оставить включенным (смешанный кластер) или выключить (кластер только с NPU).
    4. Отправьте форму. После завершения rollout hami-scheduler запускается с --enable-ascend=true, а ConfigMap hami-scheduler-device включает шаблоны Ascend vnpus, которые использует device plugin на шаге 3.
    TIP

    Enable NVIDIA и Enable Ascend независимы. Вы можете выключить любой из них, но рекомендуется оставить включенным как минимум один тип устройства.

    Шаг 3: Разверните ascend-device-plugin HAMi

    1. Присвойте метку каждому узлу NPU, чтобы DaemonSet запускался только там, где это необходимо:

      kubectl label node {ascend-node} ascend=on
    2. Скачайте манифест DaemonSet ascend-device-plugin.yaml и примените его к рабочему кластеру:

      kubectl apply -f ascend-device-plugin.yaml

      Манифест создаёт:

      • ServiceAccount, ClusterRole и ClusterRoleBinding с именем hami-ascend в namespace kube-system.
      • DaemonSet с именем hami-ascend-device-plugin, который планируется на узлы с меткой ascend=on.
      • DaemonSet монтирует ConfigMap hami-scheduler-device, созданный чартом HAMi на шаге 2 и содержащий шаблоны виртуализации Ascend (vnpus).
    3. Чтобы использовать пользовательский образ plugin (например, внутреннее зеркало), перед применением измените поле image в ascend-device-plugin.yaml.

    Шаг 4: Проверка

    1. Убедитесь, что pod'ы device plugin запущены на каждом узле NPU:

      kubectl -n kube-system get pods -l app.kubernetes.io/component=hami-ascend-device-plugin -o wide
    2. Проверьте, что ресурсы NPU отображаются как allocatable (имя ресурса зависит от чипа — например, huawei.com/Ascend910B или huawei.com/Ascend310P):

      kubectl get node {ascend-node} -o=jsonpath='{.status.allocatable}'
    3. Запустите пример workload, чтобы запросить срез vNPU. В приведённом ниже примере запрашивается один чип Ascend910B4 и ограничивается память до 4096 MiB; HAMi выбирает самый маленький шаблон виртуализации, который удовлетворяет запросу по памяти:

      apiVersion: v1
      kind: Pod
      metadata:
        name: ascend-pod
      spec:
        containers:
          - name: npu-pod
            image: ascendai/pytorch:ubuntu-python3.8-cann8.0.rc1.beta1-pytorch2.1.0
            command: ["sleep", "infinity"]
            resources:
              limits:
                huawei.com/Ascend910B4: "1"
                # Если не указать Ascend910B-memory, будет выделен весь NPU.
                huawei.com/Ascend910B4-memory: "4096"

      Дополнительные примеры на стороне устройства см. в примерах HAMi ascend-device-plugin.

    Для более глубокого понимания того, как работает разбиение vNPU (шаблоны, округление памяти и учет бюджета для каждой карты), см. Как работает разбиение Ascend vNPU.

    Устранение неполадок

    • Pod остается в состоянии Pending, при этом ресурсы Ascend не отображаются: убедитесь, что на узле есть метка ascend=on и что pod hami-ascend-device-plugin на этом узле находится в состоянии Running.
    • В ConfigMap hami-scheduler-device отсутствует секция vnpus: снова откройте форму развертывания HAMi и убедитесь, что Enable Ascend включен; секция отображается только при включенном переключателе.
    • Конфликты с Alauda Build of NPU Operator: убедитесь, что в форме развертывания оператора был отключен Ascend Device Plugin. Если он был включен по ошибке, повторно разверните оператор с выключенной опцией, затем снова примените ascend-device-plugin.yaml HAMi.
    • Нужно настроить шаблоны виртуализации Ascend: отредактируйте секцию vnpus в ConfigMap hami-scheduler-device (kubectl -n kube-system edit configmap hami-scheduler-device) и перезапустите pod'ы hami-ascend-device-plugin. Имейте в виду, что изменение будет потеряно при следующем обновлении чарта.