TGViewer
Техножнец Техножнец @technojnec · 5.7K subscribers
Post #4615 2.18K
PromeTorch: что сделано за лето

Для тех, кто в канале недавно: PromeTorch — фреймворк для обучения и запуска нейросетей, написанный с нуля на C++ и CUDA. Внутри нет PyTorch — свои тензоры, автоматическое дифференцирование, вычислительные ядра под видеокарту и под процессоры: x86, ARM, Эльбрус, нейроускорители НТЦ Модуль. Сейчас это 161 тысяча строк C++ и 104 коммита с начала июля.
Запуск моделей на NVIDIA
Замеры на A100, модели в Q4_K_M, greedy, медиана пяти прогонов по 200 токенов:
• qwen3:4b — 109 ток/с, в апреле было 82.6
• gemma3:4b — 103.7
• deepseek-r1:8b — 68.6
• phi3:3.8b — 86 ток/с, раньше эта модель на видеокарте просто зависала

Основной прирост дала инструкция dp4a: она перемножает четыре пары восьмибитных целых за один такт. Веса и так лежат в четырёх битах, поэтому входной вектор один раз переводится в int8, и дальше умножение идёт целыми числами вместо чисел с плавающей точкой. Выигрыш зависит от ширины слоя — на узких до четырёх раз, а на самых широких инструкция не помогает вовсе: там упор не в вычисления, а в пропускную способность памяти. Поэтому она включается по размеру слоя, а не везде подряд.

Отдельно — задержка до первого токена. На промпте в 921 токен она была 11.1 секунды: подсказка обрабатывалась по одному токену, и веса модели читались из памяти заново на каждом. Теперь это одно большое матричное умножение на тензорных ядрах — 1.6 секунды, в семь раз быстрее.

Для ориентира: Ollama на той же машине и тех же моделях выдаёт 189 и 117 ток/с. То есть примерно половина её скорости — расстояние понятное и сокращаемое, но пока это расстояние есть.


Ядро фреймворка
Обратный проход на видеокарте частично считался на процессоре - шесть операций гоняли данные туда-обратно каждый шаг. Теперь у них свои CUDA-ядра: SiLU, RMSNorm, RoPE, эмбеддинги, кросс-энтропия. Параллельный скан для рекуррентных слоёв переписан на блочную схему - работа дробится на куски по 32 шага, и загрузка карты растёт с пяти до восьмидесяти тысяч потоков. Норма градиента теперь считается на самой карте: раньше каждый шаг на процессор уезжало 428 мегабайт, теперь - четыре байта.

Эльбрус

Пара слов, зачем это вообще. Эльбрус - VLIW-процессор: порядок выполнения команд определяет не железо на лету, а компилятор заранее. Готового ML-стека под него нет - ни PyTorch, ни NCCL для распределённого обучения, а библиотека быстрой математики от МЦСТ работает не из любого потока. Всё, что на других платформах берётся из коробки, здесь приходится делать самому.
Шаг обучения сократился с 6.4 до 0.46 секунды. Это сделало реальным обучение прямо на Эльбрусе: модель PIR на 13.5 млн параметров прошла 675 млн токенов за тридцать часов, потери упали с 9.68 до 2.95. Схема - четыре процесса по числу NUMA-узлов с усреднением весов вместо обмена градиентами: NCCL на этой платформе нет, а веса можно синхронизировать в десять раз реже.
Запуск чужих моделей: работают десять из десяти, qwen3-4B выдаёт 11.4 ток/с против 1.82 у llama.cpp на тех же 32 потоках. Матричное умножение на четырёх NUMA-узлах - 1840 GFLOPS, 80% расчётного пика машины.

Поставить и собрать
pip install prometorch - сборка под процессор для Linux, macOS и Windows, Python 3.9–3.13. Под Эльбрус, Baikal, ALT, Astra и RED OS — готовые пресеты CMake и Docker-образы.

Что дальше
Продолжается обучение диалоговой версии PIR на 107 млн параметров. Архитектура линейно-рекуррентная, без attention: состояние обновляется по цепочке, а не пересчитывается по всему контексту заново. Веса выкладывать пока рано — сначала нужен внятный результат на длинных диалогах.

Параллельно приводится в порядок сам репозиторий: сверены числа между отчётами, дописана документация по сборке под каждую платформу, публичная история почищена от лишнего.
Репозиторий: github.com/barometech/PromeTorch

Бортовой журнал проекта - JOURNAL.md в корне репозитория.

🦆🦆🦆
Поддержать канал ₽ / $ / ₿
  • 👍 26
  • 🔥 19
  • ❤ 14
  • ⚡ 1
  • 🕊 1
  • 🏆 1
  • 🤝 1
More from @technojnec
  1. Sep 28, 2026Rukallama V11+ может: 1) Писать код Basic , причём рабочий и по запросу. 2) Писать код Pyt…
  2. Sep 28, 2026Ну всё...теперь я снова приписчик всяких умных ллм. Наконец-то мои кривые наработки будут…
  3. Sep 28, 2026https://t.me/data_secrets/10031 На самом деле мы кое что готовим. Каждый свое...
  4. Sep 25, 2026Доброе день, синтеты. У самого пока что так себе получается. Ресурсы не резиновые. Хочу ус…
  5. Sep 24, 2026Привет, синтеты. Помните, 8 сентября я писал про товарища с небольшой командой, которые де…
  6. Sep 24, 2026внутрянка - для вас. Нужное подчеркнул...собираю инференс.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →