# llama.cpp

[llama.cpp](https://github.com/ggml-org/llama.cpp) é um mecanismo de inferência em C/C++ para implantar modelos de linguagem grandes localmente. Ele é leve e não requer Python, CUDA ou outra infraestrutura de servidor pesada. O llama.cpp usa o formato de arquivo [GGUF](https://huggingface.co/blog/ngxson/common-ai-model-formats#gguf). O GGUF suporta pesos de modelo quantizados e memory-mapping para reduzir a largura de banda de memória no seu dispositivo.

> [!TIP]
> Pesquise no [Hub](https://huggingface.co/models?apps=llama.cpp&sort=trending) por modelos já disponíveis no formato GGUF.

Converta qualquer modelo do Transformers para o formato GGUF com o script [convert_hf_to_gguf.py](https://github.com/ggml-org/llama.cpp/blob/master/convert_hf_to_gguf.py).

```bash
python3 convert_hf_to_gguf.py ./models/openai/gpt-oss-20b \
  --outfile gpt-oss-20b.gguf \
```

Implante o modelo localmente pela linha de comando com [llama-cli](https://github.com/ggml-org/llama.cpp/tree/master#llama-cli) ou inicie uma interface web com [llama-server](https://github.com/ggml-org/llama.cpp/tree/master#llama-server). Adicione a flag `-hf` para indicar que o modelo é do Hub.

```bash
llama-cli -hf ggml-org/gpt-oss-20b-GGUF
```

```bash
llama-server -hf ggml-org/gpt-oss-20b-GGUF
```

## Integração com Transformers

1. [AutoConfig.from_pretrained()](/docs/transformers/main/pt/model_doc/auto#transformers.AutoConfig.from_pretrained) carrega o arquivo `config.json` do modelo para extrair metadados.
2. [AutoTokenizer.from_pretrained()](/docs/transformers/main/pt/model_doc/auto#transformers.AutoTokenizer.from_pretrained) extrai o vocabulário e a configuração do tokenizador.
3. Com base no campo `architectures` na configuração, o script seleciona uma classe de conversor de seu registro interno. O registro mapeia os nomes de arquitetura do Transformers (como [LlamaForCausalLM](/docs/transformers/main/pt/model_doc/llama2#transformers.LlamaForCausalLM)) para as classes de conversor correspondentes.
4. O conversor mapeia os nomes dos tensores do Transformers (por exemplo, `model.layers.0.self_attn.q_proj.weight`) para os nomes dos tensores GGUF, transforma os tensores e empacota o vocabulário.
5. A saída é um único arquivo GGUF contendo os pesos do modelo, o tokenizador e os metadados.

## Recursos

- Documentação do [llama.cpp](https://github.com/ggml-org/llama.cpp)
- post de blog [Introdução ao ggml](https://huggingface.co/blog/introduction-to-ggml)

