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
A newer version of the Gradio SDK is available:
6.3.0
Оптимизация скорости обработки
Текущая ситуация
- Модель: DeepSeek-V3.1-Terminus (через smolagents InferenceClientModel)
- Время обработки: ~2.5 минуты для 13 строк логов
- Проблема: Модель медленная из-за размера и API задержек
Варианты ускорения
1. Использование более быстрых моделей DeepSeek
Вариант A: DeepSeek-R1 (более быстрая версия)
model = InferenceClientModel(
model_id="deepseek-ai/DeepSeek-R1",
token=hf_token,
max_tokens=4096
)
- Плюсы: Быстрее, меньше задержка
- Минусы: Может быть менее точной для сложных задач
Вариант B: DeepSeek-Coder (специализированная модель для кода/структурированных данных)
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 (быстрая и качественная)
model = InferenceClientModel(
model_id="Qwen/Qwen2.5-7B-Instruct",
token=hf_token,
max_tokens=2048
)
Mistral (баланс скорости и качества)
model = InferenceClientModel(
model_id="mistralai/Mistral-7B-Instruct-v0.2",
token=hf_token,
max_tokens=2048
)
3. Оптимизация промптов и параметров
Уменьшение max_tokens для более коротких ответов
model = InferenceClientModel(
model_id="deepseek-ai/DeepSeek-V3.1-Terminus",
token=hf_token,
max_tokens=2048 # Вместо 4096 - быстрее генерация
)
Уменьшение max_steps для агентов
parser_agent = ToolCallingAgent(
model=model,
tools=[final_tool],
instructions="...",
name="LogParserAgent",
max_steps=5, # Вместо 10 - меньше итераций
)
4. Параллельная обработка чанков
В streaming_processor.py можно добавить:
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. Кэширование результатов
Кэшировать результаты парсинга одинаковых строк:
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:
from transformers import AutoModelForCausalLM, AutoTokenizer
from smolagents import LocalModel
model = LocalModel(
model_id="deepseek-ai/DeepSeek-V3.1-Terminus",
device="cuda" # или "cpu"
)
Рекомендации
Для максимальной скорости (уровень 1):
- Использовать более быструю модель (Qwen2.5 или DeepSeek-R1)
- Уменьшить max_tokens до 2048
- Уменьшить max_steps до 5
- Включить потоковую обработку для больших файлов
Для баланса скорости и качества (уровень 2):
- Оставить DeepSeek-V3.1-Terminus
- Уменьшить max_tokens до 2048
- Оптимизировать промпты (делать их короче и конкретнее)
- Использовать потоковую обработку
Для максимального качества (текущий уровень):
- Оставить текущую настройку
- Использовать retry механизм
- Использовать потоковую обработку для больших файлов
Пример реализации быстрой модели
Создать agents/fast_agents.py:
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 для быстрых задач
Тестирование скорости
Создать бенчмарк:
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} секунд")
Вывод
Рекомендуемый подход:
- Добавить выбор модели в интерфейс (Fast/Standard)
- Использовать Qwen2.5 для быстрого режима
- Оставить DeepSeek-V3.1 для режима максимального качества
- Включить потоковую обработку по умолчанию для файлов >500 строк