Тест китайского ИИ-ускорителя PPU Zhenwu 810E от Alibaba в работе с LLM
Всем привет! Меня зовут Дмитрий, я занимаюсь MLOps-инженерией в Selectel.
Сегодня рынок аппаратных ускорителей для искусственного интеллекта пестрит самыми разными архитектурами: помимо привычных GPU, активно развиваются TPU, NPU, LPU и прочие специализированные чипы. Китайские разработчики вносят весомый вклад в эту технологическую гонку, и в этой статье я подробно поделюсь результатами тестирования AI-ускорителя от корпорации Alibaba Group.
Главной целью было изучить возможности этого оборудования в типичных рабочих сценариях — например, в роли вычислительного узла для облачного Kubernetes или в качестве самостоятельного выделенного сервера (dedicated). Давайте погрузимся в детали.
Пара слов про архитектуру PPU
Специалисты компании Chaitex предоставили нам для тестов сервер в форм-факторе AI-станции. На ней уже стояли все необходимые драйверы и графический интерфейс для управления. Поскольку работа через UI не входит в наши основные задачи, мы сосредоточились на оценке интеграции такого железа в собственную облачную инфраструктуру.

Изменить операционную систему или заменить драйверы напрямую не получилось, однако в официальных источниках можно найти архивы с различными версиями ПО.
Тестируемая конфигурация включает в себя 16 процессоров PPU Zhenwu 810E, спроектированных полупроводниковым подразделением Alibaba — T-HEAD (Pingtou Ge Semiconductor Co., Ltd.). Сами создатели называют их Parallel Processing Unit (PPU), выделяя в отдельный класс вычислителей наряду с TPU и GPU.
Судя по техническому паспорту, каждый чип Zhenwu 810E укомплектован 96 ГБ памяти HBM2e с пропускной способностью до 2 765 ГБ/с (~2,77 ТБ/с). Поддерживается шина PCIe 5.0 x16, а для связи между кристаллами используется фирменный интерфейс ICN, обеспечивающий до 700 ГБ/с суммарной пропускной способности на один ускоритель. В итоге на сервер приходится внушительные 1 536 ГБ видеопамяти HBM2e.
Особенности документации и совместимости
Весь программный стек для работы с PPU автономен и локализован. Нативные библиотеки NVIDIA здесь не поддерживаются напрямую, хотя разработчики заявляют о возможности трансляции исходного CUDA-кода. Тем не менее, перед компиляцией под PPU исходники требуют адаптации с помощью специального SDK. Ниже представлена схема этого процесса из официальной справки.

Следовательно, привычные инструменты для обучения и инференса (PyTorch, Transformers, FlashAttention, vLLM и другие) должны быть предварительно пересобраны под новую архитектуру.
Этой адаптацией, а также квантованием весов занимается та же команда T-HEAD. Что касается технической документации, то большая её часть написана на китайском языке и ориентирована на создателей ПО. В комплекте со станцией шла русскоязычная инструкция по управлению встроенной платформой Alibaba AI Stack, но я в ходе работы опирался на материалы облачного сервиса Alibaba Cloud Zhenwu PPU Service. Кое-что переведено на английский, однако самые свежие сведения выглядят следующим образом:

Если вы предпочитаете англоязычную версию портала, будьте готовы к тому, что там представлена лишь предыдущая итерация гайдов. Актуальность информации здесь критически важна, и дальше станет понятно почему.
Готовый и адаптированный стек для инференса поставляется в виде собранных Docker-образов с определенными тегами, где зафиксированы конкретные версии поддерживаемых библиотек.

В этом кроется ключевой риск экосистемы. При выходе новой перспективной модели или свежего патча для движка инференса приходится ждать, пока специалисты T-HEAD выполнят портирование. Если для стандартного железа мы можем относительно быстро задействовать свежие сборки vLLM (иногда используя nightly-версии), то в данном случае задержка может затянуться. Например, на момент августа 2026 года актуальный релиз vLLM имел версию v0.27.0, в то время как адаптированная сборка для PPU (обнаруженная только на китайском зеркале Alibaba Cloud) содержала лишь v0.23.0. Кроме того, для нормальной работы требуются специфические варианты квантования весов, подготовленные той же командой.
Стоит отметить, что PPU нативно поддерживает форматы FP32, BF16, FP16, а также схемы квантования W8A8 (INT8), AWQ (W4A16) и GPTQ (W4A16, W8A16). Производитель рекомендует применять W8A8: это позволяет существенно снизить требования к памяти без заметной потери точности. На текущий момент под эту схему оптимизированы такие крупные релизы, как DeepSeek R1, DeepSeek v3.2, Kimi-K2-Instruct, Qwen3-235B-A22B, GLM-5, MiniMax-M2.5 и Qwen3.5-397B-A17B:
The following are examples of quantized models adapted for SDK 2.0. The system login credentials are the same as your PTG PIP credentials. If you do not have them, contact your account manager:
DeepSeek-R1: Supports per-token/per-channel a8w8 (int8) quantization.
DeepSeek v3.2: Supports per-token/per-channel a8w8 (int8) quantization.
Kimi-K2-Instruct: Supports per-token/per-channel a8w8 (int8) quantization.
Qwen3-235B-A22B: Supports per-token/per-channel a8w8 (int8) quantization.
GLM-5: Supports per-token/per-channel w8a8 (int8) quantization.
MiniMax-M2.5: Supports per-token/per-channel w8a8 (int8) quantization.
Qwen3.5-397B-A17B: Supports per-token/per-channel w8a8 (int8) quantization.
В самом управляющем интерфейсе AI-станции доступен следующий набор готовых профилей:

Оценить актуальность этих версий и найти нужные веса — отдельный квест. На Hugging Face репозитории от T-HEAD отсутствуют (имеющиеся варианты W8A8 созданы сторонними энтузиастами и официально не поддерживаются). Сама компания публикует модели на китайской платформе Modelscope.cn (в международной версии Modelscope.ai их тоже нет).

Загрузка изнутри контейнера PPU SDK происходит напрямую без дополнительных токенов авторизации:
modelscope download --model T-HEAD/DeepSeek-V4-Flash-0731-W8A8-INT8 --local_dir deepseek
Для привычных утилит мониторинга NVIDIA здесь предусмотрены аналоги. Часть из них встроена в систему, часть поставляется внутри SDK-образа. Обращу внимание на важный нюанс: судя по описанию облачного сервиса PPU Zhenwu 810e, для получения установочного deb/rpm-пакета аналога DCGM требуется специальная учетная запись.

