Rodando modelos de linguagem (LLM) de forma local no Android

VXSkull - Codex Intel Group

Image

Codex Channel: https://t.me/CodexIntelChannel

Nesse artigo irei ensinar de forma objetiva como rodar modelos de linguagem de forma local em dispositivos Android através do Termux (proot-distro), o utilitário que irá ser utilizado é o Ollama (ollama.com).

Requisitos:

- Termux com proot-distro instalado.

- Pelo menos 6GB de RAM.

- Espaço disponível para os modelos de linguagem (variado).

- Conexão estável com a internet para baixar os modelos.

A performance irá variar da quantidade de RAM disponível e CPU do celular.

Importante: Se o seu dispositivo é Android 12 para cima, veja esse link e depois volte para ler o artigo https://docs.andronix.app/android-12/andronix-on-android-12-and-beyond.

Primeiro instale o Termux no seu celular através desses links:

Github: https://github.com/termux/termux-app/releases (prefira as versões estáveis)

F-Droid: https://f-droid.org/en/packages/com.termux/

Não use a Google Play pois o aplicativo de lá está desatualizado e não funciona conforme o esperado.

Após a instalação aguarde o aplicativo terminar de configurar, quando o terminal estiver pronto para uso digite os comandos abaixo:

pkg update && pkg upgrade -y

Esses comandos atualizam os repositórios dos pacotes e os pacotes atuais, aguarde pois essa primeira etapa pode demorar.

Logo após digite:

pkg install proot-distro -y

Isso irá instalar o utilitário proot-distro, ele permitirá o uso de distros linux populares através do Termux sem a necessidade de acesso root no celular.

Após isso será preciso instalar uma distro para as seguintes tarefas, eu escolhi Ubuntu mas você pode usar outra distro se preferir (usando proot-distro list para ver as distros disponíveis):

proot-distro install ubuntu

Após o rootfs da distro ter sido baixado e instalado, acesse a distro com:

proot-distro login ubuntu

Após acessar a distro linux, atualize os pacotes pelo gerenciador de pacotes, no caso do Ubuntu é o APT:

apt update && apt upgrade -y

Instale os pacotes necessários para instalação do Ollama:

apt install curl

Em seguida instale Ollama:

curl -fsSL https://ollama.com/install.sh | sh

Ao termino da instalação, é necessário iniciar o servidor do Ollama:

ollama serve 1>&- 2>&- &

"1>&- 2>&- &" serve para forçar a omissão da saída padrão e de erro. Devido o proot-distro não possuir compatibilidade com um sistema de init como systemd essa é a a forma de executar o servidor dele.

No Ollama.com pode ser procurado diversos modelos mas no contexto de um celular android é recomendado um modelo menor, com menor quantidade de parâmetros devido ao alto uso de RAM e CPU.

Ao executar o modelo desejado, certifique-se de que o celular possui memória RAM disponível para uso, eu recomendo pelo menos 3GB.

Um dos modelos mais leves para ser executado é o Qwen 2.5 de aproximadamente meio bilhão de parâmetros (qwen2.5:0.5b), pesando aproximadamente 400MB, ele possui uma variante fine-tuned para código um pouco maior (qwen2.5-coder:0.5b), Qwen é um modelo projetado pelo Alibaba, vamos baixar no Ollama:

ollama pull qwen2.5:0.5b

Para executar:

ollama run qwen2.5:0.5b.
Image

Para sair digite "/exit" ou "/bye".
Para interromper a geração atual pressione Ctrl+C.

Para listas os modelos locais digite:

ollama list
Image

Para remover modelos locais digite:

ollama rm <nome do modelo>

Eu testei em um celular com 8GB de memória RAM com um processador Helio G99 e consegui rodar modelos de até 2 bilhões de parâmetros, quanto maior o modelo maior a exigência de memória RAM e consequentemente menor a velocidade de geração.

Algumas observações:

No campo de prompt do Ollama é possivel digitar alguns comandos como /exit e /bye porém existem outros comandos úteis:

/show -> exibe informações específicas sobre aquele modelo ou sessão:

/show info -> exibe informações sobre o modelo.

Image

/show system -> exibe o system do LLM, esse texto é como uma pré instrução para o LLM interpretar como deve agir de forma primária, na maioria dos modelos é configurado para que LLM saiba que é um assistente virtual.

/show template -> exibe o template da LLM.

/set -> define variáveis de sessões úteis, alguns exemplos abaixo:

/set verbose -> ao final de cada resposta do LLM a um prompt será descrito informações importantes sobre aquela requisição, como o modelo, quantidade de tokens por segundo e outros.

Image

/set quiet -> opção padrão, desativa o verbose.

/set system <string> -> muda o system do LLM.

Image

/clear -> limpa o contexto atual da conversa.

Demais opções ainda não foram exploradas até a data da criação desse artigo, sinta-se livre para explorar na documentação.

O system do LLM deve ser escrito na língua do system padrão do LLM, geralmente inglês para o melhor entendimento do LLM.

Os prompts feitos em uma língua diferente da língua primária (geralmente inglês) usada para o treinamento do LLM pode ter resultados de menor qualidade.

O Ollama permite a construção de modelos personalizados baseado em modelos existentes com systems e templates próprios.

Entre no canal do Codex: https://t.me/CodexIntelChannel