Executei um Modelo de 35B Parâmetros no Meu iPhone (IA Local)

BBetter Stack
Computing/SoftwareConsumer ElectronicsCell Phones

Transcript

00:00:00este modelo de 35 bilhões de parâmetros está rodando diretamente no meu iPhone. Consigo gerar 11 tokens por
00:00:06segundo através de uma engenharia inteligente para a qual esse modelo nunca foi projetado, e neste vídeo eu
00:00:11vou te mostrar exatamente como fazer o mesmo. O que estou rodando aqui é um modelo de mistura de especialistas (MoE).
00:00:21São 35 bilhões de parâmetros, que em um arquivo normal de 4 bits ocupam cerca de 20 GB e teriam que ficar na RAM.
00:00:28Mas, através de várias técnicas como o streaming de especialistas do SSD sob demanda, os pesos que realmente
00:00:33precisam ficar na memória caem para apenas 1,4 GB. Vou explicar como tudo isso funciona e depois
00:00:39vamos passar pela configuração do iPhone em si. A maioria dos modelos fica inteiramente na RAM, mas o legal da mistura
00:00:45de especialistas é que apenas uma pequena parte fica ativa de cada vez. Isso significa que as partes inativas
00:00:51do modelo podem simplesmente ficar no SSD esperando a sua hora de brilhar. O truque para rodar modelos maiores
00:00:56com memória limitada é carregar via streaming apenas os especialistas necessários na memória. Estamos rodando o Qwen
00:01:023.5, a variante de 35 bilhões de parâmetros, e o “a3b” no final significa que apenas cerca de 3 bilhões desses parâmetros
00:01:10estão ativos para qualquer token. Ele tem 40 camadas, cada uma com 256 pequenos especialistas mais um especialista compartilhado. Um roteador
00:01:19escolhe oito desses especialistas por token, então um único token executa apenas cerca de 3 bilhões dos 35 bilhões
00:01:26de parâmetros totais. Agora, o modelo inteiro em si é dividido. Normalmente ele ficaria todo na memória, mas isso não
00:01:32caberia num iPhone. Em vez disso, as partes que cada token precisa — como os embeddings, a atenção, os roteadores
00:01:39e o especialista compartilhado — são carregadas apenas uma vez e permanecem residentes na RAM o tempo todo, totalizando cerca de
00:01:441,4 GB. Já os especialistas — 40 arquivos de cerca de 300 MB cada, somando 12 gigabytes — ficam no SSD. Assim, para cada token,
00:01:53a atenção roda na GPU, o roteador escolhe 8 especialistas e o motor lê esses 8 direto do SSD
00:02:00para a memória da GPU e os executa junto com o próprio especialista compartilhado. Isso acontece em cada uma
00:02:06daquelas 40 camadas, gerando 320 pequenas leituras para cada token. E se você não está familiarizado com atenção,
00:02:14é a parte do modelo que analisa tudo o que foi dito na conversa até agora e identifica
00:02:19quais palavras anteriores são importantes para prever a próxima. A atenção roda para cada token, não importa
00:02:25o que aconteça, por isso tem que ficar na memória. Os especialistas são a parte que faz o raciocínio real sobre o token assim que
00:02:31a atenção processa o contexto. Mas como apenas oito desses especialistas são usados, podemos simplesmente deixar
00:02:36o restante no disco. Não há cache de especialistas no aplicativo; cada leitura passa pelo sistema operacional
00:02:42e o iOS mantém os especialistas usados recentemente em seu próprio cache de página, desde que tenha RAM livre. Os autores
00:02:49chegaram a construir seu próprio cache de 9,8 GB e depois o deletaram, o que deixou as coisas 38% mais rápidas porque,
00:02:55em um Mac ou iPhone, qualquer RAM que o app aloca é RAM tirada tanto da GPU quanto do cache de página,
00:03:03e esse cache está fazendo a maior parte do trabalho aqui. A 11 tokens por segundo, se cada especialista viesse do flash,
00:03:09o celular precisaria de mais de 5 gigabytes por segundo de leitura, e o flash do iPhone só atinge cerca de 1,6 por
00:03:15segundo. Portanto, a maioria dos especialistas vem da RAM que o SO gerencia para nós. O próximo truque é a quantização
00:03:22em camadas. A quantização comprime os pesos de um modelo para ocuparem menos espaço, mas também reduz
00:03:29a precisão desses pesos e, consequentemente, afeta a inteligência. Mas com este modelo, cerca de 25% dos
00:03:35especialistas lidam com cerca de 80% do trabalho, então os especialistas mais ativos permanecem em 4 bits e os menos ativos são
00:03:41quantizados para 2 bits, tornando-os 44% menores. O arquivo inteiro reduz 34%, caindo de cerca de 19 GB para
00:03:5013 GB, o que significa que mais partes cabem no cache de página. No meu iPhone 17, isso roda a 11 tokens por segundo com o
00:03:57modelo em modo de raciocínio. Devo dizer, porém, que o celular esquenta bastante; literalmente por dizer “olá”, eu já pude sentir
00:04:03o celular esquentar na minha mão, então tente não explodir o aparelho quando for testar isso. Na verdade, estou
00:04:08com um pouco de medo de digitar algo muito complexo, pois isso pode acabar derretendo a minha mão.
00:04:14O motor específico que estamos rodando é um projeto chamado Flash MoE, criado por Dan Woods. Ele foi escrito para
00:04:19MacBook e há uma pequena adaptação para iOS chamada Flash iOS, que envolve esse mesmo motor em um app de iPhone,
00:04:26e é isso que me permite rodar tudo no meu celular. No início, também encontrei um bug onde o raciocínio
00:04:31do modelo ficava preso em um loop. Ele começava bem e, depois de umas 10 palavras, simplesmente repetia
00:04:35os dois mesmos tokens para sempre. Para corrigir isso, atualizei uma função chamada async pre-read weight para que ela verifique
00:04:41a leitura de cada especialista contra o próprio tamanho dele. Especialistas de 2 bits têm metade do tamanho dos de 4 bits,
00:04:48então, antes da correção, todos os especialistas de 2 bits falhavam na verificação de tamanho e eram ignorados. O modelo estava efetivamente
00:04:54rodando com metade dos especialistas e por isso entrava em loop. E se vocês estão gostando do vídeo, pessoal, nos ajudaria
00:04:59demais se se inscrevessem no canal para podermos continuar criando conteúdo gratuito todos os dias. Agora, para
00:05:05configurar isso no seu celular, você precisa clonar o repositório, aplicar a correção de pré-leitura que mencionei em
00:05:11metal infer/infer.m, e apontar o projeto do Xcode para sua equipe e ID do pacote (Bundle ID). Você precisará de uma conta
00:05:18paga de desenvolvedor Apple para isso. Faça a compilação de release e instale no seu iPhone. Baixe o modelo
00:05:24quantizado em camadas pré-empacotado, que tem cerca de 13 GB, e transfira para o app via USB, o que deve levar cerca de sete minutos.
00:05:30No celular, abra o app Flash MoE, toque no modelo e comece a conversar. E se você quiser tentar rodar
00:05:36modelos locais no seu Mac para obter ainda mais tokens por segundo, confira este próximo vídeo. Aqui é o Warren da
00:05:43Better Stack, muito obrigado por assistir e, claro, vejo você no próximo!