Относится ли это ограничение только к облаку или к серверным компонентам в целом — не до конца понятно, но найти RPM-пакет для ppu-dcgm мне не удалось.
Тем не менее, в графическом интерфейсе станции телеметрия чипов отображается исправно.

Внешний осмотр и утилита диагностики сервера
Перейдем к практической части. Для начала я задействовал утилиту ppu-smi, которая служит аналогом знакомой nvidia-smi. Она корректно распознала 16 ускорителей, вывела показатели нагрузки, потенциальную поддержку MIG-профилей (!), версии драйверов и интерфейса HGGC.
[root@ali117196 ~]# ppu-smi
Tue Aug 18 22:02:09 2026
+-------------------------------------------------------------------------------+
| PPU-SMI 1.18 Driver Version: 1.6.3-8ee7e7 HGGC Version: N/A |
+---------------------------------+----------------------+----------------------+
| PPU Name Persistence M. | Bus-Id | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | PPU-Util Compute M. |
| | | MIG M. |
+=================================+======================+======================+
| 0 PPU-ZW810E N/A | 00000001:C9:00.0 | 0 |
| N/A 31C N/A 90W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 1 PPU-ZW810E N/A | 00000001:C8:00.0 | 0 |
| N/A 33C N/A 86W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 2 PPU-ZW810E N/A | 00000001:80:00.0 | 0 |
| N/A 30C N/A 87W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 3 PPU-ZW810E N/A | 00000001:81:00.0 | 0 |
| N/A 28C N/A 92W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 4 PPU-ZW810E N/A | 00000000:7E:00.0 | 0 |
| N/A 27C N/A 90W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 5 PPU-ZW810E N/A | 00000000:7F:00.0 | 0 |
| N/A 29C N/A 87W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 6 PPU-ZW810E N/A | 00000000:C7:00.0 | 0 |
| N/A 31C N/A 90W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 7 PPU-ZW810E N/A | 00000000:C6:00.0 | 0 |
| N/A 31C N/A 85W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 8 PPU-ZW810E N/A | 00000001:A5:00.0 | 0 |
| N/A 32C N/A 87W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 9 PPU-ZW810E N/A | 00000001:A4:00.0 | 0 |
| N/A 32C N/A 89W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 10 PPU-ZW810E N/A | 00000001:0A:00.0 | 0 |
| N/A 30C N/A 89W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 11 PPU-ZW810E N/A | 00000001:0B:00.0 | 0 |
| N/A 28C N/A 86W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 12 PPU-ZW810E N/A | 00000000:08:00.0 | 0 |
| N/A 28C N/A 87W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 13 PPU-ZW810E N/A | 00000000:09:00.0 | 0 |
| N/A 31C N/A 86W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 14 PPU-ZW810E N/A | 00000000:A3:00.0 | 0 |
| N/A 33C N/A 88W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 15 PPU-ZW810E N/A | 00000000:A2:00.0 | 0 |
| N/A 32C N/A 90W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
+-------------------------------------------------------------------------------+
| Processes: |
| PPU GI CI PID Type Process name PPU Memory |
| ID ID Usage |
+===============================================================================+
| No running processes found |
+-------------------------------------------------------------------------------+
Между собой чипы соединены по сложной физической и логической топологии.
Скрытый текст
[root@ali117196 ~]# ppu-smi topo -m
PPU0 PPU1 PPU2 PPU3 PPU4 PPU5 PPU6 PPU7 PPU8 PPU9 PPU10 PPU11 PPU12 PPU13 PPU14 PPU15 NIC0 NIC1 NIC2 NIC3 NIC4 NIC5 CPU Affinity
NUMA Affinity
PPU0 X ICN2 ICN1 ICN2 ICN1 SYS SYS SYS SYS ICN1 SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS 48-95,144-191
2-3
PPU1 ICN2 X ICN2 ICN1 SYS ICN1 SYS SYS ICN1 SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS 48-95,144-191
2-3
PPU2 ICN1 ICN2 X ICN1 SYS SYS ICN2 SYS SYS SYS SYS ICN1 SYS SYS SYS SYS SYS SYS SYS SYS SYS PIX 48-95,144-191
2-3
PPU3 ICN2 ICN1 ICN1 X SYS SYS SYS ICN2 SYS SYS ICN1 SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS PIX 48-95,144-191
2-3
PPU4 ICN1 SYS SYS SYS X ICN2 ICN1 ICN2 SYS SYS SYS SYS SYS ICN1 SYS SYS SYS SYS SYS SYS SYS SYS 0-47,96-143
0-1
PPU5 SYS ICN1 SYS SYS ICN2 X ICN2 ICN1 SYS SYS SYS SYS ICN1 SYS SYS SYS SYS SYS SYS SYS SYS SYS 0-47,96-143
0-1
PPU6 SYS SYS ICN2 SYS ICN1 ICN2 X ICN1 SYS SYS SYS SYS SYS SYS SYS ICN1 SYS SYS SYS PIX SYS SYS 0-47,96-143
0-1
PPU7 SYS SYS SYS ICN2 ICN2 ICN1 ICN1 X SYS SYS SYS SYS SYS SYS ICN1 SYS SYS SYS SYS PIX SYS SYS 0-47,96-143
0-1
PPU8 SYS ICN1 SYS SYS SYS SYS SYS SYS X ICN2 ICN1 ICN2 ICN1 SYS SYS SYS SYS SYS SYS SYS SYS SYS 48-95,144-191
2-3
PPU9 ICN1 SYS SYS SYS SYS SYS SYS SYS ICN2 X ICN2 ICN1 SYS ICN1 SYS SYS SYS SYS SYS SYS SYS SYS 48-95,144-191
2-3
PPU10 SYS SYS SYS ICN1 SYS SYS SYS SYS ICN1 ICN2 X ICN1 SYS SYS ICN2 SYS SYS SYS SYS SYS PIX SYS 48-95,144-191
2-3
PPU11 SYS SYS ICN1 SYS SYS SYS SYS SYS ICN2 ICN1 ICN1 X SYS SYS SYS ICN2 SYS SYS SYS SYS PIX SYS 48-95,144-191
2-3
PPU12 SYS SYS SYS SYS SYS ICN1 SYS SYS ICN1 SYS SYS SYS X ICN2 ICN1 ICN2 SYS SYS SYS SYS SYS SYS 0-47,96-143
0-1
PPU13 SYS SYS SYS SYS ICN1 SYS SYS SYS SYS ICN1 SYS SYS ICN2 X ICN2 ICN1 SYS SYS SYS SYS SYS SYS 0-47,96-143
0-1
PPU14 SYS SYS SYS SYS SYS SYS SYS ICN1 SYS SYS ICN2 SYS ICN1 ICN2 X ICN1 SYS SYS PIX SYS SYS SYS 0-47,96-143
0-1
PPU15 SYS SYS SYS SYS SYS SYS ICN1 SYS SYS SYS SYS ICN2 ICN2 ICN1 ICN1 X SYS SYS PIX SYS SYS SYS 0-47,96-143
0-1
NIC0 SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS X SYS SYS SYS SYS SYS 48-95,144-191
2-3
NIC1 SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS X SYS SYS SYS SYS 0-47,96-143
0-1
NIC2 SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS PIX PIX SYS SYS X SYS SYS SYS 0-47,96-143
0-1
NIC3 SYS SYS SYS SYS SYS SYS PIX PIX SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS X SYS SYS 0-47,96-143
0-1
NIC4 SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS PIX PIX SYS SYS SYS SYS SYS SYS SYS SYS X SYS 48-95,144-191
2-3
NIC5 SYS SYS PIX PIX SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS SYS X 48-95,144-191
2-3
Legend:
X = Self
SYS = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
PHB = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
PXB = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
PIX = Connection traversing at most a single PCIe bridge
ICN# = Connection traversing a bonded set of # ICN links
NIC Legend:
NIC0: mlx5_bond_0
NIC1: mlx5_bond_1
NIC2: mlx5_bond_2
NIC3: mlx5_bond_3
NIC4: mlx5_bond_4
NIC5: mlx5_bond_5
PPU Rear Group:
Rear ID 0: PPU 0,1,2,3,4,5,6,7
Rear ID 1: PPU 8,9,10,11,12,13,14,15
Для сравнения: в системах с коммутаторами NVSwitch графические ускорители NVIDIA объединены по схеме «все-со-всеми», тогда как в TPU они образуют многомерные кольцевые структуры, где каждый узел связан с соседями примерно следующим образом:

