Стойка с серверами в глухом ангаре на Урале. Три ночи, моргают диоды коммутаторов, а инженеры пытаются понять, почему кластер из восьми узлов внезапно перестал видеть топологию после тихого обновления системных пакетов. Мы сидим на пороховой бочке. Жизнь без CUDA в 2026: переносим инференс LLM и CV на Ascend, MUSA и отечественные NPU — что завелось, а что встало колом. Это не абстрактная страшилка, а будни промышленного ИИ. Серый импорт A100 и H100 с ценником х3 от MSRP — полбеды. Настоящая беда — риск превращения этих карт в тыкву из-за одного отвалившегося драйвера или санкционного отзыва сертификатов. Настоящий vendor lock-in прячется не в кремнии. Он влит в бетон экосистемы CUDA.
Инференс без CUDA на китайских ускорителях: где прячется зависимость
Вы думаете, что ваш стек абстрагирован, потому что вы пишете import torch? Наивность уровня джуна. Загляните под капот любой современной LLM в проде. Там FlashAttention, прибитый гвоздями к PTX-инструкциям. Там кастомные ядра квантования AWQ или GPTQ, написанные на чистом C++ с CUDA API. Там NCCL, который оркестрирует раскидывание весов по картам и без которого ваш tensor parallelism просто умрет от сетевых задержек. Когда мы попытались запустить стандартный пайплайн на первом попавшемся не-NVIDIA железе, фреймворк выплюнул нам триста строк трейсбека, жалуясь на отсутствие простейших атомарных операций. Вы замена NVIDIA для ИИ 2026 года ищете в прайс-листах дистрибьюторов? Ищите ее в исходниках вашего инференс-сервера.
Портирование модели с CUDA: CANN, MUSA, ROCm и суровая реальность
Ascend CANN от Huawei, Moore Threads MUSA, вездесущий AMD ROCm и парочка отечественных NPU — вот наш зоопарк на тестовом стенде. Задача простая до зубовного скрежета: поднять Llama-3 7B для RAG-системы завода и стандартный Yolo-v9 для дефектоскопии на конвейере. На бумаге всё выглядит гладко. Huawei Ascend CANN обещает бесшовную интеграцию с PyTorch через torch-npu. Moore Threads клянется, что их MUSA — это почти CUDA, только перекомпилируй. Отечественные вендоры шлют красивые презентации про суверенный ИИ.
Начинаем с Ascend 910B. Ставим CANN. Документация переведена машинным переводом, часть трейсбеков вываливается в иероглифах. Базовая CV-модель компилируется и даже заводится из коробки. Трансформер ломается на первом же слое внимания. Почему? Потому что их реализация NPU-операторов не поддерживает часть функционала FlashAttention, а фоллбэк на наивное внимание сжирает всю HBM-память, вышибая OOM-ошибку. Пришлось переписывать ядра внимания вручную под их матричные блоки.
С Moore Threads MUSA история веселее. MUSA действительно синтаксически пытается мимикрировать под CUDA. Но компилятор падает в сегфолт на сложных графах. Вы пытаетесь собрать кастомный слой нормализации, а компилятор просто молча завершается с кодом 139. Приходится дробить граф на примитивы, теряя всю оптимизацию фьюжн-операторов. AMD ROCm выглядит самым зрелым из аутсайдеров, но он живёт своей жизнью. HIP-компилятор переваривает 90% чистого CUDA-кода, но как только дело доходит до RCCL на сложных сетевых топологиях, кластер начинает захлебываться тайм-аутами.
Отечественные NPU? Железо едет. Программный стек отстает. Нет поддержки честного float16, только странные вариации bfloat16 или жесткое INT8-квантование, которое требует переобучения модели с нуля, потому что пост-тренировочное квантование превращает логиты в белый шум. Дыры в операторах зияют на каждом шагу: нет банального GatherND, из-за чего роутинг в MoE-архитектурах реализовать невозможно без костылей, убивающих всю производительность.
import torch
import torch_npu # Huawei Ascend NPU bindings
from custom_kernels import musa_attention # Moore Threads fallback
def get_compute_device_and_attention(model_config):
if hasattr(torch, 'npu') and torch.npu.is_available():
torch.npu.set_device("npu:0")
# CANN не тянет честный FlashAttention v2 без патчей ядра
return "npu:0", npu_fused_attention
elif hasattr(torch.backends, 'musa') and torch.backends.musa.is_built():
# Компилятор MUSA падает на сложных графах, берем кастом
return "musa:0", musa_attention
else:
# Если повезло и санкции еще не дошли
return "cuda:0", torch.nn.functional.scaled_dot_product_attentionМы потратили три месяца инженерного времени уровня сеньоров, чтобы просто заставить LLM 7B выплевывать токены с приемлемой скоростью. Это цена вашей независимости. Вы экономите два миллиона рублей на закупке железа, но сжигаете десять миллионов на зарплатах R&D-команды, которая пишет патчи к закрытым китайским компиляторам.
Замеры под нагрузкой: p99 латентность и цена миграции
Мы прогнали голову в голову три конфигурации на инференсе 7B модели с контекстом 4K. Забудьте про метрики в среднем. Под высокой нагрузкой решает только p99-латентность и стабильность драйвера.
| Ускоритель / Стек | Токены/сек (Throughput) | p99 Latency (мс) | Стабильность под нагрузкой (48ч) |
|---|---|---|---|
| NVIDIA A100 (CUDA) | 85 | 120 | Монолит |
| Huawei Ascend 910B (CANN) | 78 | 450 | Падение демона NPU через 24ч |
| Moore Threads S4000 (MUSA) | 22 (упор в VRAM) | 890 | Фрагментация KV-кэша |
NVIDIA A100 дает предсказуемые показатели. Драйвер стоит как скала. Huawei Ascend выдал отличный результат для кремния, но p99 скачет из-за периодических пауз в планировщике потоков CANN. Через сутки непрерывной генерации демон мониторинга NPU тихо умирает, утягивая за собой подсистему выделения памяти. Moore Threads на CV-задачах держится достойно, но попытка запустить LLM уперлась в жесткие ограничения VRAM и отсутствие эффективного пейджинга: KV-кэш фрагментирует память за двадцать минут, после чего throughput падает втрое.
Матрица решений на 2026 год выглядит цинично. Если у вас классический Computer Vision без экзотических слоев — переезд на не-NVIDIA железо оправдан и окупается за год. Если вы гоняете тяжелые LLM с высоким concurrency — альтернативные стеки всё ещё требуют наличия команды компиляторщиков в штате. TCO миграции состоит не из цены железа, а из человеко-месяцев инженеров, вылавливающих баги в проприетарных драйверах.
В Morana Labs мы решаем этот риск радикально: начинаем аудит CUDA-зависимостей до закупки новых серверов. Мы пишем изолированные адаптеры под каждый тензорный оператор и прогоняем пилотный инференс на целевом железе. Если целевая архитектура не тянет fused-ядра, мы перестраиваем граф вычислений, а не ждем чуда от китайских вендоров. Vendor lock-in снимается не покупкой другой видеокарты, а архитектурой платформы, готовой к суровой реальности сырого софта.