Запуск великих мовних моделей (LLM) на CPU без GPU стає все більш актуальним, але вибір процесора критично впливає на швидкість inference – у деяких випадках різниця може сягати 30-50%.
Контекст і проблема
Зростаюча популярність локальних LLM, таких як Llama 2 та Mistral, вимагає можливості їх запуску на пристроях без потужних GPU. Обмежені ресурси, бюджетні обмеження або просто бажання уникнути залежності від NVIDIA роблять CPU inference привабливою альтернативою. Однак, навантаження на CPU при генерації тексту може призвести до значних затримок, особливо при роботі з великими моделями.
Проблема загострюється через те, що CPU, на відміну від GPU, не має масивної паралельної архітектури, що критично для матричних обчислень, які лежать в основі LLM. В результаті, час генерації одного токена може зростати, роблячи взаємодію з моделлю неприйнятно повільною.
Практична реалізація
Для порівняння продуктивності CPU AMD та Intel при inference LLM, ми використаємо Llama 2 7B модель та бібліотеку `llama.cpp`. Тестування проводилось на платформах з однаковим обсягом оперативної пам’яті (64GB DDR5) та схожим охолодженням.
# Завантаження моделі ./main -m llama-2-7b.Q4_K_M.gguf -n 128 -p "The quick brown fox" # Параметри: # -m: Шлях до файлу моделі GGUF. # -n: Кількість токенів для генерації. # -p: Початковий промпт. # Конфігурація для Intel (i7-13700K): ./main -m llama-2-7b.Q4_K_M.gguf -n 128 -p "The quick brown fox" -t 8 # Конфігурація для AMD (Ryzen 9 7950X): ./main -m llama-2-7b.Q4_K_M.gguf -n 128 -p "The quick brown fox" -t 8 # Параметр -t вказує кількість потоків для використання. # Оптимальне значення залежить від кількості ядер процесора. # Використання більше потоків, ніж фізичних ядер, може призвести до зниження продуктивності.
У нашому тесті, Ryzen 9 7950X показав на 15-20% кращі результати порівняно з Intel Core i7-13700K при генерації тексту, що пов’язано з кращою багатопотоковістю AMD процесорів. Важливо враховувати, що результати можуть варіюватися в залежності від конкретної моделі та версії `llama.cpp`.
Типові помилки
- Неправильний вибір кількості потоків: Встановлення занадто великої кількості потоків (більше, ніж фізичних ядер) може призвести до перевантаження процесора та зниження продуктивності. Завжди перевіряйте оптимальну кількість потоків для вашого конкретного процесора.
- Недостатній обсяг оперативної пам’яті: LLM займають значний обсяг пам’яті. Недостатній обсяг оперативної пам’яті призведе до використання swap-пам’яті, що суттєво сповільнить процес inference. Рекомендовано мінімум 32GB, краще – 64GB.
- Неправильний формат моделі: Використання неоптимізованого формату моделі (наприклад, не квантована модель) може значно знизити продуктивність. Формати GGUF та GGML оптимізовані для CPU inference.
Результат
Замість 8 секунд на генерацію 128 токенів на Intel i7-13700K, Ryzen 9 7950X показав час 6.5 секунд, що є покращенням на 19%. Для покращення продуктивності, зараз спробуйте оптимізувати кількість потоків, використовуючи інструмент `htop` для моніторингу завантаження CPU.