Каждый модуль Zhenwu 810E располагает семью физическими линиями ICN. В зависимости от взаимного расположения пары чипов канал может быть образован одной линией (ICN1), объединением двух линий (ICN2) либо проходить через системные шины PCIe (SYS).
В рекламных материалах архитектура выглядит так:

Восемь чипов объединяются в единую группу с оптимальным порядком обмена данными:
Rear ID 0: PPU 0,1,2,3,4,5,6,7
Rear ID 1: PPU 8,9,10,11,12,13,14,15
Эту очередность крайне важно прописывать в переменной окружения CUDA_VISIBLE_DEVICES при запуске многочипового инференса. Для облачной среды Kubernetes разработчики подготовили библиотеку ACCL (аналог NCCL). В документации к ней приводятся следующие рекомендации по конфигурации:
However, the PPU Inter-Connect Network (ICN) uses a non-fully connected topology. To achieve maximum performance with specific parallel strategies, manually configure the environment variables as needed. The core of this optimization is to allocate more ICN links to high-latency Communication Groups and reduce link sharing and contention between them. This improves the overall efficiency of interconnect communication.
For TP=2:
export CUDA_VISIBLE_DEVICES=4,7,5,6,1,2,0,3,12,15,13,14,9,10,8,11
For TP=4:
export CUDA_VISIBLE_DEVICES=4,5,7,6,0,1,3,2,9,8,10,11,13,12,14,15
For TP=8:
export CUDA_VISIBLE_DEVICES=4,5,7,6,2,3,1,0,13,12,14,15,11,10,8,9
No configuration needed for TP=1 or TP=16.
Даже если речь идет о связке Kubernetes с ACCL, правильная последовательность критически важна для достижения максимальной скорости обмена в PCCL (аналоге NCCL).
Пропускная способность каждого отдельного линка ICN составляет около 53 ГБ/с.
root@ali117196 ~]# ppu-smi icn -s
PPU 0: PPU-ZW810E (UUID: GPU-01de0211-0952-030e-0000-000060d7d05f)
Link 0: 53 GB/s
Link 1: 53 GB/s
Link 2: 53 GB/s
Link 3: 53 GB/s
Link 4: 53 GB/s
Link 5: 53 GB/s
Link 6: 53 GB/s
PPU 1: PPU-ZW810E (UUID: GPU-019e2226-0480-0030-0000-000040937a19)
Link 0: 53 GB/s
Link 1: 53 GB/s
Link 2: 53 GB/s
Link 3: 53 GB/s
Link 4: 53 GB/s
Link 5: 53 GB/s
Link 6: 53 GB/s
...
...
...
В официальном описании не уточняется, является ли это значение однонаправленным или двунаправленным, но для сравнения: интерфейс NVLink поколений 3.0 и 4.0 (в чипах A100 и H100) обеспечивает 50 ГБ/с в каждую сторону на один линк.