Key Takeaway

A combinação de streaming de especialistas a partir do SSD, quantização adaptativa em camadas e uso do cache de página do iOS possibilita a execução do modelo Qwen 3.5 de 35B a 11 tokens por segundo com apenas 1,4 GB de RAM residente.

Highlights

  • O motor Flash MoE executa o modelo Qwen 2.5 de 35 bilhões de parâmetros no iPhone 17 com uma taxa de processamento de 11 tokens por segundo.

  • A técnica de streaming carrega dinamicamente apenas os componentes essenciais para a memória RAM, reduzindo a pegada residente de 20 GB para 1,4 GB.

  • A quantização em camadas aplica 4 bits aos especialistas mais ativos e 2 bits aos menos ativos, encolhendo o arquivo de 19 GB para 13 GB.

  • Cada token processado exige o carregamento simultâneo de 8 especialistas distribuídos em 40 camadas, gerando 320 leituras por token.

  • A remoção do cache de RAM de 9,8 GB acelerou a execução em 38% ao liberar a memória para o cache de página do sistema operacional iOS.

  • Uma correção no código na função async pre-read weight resolveu o loop infinito causado pelo descarte incorreto dos especialistas quantizados em 2 bits.

Timeline

Arquitetura e mecânica do streaming de especialistas

  • A arquitetura Mixture of Experts (MoE) permite manter na RAM apenas as partes ativas do modelo, deixando o restante armazenado no SSD.
  • O modelo Qwen 2.5 35B a3b utiliza apenas 3 bilhões de parâmetros ativos por token distribuídos em 40 camadas.
  • Os componentes estáticos como embeddings, atenção e roteadores ocupam 1,4 GB fixos na memória RAM.

