Spaces:
Sleeping
Sleeping
File size: 7,424 Bytes
f990c3d 5e546f8 eddad46 f990c3d eddad46 f990c3d eddad46 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | ---
title: Training CPU
emoji: 🧠
colorFrom: blue
colorTo: green
sdk: docker
app_port: 7860
pinned: false
---
# 🧠 CPU Fine-Tuning Interface
**[EN]** A complete web interface for fine-tuning language models on CPU using LoRA/PEFT, with dataset creation, training monitoring, model evaluation chat, and GGUF export.
**[PT]** Interface web completa para fine-tuning de modelos de linguagem em CPU com LoRA/PEFT, criação de datasets, monitorização do treino, chat de avaliação e exportação GGUF.
---
## 🇬🇧 English
### Features
- **Dynamic Configuration** — displays hardware info and training parameters loaded from `app.py` (read-only)
- **GGUF Converter** — converts merged model to GGUF format (F16 original size or Q8_0 ~50% size)
- **Dataset Creator** — processes PDF, TXT, DOCX, MD, JSONL and MediaWiki XML files into training datasets
- **Train AI** — start, monitor and control fine-tuning with LoRA on CPU
- **Training Logs** — real-time log viewer with progress bar and ETA
- **Model Chat** — evaluate the trained model directly in the interface after merge
- **Output Directory** — browse and download all generated files
### How to Use
1. **Configure** — the left panel shows your current hardware and training parameters
2. **Create Dataset** — upload a document and configure chunking, schema and cleaning options
3. **Train** — enter the base model path and training files, set epochs and click **Start Training**
4. **Monitor** — watch the progress bar, step counter, elapsed time and ETA in real time
5. **Merge** — after training completes, click **Merge** to combine base model + LoRA adapter
6. **Chat** — test the merged model directly in the chat panel
7. **Export GGUF** — convert to GGUF for use with llama.cpp, Ollama or LM Studio
### Supported Input Formats (Dataset)
| Format | Description |
|--------|-------------|
| `.pdf` | PDF documents (text extraction + optional OCR) |
| `.txt` | Plain text files |
| `.docx` | Microsoft Word documents |
| `.md` | Markdown files |
| `.jsonl` | Existing JSONL datasets (passthrough + cleaning) |
| `.xml` | MediaWiki dumps (Wikipedia, government wikis) |
### Dataset Schemas
| Schema | Description |
|--------|-------------|
| `text` | Plain text only — simplest format |
| `lite` | Text + basic metadata (id, doc_id) |
| `full` | Everything including tables and extraction method |
| `prompt_completion` | Instruction/response format for directed fine-tuning |
### GGUF Export
After merging, enter the merged model path and choose:
- **F16** — original size, full precision, best quality
- **Q8_0** — ~50% smaller, near-lossless quality, faster inference
Requires `convert_hf_to_gguf.py` and `gguf-py/` folder in the Space root (from [llama.cpp](https://github.com/ggml-org/llama.cpp)).
### Technical Stack
- **Backend**: Flask + Python
- **Training**: HuggingFace Transformers + PEFT (LoRA)
- **Dataset**: Custom processor (PyMuPDF, python-docx, pandas)
- **Frontend**: Vanilla JS + Tailwind CSS
- **Hardware**: CPU-only (optimised for multi-core, dynamic RAM management)
### Notes
- This Space is designed for **testing and portfolio demonstration**
- For serious training, use a GPU or a local machine with XPU/CUDA
- Training a 1B parameter model on CPU takes approximately 100–150 hours per epoch
- The dynamic accumulation system automatically adjusts gradient accumulation based on available RAM
---
## 🇵🇹 Português
### Funcionalidades
- **Configuração Dinâmica** — mostra informação de hardware e parâmetros de treino carregados do `app.py` (só leitura)
- **Conversor GGUF** — converte modelo merged para formato GGUF (F16 tamanho original ou Q8_0 ~50% do tamanho)
- **Criador de Datasets** — processa ficheiros PDF, TXT, DOCX, MD, JSONL e XML MediaWiki em datasets de treino
- **Treinar IA** — iniciar, monitorizar e controlar o fine-tuning com LoRA em CPU
- **Logs de Treino** — visualizador de logs em tempo real com barra de progresso e ETA
- **Chat do Modelo** — avaliar o modelo treinado directamente na interface após merge
- **Directório de Output** — navegar e descarregar todos os ficheiros gerados
### Como Usar
1. **Configurar** — o painel esquerdo mostra o teu hardware actual e parâmetros de treino
2. **Criar Dataset** — carrega um documento e configura chunking, schema e opções de limpeza
3. **Treinar** — introduz o caminho do modelo base e ficheiros de treino, define as épocas e clica em **Start Training**
4. **Monitorizar** — acompanha a barra de progresso, contador de passos, tempo decorrido e ETA em tempo real
5. **Merge** — após o treino terminar, clica em **Merge** para combinar modelo base + adaptador LoRA
6. **Chat** — testa o modelo merged directamente no painel de chat
7. **Exportar GGUF** — converte para GGUF para uso com llama.cpp, Ollama ou LM Studio
### Formatos de Entrada Suportados (Dataset)
| Formato | Descrição |
|---------|-----------|
| `.pdf` | Documentos PDF (extracção de texto + OCR opcional) |
| `.txt` | Ficheiros de texto simples |
| `.docx` | Documentos Microsoft Word |
| `.md` | Ficheiros Markdown |
| `.jsonl` | Datasets JSONL existentes (passthrough + limpeza) |
| `.xml` | Dumps MediaWiki (Wikipedia, wikis governamentais) |
### Schemas de Dataset
| Schema | Descrição |
|--------|-----------|
| `text` | Só texto — formato mais simples |
| `lite` | Texto + metadados básicos (id, doc_id) |
| `full` | Tudo incluindo tabelas e método de extracção |
| `prompt_completion` | Formato instrução/resposta para fine-tuning dirigido |
### Exportação GGUF
Após o merge, introduz o caminho do modelo merged e escolhe:
- **F16** — tamanho original, precisão total, melhor qualidade
- **Q8_0** — ~50% menor, qualidade quase sem perda, inferência mais rápida
Requer `convert_hf_to_gguf.py` e pasta `gguf-py/` na raiz do Space (do repositório [llama.cpp](https://github.com/ggml-org/llama.cpp)).
### Stack Técnico
- **Backend**: Flask + Python
- **Treino**: HuggingFace Transformers + PEFT (LoRA)
- **Dataset**: Processador personalizado (PyMuPDF, python-docx, pandas)
- **Frontend**: Vanilla JS + Tailwind CSS
- **Hardware**: CPU apenas (optimizado para multi-core, gestão dinâmica de RAM)
### Notas
- Este Space foi criado para **testes e demonstração de portfolio**
- Para treino sério, usa uma GPU ou máquina local com XPU/CUDA
- Treinar um modelo de 1B parâmetros em CPU demora aproximadamente 100–150 horas por época
- O sistema de acumulação dinâmica ajusta automaticamente o gradient accumulation com base na RAM disponível
---
## 📁 File Structure / Estrutura de Ficheiros
```
app.py # Main Flask application
config_manager.py # Dynamic configuration manager
pdf_txt_to_dataset.py # Dataset processor
dataset_endpoints.py # Dataset API endpoints
gguf_endpoints.py # GGUF conversion endpoints
convert_hf_to_gguf.py # llama.cpp conversion script
gguf-py/ # llama.cpp GGUF library
requirements.txt # Python dependencies
templates/
index.html # Web interface
```
## 📦 Dependencies / Dependências
```
torch (CPU)
transformers
peft
accelerate
datasets
flask
pymupdf
pandas
python-docx
gguf
sentencepiece
tensorboard
psutil
py-cpuinfo
```
---
*Built with ❤️ for CPU fine-tuning experimentation*
|