Spaces:
Sleeping
Sleeping
| 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* | |