Я залутал модель на 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, огромное спасибо за просмотр, и, конечно же, увидимся в следующем ролике!

Key Takeaway

Локальный запуск модели на 35 млрд параметров на iPhone со скоростью 11 токенов в секунду достигается за счет комбинирования подгрузки 8 из 256 экспертов с SSD по требованию, 2-битного квантования «холодных» экспертов и передачи управления кэшем системной ОС.

Highlights

  • Модель Qwen 3.5 на 35 миллиардов параметров выдает 11 токенов в секунду на iPhone 17 благодаря архитектуре смеси экспертов (MoE).

  • Использование постоянных 1,4 ГБ ОЗУ для эмбеддингов и слоя внимания вместе с 12 ГБ экспертов на SSD снижает требования к оперативной памяти модели с 20 ГБ до 1,4 ГБ.

  • Полное удаление собственного кэша приложения объемом 9,8 ГБ увеличило скорость генерации на 38% за счет использования системного страничного кэша iOS.

  • Многоуровневая квантизация сжимает «холодные» эксперты до 2 бит, а «горячие» оставляет в 4 битах, уменьшая общий размер файла модели с 19 ГБ до 13 ГБ.

  • Исправление проверки размера считывания в функции async pre-read weight предотвращает тихий пропуск 2-битных экспертов и устраняет зацикливание модели при генерации.

Timeline

Запуск 35B модели в 1,4 ГБ ОЗУ на iPhone

  • Модель на 35 млрд параметров работает локально на iPhone со скоростью 11 токенов в секунду.
  • Архитектура смеси экспертов позволяет держать в оперативке лишь 1,4 ГБ данных, оставляя остальную часть модели на SSD.

Стандартный 4-битный файл модели на 35 млрд параметров требует около 20 ГБ ОЗУ, что превышает аппаратные лимиты мобильных устройств. Модель Mixture of Experts активирует лишь малую часть параметров в каждый момент времени. Неактивные эксперты остаются на SSD флеш-памяти и подгружаются по требованию.

Механика работы архитектуры Qwen 3.5 A3B

  • Приписка A3B обозначает активное использование только 3 млрд из 35 млрд параметров на каждый токен.
  • Постоянно в ОЗУ находятся лишь эмбеддинги, механизм внимания, роутеры и один общий эксперт.
  • На один токен выполняется 320 мелких чтений экспертов с накопителя через 40 слоев модели.

Модель содержит 40 слоев, в каждом из которых находится 256 мелких экспертов и один общий. Роутер выбирает 8 экспертов на токен, поэтому внимание обрабатывается на GPU, а выбранные эксперты подгружаются с SSD в память GPU. Механизм внимания обязан постоянно находиться в оперативке, так как просматривает весь контекст диалога для каждого токена без исключений.

Использование системного страничного кэша iOS и квантизация

  • Удаление собственного кэша приложения на 9,8 ГБ увеличило производительность на 38%.
  • Многоуровневая квантизация сжимает «холодные» эксперты до 2 бит, уменьшая файл с 19 ГБ до 13 ГБ.
  • Флеш-память iPhone выдает 1,6 ГБ/с, поэтому основной объем экспертов извлекается из страничного кэша ОС.

Прямое чтение с флеш-памяти при 11 токенах в секунду потребовало бы скорости свыше 5 ГБ/с. Вся память, забранная приложением под собственный кэш, отнимается у системного страничного кэша iOS, который справляется с управлением памятью эффективнее. Около 25% экспертов выполняют 80% работы; оставление «горячих» экспертов в 4 битах и квантование «холодных» до 2 бит сжимает их на 44%, освобождая место в страничном кэше.

Устранение багов и сборка приложения Flash iOS

  • Проект Flash MoE адаптрирован для iPhone под названием Flash iOS.
  • Исправление проверки размера считывания в async pre-read weight убирает бесконечное зацикливание генерации.
  • Установка на iPhone требует сборки релизной версии в Xcode и передачи 13 ГБ весов по USB.

2-битные «холодные» эксперты именили размер вдвое меньше «горячих», из-за чего проваливали проверку объема считывания и тихо пропускались движком, заставляя модель работать на половине экспертов и зацикливаться. Для запуска требуется клонировать репозиторий, внести правки в файл metal infer / infer.m, собрать проект в Xcode с аккаунтом Apple Developer и передать модель на устройство через проводное подключение.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video