Commit
·
d7be2c3
1
Parent(s):
3fe02e8
Add comprehensive instructions for converting, quantizing, and publishing LLMs in GGUF format for Ollama and Hugging Face
Browse files- instructions.md +279 -0
instructions.md
ADDED
@@ -0,0 +1,279 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Guia Completo: Convertendo, Quantizando e Publicando LLMs em GGUF para Ollama e Hugging Face
|
2 |
+
|
3 |
+
Este guia detalha o processo para pegar um modelo de linguagem (LLM) do Hugging Face em seu formato original (como `safetensors`), convertê-lo para o formato GGUF usando o `llama.cpp` via Docker, otimizá-lo através de quantização (em diferentes níveis de precisão) e, finalmente, disponibilizá-lo para uso local com Ollama e para publicação pública no Hugging Face (ou na biblioteca oficial do Ollama).
|
4 |
+
|
5 |
+
## Objetivos
|
6 |
+
|
7 |
+
- Compreender a diferença entre conversão de formato, quantização FP16 e quantização de baixa precisão (Q4_K_M, etc.).
|
8 |
+
- Converter um modelo LLM do Hugging Face para o formato GGUF em precisão FP16.
|
9 |
+
- Quantizar o modelo GGUF FP16 para precisões mais baixas (ex: Q4_K_M) para otimização de desempenho e tamanho.
|
10 |
+
- Rodar o modelo GGUF localmente usando Ollama.
|
11 |
+
- Publicar o modelo GGUF no Hugging Face Model Hub para que possa ser baixado e usado por outros via Ollama.
|
12 |
+
- Compreender e aplicar as exigências de licenciamento para modelos como o Gemma.
|
13 |
+
|
14 |
+
---
|
15 |
+
|
16 |
+
## 1. Pré-requisitos
|
17 |
+
|
18 |
+
Antes de começar, certifique-se de ter as seguintes ferramentas instaladas e configuradas no seu sistema:
|
19 |
+
|
20 |
+
- **Docker:** Para rodar o ambiente `llama.cpp` isoladamente.
|
21 |
+
- [Instalação do Docker](https://docs.docker.com/get-docker/)
|
22 |
+
- **Git:** Para clonar repositórios e gerenciar versões.
|
23 |
+
- [Instalação do Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
|
24 |
+
- **Git LFS (Large File Storage):** Essencial para baixar e fazer upload de arquivos grandes (`.safetensors`, `.gguf`) no Git.
|
25 |
+
```bash
|
26 |
+
sudo apt update && sudo apt install git-lfs # Linux Mint/Ubuntu
|
27 |
+
git lfs install # configuração única
|
28 |
+
```
|
29 |
+
|
30 |
+
* **Python 3 e `pip`:**
|
31 |
+
|
32 |
+
```bash
|
33 |
+
sudo apt install python3 python3-pip # Linux Mint/Ubuntu
|
34 |
+
```
|
35 |
+
|
36 |
+
* **`huggingface_hub` (CLI):** Ferramentas de linha de comando para interagir com o Hugging Face.
|
37 |
+
|
38 |
+
```bash
|
39 |
+
pip install huggingface_hub
|
40 |
+
```
|
41 |
+
|
42 |
+
* **Ollama:** Para rodar os modelos GGUF localmente.
|
43 |
+
|
44 |
+
- [Instalação do Ollama](https://ollama.com/download)
|
45 |
+
|
46 |
+
---
|
47 |
+
|
48 |
+
## 2. Preparação do Ambiente e Modelo
|
49 |
+
|
50 |
+
### 2.1. Instalação e Configuração do Ollama (Local)
|
51 |
+
|
52 |
+
1. Baixe e instale conforme seu sistema operacional.
|
53 |
+
2. Verifique a instalação executando:
|
54 |
+
|
55 |
+
```bash
|
56 |
+
ollama
|
57 |
+
```
|
58 |
+
|
59 |
+
Deve exibir a lista de comandos disponíveis.
|
60 |
+
|
61 |
+
### 2.2. Criar Diretórios e Baixar o Modelo
|
62 |
+
|
63 |
+
Estrutura recomendada:
|
64 |
+
|
65 |
+
```
|
66 |
+
~/Workspace/Models/
|
67 |
+
- meu_modelo_original/ # arquivos do Hugging Face
|
68 |
+
- saida_gguf/ # saída das conversões e quantizações
|
69 |
+
```
|
70 |
+
|
71 |
+
Crie com:
|
72 |
+
|
73 |
+
```bash
|
74 |
+
mkdir -p ~/Workspace/Models/meu_modelo_original
|
75 |
+
mkdir -p ~/Workspace/Models/saida_gguf
|
76 |
+
```
|
77 |
+
|
78 |
+
Clone o modelo:
|
79 |
+
|
80 |
+
```bash
|
81 |
+
cd ~/Workspace/Models/
|
82 |
+
git clone https://huggingface.co/CEIA-UFG/Gemma-3-Gaia-PT-BR-4b-it meu_modelo_original
|
83 |
+
```
|
84 |
+
|
85 |
+
Garanta que o Git LFS foi instalado antes de clonar, para baixar os arquivos grandes corretamente.
|
86 |
+
|
87 |
+
---
|
88 |
+
|
89 |
+
## 3. Conversão e Quantização (via Docker)
|
90 |
+
|
91 |
+
Usaremos a imagem `ghcr.io/ggml-org/llama.cpp:full`.
|
92 |
+
|
93 |
+
### 3.1. Pull da Imagem Docker
|
94 |
+
|
95 |
+
```bash
|
96 |
+
docker pull ghcr.io/ggml-org/llama.cpp:full
|
97 |
+
```
|
98 |
+
|
99 |
+
### 3.2. Converter para GGUF + FP16
|
100 |
+
|
101 |
+
```bash
|
102 |
+
docker run --rm -it \
|
103 |
+
--entrypoint /bin/bash \
|
104 |
+
-v ~/Workspace/Models/meu_modelo_original:/app/model_in:ro \
|
105 |
+
-v ~/Workspace/Models/saida_gguf:/app/model_out \
|
106 |
+
ghcr.io/ggml-org/llama.cpp:full \
|
107 |
+
-c "cd /llama.cpp && python3 convert_hf_to_gguf.py /app/model_in \
|
108 |
+
--outtype f16 \
|
109 |
+
--outfile /app/model_out/gemma_3_gaia_f16.gguf"
|
110 |
+
```
|
111 |
+
|
112 |
+
### 3.3. Quantizar p/ Q4_K_M (4 bits)
|
113 |
+
|
114 |
+
```bash
|
115 |
+
docker run --rm -it \
|
116 |
+
--entrypoint /bin/bash \
|
117 |
+
-v ~/Workspace/Models/saida_gguf:/app/model_out \
|
118 |
+
ghcr.io/ggml-org/llama.cpp:full \
|
119 |
+
-c "cd /llama.cpp && ./quantize \
|
120 |
+
/app/model_out/gemma_3_gaia_f16.gguf \
|
121 |
+
/app/model_out/gemma_3_gaia_q4_k_m.gguf \
|
122 |
+
Q4_K_M"
|
123 |
+
```
|
124 |
+
|
125 |
+
---
|
126 |
+
|
127 |
+
## 4. Utilizando o Modelo no Ollama (Local)
|
128 |
+
|
129 |
+
Agora você terá, por exemplo, `gemma_3_gaia_f16.gguf` e/ou `gemma_3_gaia_q4_k_m.gguf` dentro de `~/Workspace/Models/saida_gguf`.
|
130 |
+
|
131 |
+
### 4.1. Criar um `Modelfile`
|
132 |
+
|
133 |
+
No diretório da saída:
|
134 |
+
|
135 |
+
```bash
|
136 |
+
cd ~/Workspace/Models/saida_gguf
|
137 |
+
nano Modelfile
|
138 |
+
```
|
139 |
+
|
140 |
+
Conteúdo:
|
141 |
+
|
142 |
+
```text
|
143 |
+
# Modelfile
|
144 |
+
FROM gemma_3_gaia_q4_k_m.gguf
|
145 |
+
|
146 |
+
# Exemplo de SYSTEM prompt
|
147 |
+
SYSTEM """Você é um assistente de IA prestativo e amigável."""
|
148 |
+
|
149 |
+
# Exemplos de parâmetros (ajuste conforme sua RAM/VRAM)
|
150 |
+
# PARAMETER temperature 0.7
|
151 |
+
# PARAMETER top_k 40
|
152 |
+
# PARAMETER top_p 0.9
|
153 |
+
# PARAMETER num_ctx 4096
|
154 |
+
```
|
155 |
+
|
156 |
+
### 4.2. Importar para Ollama
|
157 |
+
|
158 |
+
```bash
|
159 |
+
ollama create brunoconterato/Gemma-3-Gaia-PT-BR-4b-it:q4_k_m -f Modelfile
|
160 |
+
# (ou para F16):
|
161 |
+
# ollama create brunoconterato/Gemma-3-Gaia-PT-BR-4b-it:f16 -f Modelfile
|
162 |
+
```
|
163 |
+
|
164 |
+
### 4.3. Rodar o Modelo
|
165 |
+
|
166 |
+
```bash
|
167 |
+
ollama run brunoconterato/Gemma-3-Gaia-PT-BR-4b-it:q4_k_m
|
168 |
+
```
|
169 |
+
|
170 |
+
---
|
171 |
+
|
172 |
+
## 5. Publicando o Modelo para Compartilhamento
|
173 |
+
|
174 |
+
Temos duas formas principais de publicar: via Hugging Face ou via biblioteca oficial do Ollama.
|
175 |
+
|
176 |
+
### 5.1. No Hugging Face Model Hub
|
177 |
+
|
178 |
+
#### 5.1.1. Criar Repositório
|
179 |
+
|
180 |
+
- Vá ao Hugging Face e crie um repositório público (ex: `Gemma-3-Gaia-PT-BR-4b-it-GGUF-F16`), escolhendo a licença adequada.
|
181 |
+
|
182 |
+
#### 5.1.2. Preparar Repositório Local
|
183 |
+
|
184 |
+
```bash
|
185 |
+
cd ~/Workspace/Models/saida_gguf
|
186 |
+
git init
|
187 |
+
git lfs install
|
188 |
+
git lfs track "*.gguf"
|
189 |
+
```
|
190 |
+
|
191 |
+
#### 5.1.3. Adicionar arquivos essenciais
|
192 |
+
|
193 |
+
Crie ou atualize:
|
194 |
+
|
195 |
+
````markdown
|
196 |
+
---
|
197 |
+
license: gemma
|
198 |
+
language:
|
199 |
+
- pt
|
200 |
+
base_model:
|
201 |
+
- CEIA-UFG/Gemma-3-Gaia-PT-BR-4b-it
|
202 |
+
- google/gemma-3-4b-it
|
203 |
+
---
|
204 |
+
|
205 |
+
# Gemma-3-Gaia-PT-BR-4b-it – GGUF Quantizado por brunoconterato (F16)
|
206 |
+
|
207 |
+
Este repositório contém uma versão quantizada (16‑bit) do modelo **Gemma‑3‑Gaia‑PT‑BR‑4b‑it**, otimizada para uso com [Ollama](https://ollama.com/).
|
208 |
+
|
209 |
+
**Detalhes do modelo:**
|
210 |
+
|
211 |
+
- **Base model:** Gemma‑3‑Gaia‑PT‑BR‑4b‑it
|
212 |
+
- **Quantização:** F16
|
213 |
+
- **Origem:** https://huggingface.co/CEIA-UFG/Gemma-3-Gaia-PT-BR-4b-it
|
214 |
+
- **Desenvolvedor:** brunoconterato
|
215 |
+
|
216 |
+
## Licença
|
217 |
+
|
218 |
+
Este modelo está disponível sob os **Gemma Terms of Use**. Ao baixar ou usar, você concorda com:
|
219 |
+
|
220 |
+
- Políticas de uso proibido (Prohibited Use Policy) conforme exigido.
|
221 |
+
- Inclusão dos termos completos da licença.
|
222 |
+
- Aviso de modificação (quantização).
|
223 |
+
|
224 |
+
Arquivos adicionais:
|
225 |
+
|
226 |
+
- `Gemma_Terms_of_Use.txt` – texto completo da licença oficial.
|
227 |
+
- `NOTICE.txt` – aviso exigido pela licença (veja abaixo).
|
228 |
+
|
229 |
+
## Uso com Ollama
|
230 |
+
|
231 |
+
```bash
|
232 |
+
ollama run hf.co/brunoconterato/Gemma-3-Gaia-PT-BR-4b-it-GGUF-F16
|
233 |
+
```
|
234 |
+
````
|
235 |
+
|
236 |
+
````
|
237 |
+
|
238 |
+
Crie também:
|
239 |
+
```bash
|
240 |
+
echo "Gemma is provided under and subject to the Gemma Terms of Use found at ai.google.dev/gemma/terms" > NOTICE.txt
|
241 |
+
````
|
242 |
+
|
243 |
+
Adicione tudo:
|
244 |
+
|
245 |
+
```bash
|
246 |
+
git add README.md Gemma_Terms_of_Use.txt NOTICE.txt gemma_3_gaia_f16.gguf
|
247 |
+
git commit -m "Initial commit: Gemma‑3‑Gaia‑PT‑BR‑4b‑it GGUF (F16) model + documentação e licença"
|
248 |
+
```
|
249 |
+
|
250 |
+
#### 5.1.4. Conectar e Enviar
|
251 |
+
|
252 |
+
```bash
|
253 |
+
huggingface-cli login
|
254 |
+
huggingface-cli lfs-enable-largefiles .
|
255 |
+
git remote add origin https://huggingface.co/brunoconterato/Gemma-3-Gaia-PT-BR-4b-it-GGUF-F16
|
256 |
+
git push -u origin main
|
257 |
+
```
|
258 |
+
|
259 |
+
### 5.2. Biblioteca oficial do Ollama
|
260 |
+
|
261 |
+
1. Configure sua chave pública SSH (`~/.ollama/id_ed25519.pub` ou equivalente).
|
262 |
+
2. Copie o modelo local para o namespace de publicação:
|
263 |
+
|
264 |
+
```bash
|
265 |
+
ollama cp brunoconterato/Gemma-3-Gaia-PT-BR-4b-it:q4_k_m brunoconterato/Gemma-3-Gaia-PT-BR-4b-it:q4_k_m
|
266 |
+
```
|
267 |
+
|
268 |
+
3. Publique:
|
269 |
+
|
270 |
+
```bash
|
271 |
+
ollama push brunoconterato/Gemma-3-Gaia-PT-BR-4b-it:q4_k_m
|
272 |
+
```
|
273 |
+
|
274 |
+
---
|
275 |
+
|
276 |
+
## 6. Considerações Finais
|
277 |
+
|
278 |
+
- **Licenciamento Gemma:** exige atribuição, redistribuição dos termos de uso e aviso de modificação mesmo em derivados.
|
279 |
+
- **Hardware:** mesmo quantizados, LLMs exigem memória RAM/VRAM suficiente—verifique seu sistema antes de rodar.
|