Інформація про дані Платона.
Вертикальний пошук і штучний інтелект.

Проект драйвера Llamafile LLM підвищує продуктивність ядер ЦП

Дата:

Зручний інструмент із відкритим вихідним кодом для упаковки LLM в єдині універсальні виконувані файли чат-бота, які легко поширювати та запускати, мабуть, збільшив продуктивність ЦП на 30-500 відсотків у системах x86 та Arm.

Проект називається flamefile, створений Джастін Танні за підтримки Mozilla.

Існує маса моделей, які ви можете завантажити та поекспериментувати з ними у своїй системі, як і ми раніше охоплені детально. Зрештою, ці моделі — це просто дуже великі файли чисел, які описують нейронні мережі. Вам потрібно мати програмне забезпечення, яке може відкривати та аналізувати модель, і знати, як запускати вхідні підказки та запити через нейронну мережу, щоб генерувати вихідні дані для користувача.

Одним із таких програм є call.cpp – звичайна програма на C++, розроблена головним чином Георгієм Гергановим. Незважаючи на те, що llama.cpp збирається підтримувати серію моделей LLaMA компанії Meta (звідси й назва), він також може обробляти навантаження інших LLM, таких як Mistral-7B та Orion-14B.

Натхненний оригінальним драйвером LLaMA на основі Python від Meta, llama.cpp є досить крутим, оскільки він не має залежностей, працює принаймні в Windows, Linux, macOS і FreeBSD і може використовувати переваги апаратного прискорення – від графічних процесорів Nvidia до Apple , розширення Intel і AMD.

Ви можете створювати та запускати llama.cpp нативно, надати йому модель для завантаження, а потім взаємодіяти з цим LLM різними способами. Проблема полягає в тому, що файли моделі, як правило, мають досить великий розмір, і може бути трохи заплутано знати, який варіант найкраще використовувати.

І ось тут корисний Llamafile – об’єднання вибраного файлу LLM із llama.cpp для створення єдиного універсального виконуваного файлу, який може працювати на macOS, Windows, Linux, FreeBSD, OpenBSD і NetBSD із 64-розрядними процесорами x86 і системою Arm. . Те, що робить це можливим, є відверто магічним Cosmopolitan Libc проект, який дозволяє створювати код C/C++ таким чином, щоб отримати єдиний виконуваний файл просто біжить на вищезгаданих ОС і архітектурах ЦП.

Це значно спрощує розповсюдження, якщо ви просто хочете дати комусь модель для випробування. акуратно

Підвищення швидкості

Буквально кілька днів тому Tunney написав блог в глибині як вона реалізувала 84 нових ядра множення матриць, щоб підвищити продуктивність процесора llamafile під час логічного висновку на 30–500 відсотків при використанні моделей із вагами типу FP16 або Q8_0. Нам сказали, що «покращення є найбільш драматичними для комп’ютерів ARMv8.2+ (наприклад, RPI 5), Intel (наприклад, Alderlake) і AVX512 (наприклад, Zen 4).»

Танні протестував код на широкому діапазоні апаратного забезпечення – від скромного, але дешевого Raspberry Pi 5 до 96-ядерного флагмана AMD Threadripper Pro 7995WX. Майже в кожному випадку як для моделей Mistral 7B, так і для моделей TinyLlama 1.1B вдосконалений файл llamafile (версія 0.7) значно випереджав llama.cpp (версія 2024-03-26) і випереджав файл llamafile 0.6.2. Щоб було зрозуміло: великі переваги відбуваються в основному під час оперативного оцінювання, коли LLM обробляє вхідні дані. На стадії виходу (також відомої як оцінка) покращення були менш помітними.

Наприклад, на Intel Skylake Core i9-9900 швидка обробка підскочила на 50 відсотків порівняно з llama.cpp, тоді як оцінка залишилася такою ж.

Хоча повідомлялося про збільшення продуктивності для ваг типів даних FP16 і Q8_0, обмежене тестування для інших типів також показало значні покращення. На Core i9-9900 з використанням варіанту Q4_0 Mistral 7B швидкодія була на 65 відсотків вищою з llamafile. Threadripper Pro 7995WX показав більш ніж удвічі більшу продуктивність за допомогою FP32, що також було досягнуто в Mistral 7B.

Однак для llamafile 0.7 це не було чистим кроком. Apple M2 Ultra-powered Mac Studio спостерігав деякий регрес у продуктивності як підказки, так і оцінки для типу даних Q8_0. Очевидно, це сталося тому, що llama.cpp вже оптимізовано на апаратному забезпеченні Apple, а Tunney не вибрав власний компілятор Apple.

Він навіть перевершує програмне забезпечення множення матриць Intel

Досягнення такого вражаючого підвищення продуктивності було багатоетапним процесом, який Танні задокументував у дрібних деталях. За її оцінками, продуктивність vanilla llama.cpp становить 233 гігаФЛОПС на її ПК з Core i9-9900, і її можна збільшити до 384 гігаФЛОПС, якщо ввімкнути Intel Math Kernel Library (MKL).

Незважаючи на те, що MKL значно підвищує продуктивність, за словами Танні, той факт, що це закритий вихідний код, не є ідеальним для роботи з відкритим кодом. Вона зазначила, що «інтеграція іноземних бібліотек BLAS у llama.cpp не така практична через те, як працює його модель потоків». І оскільки MKL є закритим вихідним кодом, неможливо просто подивитися на нього та побачити, як його можна покращити.

Очевидно, це не зупинило Танні, який написав: «Я вважаю, що трюк з математичними ядрами процесора полягає в використанні паралелізму рівня інструкцій із меншою кількістю посилань на пам’ять». Звідти розробник показав, як розгортання двох зовнішніх циклів у llama.cpp призвело до коду, який може працювати зі швидкістю 810 гігафлопс за допомогою OpenMP на Intel Alderlake i9-14900K із 6400 MT/s RAM. Навпаки, той самий код, який виконується через MKL, становить лише 295 гігаФЛОПС.

Проблеми сумісності означали, що OpenMP не можна було використовувати для llamafile, але спеціальна структура ядра змогла здебільшого зберегти продуктивність на рівні 790 гігаФЛОПС. Це вдвічі швидше, ніж найшвидша реалізація з використанням MKL.

Хоча це рішення є швидким, воно погано масштабується з більшою складністю. MKL виграє (Tunney не сказав, на скільки), коли складність підвищується до 1,024 з 512. Однак Tunney припустив, що на даний момент це не критична проблема – оскільки llama.cpp за замовчуванням виконує менші розміри проблем, і вона сподівається з’ясувати, як з часом оптимізувати для більших розмірів.

Оптимізація та підтримка BF16 були надіслані до самого llama.cpp, і сприйняття здається позитивним. Герганов сказав, що запити на злиття будуть відгуки в найближчі дні. ®

spot_img

Остання розвідка

spot_img

Зв'яжіться з нами!

Привіт! Чим я можу вам допомогти?