forked from ShaerWare/AI_Secretary_System
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstart_gpu.sh
More file actions
executable file
·251 lines (224 loc) · 7.72 KB
/
start_gpu.sh
File metadata and controls
executable file
·251 lines (224 loc) · 7.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
#!/bin/bash
# Запуск AI Secretary System на RTX 3060 (GPU 1)
# XTTS (Марина) + vLLM работают вместе на одном GPU
#
# Доступные модели:
# ./start_gpu.sh # Qwen2.5-7B + Lydia LoRA (default)
# ./start_gpu.sh --llama # Llama-3.1-8B GPTQ
# ./start_gpu.sh --deepseek # DeepSeek-V2-Lite или DeepSeek-LLM-7B
#
# Распределение памяти RTX 3060 (12GB):
# vLLM: 50% = ~6GB
# XTTS: остаток ~5GB
#
# Порты:
# 8002: Orchestrator (главный API)
# 11434: vLLM (OpenAI-compatible API)
cd "$(dirname "$0")"
# Определяем модель (по умолчанию Qwen)
MODEL="qwen"
# LoRA adapter path (symlink to /home/shaerware/qwen-finetune/qwen2.5-7b-lydia-lora)
LORA_PATH="$(dirname "$0")/finetune/adapters/qwen2.5-7b-lydia-lora/final"
# Парсинг аргументов
case "$1" in
--llama)
MODEL="llama"
;;
--deepseek)
MODEL="deepseek"
;;
--help|-h)
echo "Usage: $0 [--qwen|--llama|--deepseek]"
echo ""
echo "Models:"
echo " (default) Qwen2.5-7B-AWQ + Lydia LoRA"
echo " --llama Llama-3.1-8B-Instruct GPTQ"
echo " --deepseek DeepSeek-LLM-7B-Chat"
exit 0
;;
esac
echo "=========================================="
echo " AI Secretary System - GPU Mode"
echo " RTX 3060 (12GB)"
echo "=========================================="
echo ""
case "$MODEL" in
qwen)
echo " LLM: Qwen2.5-7B-AWQ + Lydia LoRA (default)"
echo " LoRA: $LORA_PATH"
;;
llama)
echo " LLM: Llama-3.1-8B-Instruct GPTQ"
;;
deepseek)
echo " LLM: DeepSeek-LLM-7B-Chat"
;;
esac
echo ""
echo " Сервисы:"
echo " - Orchestrator + XTTS: http://localhost:8002"
echo " - vLLM: http://localhost:11434"
echo ""
echo " GPU memory:"
echo " - vLLM: 50% (~6GB)"
echo " - XTTS: ~5GB"
echo ""
echo "=========================================="
# Создаём папку для логов
mkdir -p logs
# Функция для остановки всех процессов
cleanup() {
echo ""
echo "Остановка сервисов..."
kill $VLLM_PID $ORCHESTRATOR_PID 2>/dev/null
exit 0
}
trap cleanup SIGINT SIGTERM
# Устанавливаем GPU 1 (RTX 3060) для всех процессов
# ВАЖНО: CUDA_DEVICE_ORDER=PCI_BUS_ID чтобы GPU нумеровались правильно
export CUDA_DEVICE_ORDER=PCI_BUS_ID
export CUDA_VISIBLE_DEVICES=1
# 1. Запуск vLLM (фоновый процесс)
echo "[1/2] Запуск vLLM..."
case "$MODEL" in
qwen)
echo " Модель: Qwen2.5-7B-AWQ + Lydia LoRA"
echo " Память GPU: 50%"
# Проверка LoRA (не критично - работает и без)
LORA_ARGS=""
if [ -f "$LORA_PATH/adapter_config.json" ]; then
echo " LoRA: найден"
LORA_ARGS="--enable-lora --lora-modules lydia=$LORA_PATH"
else
echo " ⚠ LoRA adapter not found at $LORA_PATH"
echo " Running Qwen without LoRA..."
fi
(
export CUDA_DEVICE_ORDER=PCI_BUS_ID
export CUDA_VISIBLE_DEVICES=1
source ~/vllm_env/venv/bin/activate
vllm serve "Qwen/Qwen2.5-7B-Instruct-AWQ" \
--gpu-memory-utilization 0.50 \
--max-model-len 4096 \
--dtype float16 \
--max-num-seqs 32 \
--port 11434 \
--enforce-eager \
--trust-remote-code \
$LORA_ARGS
) > logs/vllm.log 2>&1 &
;;
llama)
echo " Модель: Llama-3.1-8B-Instruct GPTQ INT4"
echo " Память GPU: 50%"
(
export CUDA_DEVICE_ORDER=PCI_BUS_ID
export CUDA_VISIBLE_DEVICES=1
source ~/vllm_env/venv/bin/activate
vllm serve "fbaldassarri/meta-llama_Llama-3.1-8B-Instruct-auto_gptq-int4-gs128-sym" \
--gpu-memory-utilization 0.50 \
--max-model-len 4096 \
--quantization gptq \
--dtype float16 \
--max-num-seqs 32 \
--port 11434 \
--enforce-eager \
--trust-remote-code
) > logs/vllm.log 2>&1 &
;;
deepseek)
echo " Модель: DeepSeek-LLM-7B-Chat"
echo " Память GPU: 50%"
(
export CUDA_DEVICE_ORDER=PCI_BUS_ID
export CUDA_VISIBLE_DEVICES=1
source ~/vllm_env/venv/bin/activate
vllm serve "deepseek-ai/deepseek-llm-7b-chat" \
--gpu-memory-utilization 0.50 \
--max-model-len 4096 \
--dtype float16 \
--max-num-seqs 32 \
--port 11434 \
--enforce-eager \
--trust-remote-code
) > logs/vllm.log 2>&1 &
;;
esac
VLLM_PID=$!
echo " PID: $VLLM_PID, лог: logs/vllm.log"
# Ждём пока vLLM запустится
echo " Ожидание запуска vLLM (может занять 30-90 сек)..."
for i in {1..120}; do
if curl -s http://localhost:11434/health > /dev/null 2>&1; then
echo " ✓ vLLM готов!"
break
fi
if ! kill -0 $VLLM_PID 2>/dev/null; then
echo " ✗ vLLM упал! Проверьте logs/vllm.log"
tail -30 logs/vllm.log
exit 1
fi
sleep 2
done
# Проверяем финальный статус vLLM
if ! curl -s http://localhost:11434/health > /dev/null 2>&1; then
echo " ⚠ vLLM не ответил за 240 сек, продолжаем..."
fi
# 2. Запуск Orchestrator с XTTS (основной процесс)
echo ""
echo "[2/2] Запуск Orchestrator + XTTS..."
echo " XTTS загрузится на оставшуюся память GPU"
export COQUI_TOS_AGREED=1
export LLM_BACKEND=vllm # Указываем использовать vLLM вместо Gemini
export VLLM_API_URL=http://localhost:11434
# Передаём информацию о модели для правильного выбора имени
case "$MODEL" in
qwen)
export VLLM_MODEL_NAME="lydia" # LoRA adapter name
;;
llama)
export VLLM_MODEL_NAME="" # Auto-detect
;;
deepseek)
export VLLM_MODEL_NAME="" # Auto-detect
;;
esac
./venv/bin/python orchestrator.py > logs/orchestrator.log 2>&1 &
ORCHESTRATOR_PID=$!
echo " PID: $ORCHESTRATOR_PID, лог: logs/orchestrator.log"
# Ждём пока orchestrator запустится
echo " Ожидание запуска Orchestrator..."
for i in {1..60}; do
if curl -s http://localhost:8002/health > /dev/null 2>&1; then
echo " ✓ Orchestrator готов!"
break
fi
if ! kill -0 $ORCHESTRATOR_PID 2>/dev/null; then
echo " ✗ Orchestrator упал! Проверьте logs/orchestrator.log"
tail -20 logs/orchestrator.log
exit 1
fi
sleep 2
done
echo ""
echo "=========================================="
echo " ✓ Все сервисы запущены!"
echo ""
case "$MODEL" in
qwen)
echo " Модель: Qwen2.5-7B-AWQ + Lydia LoRA"
;;
llama)
echo " Модель: Llama-3.1-8B-Instruct GPTQ"
;;
deepseek)
echo " Модель: DeepSeek-LLM-7B-Chat"
;;
esac
echo ""
echo " Логи: tail -f logs/*.log"
echo " Admin: http://localhost:8002/admin"
echo " Ctrl+C для остановки"
echo "=========================================="
# Ждём завершения любого из процессов
wait $ORCHESTRATOR_PID $VLLM_PID