Я залутал модель на 35 миллиардов параметров на своем iPhone (Локальный ИИ)
BBetter Stack
Computing/SoftwareConsumer ElectronicsCell Phones
Transcript
00:00:00Эта модель на 35 млрд параметров работает прямо на моём iPhone. Я могу генерировать 11 токенов в
00:00:06секунду благодаря продуманной инженерии. Эта модель не предназначалась для этого, и в видео я
00:00:11покажу, как сделать то же самое. Здесь я запускаю модель смеси экспертов (Mixture of Experts).
00:00:21В ней 35 миллиардов параметров, что в обычном 4-битном файле весит около 20 ГБ и должно быть в ОЗУ.
00:00:28Но благодаря набору техник, таких как потоковая загрузка экспертов с SSD по требованию, веса,
00:00:33находящиеся в памяти, занимают всего 1,4 ГБ. Я объясню, как всё это работает, а затем мы
00:00:39перейдём к настройке самого iPhone. Большинство моделей целиком сидят в ОЗУ, но преимущество смеси
00:00:45экспертов в том, что в каждый момент активна лишь малая их часть. Это значит, что неактивные части
00:00:51модели могут просто лежать на SSD, ожидая своего часа. Секрет запуска больших моделей при
00:00:56ограниченной памяти — подгружать только тех экспертов, которые нужны прямо сейчас. Мы запускаем Qwen
00:01:023.5 на 35 млрд параметров, а приписка A3B в конце означает, что для одного токена активны лишь около 3 млрд
00:01:10параметров. Здесь 40 слоёв, в каждом — 256 малых экспертов плюс один общий. Роутер
00:01:19выбирает 8 таких экспертов на токен, поэтому один токен задействует лишь ~3 млрд из 35 млрд
00:01:26всех параметров. Сама модель разделена: обычно всё лежит в памяти, но такое просто не
00:01:32поместилось бы на iPhone. Вместо этого части, необходимые каждому токену (эмбеддинги, внимание, роутеры
00:01:39и общий эксперт), загружаются один раз и постоянно находятся в ОЗУ. Это всего около
00:01:441,4 ГБ. А эксперты — 40 файлов примерно по 300 МБ общей суммой 12 ГБ — лежат на SSD. Для каждого токена
00:01:53внимание обрабатывается на GPU, роутер выбирает 8 экспертов, а движок считывает их с SSD
00:02:00в память GPU и выполняет вместе с общим экспертом. Это происходит в каждом из
00:02:06этих 40 слоёв — то есть 320 мелких чтений на каждый токен. Если вы не знакомы с механизмом внимания,
00:02:14это часть модели, которая просматривает весь контекст диалога и определяет,
00:02:19какие из прошлых слов важны для предсказания следующего. Внимание работает для каждого токена без
00:02:25исключения, поэтому оно должно оставаться в памяти. Эксперты же отвечают за само осмысление токена,
00:02:31когда контекст уже определён. Но поскольку используются только 8 экспертов, остальные мы можем
00:02:36оставить на диске. В приложении вообще нет кэша экспертов — каждое чтение идёт через ОС,
00:02:42и iOS хранит недавно использованных экспертов в своём страничном кэше, пока есть свободная память. Авторы
00:02:49сначала создали собственный кэш на 9,8 ГБ, а затем удалили его — и это ускорило работу на 38%, потому что
00:02:55на Mac или iPhone вся память, забранная приложением, отнимается у GPU и страничного кэша.
00:03:03А ведь именно этот кэш делает основную работу. При скорости 11 токенов в секунду, если бы каждый эксперт читался с флеш-памяти,
00:03:09телефону потребовалась бы скорость чтения свыше 5 ГБ/с, а флеш-память iPhone выдаёт лишь около 1,6 ГБ/с.
00:03:15Так что большинство экспертов берутся из ОЗУ, которым за нас управляет ОС. Следующая хитрость — многоуровневая
00:03:22квантизация. Квантизация сжимает веса модели, чтобы они занимали меньше места, но это также снижает
00:03:29точность весов и влияет на разумность ответов. Однако в этой модели около 25% экспертов
00:03:35выполняют около 80% работы. Поэтому “горячие” эксперты остаются в 4 битах, а “холодные”
00:03:41квантуются до 2 бит, что делает их на 44% меньше. Весь файл уменьшается на 34%: с ~19 ГБ до
00:03:5013 ГБ. Это значит, что больше данных влезает в страничный кэш. На моём iPhone 17 всё работает со скоростью 11 токенов в секунду в
00:03:57режиме размышления. Правда, телефон сильно греется: буквально от простого “привет” я почувствовал,
00:04:03как корпус нагревается в руке. Так что постарайтесь не расплавить телефон во время тестов. Честно говоря,
00:04:08мне даже немного страшно вводить что-то слишком сложное, а то он прожжёт мне руку.
00:04:14Движок, который мы используем — это проект Flash MoE от Дэна Вудса. Он был написан для
00:04:19MacBook, но есть небольшая адаптация Flash iOS, которая оборачивает тот же движок в приложение для iPhone.
00:04:26Именно это и позволяет мне запускать всё на телефоне. Сначала я наткнулся на баг, из-за которого размышления
00:04:31модели зацикливались: всё начиналось нормально, но где-то через 10 слов она просто бесконечно
00:04:35повторяла два одних и тех же токена. Чтобы исправить это, я обновил функцию `async pre-read weight`, чтобы она
00:04:41проверяет объём считывания каждого эксперта относительно его собственного размера: «холодные» эксперты имеют 2-битный формат и вдвое меньше «горячих»,
00:04:48поэтому до исправления каждый “холодный” эксперт не проходил проверку размера и тихо пропускался. Модель фактически
00:04:54работала с половиной экспертов, из-за чего и зацикливалась. Если вам нравится это видео, ребят, вы бы очень
00:04:59помогли нам, подписавшись на канал, чтобы мы могли продолжать делать бесплатный контент каждый день. Чтобы
00:05:05настроить это на своём телефоне, нужно клонировать репозиторий, применить исправление `pre-read`, о котором я говорил,
00:05:11в файле `metal infer / infer.m`, указать в Xcode-проекте вашу команду и Bundle ID (для этого потребуется платный
00:05:18аккаунт Apple Developer), собрать релизную версию и установить её на iPhone. Скачайте готовую
00:05:24многоуровневую модель весом около 13 ГБ, передайте её в приложение по USB (это займёт около 7 минут).
00:05:30На телефоне откройте Flash MoE, нажмите на модель и начинайте чат. Если хотите попробовать запуск
00:05:36локальных моделей на Mac для ещё большей скорости генерации, посмотрите вот это видео. С вами был Уоррен из
00:05:43Better Stack, огромное спасибо за просмотр, и, конечно же, увидимся в следующем ролике!
Community Posts
No posts yet. Be the first to write about this video!
Write about this video