- matrix-gateway: POST /internal/matrix/presence/online endpoint - usePresenceHeartbeat hook with activity tracking - Auto away after 5 min inactivity - Offline on page close/visibility change - Integrated in MatrixChatRoom component
306 lines
9.4 KiB
Markdown
306 lines
9.4 KiB
Markdown
# 🚀 Оптимізація CPU навантаження через GPU на НОДА1
|
||
|
||
**Дата:** 2025-01-27
|
||
**Проблема:** CPU навантаження 85.3% (високе)
|
||
**Мета:** Перенести частину навантаження на GPU (якщо доступний)
|
||
|
||
---
|
||
|
||
## 🔍 Аналіз поточної ситуації
|
||
|
||
### CPU навантаження
|
||
- **Загальне:** 85.3%
|
||
- **Основні споживачі:**
|
||
- PostgreSQL: 1706% CPU (multi-core, нормально для БД)
|
||
- Інші процеси: розподілені
|
||
|
||
### Перевірка GPU
|
||
|
||
#### Hetzner сервер (НОДА1)
|
||
- **Тип:** Cloud сервер (144.76.224.179)
|
||
- **GPU:** ❌ Зазвичай немає GPU на стандартних Hetzner серверах
|
||
- **Варіанти:** Потрібно перевірити чи є GPU-оптимізований інстанс
|
||
|
||
---
|
||
|
||
## ✅ РІШЕННЯ: Увімкнути GPU для Ollama!
|
||
|
||
### Поточна ситуація
|
||
- ✅ **GPU доступний:** NVIDIA RTX 4000 SFF Ada (20GB VRAM)
|
||
- ❌ **Ollama використовує CPU:** 1583% CPU (multi-core)
|
||
- ⚠️ **GPU не використовується Ollama**
|
||
|
||
### Термінове рішення
|
||
|
||
**1. Увімкнути GPU для Ollama контейнера:**
|
||
|
||
```yaml
|
||
# docker-compose.yml (на НОДА1)
|
||
services:
|
||
ollama:
|
||
image: ollama/ollama:latest
|
||
container_name: ollama
|
||
deploy:
|
||
resources:
|
||
reservations:
|
||
devices:
|
||
- driver: nvidia
|
||
count: 1
|
||
capabilities: [gpu]
|
||
environment:
|
||
- NVIDIA_VISIBLE_DEVICES=all
|
||
- CUDA_VISIBLE_DEVICES=0
|
||
```
|
||
|
||
**2. Перезапустити Ollama:**
|
||
```bash
|
||
docker stop ollama
|
||
docker compose up -d ollama
|
||
```
|
||
|
||
**3. Перевірити використання GPU:**
|
||
```bash
|
||
nvidia-smi
|
||
docker exec ollama ollama ps
|
||
```
|
||
|
||
### Очікувані результати
|
||
|
||
**До оптимізації:**
|
||
- CPU: 85.3% (Ollama: 1583% multi-core)
|
||
- GPU: 0% utilization
|
||
- Швидкість інференсу: повільно (CPU)
|
||
|
||
**Після оптимізації:**
|
||
- CPU: ~40-50% (Ollama: ~50-100% на GPU)
|
||
- GPU: 30-50% utilization
|
||
- Швидкість інференсу: **+200-300%** (GPU)
|
||
|
||
---
|
||
|
||
## 💡 Варіанти оптимізації
|
||
|
||
### 1. GPU доступний ✅
|
||
|
||
#### A. Ollama з GPU acceleration
|
||
```yaml
|
||
# docker-compose.yml
|
||
services:
|
||
ollama:
|
||
image: ollama/ollama:latest
|
||
deploy:
|
||
resources:
|
||
reservations:
|
||
devices:
|
||
- driver: nvidia
|
||
count: 1
|
||
capabilities: [gpu]
|
||
environment:
|
||
- NVIDIA_VISIBLE_DEVICES=all
|
||
```
|
||
|
||
**Переваги:**
|
||
- ✅ Швидше інференс моделей (qwen3:8b, qwen2.5:14b)
|
||
- ✅ Зменшення CPU навантаження на 30-50%
|
||
- ✅ Паралельна обробка запитів
|
||
|
||
**Недоліки:**
|
||
- ❌ Потрібен GPU-оптимізований сервер
|
||
- ❌ Додаткові витрати
|
||
|
||
#### B. Використання GPU для:
|
||
- **LLM інференс** (Ollama моделі)
|
||
- **Vision моделі** (qwen3-vl:8b)
|
||
- **Embeddings** (Qdrant з GPU)
|
||
- **Image generation** (dagi-image-gen)
|
||
|
||
### 2. Якщо GPU недоступний
|
||
|
||
#### A. Оптимізація CPU навантаження
|
||
|
||
**1. PostgreSQL оптимізація:**
|
||
```sql
|
||
-- Налаштування для зменшення CPU
|
||
shared_buffers = 4GB
|
||
effective_cache_size = 12GB
|
||
work_mem = 64MB
|
||
maintenance_work_mem = 1GB
|
||
max_worker_processes = 8
|
||
max_parallel_workers_per_gather = 4
|
||
```
|
||
|
||
**2. Обмеження CPU для контейнерів:**
|
||
```yaml
|
||
# docker-compose.yml
|
||
services:
|
||
dagi-postgres:
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: '4.0'
|
||
reservations:
|
||
cpus: '2.0'
|
||
```
|
||
|
||
**3. Використання Ollama з CPU оптимізацією:**
|
||
```bash
|
||
# Використання менших моделей для простих задач
|
||
# qwen2.5:3b-instruct замість qwen3:8b для деяких агентів
|
||
```
|
||
|
||
#### B. Розподіл навантаження
|
||
|
||
**1. Перенести частину навантаження на НОДА2:**
|
||
- НОДА2 має Apple M4 Max GPU
|
||
- Можна використовувати для:
|
||
- Vision моделі
|
||
- Image generation
|
||
- Важкі LLM інференси
|
||
|
||
**2. Використання Swapper Service:**
|
||
- Динамічне завантаження/вивантаження моделей
|
||
- Оптимізація використання пам'яті
|
||
- Розподіл навантаження між моделями
|
||
|
||
#### C. Кешування та оптимізація
|
||
|
||
**1. Redis кешування:**
|
||
- Кешування результатів LLM запитів
|
||
- Зменшення повторних обчислень
|
||
|
||
**2. Batch обробка:**
|
||
- Групування запитів для ефективнішої обробки
|
||
- Зменшення overhead
|
||
|
||
---
|
||
|
||
## 🎯 Рекомендації
|
||
|
||
### ✅ ТЕРМІНОВІ ДІЇ (GPU доступний!)
|
||
|
||
1. **Увімкнути GPU для Ollama (НАЙВАЖЛИВІШЕ):**
|
||
```bash
|
||
# На НОДА1
|
||
cd /opt/microdao-daarion
|
||
# Оновити docker-compose.yml для Ollama з GPU
|
||
docker compose stop ollama
|
||
docker compose up -d ollama
|
||
```
|
||
|
||
2. **Перевірити використання GPU:**
|
||
```bash
|
||
nvidia-smi
|
||
docker exec ollama ollama ps
|
||
```
|
||
|
||
3. **Протестувати швидкість:**
|
||
```bash
|
||
time docker exec ollama ollama run qwen3:8b "Привіт, як справи?"
|
||
```
|
||
|
||
**Очікуваний результат:** CPU навантаження знизиться з 85.3% до 40-50%
|
||
|
||
### Додаткові оптимізації
|
||
|
||
1. **Оптимізувати PostgreSQL:**
|
||
```bash
|
||
# Налаштувати postgresql.conf
|
||
shared_buffers = 4GB
|
||
effective_cache_size = 12GB
|
||
max_worker_processes = 8
|
||
```
|
||
|
||
2. **Обмежити CPU для контейнерів:**
|
||
- PostgreSQL: max 4 cores
|
||
- Ollama: max 2 cores для простих моделей
|
||
- Інші сервіси: за потреби
|
||
|
||
3. **Використовувати менші моделі:**
|
||
- qwen2.5:3b-instruct для простих задач
|
||
- qwen3:8b тільки для складних задач
|
||
|
||
4. **Перенести на НОДА2:**
|
||
- Vision моделі (qwen3-vl:8b)
|
||
- Image generation
|
||
- Важкі LLM інференси
|
||
|
||
### Довгострокові рішення
|
||
|
||
1. **Оновити до GPU-оптимізованого сервера:**
|
||
- Hetzner GPU сервер (NVIDIA GPU)
|
||
- Або використовувати НОДА2 для GPU задач
|
||
|
||
2. **Налаштувати Ollama з GPU:**
|
||
```bash
|
||
# Якщо GPU доступний
|
||
OLLAMA_NUM_GPU=1
|
||
OLLAMA_GPU_LAYERS=35
|
||
```
|
||
|
||
3. **Використовувати Qdrant з GPU:**
|
||
- GPU acceleration для embeddings
|
||
- Швидший векторний пошук
|
||
|
||
---
|
||
|
||
## 📊 Очікувані результати
|
||
|
||
### ✅ З GPU (рекомендовано - GPU доступний!)
|
||
- **CPU навантаження:** 85.3% → **40-50%** (-35-45%)
|
||
- **GPU utilization:** 0% → **30-50%**
|
||
- **Швидкість інференсу:** +**200-300%** (з CPU на GPU)
|
||
- **Ollama CPU:** 1583% → **50-100%** (на GPU)
|
||
- **Паралельність:** +100%
|
||
|
||
### Без GPU (якщо не вдасться увімкнути)
|
||
- **CPU навантаження:** 85.3% → 60-70%
|
||
- **Швидкість інференсу:** +20-30% (через оптимізацію)
|
||
- **Стабільність:** +50%
|
||
|
||
---
|
||
|
||
## 🔧 План дій
|
||
|
||
### ✅ Фаза 1: Увімкнути GPU для Ollama (ТЕРМІНОВО!)
|
||
1. ✅ **Перевірено:** GPU доступний (NVIDIA RTX 4000 SFF Ada)
|
||
2. 🔄 **В процесі:** Налаштувати Ollama з GPU
|
||
3. 📋 **Планується:** Перезапустити Ollama з GPU
|
||
4. 📋 **Планується:** Перевірити використання GPU
|
||
|
||
**Команди:**
|
||
```bash
|
||
# На НОДА1
|
||
cd /opt/microdao-daarion
|
||
# Оновити docker-compose.yml для Ollama
|
||
docker compose stop ollama
|
||
docker compose up -d ollama
|
||
nvidia-smi # Перевірити використання GPU
|
||
```
|
||
|
||
### Фаза 2: Додаткові оптимізації
|
||
1. Оптимізувати PostgreSQL конфігурацію
|
||
2. Обмежити CPU для інших контейнерів
|
||
3. Налаштувати Qdrant з GPU (якщо підтримує)
|
||
4. Мігрувати vision моделі на GPU
|
||
|
||
### Фаза 3: Моніторинг
|
||
1. Відстежувати CPU навантаження
|
||
2. Відстежувати GPU використання (якщо є)
|
||
3. Оптимізувати на основі метрик
|
||
|
||
---
|
||
|
||
## ⚠️ Важливо
|
||
|
||
1. ✅ **НОДА1 має GPU:** NVIDIA RTX 4000 SFF Ada (20GB VRAM)
|
||
2. ❌ **Ollama не використовує GPU:** працює на CPU (1583% CPU!)
|
||
3. 🔥 **Терміново:** Увімкнути GPU для Ollama - це знизить CPU навантаження на 35-45%
|
||
4. **НОДА2 (MacBook M4 Max)** також має GPU і може використовуватися для GPU задач
|
||
5. **Оптимізація CPU** може дати додаткове покращення після увімкнення GPU
|
||
|
||
---
|
||
|
||
**Last Updated:** 2025-01-27
|
||
**Status:** 📋 План оптимізації готовий
|
||
|