Testowanie systemu LLM z przeglądarką i noVNC
Ten dokument opisuje procedurę testowania systemu LLM z wykorzystaniem przeglądarki internetowej i noVNC. Pozwala to na wygodne testowanie API i generowanie tekstu bez konieczności instalowania dodatkowych narzędzi na komputerze lokalnym.
Wymagania
- Docker
- Dostęp do internetu (do pobierania obrazów Docker)
- Minimum 4GB RAM dla kontenera modelu LLM
Szybki start
System można uruchomić na trzy różne sposoby, w zależności od potrzeb:
1. Standardowe uruchomienie (zalecane)
./run.sh
Ten skrypt automatycznie:
- Sprawdza wymagania systemowe (Docker, docker-compose)
- Wykonuje migrację do mikrousług, jeśli nie została jeszcze wykonana
- Tworzy sieć Docker dla komunikacji między kontenerami
- Buduje i uruchamia mikrousługi (model-service i api-gateway)
- Konfiguruje środowisko testowe z noVNC i przeglądarką Firefox
- Przeprowadza testy API, aby upewnić się, że system działa poprawnie
- Wyświetla instrukcje dla użytkownika
2. Resetowanie i ręczne uruchomienie (w przypadku problemów)
./reset_and_run.sh
Ten skrypt jest przydatny, gdy występują problemy z uruchomieniem standardowym:
- Całkowicie resetuje środowisko Docker (usuwa wszystkie kontenery, obrazy i sieci związane z projektem)
- Ręcznie buduje i uruchamia kontenery, pomijając docker-compose
- Jest bardziej niezawodny w przypadku problemów z kompatybilnością Docker/docker-compose
3. Konfiguracja tylko środowiska testowego
./setup_novnc_test.sh
Ten skrypt konfiguruje tylko środowisko testowe z noVNC i przeglądarką, zakładając że mikrousługi są już uruchomione.
Zatrzymanie systemu
Aby zatrzymać i usunąć wszystkie kontenery:
./stop.sh
Ten skrypt:
- Zatrzymuje i usuwa wszystkie kontenery mikrousług
- Zatrzymuje i usuwa kontenery środowiska testowego (noVNC, przeglądarka)
- Usuwa sieć Docker
- Pyta użytkownika, czy chce usunąć katalog cache i wolumeny
Dostęp do środowiska testowego
Po uruchomieniu systemu:
- Otwórz przeglądarkę i przejdź do adresu:
http://localhost:6080
- Zaloguj się do noVNC używając hasła:
password
- W przeglądarce Firefox wewnątrz noVNC, otwórz plik:
file:///config/test_llm.html
- Możesz teraz testować API LLM:
- Wprowadź prompt w polu tekstowym
- Dostosuj parametry (temperatura, maksymalna długość)
- Kliknij “Generuj tekst”
Testowanie API bezpośrednio
Możesz również testować API bezpośrednio:
- Sprawdzenie statusu API:
curl http://localhost/api/health
- Generowanie tekstu:
curl -X POST http://localhost/api/generate \ -H "Content-Type: application/json" \ -d '{"prompt":"Opowiedz mi krótką historię o kocie.", "max_length":256, "temperature":0.7}'
Monitorowanie
Dashboard Traefik jest dostępny pod adresem:
http://localhost:8080
Pozwala on na monitorowanie statusu mikrousług i ruchu sieciowego.
Monitorowanie systemu
Aby monitorować stan usług i postęp ładowania modelu LLM, możesz użyć skryptu monitor.sh
:
./monitor.sh
Skrypt ten dostarcza informacje o:
- Statusie wszystkich kontenerów
- Postępie ładowania modelu LLM
- Dostępności API
- Zużyciu zasobów (CPU, pamięć)
- Logach z kontenerów
Opcje monitorowania
Skrypt oferuje różne tryby działania:
# Monitorowanie w czasie rzeczywistym (aktualizacja co 5 sekund)
./monitor.sh --live
# Wyświetlenie tylko podsumowania statusu
./monitor.sh --summary
# Monitorowanie procesu ładowania modelu
./monitor.sh --model
# Monitorowanie statusu API
./monitor.sh --api
# Informacje o sieci i połączeniach między kontenerami
./monitor.sh --network
# Status środowiska testowego (noVNC i przeglądarka)
./monitor.sh --novnc
# Statystyki zużycia zasobów przez kontenery
./monitor.sh --containers
# Wyświetlenie wszystkich dostępnych opcji
./monitor.sh --help
Użyj opcji --model
, aby śledzić postęp ładowania modelu LLM i sprawdzić, czy komunikat “Service Unavailable” jest spowodowany tym, że model jest jeszcze w trakcie ładowania.
Rozwiązywanie problemów
Problem z uruchomieniem kontenerów
Jeśli występują problemy z uruchomieniem kontenerów za pomocą run.sh
, użyj alternatywnego skryptu:
./reset_and_run.sh
Ten skrypt całkowicie resetuje środowisko Docker i uruchamia kontenery ręcznie, co pomaga rozwiązać problemy z kompatybilnością Docker/docker-compose.
Problem z ładowaniem modelu
Jeśli w logach kontenera llm-model-service
pojawia się błąd związany z ładowaniem modelu (np. OSError: Unable to load weights from pytorch checkpoint file
), użyj skryptu naprawczego:
sudo ./fix_model_service.sh
Ten skrypt:
- Zatrzymuje i usuwa kontener
llm-model-service
- Pobiera wszystkie niezbędne pliki modelu TinyLlama z HuggingFace
- Ustawia odpowiednie uprawnienia dla katalogu
models
- Uruchamia ponownie kontener
llm-model-service
Po uruchomieniu skryptu, możesz monitorować postęp ładowania modelu za pomocą:
./monitor.sh --model --live
Problem z dostępem do API
Jeśli podczas testów otrzymujesz odpowiedź “Service Unavailable”, może to oznaczać, że:
- Model LLM jest jeszcze w trakcie ładowania (może to potrwać kilka minut)
- Kontener
llm-model-service
nie działa poprawnie
Aby sprawdzić status modelu i API, użyj:
./monitor.sh --summary
Jeśli status modelu jest “Nieznany” lub “Ładowanie”, poczekaj kilka minut. Jeśli problem nie ustępuje, użyj skryptu naprawczego:
sudo ./fix_model_service.sh
Struktura katalogów
llm-orchestrator-min/
├── docker-compose.yml # Konfiguracja mikrousług
├── run.sh # Skrypt do standardowego uruchomienia
├── reset_and_run.sh # Skrypt do resetowania i ręcznego uruchomienia
├── stop.sh # Skrypt do zatrzymania systemu
├── setup_novnc_test.sh # Skrypt do konfiguracji środowiska testowego
├── microservices/ # Katalog z mikrousługami
│ ├── api-gateway/ # Brama API (Traefik)
│ └── model-service/ # Usługa modelu LLM
├── models/ # Katalog na pliki modeli
└── .cache/ # Katalog cache
├── pip/ # Cache pakietów pip
└── models/ # Cache pobranych modeli
Architektura systemu
System składa się z następujących komponentów:
- model-service: Mikrousługa odpowiedzialna za ładowanie modelu LLM i generowanie tekstu
- api-gateway: Brama API (Traefik) odpowiedzialna za routing żądań
- noVNC: Serwer VNC dostępny przez przeglądarkę
- browser: Kontener z przeglądarką Firefox
Komunikacja między komponentami odbywa się przez sieć Docker llm-network
.
Konfiguracja
Główne parametry konfiguracyjne:
- MODEL_PATH: Ścieżka do plików modelu (domyślnie:
/app/models/tinyllama
) - USE_INT8: Flaga włączająca kwantyzację INT8 (domyślnie:
true
) - MODEL_SERVICE_PORT: Port, na którym nasłuchuje usługa modelu (domyślnie:
5000
)