End-to-end LLM model building, fine-tuning, and deployment toolkit
Project description
license: apache-2.0 base_model:
- mistralai/Mistral-7B-Instruct-v0.3 pipeline_tag: translation tags:
- llm
- devops
- development
- polish
- english
- python
- iac
🚀 WronAI - End-to-End LLM Toolkit
Kompletne narzędzie do tworzenia, dostrajania i wdrażania własnych modeli językowych opartych na Mistral 7B, z pełnym wsparciem dla języka polskiego.
WronAI to kompleksowe narzędzie do budowania, dostrajania i wdrażania dużych modeli językowych (LLM) z obsługą Hugging Face i Ollama.
📋 Spis treści
🌟 Funkcje
- Gotowy model WronAI - Działa od razu po zainstalowaniu
- Dostosowywanie - Możliwość dostrojenia pod własne potrzeby
- Obsługa wielu modeli - Wsparcie dla modeli Hugging Face i Ollama
- Optymalizacje - 4-bitowa kwantyzacja, LoRA, FP16
- Interfejs CLI - Łatwe w użyciu narzędzia wiersza poleceń
- Gotowy do produkcji - Łatwe wdrożenie z Dockerem
🚀 Szybki start
Wymagania wstępne
- Python 3.8+
- Ollama (zalecane)
- CUDA (opcjonalne, do akceleracji GPU)
Instalacja
Z użyciem pip
pip install wronai
Ze źródeł
# 1. Sklonuj repozytorium
git clone https://github.com/wronai/llm-demo.git
cd llm-demo
# 2. Zainstaluj zależności
pip install -e .[dev]
💻 Użycie
Podstawowe użycie
Uruchomienie modelu WronAI
# Upewnij się, że Ollama jest uruchomiony
ollama serve &
# Uruchom model
ollama run wronai "Cześć! Jak mogę Ci pomóc?"
Lista dostępnych modeli
ollama ls
Przykłady użycia
Rozmowa z modelem przez API
import requests
response = requests.post(
"http://localhost:11434/api/generate",
json={
"model": "wronai",
"prompt": "Napisz krótki wiersz o sztucznej inteligencji"
}
)
print(response.json()["response"])
Integracja z Pythonem
from transformers import pipeline
# Załaduj model
pipe = pipeline("text-generation", model="wronai")
# Wygeneruj tekst
result = pipe("Jakie są zalety uczenia maszynowego?")
print(result[0]["generated_text"])
Dostosowywanie modelu
- Przygotuj dane treningowe w formacie JSONL:
{"instruction": "Napisz wiadomość powitalną", "input": "", "output": "Witaj! Jak mogę Ci pomóc?"}
{"instruction": "Wyjaśnij czym jest AI", "input": "", "output": "Sztuczna inteligencja to dziedzina informatyki..."}
- Uruchom proces dostrajania:
wronai model hf train --config config.yaml --output-dir output
Przykładowa konfiguracja (config.yaml):
model_name: "mistralai/Mistral-7B-v0.1"
model_type: "huggingface"
use_4bit: true
training_args:
learning_rate: 2e-4
per_device_train_batch_size: 4
gradient_accumulation_steps: 4
num_train_epochs: 3
save_steps: 100
output_dir: "output"
🛠️ Rozwój
Konfiguracja środowiska
- Sklonuj repozytorium:
git clone https://github.com/wronai/llm-demo.git
cd llm-demo
- Zainstaluj zależności deweloperskie:
pip install -e ".[dev]"
pre-commit install
Uruchamianie testów
make test
Formatowanie kodu
make format # Automatyczne formatowanie kodu
make lint # Sprawdzenie stylu kodu
make typecheck # Sprawdzenie typów
📄 Licencja
Ten projekt jest dostępny na licencji Apache 2.0.
📧 Kontakt
W sprawie pytań lub wsparcia, prosimy o kontakt: info@softreck.dev
💻 Przykłady kodu
Rozmowa z modelem
import requests
response = requests.post(
"http://localhost:11434/api/generate",
json={
"model": "wronai",
"prompt": "Napisz krótki wiersz o sztucznej inteligencji"
}
)
print(response.json()["response"])
Integracja z Pythonem
from transformers import pipeline
# Załaduj model
pipe = pipeline("text-generation", model="wronai")
# Wygeneruj tekst
result = pipe("Jakie są zalety uczenia maszynowego?")
print(result[0]["generated_text"])
✨ Funkcje
- Gotowy model WronAI - Działa od razu po zainstalowaniu
- Dostosowywanie - Możliwość dostrojenia pod własne potrzeby
- Interfejs webowy - Prosty interfejs do rozmowy z modelem
- Obsługa GPU - Pełne wsparcie dla akceleracji sprzętowej
- Gotowy do produkcji - Łatwe wdrożenie z Dockerem
🛠️ Wymagania
- System operacyjny: Linux, macOS lub Windows (z WSL2)
- RAM: Minimum 16GB (32GB zalecane)
- Dysk: Minimum 10GB wolnego miejsca
- Karta graficzna: NVIDIA z obsługą CUDA (opcjonalnie)
📁 Struktura projektu
llm-demo/
├── app/ # Aplikacja Streamlit
│ └── main.py # Główny plik aplikacji
├── models/ # Modele i wagi
├── data/ # Zbiory danych
├── scripts/ # Przydatne skrypty
├── docker-compose.yml # Konfiguracja Docker Compose
├── Dockerfile # Konfiguracja kontenera
├── requirements.txt # Zależności Pythona
├── model_requirements.txt # Zależności do modeli
└── README.md # Ten plik
🚀 Użycie
Uruchomienie modelu WronAI
Upewnij się, że Ollama jest uruchomiony
ollama serve &
ollama ls
NAME ID SIZE MODIFIED
wronai:latest 31e7f35ae14a 4.1 GB 3 hours ago
mistral:7b-instruct f974a74358d6 4.1 GB 3 hours ago
codellama:7b 8fdf8f752f6e 3.8 GB 3 days ago
Uruchom model WronAI
ollama run wronai "Cześć! Jak mogę Ci pomóc?"
### Dostosowywanie modelu
1. Przygotuj dane treningowe w formacie JSONL:
```json
{"instruction": "Napisz wiadomość powitalną", "input": "", "output": "Witaj! Jak mogę Ci pomóc?"}
{"instruction": "Wyjaśnij czym jest AI", "input": "", "output": "Sztuczna inteligencja to dziedzina informatyki..."}
- Uruchom proces dostrajania:
python create_custom_model.py
- Wybierz odpowiednią opcję z menu.
Krok 2: Przygotowanie danych
python create_custom_model.py
# Wybierz opcję 1: Stwórz sample dataset
Przykład danych treningowych:
[
{
"instruction": "Jak nazywa się stolica Polski?",
"input": "",
"output": "Stolica Polski to Warszawa."
},
{
"instruction": "Wyjaśnij czym jest sztuczna inteligencja",
"input": "",
"output": "Sztuczna inteligencja (AI) to dziedzina informatyki..."
}
]
Krok 3: Fine-tuning modelu
# Uruchom fine-tuning (wymaga GPU)
python create_custom_model.py
# Wybierz opcję 2: Fine-tune model
# Lub pełny pipeline
python create_custom_model.py
# Wybierz opcję 6: Pełny pipeline
Optymalizacje dla RTX 3050:
- 4-bit quantization
- LoRA (Low-Rank Adaptation)
- Batch size = 1
- Gradient accumulation = 4
- Mixed precision (FP16)
Krok 4: Konwersja do GGUF
# Automatycznie generowany skrypt
./convert_to_gguf.sh
Krok 5: Stworzenie modelu w Ollama
# Utwórz Modelfile
python create_custom_model.py # wybierz opcję 4
# Stwórz model w Ollama
ollama create wronai -f Modelfile
# Uruchom model
ollama run wronai
Uruchamianie skryptu
Skrypt create_custom_model.py oferuje interaktywne menu z następującymi opcjami:
python create_custom_model.py
Dostępne opcje:
- Stwórz przykładowy dataset
- Wykonaj fine-tuning modelu
- Konwertuj model do formatu GGUF
- Utwórz Modelfile dla Ollama
- Opublikuj model na Hugging Face
- Wykonaj pełny pipeline (1-5)
Wymagania wstępne
- Python 3.8+
- PyTorch z obsługą CUDA (zalecane)
- Biblioteki wymienione w
model_requirements.txt - Konto na Hugging Face (do publikacji modelu)
Rozwiązywanie problemów
Błąd składni w skrypcie
Jeśli napotkasz błąd składni, upewnij się, że:
- Używasz Pythona 3.8 lub nowszego
- Wszystkie zależności są zainstalowane
- Plik nie został uszkodzony podczas pobierania
Problemy z zależnościami
# Utwórz i aktywuj środowisko wirtualne
python -m venv .venv
source .venv/bin/activate # Linux/Mac
.venv\Scripts\activate # Windows
# Zainstaluj zależności
pip install -r model_requirements.txt
Brakujące uprawnienia
Jeśli napotkasz problemy z uprawnieniami, spróbuj:
# Nadaj uprawnienia do wykonywania skryptów
chmod +x *.sh
# Uruchom z uprawnieniami administratora (jeśli potrzebne)
sudo python create_custom_model.py
Kontrybucja
Zapraszamy do zgłaszania problemów i propozycji zmian poprzez Issues i Pull Requests.
Test modelu
ollama run wronai "Cześć! Kim jesteś?"
make model-run
### Krok 6: Publikacja modelu
#### **Opcja A: Ollama Registry**
```bash
# Push do Ollama Library
ollama push wronai
# Teraz każdy może użyć:
ollama pull your-username/wronai
Opcja B: Hugging Face Hub
# Publikacja na HF
python publish_to_hf.py
# Model dostępny na:
# https://huggingface.co/your-username/my-custom-mistral-7b
Opcja C: Docker Registry
# Spakuj do Docker image
docker build -t my-custom-llm .
docker tag my-custom-llm your-registry/my-custom-llm
docker push your-registry/my-custom-llm
🎯 CZĘŚĆ 3: Gotowe alternatywy (zero kodu)
1. Najprostsze - Ollama
# Instalacja
curl -fsSL https://ollama.ai/install.sh | sh
# Uruchomienie modelu
ollama run mistral:7b-instruct
# API automatycznie na localhost:11434
2. Hugging Face Inference API
import requests
headers = {"Authorization": "Bearer YOUR_HF_TOKEN"}
response = requests.post(
"https://api-inference.huggingface.co/models/mistralai/Mistral-7B-Instruct-v0.1",
headers=headers,
json={"inputs": "Hello!"}
)
3. Groq (ultra szybkie)
from openai import OpenAI
client = OpenAI(
api_key="YOUR_GROQ_KEY",
base_url="https://api.groq.com/openai/v1"
)
response = client.chat.completions.create(
model="mistral-7b-instruct",
messages=[{"role": "user", "content": "Hello!"}]
)
4. Together.ai
from openai import OpenAI
client = OpenAI(
api_key="YOUR_TOGETHER_KEY",
base_url="https://api.together.xyz/v1"
)
# Kompatybilne z OpenAI API
5. Modal.com (serverless GPU)
import modal
stub = modal.Stub("llm-api")
@stub.function(gpu="T4")
def generate(prompt: str):
# Twój kod modelu
return model.generate(prompt)
# Deploy jedną komendą
# modal deploy
🚀 Wdrażanie
Z Dockerem
# Zbuduj i uruchom kontenery
docker-compose up --build
# Tylko budowanie
# docker-compose build
# Uruchomienie w tle
# docker-compose up -d
# Wyświetl logi
# docker-compose logs -f
Konfiguracja środowiska produkcyjnego
-
Nginx jako reverse proxy
server { listen 80; server_name twojadomena.pl; location / { proxy_pass http://localhost:8501; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
-
Konfiguracja systemd
# /etc/systemd/system/wronai.service [Unit] Description=WronAI Service After=network.target [Service] User=www-data WorkingDirectory=/path/to/llm-demo ExecStart=/usr/bin/docker-compose up Restart=always [Install] WantedBy=multi-user.target
-
Monitorowanie
- Użyj
docker statsdo monitorowania zużycia zasobów - Skonfiguruj alerty w przypadku awarii
- Regularnie sprawdzaj logi aplikacji
- Użyj
🛠️ Utrzymanie i rozwój
Testowanie
# Uruchom testy jednostkowe
pytest tests/
# Sprawdź jakość kodu
flake8 .
# Sprawdź bezpieczeństwo zależności
safety check
Wersjonowanie
Używamy SemVer do wersjonowania. Dostępne wersje możesz zobaczyć w tagach repozytorium.
🤝 Kontrybucja
- Sforkuj repozytorium
- Utwórz nowy branch (
git checkout -b feature/nowa-funkcjonalnosc) - Zatwierdź zmiany (
git commit -am 'Dodano nową funkcjonalność') - Wypchnij zmiany (
git push origin feature/nowa-funkcjonalnosc) - Otwórz Pull Request
📜 Licencja
Ten projekt jest dostępny na licencji MIT - zobacz plik LICENSE aby poznać szczegóły.
📞 Kontakt
- Strona internetowa: wronai.pl
- Email: kontakt@wronai.pl
- Twitter: @wronai
Made with ❤️ by WronAI Team
Jeśli podoba Ci się ten projekt, daj nam ⭐ na GitHubie!
1. Streamlit (Python)
import streamlit as st
st.title("My LLM Chat")
prompt = st.text_input("Message:")
if st.button("Send"):
response = generate(prompt)
st.write(response)
2. Gradio (Python)
import gradio as gr
def chat(message, history):
response = generate(message)
history.append([message, response])
return "", history
gr.ChatInterface(chat).launch()
3. Next.js + Vercel AI SDK
import { useChat } from 'ai/react'
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit } = useChat()
return (
<div>
{messages.map(m => <div key={m.id}>{m.content}</div>)}
<form onSubmit={handleSubmit}>
<input value={input} onChange={handleInputChange} />
</form>
</div>
)
}
🎯 CZĘŚĆ 5: Porównanie rozwiązań
| Rozwiązanie | Setup Time | Kód | Hosting | GPU |
|---|---|---|---|---|
| Ollama + Streamlit | 2 min | 50 linijek | Local/Docker | Optional |
| Hugging Face API | 30 sec | 5 linijek | Cloud | No |
| Groq API | 1 min | 5 linijek | Cloud | No |
| Modal.com | 5 min | 20 linijek | Serverless | Auto |
| Custom Fine-tuning | 2 hours | 200 linijek | Self-hosted | Required |
🛠️ Debugging & Tips
Typowe problemy
# Model nie ładuje się
docker logs ollama-engine
# Brak GPU
docker run --rm --gpus all nvidia/cuda:11.8-base nvidia-smi
# Port zajęty
sudo netstat -tlnp | grep 11434
# Restart wszystkiego
docker compose down && docker compose up -d
Optymalizacje RTX 3050
# W fine-tuningu
model = AutoModelForCausalLM.from_pretrained(
model_name,
load_in_4bit=True, # 4-bit quantization
torch_dtype=torch.float16 # Half precision
)
# Training args
TrainingArguments(
per_device_train_batch_size=1, # Mały batch
gradient_accumulation_steps=4, # Gradients accumulation
fp16=True # Mixed precision
)
Monitoring zasobów
# GPU monitoring
watch -n 1 nvidia-smi
# Container resources
docker stats
# Model memory usage
docker exec -it ollama-engine ollama ps
🎯 Następne kroki
Dla nauki:
- Eksperymentuj z różnymi modelami - Llama, CodeLlama, Phi-3
- Testuj różne techniki fine-tuningu - LoRA, QLoRA, Full fine-tuning
- Dodaj RAG - Retrieval Augmented Generation
- Stwórz multi-agent system
Dla produkcji:
- Przejdź na managed service - Groq, Together.ai
- Setup monitoring - LangSmith, Weights & Biases
- Dodaj cache - Redis dla odpowiedzi
- Implement rate limiting
Dla biznesu:
- Fine-tune na własnych danych
- Setup A/B testing różnych modeli
- Dodaj feedback loop od użytkowników
- Monetize API
🎉 Podsumowanie
Wybierz opcję według potrzeb:
- Demo/nauka: Ollama + Streamlit (to rozwiązanie)
- Prototyp: Hugging Face API + Gradio
- MVP: Groq API + Next.js
- Produkcja: Modal/RunPod + custom frontend
- Enterprise: Fine-tuned model + własna infrastruktura
Minimalne rozwiązanie = 5 plików, 50 linijek kodu, 2 minuty setup!
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wronai-0.1.1.tar.gz.
File metadata
- Download URL: wronai-0.1.1.tar.gz
- Upload date:
- Size: 30.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.4 Linux/6.14.9-300.fc42.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d16dfb5581e5726f817a2fa477815c3692a70b84d26316666a98c4f74b64007
|
|
| MD5 |
94527fd96f0c53556ffd4a66eed94eea
|
|
| BLAKE2b-256 |
782ad54dbe3beda90f27f0d4dbff2c1013aa9450d426fcda88d2ec57817dca1a
|
File details
Details for the file wronai-0.1.1-py3-none-any.whl.
File metadata
- Download URL: wronai-0.1.1-py3-none-any.whl
- Upload date:
- Size: 29.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.4 Linux/6.14.9-300.fc42.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95edf6046b2e76717fe93e3214f143629b97e7884f7cd89df5aa3abe1dc92cba
|
|
| MD5 |
65995ef7d699c40862f9430d8dca5b92
|
|
| BLAKE2b-256 |
f9c7611fc13e801710d20229225d963f14a328452f596429d01f1fb755bfb0a8
|