Implantação Local do Modelo de Linguagem Quantizado Causallm (sem restrições de conteúdo) no macOS Sonoma com Apple Silicon

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.

Tags: LLM macOS Sonoma Apple Silicon KoboldCPP Causallm

Publicado em 7-2 16:03