Training_CPU / README.md
Fedir-Ilina's picture
Update README.md
5e546f8 verified
|
Raw
History Blame Contribute Delete
7.42 kB
---
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*