Skip to content

Commit cfa7fbb

Browse files
update
1 parent 924d5e3 commit cfa7fbb

12 files changed

Lines changed: 94182 additions & 8 deletions
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM python:3.9-slim
2+
3+
WORKDIR /app
4+
5+
RUN pip install --no-cache-dir transformers torch
6+
7+
COPY download_model.py /app/
8+
9+
CMD ["python", "download_model.py", "TinyLlama/TinyLlama-1.1B-Chat-v1.0", "/models/tinyllama"]

containers/llm-orchestrator-min/README.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,22 @@ Po uruchomieniu systemu:
5050
file:///config/test_llm.html
5151
```
5252

53-
### 3. Zatrzymanie systemu
53+
### 3. Monitorowanie systemu
54+
55+
Aby monitorować stan usług i postęp ładowania modelu LLM:
56+
57+
```bash
58+
./monitor.sh
59+
```
60+
61+
Dostępne opcje monitorowania:
62+
- `./monitor.sh --live` - monitorowanie w czasie rzeczywistym (aktualizacja co 5 sekund)
63+
- `./monitor.sh --summary` - wyświetlenie tylko podsumowania statusu
64+
- `./monitor.sh --model` - monitorowanie procesu ładowania modelu
65+
- `./monitor.sh --api` - monitorowanie statusu API
66+
- `./monitor.sh --help` - wyświetlenie wszystkich dostępnych opcji
67+
68+
### 4. Zatrzymanie systemu
5469

5570
```bash
5671
./stop.sh
@@ -66,6 +81,16 @@ Jeśli występują problemy z uruchomieniem kontenerów za pomocą `run.sh`, uż
6681

6782
Ten skrypt całkowicie resetuje środowisko Docker i uruchamia kontenery ręcznie, co pomaga rozwiązać problemy z kompatybilnością Docker/docker-compose.
6883

84+
### Problem z ładowaniem modelu
85+
86+
Jeśli model-service nie działa lub API zwraca "Service Unavailable", użyj skryptu naprawczego:
87+
88+
```bash
89+
sudo ./fix_model_service.sh
90+
```
91+
92+
Ten skrypt automatycznie pobiera niezbędne pliki modelu i ponownie uruchamia kontener model-service.
93+
6994
## Dokumentacja
7095

7196
Szczegółowa dokumentacja jest dostępna w katalogu `docs`:
@@ -82,6 +107,8 @@ llm-orchestrator-min/
82107
├── run.sh # Skrypt do standardowego uruchomienia
83108
├── reset_and_run.sh # Skrypt do resetowania i ręcznego uruchomienia
84109
├── stop.sh # Skrypt do zatrzymania systemu
110+
├── monitor.sh # Skrypt do monitorowania statusu systemu
111+
├── fix_model_service.sh # Skrypt do naprawy problemów z modelem
85112
├── setup_novnc_test.sh # Skrypt do konfiguracji środowiska testowego
86113
├── microservices/ # Katalog z mikrousługami
87114
│ ├── api-gateway/ # Brama API (Traefik)

containers/llm-orchestrator-min/docs/NOVNC_TESTING.md

Lines changed: 87 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,23 +109,103 @@ http://localhost:8080
109109

110110
Pozwala on na monitorowanie statusu mikrousług i ruchu sieciowego.
111111

112+
## Monitorowanie systemu
113+
114+
Aby monitorować stan usług i postęp ładowania modelu LLM, możesz użyć skryptu `monitor.sh`:
115+
116+
```bash
117+
./monitor.sh
118+
```
119+
120+
Skrypt ten dostarcza informacje o:
121+
- Statusie wszystkich kontenerów
122+
- Postępie ładowania modelu LLM
123+
- Dostępności API
124+
- Zużyciu zasobów (CPU, pamięć)
125+
- Logach z kontenerów
126+
127+
### Opcje monitorowania
128+
129+
Skrypt oferuje różne tryby działania:
130+
131+
```bash
132+
# Monitorowanie w czasie rzeczywistym (aktualizacja co 5 sekund)
133+
./monitor.sh --live
134+
135+
# Wyświetlenie tylko podsumowania statusu
136+
./monitor.sh --summary
137+
138+
# Monitorowanie procesu ładowania modelu
139+
./monitor.sh --model
140+
141+
# Monitorowanie statusu API
142+
./monitor.sh --api
143+
144+
# Informacje o sieci i połączeniach między kontenerami
145+
./monitor.sh --network
146+
147+
# Status środowiska testowego (noVNC i przeglądarka)
148+
./monitor.sh --novnc
149+
150+
# Statystyki zużycia zasobów przez kontenery
151+
./monitor.sh --containers
152+
153+
# Wyświetlenie wszystkich dostępnych opcji
154+
./monitor.sh --help
155+
```
156+
157+
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.
158+
112159
## Rozwiązywanie problemów
113160

