Тест китайского ИИ-ускорителя PPU Zhenwu 810E от Alibaba в работе с LLM

Прокомментировать Просмотры: 3

Всем привет! Меня зовут Дмитрий, я занимаюсь 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. Ниже представлена схема этого процесса из официальной справки.

Схема компиляции Cuda-кода под PPU. Источник.
Схема компиляции Cuda-кода под PPU. Источник.

Следовательно, привычные инструменты для обучения и инференса (PyTorch, Transformers, FlashAttention, vLLM и другие) должны быть предварительно пересобраны под новую архитектуру.

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

Пример китайской документации. Источник.
Пример китайской документации. Источник.

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

Готовый и адаптированный стек для инференса поставляется в виде собранных Docker-образов с определенными тегами, где зафиксированы конкретные версии поддерживаемых библиотек.

Список портированных библиотек в образе PPU SDK. Источник.
Список портированных библиотек в образе PPU SDK. Источник.

В этом кроется ключевой риск экосистемы. При выходе новой перспективной модели или свежего патча для движка инференса приходится ждать, пока специалисты 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 их тоже нет).

Модель от T-HEAD на Modelscope.
Модель от T-HEAD на Modelscope.

Загрузка изнутри контейнера PPU SDK происходит напрямую без дополнительных токенов авторизации:


modelscope download --model T-HEAD/DeepSeek-V4-Flash-0731-W8A8-INT8 --local_dir deepseek

Для привычных утилит мониторинга NVIDIA здесь предусмотрены аналоги. Часть из них встроена в систему, часть поставляется внутри SDK-образа. Обращу внимание на важный нюанс: судя по описанию облачного сервиса PPU Zhenwu 810e, для получения установочного deb/rpm-пакета аналога DCGM требуется специальная учетная запись.

Скриншот про доступ к скачиванию deb-пакета.
Скриншот про доступ к скачиванию deb-пакета.

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

Тем не менее, в графическом интерфейсе станции телеметрия чипов отображается исправно.

Скриншот метрик AI-станции.
Скриншот метрик AI-станции.

Внешний осмотр и утилита диагностики сервера

Перейдем к практической части. Для начала я задействовал утилиту 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 они образуют многомерные кольцевые структуры, где каждый узел связан с соседями примерно следующим образом:

Схема связей TPU-ускорителей для примера структуры. Источник.
Схема связей TPU-ускорителей для примера структуры. Источник.

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

В рекламных материалах архитектура выглядит так:

Маркетинговый скриншот PPU. Источник. 
Маркетинговый скриншот PPU. Источник. 

Восемь чипов объединяются в единую группу с оптимальным порядком обмена данными:


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 ГБ/с в каждую сторону на один линк.

Характеристики NVLink 3.0 и NVLink 4.0.
Характеристики NVLink 3.0 и NVLink 4.0.

Арендуйте физический сервер с запуском от 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

В документации производителя также приведены дефолтные значения параметров:

Настройки базовых переменных окружения NCCL в документации вендора.
Источник.

Сначала я проверил скорость между двумя чипами при разных типах соединений, опираясь на матрицу топологии. Использовался 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
p99, ms

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
p99, ms

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
p99, ms

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
p99, ms

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
p99, ms

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
p99, ms

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, второй экземпляр модели начинает оказывать заметное влияние на общие показатели. Возможно, разделение запросов с помощью внешнего балансировщика перед двумя отдельными инстансами дало бы иной эффект, но проверить эту гипотезу в рамках эксперимента не удалось.

Графики сравнения перформанса разных типов инференса DeepSeek-v4-Flash-0731.
Графики сравнения перформанса разных типов инференса DeepSeek-v4-Flash-0731.
Тепловая карта метрик производительности DeepSeek-v4-Flash-0731.
Тепловая карта метрик производительности DeepSeek-v4-Flash-0731.

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

DeepSeek в каталоге готовых ИИ‑моделей. От 67 ₽/час

Запускайте ИИ в облаке Selectel для логических рассуждений, RAG и извлечения данных из документов.

Запустить DeepSeek →

Тестирование 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
p99, ms

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
p99, ms

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 задач обрабатывались параллельно, а остальные отправлялись в очередь.

Метрики утилизации KV-Cache для Kimi K2.6.
Метрики утилизации KV-Cache для Kimi K2.6.
Метрики очереди планировщика vLLM.
Метрики очереди планировщика vLLM.

Профиль 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.

Метрики KV-Cache утилизации для Kimi K2.6 на тесте 8k/8k.
Метрики KV-Cache утилизации для Kimi K2.6 на тесте 8k/8k.
Состояние очереди планировщика vLLM при тесте 8k/8k.
Состояние очереди планировщика vLLM при тесте 8k/8k.

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

График E2E для Kimi K2.6 на тесте 8k/8k.
График E2E для Kimi K2.6 на тесте 8k/8k.

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

Графики перформанса Kimi K2.6 на разных профилях теста.
Графики перформанса Kimi K2.6 на разных профилях теста.
Тепловая карта перформанса Kimi K2.6 на разных профилях теста.
Тепловая карта перформанса Kimi K2.6 на разных профилях теста.

Итоги

Честно говоря, эталонного сервера для прямого сравнения (например, аналогичной конфигурации с 16 картами A100) под рукой не было. Тем не менее, с технической точки зрения AI-станция на базе 16 PPU демонстрирует достойную пропускную способность интерфейса ICN и колоссальный объем видеопамяти — 1,5 ТБ. Полагаю, что при более глубоком погружении в параметры инференса для конкретных моделей можно добиться еще более интересных показателей. Тем более, что при поставке такого оборудования в виде ПАК (программно-аппаратного комплекса) вендор часто предоставляет предварительно оптимизированные сборки моделей семейства Qwen.

Полномасштабную интеграцию в Kubernetes мы в рамках этого теста не проводили, хотя возможность запуска контейнеров со специальными образами и пробросом устройств подтверждена. Главные трудности связаны со стеком PPU SDK:

  • недостаточный объем эксплуатационной документации (имеющиеся материалы ориентированы главным образом на облачную инфраструктуру Alibaba Cloud);

  • слабая распространенность в глобальном комьюнити — любые нетривиальные задачи могут превратиться в серьезную проблему, решение которой зависит исключительно от поддержки разработчиков из T-HEAD;

    непредсказуемые сроки адаптации PPU SDK под новые инструменты и релизы моделей;

  • специфика квантования: найти веса в нужных форматах непросто. Хотя сервер располагает большим объемом VRAM, полноразмерные модели съедают значительную ее часть, а готовые компактные варианты для PPU доступны далеко не для всех архитектур.

На мой взгляд, данное железо отлично подходит для запуска утвержденных, проверенных и стабильных конфигураций. Это актуально для корпоративного и государственного секторов, где циклы обновления программных платформ обычно более продолжительные. Поскольку проект активно развивается, в будущем определенно имеет смысл присмотреться к чипам нового поколения — PPU Zhenwu M890.

Анонс нового PPU Zhenwu M890.
Анонс нового PPU Zhenwu M890.

 

Источник

Поделиться:

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов