Проблема: LLM тормозят из-за RAM
При запуске больших языковых моделей (LLM) с использованием tensor split в llama.cpp видеокарты должны обмениваться промежуточными результатами вычислений. На стандартных настройках NVIDIA CMP 90HX прямой обмен (P2P) отключен. Данные идут по длинному пути: GPU 0 → RAM → GPU 1. Это создает узкое горлышко, так как системная память выступает неэффективным буфером.
Результат: P2P работает, но медленнее RAM
Автору удалось заставить карты обмениваться данными напрямую через шину PCIe, используя внутренние механизмы драйвера, оставленные инженерами NVIDIA для отладки. Однако, вопреки ожиданиям, скорость прямого обмена оказалась ниже, чем при использовании системной RAM в качестве посредника. Это связано с архитектурными особенностями PCIe-контроллеров на этих картах.
| Режим передачи | Эффективная скорость | Путь данных |
|---|---|---|
| Через RAM (Staged) | ~1.60 ГБ/с | GPU 0 → RAM → GPU 1 |
| Прямой P2P (Direct) | Ниже 1.60 ГБ/с | GPU 0 → PCIe → GPU 1 |
Техническая суть: BAR1 и GMMU
Ключ к успеху — работа с регистрами BAR (Base Address Register). У CMP 90HX область BAR1 составляет 16 384 MiB, что позволяет вывести всю видеопамять в адресное пространство PCIe. Автор модифицировал таблицы страниц GMMU (GPU Memory Management Unit), чтобы карта 1 могла напрямую обращаться к виртуальным адресам карты 0, минуя CPU.
Почему это важно
Хотя текущая реализация P2P на CMP 90HX проигрывает по скорости передаче через RAM, сам факт обхода ограничений драйвера открывает путь для дальнейшей оптимизации. Для энтузиастов, собирающих кластеры LLM из дешевых майнинговых карт, это доказывает, что GA102 в этих чипах способен на полноценный PCIe-интерфейс, а не только на вычисления.
Источник: Habr ↗
