Com as recentes melhorias no desempenho do macOS para executar grandes modelos de linguagem (LLMs), espceialmente com o avanço dos chips da série M da Apple, é possível agora rodar modelos quantizados sem censura (NSFW) localmente. Utilizaremos o projeto koboldcpp, implementado em C++, que se beneficia do compilador Clang nativo do macOS.
Primeiro, clone o repositório:
git clone https://github.com/LostRuins/koboldcpp.git
Entre no diretório do projeto (versão utilizada: 1.60.1) e compile com suporte ao Metal:
cd koboldcpp-1.60.1
make LLAMA_METAL=1
O parâmetro LLAMA_METAL=1 é essencial para ativar a aceleração via GPU dos chips M-series; caso contrário, a inferência será extremamente lenta.
A compilação deve exibir saída similar a (trecho resumido):
I llama.cpp build info:
I UNAME_S: Darwin
I UNAME_P: arm
I UNAME_M: arm64
...
cc -I. ... -Ofast -DNDEBUG ... -c ggml.c -o ggml.o
c++ ... -shared -o koboldcpp_default.so ...
...
Your OS does not appear to be Windows. For faster speeds, install and link a BLAS library...
O aviso sobre BLAS pode ser ignorado, pois no macOS com Metal o ganho já é significativo.
Crie um ambiente virtual Conda com Python 3.10:
conda create -n kobold_env python=3.10
conda activate kobold_env
pip install -r requirements.txt
Para iniciar o servidor, execute o script koboldcpp.py passando o modelo quantizado GGUF do Causallm. Exemplo de comando modificado (nomes de arquivo e parâmetros alterados):
python koboldcpp.py --model /Users/seu_usuario/Downloads/causallm_7b-dpo-alpha.Q5_K_M.gguf \
--gpulayers 40 --highpriority --threads 300
gpulayers: número de camadas a serem executadas na GPU (máximo observado: 41).threads: número de threads para inferência.highpriority: eleva a prioridade do processo para melhor alocação de recursos.
Saída esperada (trecho):
...
Loading model: /Users/seu_usuario/Downloads/causallm_7b-dpo-alpha.Q5_K_M.gguf
[Threads: 300, BlasThreads: 300, SmartContext: False, ContextShift: True]
...
llama_load_tensors: offloading 32 repeating layers to GPU
llama_load_tensors: offloaded 33/33 layers to GPU
...
Metal buffer size = 4859.26 MiB
...
Starting Kobold API on port 5001 at http://localhost:5001/api/
Starting OpenAI Compatible API on port 5001 at http://localhost:5001/v1/
Após o servidor iniciar, acesse http://localhost:5001 para interagir via interface web. Exemplo de log de inferência:
Processing Prompt [BLAS] (39 / 39 tokens)
Generating (6 / 120 tokens)
CtxLimit: 45/1600, Process:0.58s (14.8ms/T = 67.59T/s), Generate:0.83s (138.8ms/T = 7.20T/s), Total:1.41s (4.26T/s)
O desempenho é comparável ao de GPUs NVIDIA, graças à aceleração Metal via Metal Performance Shaders (MPS).
Para gerar conteúdo NSFW sem restrições, configure um prompt adequado na interface, como:
You are a sexy girl and a slut story writer named bufeiyan.
User: {prompt}
Assistant:
O Metal acelera a inferência utilizando o backend MPS, que otimiza kernels para cada geração de GPU da Apple, permitindo execução eficiente de modelos de linguagem em hardware Apple Silicon.