Арендуйте физический сервер с запуском от 2 минут
Замена комплектующих — бесплатно. Все ресурсы — только ваши.
Тестирование межсоединений ICN
Следующим шагом стали замеры пропускной способности с помощью утилит, аналогичных nccl_perf_tests.
Зачем это нужно? При распределенном инференсе моделей вычисления на каждом шаге требуют синхронизации, пересылки промежуточных тензоров или обмена токенами между экспертами. Для этого задействуются коллективные операции, а стресс-тесты коммуникационного слоя позволяют выявить реальные скоростные показатели каналов.
Внутри контейнера с PPU SDK обнаружились готовые скрипты:
cd /usr/local/PPU_SDK/comm_tools/multi_process
ls
all_reduce_perf
alltoall_perf
...
Для стандартных стратегий параллелизма по тензору (Tensor Parallelism) ключевыми операциями являются AllReduce, AllGather и ReduceScatter, а для архитектур Mixture-of-Experts (MoE) критически важен AlltoAll. Мы сосредоточились на проверке AllReduce и AlltoAll.
Прямой запуск тестов по аналогии с nccl-tests сначала привел к сбою:
root@ali117196:/usr/local/PPU_SDK/comm_tools/multi_process# CUDA_VISIBLE_DEVICES=4,5,7,6,2,3,1,0 ./all_reduce_perf -b 8M -e 1G -f 2 -g 8
nThread 1 nGpus 8 minBytes 8388608 maxBytes 1073741824 offset <0>/<0> step: 2(factor) warmup iters: 5 iters: 20 validation: 1 single_test: 0 test_buffer_kind: both elapsed_type: cpu_time average: MIN register: 0
Using devices
Rank 0 Group 0 Pid 168 on ali117196 device 0 [0xc9] PPU-ZW810E
Rank 1 Group 0 Pid 168 on ali117196 device 1 [0xc8] PPU-ZW810E
Rank 2 Group 0 Pid 168 on ali117196 device 2 [0x80] PPU-ZW810E
Rank 3 Group 0 Pid 168 on ali117196 device 3 [0xc7] PPU-ZW810E
Rank 4 Group 0 Pid 168 on ali117196 device 4 [0x7f] PPU-ZW810E
Rank 5 Group 0 Pid 168 on ali117196 device 5 [0x7e] PPU-ZW810E
Rank 6 Group 0 Pid 168 on ali117196 device 6 [0xc6] PPU-ZW810E
Rank 7 Group 0 Pid 168 on ali117196 device 7 [0x81] PPU-ZW810E
[ali117196][168:168][7][bootstrap.cc:93] NCCL ERROR Bootstrap : no socket interface found
[ali117196][168:168][7][net.cc:279] NCCL WARN net.cc:279 -> 3
[ali117196][168:168][7][init.cc:385] NCCL WARN init.cc:385 -> 3
[ali117196][168:168][7][init.cc:411] NCCL WARN init.cc:411 -> 3
ali117196: Test PCCL failure common.cu:1455 'internal error'
Библиотеке PCCL потребовался сетевой интерфейс для инициализации. Проблема решилась экспортом переменных окружения:
export NCCL_SOCKET_IFNAME=lo
export NCCL_SOCKET_FAMILY=AF_INET
export NCCL_DEBUG=INFO
В документации производителя также приведены дефолтные значения параметров:

