Обновление драйвера и self-healing
Эта страница применима только если Driver включен в экземпляре NPUOperatorCtl. Если вы зададите spec.driver.enabled=false (режим с предустановленным драйвером), оператор не будет затрагивать host driver, и ни один из процессов ниже не запустится — управляйте версией драйвера и любыми перезагрузками для восстановления chip через тот процесс, который установил пакет .run.
Начиная с v1.2.4, NPU Operator управляет жизненным циклом драйвера на каждом NPU-узле end-to-end. На этой странице описаны два потока, управляемые состоянием, которые он предоставляет:
- Обновление драйвера — поэтапное развертывание новой версии драйвера во всем кластере.
- Self-healing chip — автоматическое восстановление узла, у которого chip завис во время работы.
Оба потока проходят через один и тот же путь перезагрузки узла. Chip Ascend не поддерживают rmmod работающего драйвера — попытка заменить драйвер на месте приводит chip в невосстановимое состояние dev_num=0. Поэтому оператор всегда загружает новые модули после чистой загрузки, а не перегружает их внутри работающего kernel.
Содержание
Обновление драйвераШаг 1: Подготовка перед запуском1.1 Контрольный список перед обновлением1.2 Остановите NPU workloadsШаг 2: Запуск обновленияШаг 3: Подтверждение перезагрузки каждого узлаШаг 4: Проверка, что новый драйвер установленSelf-healing chipАвтоматическое и ручное восстановлениеПошаговый сценарий ручного восстановленияПодавление ложноположительных срабатыванийОбновление драйвера
Остановите все NPU workloads перед началом обновления драйвера. Обновление последовательно перезагружает каждый NPU-узел и не рассчитано на прозрачную работу для выполняющихся training jobs или inference services. Сведите к нулю все Deployment / StatefulSet / training job, запрашивающие NPU, завершите все выполняющиеся запросы и сохраните все checkpoints модели до изменения spec.driver.version. После завершения rollout восстановите workloads — см. Шаг 4, чтобы определить, когда это можно делать.
Обновление проходит через четыре упорядоченных шага: подготовка кластера, запуск повышения версии, подтверждение перезагрузки каждого узла и проверка нового драйвера. Не запускайте обновление, пока не завершен Шаг 1 — это самая частая причина зависшего rollout.
Шаг 1: Подготовка перед запуском
Перед изменением spec.driver.version должны быть выполнены два условия. Оба обязательны; пропуск любого из них обычно приводит к зависанию обновления.
1.1 Контрольный список перед обновлением
-
Новый образ драйвера присутствует в cluster registry для каждого профиля NPU-узла. Повторно используйте шаг
skopeo copyиз Шага 1.1 установки для каждой комбинации(chip, kernel, OS):Если ни один tag в исходном Docker Hub repo не соответствует kernel вашего узла, обратитесь в Customer Support — см. примечание по установке об отсутствующих tag.
-
ImageWhiteListобновлен и включает новый tag(и):
1.2 Остановите NPU workloads
Перед продолжением сведите к нулю все Deployment / StatefulSet / training job, запрашивающие NPU. После завершения rollout восстановите их — см. Шаг 4.
Шаг 2: Запуск обновления
Отредактируйте экземпляр NPUOperatorCtl (созданный в конце Шага 5.3 установки) и обновите два поля в одном сохранении:
spec.driver.version— новая версия драйвера (например,25.5.0).spec.driver.upgradePolicy.autoUpgrade— оставьте значение по умолчаниюfalse, чтобы подтверждать перезагрузку каждого узла вручную; установитеtrue, чтобы оператор автоматически выполнил rollout по всему кластеру. Автоматический режим рекомендуется только для рутинных обновлений версии в bare-metal кластерах.
Через platform UI (рекомендуется):
- Administrator > Marketplace > OperatorHub > Installed Operators > Alauda Build of NPU Operator.
- Откройте вкладку NPUOperatorCtl и щелкните по экземпляру (имя по умолчанию
npuoperatorctl-sample). - Edit YAML, измените оба поля, затем нажмите Save.
Через kubectl:
(Замените npu-operator на namespace установки и npuoperatorctl-sample на имя вашего экземпляра, если они отличаются.)
Шаг 3: Подтверждение перезагрузки каждого узла
Пропустите этот шаг, если на Шаге 2 вы установили autoUpgrade: true — оператор перезагружает каждый узел автоматически.
В ручном режиме оператор ожидает, что администратор добавит к каждому NPU-узлу annotation npu.openfuyao.com/approve-reboot=true перед его перезагрузкой. Annotation можно задать в любое время — в том числе до Шага 2 — и оператор использует его один раз на каждую перезагрузку. Самый простой вариант — заранее одобрить все NPU-узлы одной командой:
Или одобрять по одному узлу в любом порядке:
Шаг 4: Проверка, что новый драйвер установлен
Rollout завершен, когда значение DRIVER-UPGRADE-STATE у каждого узла пустое. Сначала проверьте labels узлов:
Затем убедитесь, что каждый driver pod работает с новым image:
Наконец, запустите npu-smi на host каждого NPU-узла (или подключитесь к узлу через node-debug / SSH workflow вашей platform) и убедитесь, что host сообщает новую версию:
Теперь можно восстановить NPU workloads, которые вы остановили на Шаге 1.2.
Self-healing chip
Экспериментальная функция. Self-healing chip поставляется как tech preview в v1.2.4 и по умолчанию отключен. Протестируйте его в staging environment перед включением в production и оставляйте autoRecover равным false, пока не подтвердите корректность поведения для вашего аппаратного профиля.
Некоторые сценарии развертывания Ascend — особенно 910B в VM с PCI passthrough — иногда могут приводить chip в состояние, при котором kernel modules загружены, но сам драйвер сообщает dev_num=0 и отклоняет вызовы DCMI. Для userspace это выглядит как «здоровый» host (все /dev/davinciN существуют, modules загружены), но каждый npu-smi info возвращает ошибку. Единственный способ восстановления — перезагрузка узла.
В v1.2.4 этот случай определяется автоматически:
- Driver pod запускает health-watch loop, который опрашивает каждый NPU с помощью
npu-smi infoкаждые 60 секунд. - После трех последовательных сбоев (≈3 минуты) loop определяет зависание во время работы: он снимает marker готовности драйвера (так что validator pod видит
NotReady, а device plugin немедленно сообщает chip какUnhealthy) и записывает markerrecoveryдля rebooter. - Rebooter pod замечает marker в следующем 30-секундном цикле опроса.
Автоматическое и ручное восстановление
Поведение на этом этапе определяется spec.driver.recoveryPolicy.autoRecover (независимо от autoUpgrade):
Когда автоматическое восстановление включено, chip self-heals без участия оператора — обычно это 3 минуты на обнаружение плюс несколько минут на перезагрузку. Когда оно выключено, та же annotation approve-reboot, которая используется для обновлений, разрешает перезагрузку восстановления.
Типичная конфигурация восстановления:
Пошаговый сценарий ручного восстановления
Если autoRecover: false и health-watch loop обнаружил зависание:
-
Найдите затронутые узлы и прочитайте причину marker:
Для self-healing сообщение Event содержит
reason=recovery. (Для обновления драйвера используетсяreason=upgrade.) -
При удобном случае подтвердите перезагрузку:
-
Rebooter перезагружает узел; после чистой загрузки driver pod корректно загружает modules, а validator pod повторно подтверждает готовность.
Подавление ложноположительных срабатываний
Если chip восстанавливается самостоятельно до того, как сработает rebooter, health-watch loop очищает собственный marker, чтобы узел не был перезагружен без необходимости.