# Uso de GGUF com llama.cpp

> [!TIP]
> Agora você pode implantar qualquer GGUF compatível com llama.cpp nos Hugging Face Endpoints; saiba mais sobre isso [aqui](https://huggingface.co/docs/inference-endpoints/en/others/llamacpp_container)

Llama.cpp permite que você baixe e execute inferência em um GGUF simplesmente fornecendo o caminho do repositório no Hugging Face e o nome do arquivo. O llama.cpp baixa o checkpoint do modelo e o faz cache automaticamente. A localização do cache é definida pela variável de ambiente `LLAMA_CACHE`; leia mais sobre isso [aqui](https://github.com/ggerganov/llama.cpp/pull/7826).

Você pode instalar o llama.cpp usando o instalador no macOS e no Linux, via WinGet no Windows, ou compilando a partir do código-fonte. Consulte a [documentação oficial](https://github.com/ggml-org/llama.cpp#quick-start) para outras opções de instalação, incluindo Docker.

### Opção 1: Instalar llama.cpp

No macOS e no Linux:

```bash
curl -LsSf https://llama.app/install.sh | sh
```

Alternativamente, instale com o Homebrew:

```bash
brew install llama.cpp
```

No Windows, use o WinGet:

```powershell
winget install llama.cpp
```

### Opção 2: compilar a partir do código-fonte

Etapa 1: Clone o llama.cpp do GitHub.

```
git clone https://github.com/ggml-org/llama.cpp.git
```

Etapa 2: Acesse a pasta llama.cpp e compile o projeto. Você também pode adicionar flags específicas de hardware (por exemplo: `-DGGML_CUDA=1` para GPUs Nvidia).

```
cd llama.cpp
cmake -B build   # optionally, add -DGGML_CUDA=ON to activate CUDA
cmake --build build --config Release -j --target llama-app
```

Observação: para suporte a outros hardwares (por exemplo: AMD ROCm, Intel SYCL), consulte o [guia de compilação do llama.cpp](https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md)

Se você compilou a partir do código-fonte, use `./build/bin/llama` no lugar de `llama` nos comandos abaixo.

Depois de instalado, você pode usar `llama cli` ou `llama serve` da seguinte forma:

```bash
llama cli -hf bartowski/Llama-3.2-3B-Instruct-GGUF:Q8_0
```

Observação: Para o modo de conclusão bruta (modo não-chat), use `llama completion` com `-no-cnv` em vez de `llama cli`.

Além disso, você pode invocar diretamente um endpoint de chat completions da especificação OpenAI usando o servidor llama.cpp:

```bash
llama serve -hf bartowski/Llama-3.2-3B-Instruct-GGUF:Q8_0 --port 8080
```

Depois de executar o servidor, você pode simplesmente utilizar o endpoint da seguinte forma:

```bash
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer no-key" \
-d '{
"messages": [
    {
        "role": "system",
        "content": "You are an AI assistant. Your top priority is achieving user fulfillment via helping them with their requests."
    },
    {
        "role": "user",
        "content": "Write a limerick about Python exceptions"
    }
  ]
}'
```

Substitua `-hf` por qualquer nome de repositório válido no hub do Hugging Face - e pronto! 🦙