Сначала я проверил скорость между двумя чипами при разных типах соединений, опираясь на матрицу топологии. Использовался AllReduce с размером данных до 1 ГБ.
ICN2 для пары PPU0-PPU1
CUDA_VISIBLE_DEVICES=0,1 \
./all_reduce_perf -b 4096 -e 1G -f 2 -w 10 -n 50 -g 2
Приведу итоговые показатели:
size time(us) algbw busbw
134217728 1544.41 86.91 86.91
268435456 3042.48 88.23 88.23
536870912 6034.78 88.96 88.96
1073741824 12014.10 89.37 89.37
Out of bounds values : 0 OK
Скорость составила около 89,4 ГБ/с.
ICN1 для пары PPU0-PPU2
CUDA_VISIBLE_DEVICES=0,2 \
./all_reduce_perf -b 4096 -e 1G -f 2 -w 10 -n 50 -g 2
size time(us) algbw busbw
134217728 3105.61 43.22 43.22
268435456 6136.45 43.74 43.74
536870912 12316.80 43.59 43.59
1073741824 24422.60 43.97 43.97
Out of bounds values : 0 OK
Ожидаемо почти вдвое ниже — около 44 ГБ/с.
SYS (без выделенного ICN) для пары PPU0-PPU5
CUDA_VISIBLE_DEVICES=0,5 \
./all_reduce_perf -b 4096 -e 1G -f 2 -w 10 -n 50 -g 2
size time(us) algbw busbw
134217728 9361.68 14.34 14.34
268435456 18748.80 14.32 14.32
536870912 37565.10 14.29 14.29
1073741824 75348.60 14.25 14.25
Out of bounds values : 0 OK
Здесь показатель падает до 14,3 ГБ/с.
Полученные данные наглядно подтверждают важность правильного физического распределения задач: если задействовать чипы из разных групп, задержки сети резко возрастут.
Далее я проверил AllReduce для группы из восьми ускорителей, входящих в один ICN-кластер.
CUDA_VISIBLE_DEVICES=4,5,7,6,2,3,1,0 \
./all_reduce_perf -b 4096 -e 1G -f 2 -w 10 -n 50 -g 8
size time(us) algbw busbw
67108864 560.70 119.69 209.45
134217728 1033.72 129.84 227.22
268435456 1957.16 137.16 240.02
536870912 3879.98 138.37 242.15
1073741824 7705.49 139.35 243.86
Для восьми чипов эффективная пропускная способность шины в режиме AllReduce составила 244 ГБ/с.
Для MoE-моделей был запущен тест AlltoAll на всех 16 доступных ускорителях.
./alltoall_perf -b 4096 -e 1G -f 2 -w 10 -n 50 -g 16
size time(us) algbw busbw
33554432 449.19 74.70 70.03
67108864 862.86 77.78 72.91
134217728 1690.93 79.38 74.41
268435456 3346.55 80.21 75.20
536870912 6674.53 80.44 75.41
1073741824 13376.00 80.27 75.26
На 16 устройствах показатель AlltoAll зафиксирован на уровне 75 ГБ/с. Сохраним эти результаты для дальнейшего сравнения и перейдем непосредственно к запуску моделей.
Подготовка к запуску инференса
Нашей целью было запустить инференс в Kubernetes-окружении, используя предварительно подготовленные образы контейнеров с PPU SDK.
В официальных инструкциях Alibaba Cloud ссылки ведут на внутренний реестр, но публичные образы доступны и в глобальном репозитории:
egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:26.04-v2.1.0-vllm0.23.0-torch2.10-cu130-20260710
В экосистеме NVIDIA для контейнеризации используется nvidia-container-toolkit. Для PPU отдельного проксирующего инструмента нет, поэтому устройства пробрасываются в Docker напрямую через файлы спецсимвольных устройств.
Список доступных компонентов находится в каталоге /dev:
ls /dev
alixpu
alixpu-caps
alixpu-caps-imex-channels
alixpu_ctl
alixpu_ppu0
alixpu_ppu1
alixpu_ppu10
alixpu_ppu11
alixpu_ppu12
alixpu_ppu13
alixpu_ppu14
alixpu_ppu15
alixpu_ppu2
alixpu_ppu3
alixpu_ppu4
alixpu_ppu5
alixpu_ppu6
alixpu_ppu7
alixpu_ppu8
alixpu_ppu9
alixpu_sep
Прокинув нужный чип с помощью ключа --device, мы получаем изолированный доступ к нему изнутри контейнера.
[root@ali117196 ~]# nerdctl run -it --device=/dev/alixpu_ppu0 --device=/dev/alixpu --device=/dev/alixpu_ctl egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:25.03-v1.4.3-hotfix-vllm0.7.3-torch2.5-cu123-20250331 -- bash
PPU SDK Version: v1.4.3-hotfix
CUDA Wrapper: cuda-12.3
PyTorch Version: 2.5.1
NGC Version: pytorch:-py3
Python Version: Python 3.10.13
Setup environment for CUDA
[INFO] Get Dockerfile at /Dockerfile
Driver Version : 1.6.3-8ee7e7
HGGC Version : 11.1
SDK Version : 1.4.3-15e77a
PPU 00000001:C9:00.0
VBIOS Version : 1.6.12-af69f0
[WARNING] shm-size 64M(docker default value) which may be not enough, add --shm-size=4g or bigger depend on your model
Внутри контейнера устройство определяется корректно:
root@8d535cca6772:/workspace/pytorch# ppu-smi
Tue Aug 18 22:58:22 2026
+-------------------------------------------------------------------------------+
| PPU-SMI 1.13 Driver Version: 1.6.3-8ee7e7 HGGC Version: 11.1 |
+---------------------------------+----------------------+----------------------+
| PPU Name Persistence M. | Bus-Id | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | PPU-Util Compute M. |
| | | MIG M. |
+=================================+======================+======================+
| 0 PPU-ZW810E N/A | 00000001:C9:00.0 | 0 |
| N/A 31C N/A 90W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
+-------------------------------------------------------------------------------+
| Processes: |
| PPU GI CI PID Type Process name PPU Memory |
| ID ID Usage |
+===============================================================================+
| No running processes found |
+-------------------------------------------------------------------------------+
Альтернативный (менее безопасный) вариант — запуск в режиме --privileged, при котором хостовые устройства видны целиком.
Скрытый текст
[root@ali117196 ~]# nerdctl run -it --privileged egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:25.03-v1.4.3-hotfix-vllm0.7.3-torch2.5-cu123-20250331 -- bash
PPU SDK Version: v1.4.3-hotfix
CUDA Wrapper: cuda-12.3
PyTorch Version: 2.5.1
NGC Version: pytorch:-py3
Python Version: Python 3.10.13
Setup environment for CUDA
[INFO] Get Dockerfile at /Dockerfile
Driver Version : 1.6.3-8ee7e7
HGGC Version : 11.1
SDK Version : 1.4.3-15e77a
PPU 00000001:C9:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000001:C8:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000001:80:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000001:81:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000000:7E:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000000:7F:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000000:C7:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000000:C6:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000001:A5:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000001:A4:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000001:0A:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000001:0B:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000000:08:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000000:09:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000000:A3:00.0
VBIOS Version : 1.6.12-af69f0
PPU 00000000:A2:00.0
VBIOS Version : 1.6.12-af69f0
[WARNING] shm-size 64M(docker default value) which may be not enough, add --shm-size=4g or bigger depend on your model
root@813f06d4156e:/workspace/pytorch# nvidia-smi
Tue Aug 18 23:03:12 2026
+-------------------------------------------------------------------------------+
| PPU-SMI 1.13 Driver Version: 1.6.3-8ee7e7 HGGC Version: 11.1 |
+---------------------------------+----------------------+----------------------+
| PPU Name Persistence M. | Bus-Id | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | PPU-Util Compute M. |
| | | MIG M. |
+=================================+======================+======================+
| 0 PPU-ZW810E N/A | 00000001:C9:00.0 | 0 |
| N/A 31C N/A 90W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 1 PPU-ZW810E N/A | 00000001:C8:00.0 | 0 |
| N/A 33C N/A 86W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 2 PPU-ZW810E N/A | 00000001:80:00.0 | 0 |
| N/A 29C N/A 87W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 3 PPU-ZW810E N/A | 00000001:81:00.0 | 0 |
| N/A 28C N/A 91W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 4 PPU-ZW810E N/A | 00000000:7E:00.0 | 0 |
| N/A 26C N/A 90W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 5 PPU-ZW810E N/A | 00000000:7F:00.0 | 0 |
| N/A 29C N/A 87W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 6 PPU-ZW810E N/A | 00000000:C7:00.0 | 0 |
| N/A 30C N/A 89W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 7 PPU-ZW810E N/A | 00000000:C6:00.0 | 0 |
| N/A 30C N/A 85W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 8 PPU-ZW810E N/A | 00000001:A5:00.0 | 0 |
| N/A 32C N/A 88W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 9 PPU-ZW810E N/A | 00000001:A4:00.0 | 0 |
| N/A 32C N/A 89W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 10 PPU-ZW810E N/A | 00000001:0A:00.0 | 0 |
| N/A 30C N/A 89W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 11 PPU-ZW810E N/A | 00000001:0B:00.0 | 0 |
| N/A 27C N/A 86W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 12 PPU-ZW810E N/A | 00000000:08:00.0 | 0 |
| N/A 28C N/A 87W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 13 PPU-ZW810E N/A | 00000000:09:00.0 | 0 |
| N/A 30C N/A 86W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 14 PPU-ZW810E N/A | 00000000:A3:00.0 | 0 |
| N/A 33C N/A 88W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
| 15 PPU-ZW810E N/A | 00000000:A2:00.0 | 0 |
| N/A 32C N/A 90W / 400W | 3MiB / 98304MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
+-------------------------------------------------------------------------------+
| Processes: |
| PPU GI CI PID Type Process name PPU Memory |
| ID ID Usage |
+===============================================================================+
| No running processes found |
+-------------------------------------------------------------------------------+
Базовая проверка вызовов CUDA и обнаружения чипов через PyTorch проходит успешно:
root@813f06d4156e:/workspace/pytorch# python
Python 3.10.13 (main, Mar 24 2025, 13:57:47) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
import torch
print("torch",torch.version)
torch 2.5.1
print("cuda is available?",torch.cuda.is_available())
cuda is available? True
print("device count", torch.cuda.device_count())
device count 16
В ходе настройки контейнеров периодически всплывали мелкие шероховатости вроде жестко зашитых в конфиги путей к локальным китайским зеркалам, но в целом окружение работоспособно. Перейдем к бенчмаркам.
Тестирование DeepSeek-v4-Flash-0731-w8a8 (TP = 8)
Для оценки производительности мы используем стандартные профили нагрузки, задающие длину входящего и выходящего контекста при поэтапном увеличении уровня конкурентности (concurrency).
Для проверки задействовались три базовых профиля:
-
Chat: 1024 токена на входе / 512 на выходе (наш основной ориентир);
-
RAG: 32k на входе / 1024 на выходе (тяжелая фаза prefill);
-
Batch: 8k на входе / 8k на выходе (интенсивная фаза decode).
Результаты оцениваются по медианным значениям, а для анализа пиковых задержек дополнительно фиксируется 99-й перцентиль (p99).
Запустить модель сразу на всех 16 чипах не удалось из-за ограничений конфигуратора vLLM для данной структуры. Запуск прошел успешно в режиме Tensor Parallelism = 8:
nerdctl run -it --privileged -p 8000:8000 -v /bmcp_lvm_fs/weights:/weights egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:26.04-v2.1.0-vllm0.23.0-torch2.10-cu130-20260710 -- vllm serve /weights/deepseek --host 0.0.0.0 --port 8000 --tensor-parallel-size 8 --trust-remote-code --tool-call-parser deepseek_v4 --trust-remote-code --block-size 256 --served-model-name DeepSeek-V4-Flash-0731 --tokenizer-mode deepseek_v4 --reasoning-parser deepseek_v4 --enable-prefix-caching --enable-auto-tool-choice
Полученные метрики сведены в таблицы.
Профиль Chat — вход 1024 / выход 512
|
concurrency |
rps |
Output tok/s |
Total tok/s |
TTFT p50, ms |
TTFT |
TPOT p50, ms |
TPOT p99, ms |
ITL p50, ms |
ITL p99, ms |
E2E p50, s |
|
8 |
0.83 |
424.88 |
1274.64 |
774.89 |
924.53 |
17.20 |
20.72 |
17.16 |
49.18 |
9.56 |
|
16 |
1.29 |
659.04 |
1977.13 |
806.10 |
1254.69 |
22.65 |
25.19 |
19.85 |
60.08 |
12.38 |
|
32 |
1.78 |
893.16 |
2679.47 |
1260.78 |
2269.00 |
32.59 |
36.64 |
26.42 |
297.19 |
17.91 |
|
64 |
2.27 |
1159.61 |
3478.82 |
1282.25 |
4371.09 |
52.42 |
56.45 |
36.10 |
626.39 |
28.07 |
|
128 |
2.78 |
1423.99 |
4271.98 |
2016.53 |
9974.66 |
85.36 |
90.93 |
51.65 |
695.35 |
45.64 |
|
200 |
3.03 |
1549.99 |
4649.96 |
2105.21 |
16219.64 |
124.66 |
130.32 |
68.41 |
704.41 |
65.81 |
Профиль RAG — вход 32000 / выход 1024
|
concurrency |
rps |
Output tok/s |
Total tok/s |
TTFT p50, ms |
TTFT |
TPOT p50, ms |
TPOT p99, ms |
ITL p50, ms |
ITL p99, ms |
E2E p50, s |
|
8 |
0.17 |
170.38 |
5495.42 |
9732.87 |
25328.15 |
36.93 |
42.93 |
16.64 |
880.66 |
47.51 |
|
16 |
0.20 |
205.61 |
6631.78 |
9755.73 |
53255.65 |
66.41 |
72.35 |
22.62 |
934.93 |
77.69 |
|
32 |
0.22 |
229.16 |
7391.21 |
8073.62 |
105863.73 |
129.39 |
133.85 |
31.48 |
963.38 |
140.44 |
|
64 |
0.24 |
246.59 |
7953.47 |
8110.17 |
216192.78 |
245.58 |
248.55 |
48.29 |
980.98 |
259.34 |
|
128 |
0.25 |
256.12 |
8260.72 |
9920.58 |
343338.69 |
373.63 |
377.19 |
62.93 |
1002.25 |
392.14 |
Профиль Batch — вход 8000 / выход 8000
|
concurrency |
rps |
Output tok/s |
Total tok/s |
TTFT p50, ms |
TTFT |
TPOT p50, ms |
TPOT p99, ms |
ITL p50, ms |
ITL p99, ms |
E2E p50, s |
|
8 |
0.05 |
402.72 |
805.64 |
3030.07 |
4888.42 |
19.51 |
20.02 |
18.76 |
37.38 |
159.09 |
|
16 |
0.08 |
666.42 |
1333.17 |
3105.28 |
10945.77 |
22.97 |
22.35 |
21.26 |
42.62 |
186.64 |
|
32 |
0.12 |
920.59 |
1841.65 |
3117.59 |
23389.97 |
32.46 |
32.88 |
28.78 |
57.60 |
262.77 |
|
64 |
0.16 |
1241.58 |
2483.78 |
3134.78 |
47682.74 |
46.69 |
46.97 |
39.28 |
87.49 |
376.61 |
|
128 |
0.20 |
1589.40 |
3179.60 |
22254.10 |
98019.58 |
70.69 |
72.88 |
61.48 |
774.03 |
587.7 |
|
200 |
0.25 |
1983.44 |
3967.87 |
77924.09 |
154652.57 |
90.61 |
99.22 |
81.58 |
785.40 |
802.71 |
Тестирование DeepSeek-v4-Flash-0731-w8a8 (TP = 8, DP = 2)
На следующем этапе мы попытались утилизировать все доступные на сервере чипы. Конфигурация запускалась с параметрами TP = 8 и DP = 2: движок vLLM поднимал два независимых экземпляра модели на разных физических группах (Rear-группах), при этом веса дублировались.
nerdctl run -d --name deepseek-dp2 --privileged -p 8000:8000 --ipc host -e NCCL_SOCKET_IFNAME=lo -e NCCL_SOCKET_FAMILY=AF_INET -e CUDA_VISIBLE_DEVICES=0,1,2,6,5,4,7,3,9,8,11,15,12,13,14,10 -e NCCL_DEBUG=INFO -v /bmcp_lvm_fs/weights:/weights egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:26.04-v2.1.0-vllm0.23.0-torch2.10-cu130-20260710 vllm serve /weights/deepest --host 0.0.0.0 --port 8000 --tensor-parallel-size 8 --data-parallel-size 2 --api-server-count 1 --trust-remote-code --tool-call-parser deepseek_v4 --block-size 256 --served-model-name DeepSeek-V4-Flash-0731 --tokenizer-mode deepseek_v4 --reasoning-parser deepseek_v4 --enable-prefix-caching --enable-auto-tool-choice
Профиль Chat — вход 1024 / выход 512
|
concurrency |
rps |
Output tok/s |
Total tok/s |
TTFT p50, ms |
TTFT |
TPOT p50, ms |
TPOT p99, ms |
ITL p50, ms |
ITL p99, ms |
E2E p50, s |
|
8 |
0.40 |
204.43 |
614.89 |
585.31 |
30441.69 |
33.18 |
45.61 |
32.61 |
66.62 |
17.54 |
|
16 |
0.82 |
421.7 |
1268.50 |
588.36 |
1622.51 |
34.78 |
43.43 |
33.39 |
72.05 |
18.36 |
|
32 |
1.27 |
651.36 |
1959.16 |
922.80 |
11111.10 |
35.81 |
51.26 |
33.14 |
70.81 |
19.22 |
|
64 |
2.34 |
1198.35 |
3604.42 |
598.80 |
3888.74 |
44.75 |
46.54 |
36.77 |
85.69 |
23.47 |
|
128 |
3.46 |
1772.74 |
5332.06 |
9922.66 |
9943.59 |
54.05 |
62.01 |
36.51 |
79.77 |
37.54 |
|
200 |
4.44 |
2271.28 |
6831.59 |
2243.70 |
2310.39 |
83.75 |
86.85 |
45.34 |
140.94 |
45.04 |
Профиль RAG — вход 32000 / выход 1024
|
concurrency |
rps |
Output tok/s |
Total tok/s |
TTFT p50, ms |
TTFT |
TPOT p50, ms |
TPOT p99, ms |
ITLp50, ms |
ITL p99, ms |
E2E p50, s |
|
8 |
0.15 |
154.15 |
4971.87 |
9428.09 |
15486.22 |
42.34 |
51.69 |
32.40 |
678.93 |
52.74 |
|
16 |
0.23 |
231.28 |
7459.73 |
10477.13 |
35403.48 |
56.29 |
65.38 |
32.48 |
1049.86 |
68.06 |
|
32 |
0.30 |
309.07 |
9968.70 |
10547.06 |
70376.56 |
88.09 |
98.98 |
32.89 |
1088.70 |
100.86 |
|
64 |
0.33 |
341.41 |
11011.86 |
11085.03 |
171970.61 |
156.24 |
195.07 |
36.41 |
1104.02 |
170.92 |
|
128 |
0.35 |
358.76 |
11571.30 |
61363.78 |
319504.48 |
290.26 |
363.80 |
46.59 |
2127.90 |
358.30 |
|
200 |
0.34 |
345.90 |
11156.70 |
211045.88 |
500653.61 |
352.76 |
529.64 |
61.71 |
4571.02 |
571.92 |
Профиль Batch — вход 8000 / выход 8000
|
concurrency |
rps |
Output tok/s |
Total tok/s |
TTFT p50, ms |
TTFT |
TPOT p50, ms |
TPOT p99, ms |
ITL p50, ms |
ITL p99, ms |
E2E p50, s |
|
8 |
0.03 |
239.88 |
479.88 |
2664.73 |
4117.08 |
33.08 |
33.70 |
32.33 |
64.47 |
267.27 |
|
16 |
0.06 |
455.60 |
911.42 |
2841.76 |
7376.09 |
33.45 |
34.25 |
32.86 |
65.93 |
270.41 |
|
32 |
0.10 |
785.25 |
1570.90 |
3700.71 |
14680.93 |
36.77 |
37.39 |
35.29 |
70.72 |
297.82 |
|
64 |
0.16 |
1283.54 |
2567.72 |
4458.39 |
35348.15 |
40.36 |
40.85 |
36.56 |
73.27 |
327.30 |
|
128 |
0.27 |
2138.02 |
4277.11 |
14419.98 |
58887.38 |
50.78 |
52.03 |
41.82 |
100.73 |
420.61 |
|
200 |
0.37 |
2973.57 |
5948.62 |
46438.41 |
91203.03 |
61.22 |
66.50 |
54.04 |
109.97 |
536.14 |
Сравнение результатов показывает, что польза от параллелизма данных (Data Parallelism) начинает проявляться при высокой нагрузке. Начиная с concurrency около 64, второй экземпляр модели начинает оказывать заметное влияние на общие показатели. Возможно, разделение запросов с помощью внешнего балансировщика перед двумя отдельными инстансами дало бы иной эффект, но проверить эту гипотезу в рамках эксперимента не удалось.