114161
### Problem z uruchomieniem kontenerów
115162

116-
Jeśli występują problemy z uruchomieniem kontenerów za pomocą `run.sh`, spróbuj użyć skryptu `reset_and_run.sh`, który całkowicie resetuje środowisko Docker i uruchamia kontenery ręcznie.
163+
Jeśli występują problemy z uruchomieniem kontenerów za pomocą `run.sh`, użyj alternatywnego skryptu:
164+
165+
```bash
166+
./reset_and_run.sh
167+
```
168+
169+
Ten skrypt całkowicie resetuje środowisko Docker i uruchamia kontenery ręcznie, co pomaga rozwiązać problemy z kompatybilnością Docker/docker-compose.
170+
171+
### Problem z ładowaniem modelu
172+
173+
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:
174+
175+
```bash
176+
sudo ./fix_model_service.sh
177+
```
178+
179+
Ten skrypt:
180+
1. Zatrzymuje i usuwa kontener `llm-model-service`
181+
2. Pobiera wszystkie niezbędne pliki modelu TinyLlama z HuggingFace
182+
3. Ustawia odpowiednie uprawnienia dla katalogu `models`
183+
4. Uruchamia ponownie kontener `llm-model-service`
184+
185+
Po uruchomieniu skryptu, możesz monitorować postęp ładowania modelu za pomocą:
186+
187+
```bash
188+
./monitor.sh --model --live
189+
```
117190

118-
### Błąd "ContainerConfig"
191+
### Problem z dostępem do API
119192

120-
Jeśli pojawia się błąd `KeyError: 'ContainerConfig'`, jest to problem z kompatybilnością między wersjami Docker i docker-compose. Użyj skryptu `reset_and_run.sh`, który omija ten problem.
193+
Jeśli podczas testów otrzymujesz odpowiedź "Service Unavailable", może to oznaczać, że:
121194

122-
### API zwraca "Service Unavailable"
195+
1. Model LLM jest jeszcze w trakcie ładowania (może to potrwać kilka minut)
196+
2. Kontener `llm-model-service` nie działa poprawnie
123197

124-
Po uruchomieniu systemu, model LLM potrzebuje czasu na załadowanie (zwykle kilka minut). W tym czasie API może zwracać "Service Unavailable". Poczekaj kilka minut i spróbuj ponownie.
198+
Aby sprawdzić status modelu i API, użyj:
125199

126-
### Problemy z pamięcią
200+
```bash
201+
./monitor.sh --summary
202+
```
203+
204+
Jeśli status modelu jest "Nieznany" lub "Ładowanie", poczekaj kilka minut. Jeśli problem nie ustępuje, użyj skryptu naprawczego:
127205

128-
Model LLM wymaga minimum 4GB RAM. Jeśli kontener model-service ulega awarii, sprawdź dostępną pamięć i w razie potrzeby zwiększ limit w pliku `docker-compose.yml`.
206+
```bash
207+
sudo ./fix_model_service.sh
208+
```
129209

