MultiAgentLogsAnalyze / SPEED_OPTIMIZATION.md
PatrickRedStar's picture
Add: Streaming processing toggle and speed optimization guide - Add streaming processing option in Gradio UI - Auto-enable for files >500 lines - Add chunk size slider - Create SPEED_OPTIMIZATION.md with model suggestions
4f1eb8e
# Оптимизация скорости обработки
## Текущая ситуация
- **Модель:** DeepSeek-V3.1-Terminus (через smolagents InferenceClientModel)
- **Время обработки:** ~2.5 минуты для 13 строк логов
- **Проблема:** Модель медленная из-за размера и API задержек
## Варианты ускорения
### 1. Использование более быстрых моделей DeepSeek
#### Вариант A: DeepSeek-R1 (более быстрая версия)
```python
model = InferenceClientModel(
model_id="deepseek-ai/DeepSeek-R1",
token=hf_token,
max_tokens=4096
)
```
- **Плюсы:** Быстрее, меньше задержка
- **Минусы:** Может быть менее точной для сложных задач
#### Вариант B: DeepSeek-Coder (специализированная модель для кода/структурированных данных)
```python
model = InferenceClientModel(
model_id="deepseek-ai/deepseek-coder-6.7b-instruct",
token=hf_token,
max_tokens=2048
)
```
- **Плюсы:** Оптимизирована для структурированных данных (JSON, логи)
- **Минусы:** Меньший контекст, может быть менее точной для анализа
### 2. Использование других быстрых моделей через HF Inference API
#### Qwen/Qwen2.5 (быстрая и качественная)
```python
model = InferenceClientModel(
model_id="Qwen/Qwen2.5-7B-Instruct",
token=hf_token,
max_tokens=2048
)
```
#### Mistral (баланс скорости и качества)
```python
model = InferenceClientModel(
model_id="mistralai/Mistral-7B-Instruct-v0.2",
token=hf_token,
max_tokens=2048
)
```
### 3. Оптимизация промптов и параметров
#### Уменьшение max_tokens для более коротких ответов
```python
model = InferenceClientModel(
model_id="deepseek-ai/DeepSeek-V3.1-Terminus",
token=hf_token,
max_tokens=2048 # Вместо 4096 - быстрее генерация
)
```
#### Уменьшение max_steps для агентов
```python
parser_agent = ToolCallingAgent(
model=model,
tools=[final_tool],
instructions="...",
name="LogParserAgent",
max_steps=5, # Вместо 10 - меньше итераций
)
```
### 4. Параллельная обработка чанков
В `streaming_processor.py` можно добавить:
```python
from concurrent.futures import ThreadPoolExecutor
def process_chunks_parallel(chunks, max_workers=3):
with ThreadPoolExecutor(max_workers=max_workers) as executor:
results = executor.map(process_single_chunk, chunks)
return list(results)
```
### 5. Кэширование результатов
Кэшировать результаты парсинга одинаковых строк:
```python
from functools import lru_cache
import hashlib
@lru_cache(maxsize=1000)
def cached_parse(log_hash: str, logs: str):
return run_parser_agent(logs)
```
### 6. Использование локальной модели (если доступно)
Если есть GPU, можно использовать локальную модель вместо API:
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
from smolagents import LocalModel
model = LocalModel(
model_id="deepseek-ai/DeepSeek-V3.1-Terminus",
device="cuda" # или "cpu"
)
```
## Рекомендации
### Для максимальной скорости (уровень 1):
1. Использовать более быструю модель (Qwen2.5 или DeepSeek-R1)
2. Уменьшить max_tokens до 2048
3. Уменьшить max_steps до 5
4. Включить потоковую обработку для больших файлов
### Для баланса скорости и качества (уровень 2):
1. Оставить DeepSeek-V3.1-Terminus
2. Уменьшить max_tokens до 2048
3. Оптимизировать промпты (делать их короче и конкретнее)
4. Использовать потоковую обработку
### Для максимального качества (текущий уровень):
1. Оставить текущую настройку
2. Использовать retry механизм
3. Использовать потоковую обработку для больших файлов
## Пример реализации быстрой модели
Создать `agents/fast_agents.py`:
```python
import os
from smolagents import ToolCallingAgent, InferenceClientModel, FinalAnswerTool
hf_token = os.getenv("HF_TOKEN")
# Быстрая модель для быстрой обработки
fast_model = InferenceClientModel(
model_id="Qwen/Qwen2.5-7B-Instruct", # или "deepseek-ai/DeepSeek-R1"
token=hf_token,
max_tokens=2048,
temperature=0.3 # Меньше творчества = быстрее
)
# Использовать fast_model вместо model для быстрых задач
```
## Тестирование скорости
Создать бенчмарк:
```python
import time
from test_logs.good_example_1_web_server import test_logs
start = time.time()
result = analyze_logs(test_logs)
end = time.time()
print(f"Время обработки: {end - start:.2f} секунд")
```
## Вывод
**Рекомендуемый подход:**
1. Добавить выбор модели в интерфейс (Fast/Standard)
2. Использовать Qwen2.5 для быстрого режима
3. Оставить DeepSeek-V3.1 для режима максимального качества
4. Включить потоковую обработку по умолчанию для файлов >500 строк