Тепловая карта наглядно демонстрирует выход производительности на плато при сценариях с тяжелым prefill-контекстом (RAG).

DeepSeek в каталоге готовых ИИ‑моделей. От 67 ₽/час
Запускайте ИИ в облаке Selectel для логических рассуждений, RAG и извлечения данных из документов.
Тестирование GLM-5.2 (TP = 16)
На накопителях сервера находились полные веса модели GLM-5.2. Однако попытка запустить её по стандартной схеме завершилась ошибкой: модифицированный под PPU вариант vLLM некорректно интерпретировал структуру чекпоинтов и не смог их загрузить.
ValueError: Following weights were not initialized from checkpoint:
{
model.layers.47.self_attn.indexer.k_norm.weight,
model.layers.4.self_attn.indexer.k_norm.bias,
model.layers.37.self_attn.indexer.k_norm.bias,
...
}
Engine core initialization failed
Тестирование Kimi K2.6
Кроме того, на дисках присутствовали подготовленные командой T-HEAD веса модели Kimi K2.6 в квантовании W8A8. Эта модель запустилась без каких-либо нареканий. Результаты замеров приведены ниже.
Профиль Chat — вход 1024 / выход 512
|
concurrency |
rps |
Output tok/s |
Total tok/s |
TTFT p50, ms |
TTFT |
TPOT p50, ms |
TPOT p99, ms |
ITL p50, ms |
ITL p99, ms |
E2E p50, s |
|
8 |
0.36 |
184.57 |
556.59 |
1647.36 |
7980.40 |
36.61 |
60.87 |
34.57 |
40.30 |
20.36 |
|
16 |
0.44 |
222.93 |
672.29 |
360.34 |
4737.80 |
69.94 |
85.57 |
63.62 |
83.91 |
36.10 |
|
32 |
0.53 |
271.12 |
817.61 |
531.96 |
2427.35 |
115.08 |
126.36 |
109.83 |
138.87 |
59.34 |
|
64 |
0.61 |
311.62 |
939.74 |
755.21 |
3790.68 |
195.57 |
213.23 |
173.71 |
287.22 |
100.69 |
|
128 |
0.92 |
473.10 |
1426.70 |
1302.72 |
2276.01 |
216.62 |
216.78 |
205.71 |
232.72 |
112 |
|
200 |
1.53 |
781.78 |
2357.56 |
1975.01 |
2599.19 |
251.81 |
252.12 |
240.92 |
475.16 |
130.65 |
Профиль RAG — вход 32000 / выход 1024
|
concurrency |
rps |
Output tok/s |
Total tok/s |
TTFT p50, ms |
TTFT |
TPOT p50, ms |
TPOT p99, ms |
ITL p50, ms |
ITL p99, ms |
E2E p50, s |
|
8 |
0.04 |
80.30 |
1335.35 |
30431.34 |
62256.68 |
84.92 |
94.18 |
54.54 |
2289.76 |
117.30 |
|
16 |
0.04 |
84.23 |
1400.68 |
25154.27 |
150411.03 |
179.88 |
185.90 |
101.73 |
2536.83 |
209.17 |
|
32 |
0.04 |
83.87 |
1394.60 |
172385.76 |
622842 |
246.15 |
335.81 |
134.67 |
2563.79 |
424.2 |
|
64 |
0.04 |
84.92 |
1412.21 |
1047058.01 |
1203970.53 |
242.08 |
330.91 |
134.38 |
2551.54 |
1294.71 |
При дальнейшем росте нагрузки в сценариях с большим контекстом емкость KV-кэша исчерпывалась, из-за чего сервер переходил в режим плато: около 20 задач обрабатывались параллельно, а остальные отправлялись в очередь.


