thiagonishimura commited on
Commit
40fe1dd
·
verified ·
1 Parent(s): 4bcd05a

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +14 -71
README.md CHANGED
@@ -10,7 +10,7 @@ tags:
10
  - postgis
11
  - geospatial
12
  - cpu-inference
13
- - qwen/qwen2.5-3b-Instruct
14
  base_model:
15
  - Qwen/Qwen2.5-Coder-3B-Instruct
16
  - Qwen/Qwen2.5-Coder-7B-Instruct
@@ -21,91 +21,34 @@ base_model:
21
  ## 📌 Visão Geral do Modelo
22
  O **TerraModel** é uma família de *Small Language Models* (SLMs) especializados na tradução de linguagem natural para consultas em bancos de dados relacionais espaciais (PostgreSQL/PostGIS). Este modelo foi otimizado para o domínio de monitoramento ambiental do bioma Amazônia, focado em superar o gargalo de largura de banda de memória (*Memory Bandwidth Wall*) em infraestruturas baseadas exclusivamente em processadores centrais (*CPU-only*).
23
 
24
- Este repositório contém as versões quantizadas em formato **GGUF (4-bit e 8-bit)** dos modelos de 3B e 7B de parâmetros, permitindo inferência local de alta eficiência, com baixo consumo de RAM e garantia de privacidade na manipulação de dados governamentais sensíveis.
25
 
26
  ## 🛠️ Detalhes Técnicos
27
  - **Modelo Base:** Qwen2.5-Coder-Instruct (3B e 7B)
28
  - **Técnica de Fine-Tuning:** QLoRA (Parameter-Efficient Fine-Tuning)
29
- - **Formato de Inferência:** GGUF (via `llama.cpp`)
30
- - **Quantizações Disponíveis:** Q4_K_M (4-bit) e Q8_0 (8-bit)
31
  - **Domínio:** Geoespacial, PostGIS, Monitoramento Ambiental (Amazônia)
32
  - **Idioma Principal:** Português (PT-BR) / SQL
33
 
34
  ## 📂 Arquivos do Repositório
35
- Recomendamos o download da versão **Q4** para ambientes com restrição severa de memória (aprox. 4.5 GB de RAM necessários para o 7B) ou a versão **Q8** para um *trade-off* superior entre acurácia de execução e latência.
36
 
 
 
37
  * `terramodel-7b-q8_0.gguf`
38
  * `terramodel-7b-q4_k_m.gguf`
39
  * `terramodel-3b-q8_0.gguf`
40
  * `terramodel-3b-q4_k_m.gguf`
41
 
42
- ## 💻 Como Utilizar (Inferencia Local em Python)
 
 
 
43
 
44
- Para rodar o modelo localmente utilizando apenas CPU, recomendamos a biblioteca `llama-cpp-python`.
45
 
46
- ### Instalação
47
- ```bash
48
- pip install llama-cpp-python
49
- ```
50
 
