Oleksandr Kuzmenko, РедакторОпубліковано 7 хв читанняЗа участі AI · перевірено редактором
TL;DR
- Автотюнінг на рівні макросів AST досягає показників ручної асемблерної оптимізації без необхідності писати ядра вручну.
- Збереження конфігурацій у JSON-файлах усуває потребу в повторному профілюванні під час запуску програми.
- Реалізація завантажувачів, планувальника завдань і шейдерів на єдиній мові усуває складність збирання міжмовних FFI-прошарків.
Ключові факти
- Швидкість ASR проти whisper.cpp
- у 5 разів швидше на Apple M1 (за даними авторів)
- Prefill Qwen3.6-35B-A3B (EPYC)
- прискорення у 2.3 рази (за даними авторів)
- Prefill Qwen3.6-35B-A3B (Graviton)
- прискорення у 2.8 рази (за даними авторів)
- Профілі оптимізації
- Готові sidecars для NEON, i8mm, SVE, AVX2, VNNI-512, AMX
Боротьба з комбінаторним вибухом ядер через макроси AST
Традиційні рушії локального інференсу, такі як llama.cpp, спираються на тисячі рядків ручного асемблерного коду під різні набори інструкцій. Під час розробки внутрішньоігрового голосового перекладу розробники зіткнулися з тим, що GPU зайнятий графікою, а інференс має виконуватися виключно на залишках ресурсів CPU. Портування моделі Whisper на daslang дозволило перевірити швидкість мови без важких залежностей.
Замість ручного написання ядер під кожну комбінацію квантування та векторних інструкцій, dasllama застосовує макроси часу компіляції:
[tune_perm(dot = "vpdpbusd", width = 512, mr = 16, requires = "avx512vnni,avx512bw")]
[tune_perm(dot = "amx_bf16", width = 512, mr = 16, nrsplit = 2, requires = "amx-bf16,avx512bf16,avx512vnni")]
[tune(gen = "dasllama_gemm_gen::k4_tile", fallback = "dot_vpdpbusd_width512_mr16")]
def k4q8_tile_gen(var yp : float?; kqg : uint8 const?; ksg : uint8 const?;
xqp : int8 const?; xsp : float const?; xbsp : int const?) {
kq_tile_ref(4, yp, kqg, ksg, xqp, xsp, xbsp, n, d, g, t0);
}Продуктивність та конфігураційні профілі заліза
Під час першого запуску JIT-компілятор тестує різні розміри розгортання циклів і векторні інструкції на конкретному процесорі, записуючи переможця в JSON-файл. Це забезпечує відчутний приріст у реальних сценаріях:
- Розпізнавання Whisper: робота у 5 разів швидше за базовий
whisper.cppна Apple M1. - Prefill у Qwen3.6-35B-A3B: прискорення у 2.3 рази на AMD EPYC та у 2.8 рази на AWS Graviton.
- Єдина архітектура: планувальник черг, генератор шейдерів SPIR-V для Vulkan та сумісний з OpenAI API сервер реалізовані мовою
daslangбез прошарків FFI.
Спробуй за 2 хвилини
[tune(gen = "dasllama_gemm_gen::k4_tile", fallback = "dot_vpdpbusd_width512_mr16")]
def k4q8_tile_gen(var yp : float?; kqg : uint8 const?;
ksg : uint8 const?; xqp : int8 const?;
xsp : float const?; xbsp : int const?) {
kq_tile_ref(4, yp, kqg, ksg, xqp, xsp, xbsp, n, d, g, t0);
}Коли використовувати
- Використовуйте для розпізнавання мови чи інференсу LLM на процесорах, паралельно зайнятих іншими завданнями.
- Застосовуйте для вбудовування локальних агентів у десктопні програми без підключення важких бібліотек C++.
- Підходить для уніфікованого розгортання моделей на різноманітних хмарних інстансах x86 та ARM.
Коли НЕ варто
- Не використовуйте, якщо ресурси GPU VRAM повністю доступні та покривають усі потреби інференсу.
- Уникайте, якщо для корпоративного релізу обов'язкові сертифіковані бібліотеки OpenBLAS чи cuBLAS.
- Не підходить для середовищ, де заборонена робота JIT-компілятора або створення додаткових конфігураційних файлів.
Що зробити сьогодні
- Протестуйте dasllama на процесорах хост-серверів для оцінки виграшу в затримці обробки аудіо.
- Використовуйте готові профілі заліза (sidecars) для розгортання локальних моделей на десктопах чи edge-пристроях.
- Дослідіть застосування макросів розгортання циклів на рівні AST для оптимізації матричних обчислень.
Назви кроків узяті з блоку «Що зробити сьогодні».
Назви кроків узяті з блоку «Що зробити сьогодні». Протестуйте dasllama на процесорах хост-серверів для оцінки виграшу в затримці обробки аудіо.. Використовуйте готові профілі заліза (sidecars) для розгортання локальних моделей на десктопах чи edge-пристроях.. Дослідіть застосування макросів розгортання циклів на рівні AST для оптимізації матричних обчислень.
- Протестуйте dasllama на процесорах хост-серверів для оцінки виграшу в затримці обробки аудіо.
- Використовуйте готові профілі заліза (sidecars) для розгортання локальних моделей на десктопах чи edge-пристроях.
- Дослідіть застосування макросів розгортання циклів на рівні AST для оптимізації матричних обчислень.