Профиль Batch — вход 8000 / выход 8000
|
concurrency |
rps |
Output tok/s |
Total tok/s |
TTFT p50, ms |
TTFT p99, ms |
TPOT p50, ms |
TPOT p99, ms |
ITL p50, ms |
ITL p99, ms |
E2E p50 |
|
8 |
0.02 |
185.14 |
370.46 |
8856.09 |
17130.81 |
42.24 |
43.59 |
40.20 |
43.81 |
~ 5 m |
|
16 |
0.03 |
204.9 |
410 |
9188.22 |
33908 |
76.73 |
77.79 |
71.92 |
84.20 |
~ 10 m |
|
32 |
0.03 |
234.05 |
468 |
8488.17 |
73560.41 |
133.88 |
137.05 |
123.85 |
242.47 |
~ 17m |
|
64 |
0.03 |
247.81 |
495.86 |
77351.28 |
805702.39 |
220.30 |
345.21 |
199.34 |
407.01 |
~ 30 m |
|
128 |
0.03 |
241.55 |
483.34 |
1236760.05 |
3498485.51 |
245.52 |
465.25 |
199.37 |
2126.91 |
~ 53 m |
|
200 |
0.03 |
244.03 |
488.03 |
2098643.76 |
5769940.37 |
238.92 |
456.35 |
199.26 |
2061.37 |
~ 66 m |
Здесь также наблюдался упор в ограничения KV-кэша при повышении concurrency.


Для наглядности прикрепляю график E2E-задержек в тесте 8k/8k.

Итоговые графические материалы и тепловая карта также отражают достижение плато производительности на тяжелых профилях.


Итоги
Честно говоря, эталонного сервера для прямого сравнения (например, аналогичной конфигурации с 16 картами A100) под рукой не было. Тем не менее, с технической точки зрения AI-станция на базе 16 PPU демонстрирует достойную пропускную способность интерфейса ICN и колоссальный объем видеопамяти — 1,5 ТБ. Полагаю, что при более глубоком погружении в параметры инференса для конкретных моделей можно добиться еще более интересных показателей. Тем более, что при поставке такого оборудования в виде ПАК (программно-аппаратного комплекса) вендор часто предоставляет предварительно оптимизированные сборки моделей семейства Qwen.
Полномасштабную интеграцию в Kubernetes мы в рамках этого теста не проводили, хотя возможность запуска контейнеров со специальными образами и пробросом устройств подтверждена. Главные трудности связаны со стеком PPU SDK:
-
недостаточный объем эксплуатационной документации (имеющиеся материалы ориентированы главным образом на облачную инфраструктуру Alibaba Cloud);
-
слабая распространенность в глобальном комьюнити — любые нетривиальные задачи могут превратиться в серьезную проблему, решение которой зависит исключительно от поддержки разработчиков из T-HEAD;
непредсказуемые сроки адаптации PPU SDK под новые инструменты и релизы моделей;
-
специфика квантования: найти веса в нужных форматах непросто. Хотя сервер располагает большим объемом VRAM, полноразмерные модели съедают значительную ее часть, а готовые компактные варианты для PPU доступны далеко не для всех архитектур.
На мой взгляд, данное железо отлично подходит для запуска утвержденных, проверенных и стабильных конфигураций. Это актуально для корпоративного и государственного секторов, где циклы обновления программных платформ обычно более продолжительные. Поскольку проект активно развивается, в будущем определенно имеет смысл присмотреться к чипам нового поколения — PPU Zhenwu M890.

Смартфоны Huawei подорожают из-за роста себестоимости более чем на $200
В России ужесточат контроль за интернет-трафиком
После месяца затишья Солнце резко активизировалось
Память с самообработкой данных: устройство LPDDR5X-PIM
SpaceX вдвое снизила цены на Starlink и дарит антенны жителям округа со штаб-квартирой компании
AMD бросила вызов Nvidia: новый чип Strix Halo получил поддержку до 192 ГБ памяти перед анонсом RTX Spark
Все модификации Samsung Galaxy S27 Ultra рассекретили задолго до премьеры
Rocket Lab заключила рекордный контракт на 20 пусков ракеты Electron