51
- ### Exemplo de Código (Python)
52
  ```bash
53
- from llama_cpp import Llama
54
-
55
- def generate_spatial_query(prompt: str, model_path: str) -> str:
56
- """
57
- Gera uma consulta PostGIS a partir de linguagem natural utilizando o TerraModel.
58
-
59
- Args:
60
- prompt (str): A pergunta em linguagem natural.
61
- model_path (str): O caminho local para o arquivo .gguf.
62
-
63
- Returns:
64
- str: A consulta SQL gerada pelo modelo.
65
- """
66
- # Instanciação do modelo otimizada para CPU
67
- llm = Llama(
68
- model_path=model_path,
69
- n_ctx=2048, # Janela de contexto
70
- n_threads=8, # Ajuste para a quantidade de núcleos físicos da sua CPU
71
- verbose=False
72
- )
73
-
74
- # System Prompt exato utilizado no fine-tuning do TerraModel
75
- system_prompt = """Você é o TerraModel, um especialista em análise geoespacial e PostgreSQL/PostGIS.
76
- Sua tarefa é traduzir perguntas em linguagem natural para consultas SQL rigorosas e otimizadas.
77
-
78
- Você deve basear sua sintaxe ESTRITAMENTE no seguinte esquema de banco de dados:
79
- CREATE TABLE public.dados_deter (gid integer, fid varchar, classname varchar, quadrant varchar, path_row varchar, view_date date, sensor varchar, satellite varchar, areauckm numeric, uc varchar, areamunkm numeric, municipali varchar, geocodibge varchar, uf varchar, geom geometry);
80
- Nota: Use unaccent() para buscar textos."""
81
-
82
- # Formatação ChatML requerida pelo Qwen2.5-Coder
83
- formatted_prompt = f"<|im_start|>system\n{system_prompt}<|im_end|>\n<|im_start|>user\n{prompt}<|im_end|>\n<|im_start|>assistant\n"
84
-
85
- # Inferência
86
- response = llm(
87
- formatted_prompt,
88
- max_tokens=256,
89
- stop=["<|im_end|>"],
90
- temperature=0.1 # Temperatura baixa para garantir determinismo na sintaxe SQL
91
- )
92
-
93
- return response['choices'][0]['text'].strip()
94
-
95
- # Exemplo de uso
96
- if __name__ == "__main__":
97
- pergunta = "Calcule a área total em hectares dos polígonos que representam áreas de desmatamento e que estão dentro de um raio de 10 km de um ponto específico."
98
- caminho_gguf = "./terramodel-7b-q4_k_m.gguf"
99
-
100
- sql_gerado = generate_spatial_query(pergunta, caminho_gguf)
101
- print("Query Gerada:\n", sql_gerado)
102
- ```
103
-
104
- ## 📊 Avaliação e Desempenho
105
- O modelo foi submetido a um rigoroso benchmark empírico. A versão TerraModel 7B Q8 atingiu uma Acurácia de Execução de 82.00% no PostGIS, superando APIs comerciais como o GPT-4o-mini em cenários de inferência zero-shot focados no esquema do projeto.
106
-
107
- Para aprofundamento metodológico, métricas de Throughput de memória e validação semântica (RAGAS), consulte o artigo científico completo vinculado a este projeto.
108
-
109
- ## 🔗 Conjunto de Dados e Reprodutibilidade
110
- O dataset sintético com as 3.000 amostras (pares NL-SQL) utilizadas para a injeção de conhecimento topológico e as métricas de benchmark estão disponíveis no repositório do GitHub:
111
- 👉 [Acesse o Repositório](https://github.com/thiagonishimura/terramodel)
 
10
  - postgis
11
  - geospatial
12
  - cpu-inference
13
+ - qwen2.5-coder
14
  base_model:
15
  - Qwen/Qwen2.5-Coder-3B-Instruct
16
  - Qwen/Qwen2.5-Coder-7B-Instruct
 
21
  ## 📌 Visão Geral do Modelo
22
  O **TerraModel** é uma família de *Small Language Models* (SLMs) especializados na tradução de linguagem natural para consultas em bancos de dados relacionais espaciais (PostgreSQL/PostGIS). Este modelo foi otimizado para o domínio de monitoramento ambiental do bioma Amazônia, focado em superar o gargalo de largura de banda de memória (*Memory Bandwidth Wall*) em infraestruturas baseadas exclusivamente em processadores centrais (*CPU-only*).
23
 
24
+ Este repositório contém as versões quantizadas em formato **GGUF (4 bits e 8 bits)** dos modelos de 3B e 7B de parâmetros, permitindo inferência local de alta eficiência, com baixo consumo de RAM e garantia de privacidade na manipulação de dados governamentais sensíveis. Também disponibilizamos os pesos originais de alta precisão para inferência acelerada por GPU.
25
 
26
  ## 🛠️ Detalhes Técnicos
27
  - **Modelo Base:** Qwen2.5-Coder-Instruct (3B e 7B)
28
  - **Técnica de Fine-Tuning:** QLoRA (Parameter-Efficient Fine-Tuning)
29
+ - **Formatos de Inferência:** GGUF (via `llama.cpp` para CPU) e Safetensors (via `transformers` para GPU)
30
+ - **Quantizações Disponíveis:** Q4_K_M (INT4) e Q8_0 (INT8)
31
  - **Domínio:** Geoespacial, PostGIS, Monitoramento Ambiental (Amazônia)
32
  - **Idioma Principal:** Português (PT-BR) / SQL
33
 
34
  ## 📂 Arquivos do Repositório
 
35
 
36
+ ### Modelos Quantizados (CPU-Only)
37
+ Recomendamos o download da versão **Q4** para ambientes com restrição severa de memória (aprox. 4.68 GB de RAM necessários para o 7B) ou a versão **Q8** para um *trade-off* superior entre acurácia de execução e latência.
38
  * `terramodel-7b-q8_0.gguf`
39
  * `terramodel-7b-q4_k_m.gguf`
40
  * `terramodel-3b-q8_0.gguf`
41
  * `terramodel-3b-q4_k_m.gguf`
42
 
43
+ ### Modelos em Alta Precisão (GPU)
44
+ Para infraestruturas que contam com aceleração gráfica, os pesos fundidos (*merged*) originais estão disponíveis nas seguintes pastas:
45
+ * 📁 `terramodel-7b-bf16/`
46
+ * 📁 `terramodel-3b-bf16/`
47
 
48
+ ## 💻 Como Utilizar (Inferência Local em Python via CPU)
49
 
50
+ Para rodar o formato GGUF localmente utilizando apenas o processador, recomendamos a biblioteca `llama-cpp-python`.
 
 
 
51
 
52
+ ### Instalação
53
  ```bash
54
+ pip install llama-cpp-python