A execução de modelos grandes em dispositivos móveis enfrenta a barreira do tamanho de memória. Modelos normais de 35B exigem 20 GB de RAM para carregar os pesos em 4 bits. A arquitetura MoE resolve o gargalo ao manter apenas o núcleo do modelo na RAM e ler os especialistas no SSD conforme o roteador seleciona 8 entre os 256 disponíveis em cada uma das 40 camadas.

Gerenciamento de memória e otimização do cache no iOS

  • A camada de atenção executa na GPU para analisar o contexto do histórico antes do acionamento dos especialistas.
  • O cache de página do próprio sistema operacional gerencia os especialistas lidos recentemente com maior eficiência do que um cache no aplicativo.
  • A eliminação do cache manual de 9,8 GB aumentou a velocidade de execução em 38%.

O barramento de dados do armazenamento flash do iPhone atinge no máximo 1,6 GB por segundo, valor insuficiente para suprir a demanda de 5 GB por segundo exigida a 11 tokens por segundo. O sistema operacional contorna esse limite armazenando os arquivos lidos na RAM livre. A alocação manual de memória pelo aplicativo retira espaço desse cache de página do iOS, o que degrada o desempenho global da inferência.

Quantização em camadas e depuração do erro de loop

  • Um quarto dos especialistas concentra 80% do trabalho computacional durante a geração de texto.
  • A quantização mista reduz os especialistas secundários para 2 bits, diminuindo o tamanho total do modelo em 34%.
  • A validação incorreta do tamanho do arquivo da função async pre-read weight fazia o motor ignorar os especialistas de 2 bits.

Para caber no cache de página, o arquivo do modelo foi comprimido mantendo a precisão de 4 bits apenas nos especialistas mais demandados e reduzindo os demais para 2 bits. Essa mudança gerou uma falha de lógica na função de leitura que checava o tamanho dos arquivos, descartando todos os especialistas de 2 bits por terem metade do tamanho esperado. Corrigir a verificação permitiu ao modelo carregar todos os dados e interromper o comportamento de repetição em loop.

Instalação e compilação do Flash iOS via Xcode

  • A execução exige a compilação do código do Flash iOS no Xcode associado a uma conta paga de desenvolvedor Apple.
  • O arquivo do modelo pré-empacotado de 13 GB deve ser enviado ao iPhone via conexão USB.
  • A alteração manual no arquivo metal infer/infer.m é mandatória para corrigir a verificação de tamanho dos pesos.

O processo de implantação envolve aplicar a correção no código-fonte original do Flash MoE antes de gerar o executável no Xcode. Após instalar o app no iPhone, a transferência do arquivo quantizado de 13 GB exige uma conexão física via cabo com duração aproximada de sete minutos. Uma vez carregado o arquivo no diretório do app Flash MoE, a inferência local pode ser iniciada diretamente na interface.

Community Posts

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

Write about this video