ИИ на устройстве · 8 мин чтения

Как языковая модель помещается в телефон

Локальные ИИ-приложения просят удивительно много места, и причина не в раздутости. Понимание того, куда уходят эти гигабайты, заодно объясняет, почему модель быстра на новом телефоне и вяла на старом — и что на самом деле говорит вам имя файла Q3_K_S .

Модель — это большая куча чисел

Языковая модель — это набор выученных параметров, весов. Каждый вес — число, и их миллиарды. «2B» в названии модели означает примерно два миллиарда параметров.

При хранении с полной точностью каждый вес занимает 4 байта. Два миллиарда весов по 4 байта — это около 8 ГБ, и это для одной из меньших моделей. В одну строку это и есть проблема: файл велик, потому что чисел много и каждое хранится точно.

Квантование: меньше битов на число

Квантование хранит каждый вес меньшим числом битов. Вместо 32 битов на вес используются 8, 4 или 3 — с масштабными коэффициентами на блок весов, чтобы приближение оставалось близким к оригиналу.

Сокращение размера примерно линейное:

Это сжатие с потерями, как JPEG. Зайдите достаточно далеко — и увидите артефакты; в языковой модели они проявляются как расплывчатые ответы, повторы или уход от вопроса.

Квантование не делает модель глупее равномерно. Оно делает её менее точной, а неточность проявляется прежде всего на самых трудных входных данных.

Как читать имя файла

Название вида Q4_K_M или Q3_K_S — это рецепт, а не номер версии:

Итак, Q3_K_S — это малый трёхбитный k-quant: сжат агрессивно, выбирается тогда, когда влезть в устройство важнее последних процентов качества.

GGUF: контейнер

GGUF — это формат файла, который содержит квантованные веса плюс метаданные, нужные среде выполнения: токенизатор, архитектуру, шаблон запроса. Один файл, без сопровождающей папки с конфигами.

Для телефонов он важен потому, что GGUF рассчитан на отображение в память. Вместо того чтобы читать 1,7 ГБ в оперативную память, среда выполнения отображает файл в своё адресное пространство, а операционная система подгружает те части, которые действительно используются. Поэтому модель больше свободной памяти телефона всё же может работать, и поэтому первый ответ после запуска приложения медленнее следующих — страницы ещё подгружаются.

Почему телефон греется

Породить слово — токен — значит прогнать вход через те самые миллиарды параметров. А затем сделать это снова для следующего токена. Ответ в сто слов — это сто проходов.

Это непрерывная арифметика на процессоре или нейроускорителе, то есть ровно та нагрузка, с которой телефоны хуже всего справляются термически. При нагреве устройства сбрасывают частоты, поэтому долгая непрерывная генерация замедляется по ходу. Хорошо сделанные локальные приложения распределяют работу — разносят задачи, чтобы чип успевал остыть, — а не ставят всё вплотную друг к другу.

Почему старым телефонам тяжело

Три ограничения, и все жёсткие:

Поэтому локальные ИИ-приложения указывают минимальное устройство, а не пытаются поддержать всё подряд. Ниже некоторой границы опыт не ухудшается — он становится непригодным.

Размен, на который вы идёте

Квантованная модель телефонного размера не сравнится с большой облачной на трудных рассуждениях. Для ограниченной задачи — что значит это слово в этом предложении, переведи эту фразу — её вполне достаточно, и она приходит с тремя свойствами, которых облачная модель дать не может: работает без соединения, ничего не стоит за использование и текст никогда не покидает устройство.

В этом и вся сделка ИИ на устройстве. Вы отказываетесь от самой большой возможной модели и получаете приватность, работу без сети и отсутствие счётчиков.

Как это делает ClickBook

ClickBook поставляется с квантованной моделью GGUF и запускает её через llama.cpp на вашем устройстве. На iOS она встроена в приложение, поэтому скачивать нечего. Подробнее о локальных ИИ-читалках, или посмотрите, как работает ClickBook.