130210
## Struktura katalogów
131211

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/usr/bin/env python3
2+
3+
import os
4+
import sys
5+
from transformers import AutoTokenizer, AutoModelForCausalLM
6+
7+
def download_model(model_name, output_dir):
8+
"""
9+
Pobiera model i tokenizer z Hugging Face Hub i zapisuje je lokalnie.
10+
11+
Args:
12+
model_name: Nazwa modelu na Hugging Face Hub
13+
output_dir: Katalog docelowy do zapisania modelu
14+
"""
15+
print(f"Pobieranie modelu {model_name}...")
16+
17+
# Tworzenie katalogu docelowego, jeśli nie istnieje
18+
os.makedirs(output_dir, exist_ok=True)
19+
20+
# Pobieranie tokenizera
21+
print("Pobieranie tokenizera...")
22+
tokenizer = AutoTokenizer.from_pretrained(model_name)
23+
tokenizer.save_pretrained(output_dir)
24+
print("Tokenizer został pobrany i zapisany.")
25+
26+
# Pobieranie modelu
27+
print("Pobieranie modelu (to może potrwać kilka minut)...")
28+
model = AutoModelForCausalLM.from_pretrained(model_name)
29+
model.save_pretrained(output_dir)
30+
print("Model został pobrany i zapisany.")
31+
32+
# Sprawdzenie, czy wszystkie pliki zostały pobrane
33+
print("\nSprawdzanie pobranych plików:")
34+
files = os.listdir(output_dir)
35+
for file in files:
36+
file_path = os.path.join(output_dir, file)
37+
file_size = os.path.getsize(file_path)
38+
print(f"- {file}: {file_size} bajtów")
39+
40+
print(f"\nModel został pomyślnie pobrany do katalogu: {output_dir}")
41+
42+
if __name__ == "__main__":
43+
if len(sys.argv) != 3:
44+
print("Użycie: python download_model.py <model_name> <output_dir>")
45+
print("Przykład: python download_model.py TinyLlama/TinyLlama-1.1B-Chat-v1.0 ./models/tinyllama")
46+
sys.exit(1)
47+
48+
model_name = sys.argv[1]
49+
output_dir = sys.argv[2]
50+
51+
download_model(model_name, output_dir)
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
#!/bin/bash
2+
3+
# Kolory do logów
4+
GREEN='\033[0;32m'
5+
RED='\033[0;31m'
6+
BLUE='\033[0;34m'
7+
BOLD='\033[1m'
8+
NC='\033[0m' # No Color
9+
10+
# Funkcje do logowania
11+
log_info() {
12+
echo -e "${GREEN}[INFO]${NC} $1"
13+
}
14+
15+
log_error() {
16+
echo -e "${RED}[ERROR]${NC} $1"
17+
}
18+
19+
# Sprawdzenie, czy katalog models/tinyllama istnieje
20+
if [ ! -d "./models/tinyllama" ]; then
21+
log_info "Tworzenie katalogu models/tinyllama..."
22+
mkdir -p ./models/tinyllama
23+
fi
24+
25+
# Funkcja do pobierania modelu za pomocą kontenera Docker
26+
download_model_with_docker() {
27+
log_info "Pobieranie modelu za pomocą kontenera Docker..."
28+
29+
# Tworzenie tymczasowego pliku Dockerfile
30+
cat > Dockerfile.model_downloader << EOF
31+
FROM python:3.9-slim
32+
33+
WORKDIR /app
34+
35+
RUN pip install --no-cache-dir transformers torch
36+
37+
COPY download_model.py /app/
38+
39+
CMD ["python", "download_model.py", "TinyLlama/TinyLlama-1.1B-Chat-v1.0", "/models/tinyllama"]
40+
EOF
41+
42+
# Budowanie obrazu Docker
43+
log_info "Budowanie obrazu Docker do pobierania modelu..."
44+
docker build -t model-downloader -f Dockerfile.model_downloader .
45+
46+
if [ $? -ne 0 ]; then
47+
log_error "Błąd podczas budowania obrazu Docker."
48+
return 1
49+
fi
50+
51+
# Uruchamianie kontenera do pobierania modelu
52+
log_info "Uruchamianie kontenera do pobierania modelu..."
53+
docker run --rm -v "$(pwd)/models:/models" model-downloader
54+
55+
if [ $? -ne 0 ]; then
56+
log_error "Błąd podczas pobierania modelu."
57+
return 1
58+
fi
59+
60+
# Usuwanie tymczasowego pliku Dockerfile
61+
rm -f Dockerfile.model_downloader
62+
63+
return 0
64+
}
65+
66+
# Główna funkcja
67+
main() {
68+
log_info "Rozpoczynanie pobierania modelu..."
69+
70+
# Sprawdzenie, czy model jest już poprawnie pobrany
71+
if [ ! -f "./models/tinyllama/pytorch_model.bin" ] || [ $(stat -c%s "./models/tinyllama/pytorch_model.bin") -lt 1000000 ]; then
72+
log_info "Model nie jest poprawnie pobrany. Pobieranie modelu..."
73+
74+
# Pobieranie modelu za pomocą kontenera Docker
75+
download_model_with_docker
76+
77+
if [ $? -ne 0 ]; then
78+
log_error "Nie udało się pobrać modelu."
79+
log_info "Spróbuj pobrać model ręcznie i umieść go w katalogu ./models/tinyllama/"
80+
exit 1
81+
fi
82+
else
83+
log_info "Model jest już poprawnie pobrany."
84+
fi
85+
86+
# Sprawdzenie, czy wszystkie pliki zostały pobrane
87+
log_info "Sprawdzanie, czy wszystkie pliki modelu zostały poprawnie pobrane..."
88+
local all_files_ok=true
89+
90+
for file in config.json generation_config.json tokenizer.json tokenizer_config.json pytorch_model.bin; do
91+
if [ ! -f "./models/tinyllama/$file" ] || [ $(stat -c%s "./models/tinyllama/$file") -eq 0 ]; then
92+
log_error "Plik $file nie istnieje lub jest pusty."
93+
all_files_ok=false
94+
else
95+
log_info "Plik $file OK ($(stat -c%s "./models/tinyllama/$file") bajtów)"
96+
fi
97+
done
98+
99+
if [ "$all_files_ok" = false ]; then
100+
log_error "Nie wszystkie pliki modelu zostały poprawnie pobrane. Spróbuj ponownie."
101+
exit 1
102+
fi
103+
104+
log_info "Model został pomyślnie pobrany."
105+
}
106+
107+
# Uruchomienie głównej funkcji
108+
main

0 commit comments

Comments
 (0)