mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-07-09 05:12:12 +02:00
second round of translation fixes
Signed-off-by: Jenkins, Kenneth Alexander <kjenkins60@gatech.edu>
This commit is contained in:
parent
6ff883acee
commit
1f1aaa24ae
152 changed files with 41130 additions and 137 deletions
124
docs/tech-specs/graphrag-performance-optimization.ru.md
Normal file
124
docs/tech-specs/graphrag-performance-optimization.ru.md
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
# Техническое задание по оптимизации производительности GraphRAG
|
||||
|
||||
## Обзор
|
||||
|
||||
Данное техническое задание описывает комплексные оптимизации производительности алгоритма GraphRAG (Graph Retrieval-Augmented Generation) в системе TrustGraph. Текущая реализация страдает от существенных проблем с производительностью, которые ограничивают масштабируемость и время отклика. Данное задание охватывает четыре основные области оптимизации:
|
||||
|
||||
1. **Оптимизация обхода графа**: Устранение неэффективных рекурсивных запросов к базе данных и реализация пакетной обработки графа.
|
||||
2. **Оптимизация разрешения меток**: Замена последовательной выборки меток параллельными/пакетными операциями.
|
||||
3. **Улучшение стратегии кэширования**: Реализация интеллектуального кэширования с вытеснением по алгоритму LRU и предварительной загрузкой.
|
||||
4. **Оптимизация запросов**: Добавление мемоизации результатов и кэширования векторов для повышения скорости отклика.
|
||||
|
||||
## Цели
|
||||
|
||||
- **Сокращение количества запросов к базе данных**: Достижение снижения общего количества запросов к базе данных на 50-80% за счет пакетной обработки и кэширования.
|
||||
- **Улучшение времени отклика**: Ускорение построения подграфа в 3-5 раза и ускорение разрешения меток в 2-3 раза.
|
||||
- **Повышение масштабируемости**: Поддержка более крупных графовых баз знаний с улучшением управления памятью.
|
||||
- **Сохранение точности**: Сохранение существующей функциональности GraphRAG и качества результатов.
|
||||
- **Обеспечение параллельности**: Улучшение возможностей параллельной обработки для множества одновременных запросов.
|
||||
- **Уменьшение занимаемой памяти**: Реализация эффективных структур данных и управления памятью.
|
||||
- **Добавление наблюдаемости**: Включение метрик производительности и возможностей мониторинга.
|
||||
- **Обеспечение надежности**: Добавление механизмов обработки ошибок и таймаутов.
|
||||
|
||||
## Описание проблемы
|
||||
|
||||
Текущая реализация GraphRAG, находящаяся в файле `trustgraph-flow/trustgraph/retrieval/graph_rag/graph_rag.py`, имеет ряд критических проблем с производительностью, которые серьезно влияют на масштабируемость системы:
|
||||
|
||||
### Текущие проблемы с производительностью
|
||||
|
||||
**1. Неэффективный обход графа (`follow_edges` function, строки 79-127)**
|
||||
- Выполняет 3 отдельных запроса к базе данных для каждой сущности на каждом уровне глубины.
|
||||
- Шаблон запроса: запросы на основе субъекта, предиката и объекта для каждой сущности.
|
||||
- Отсутствие пакетной обработки: Каждый запрос обрабатывает только одну сущность за раз.
|
||||
- Отсутствие обнаружения циклов: Может повторно посещать одни и те же узлы несколько раз.
|
||||
- Рекурсивная реализация без мемоизации приводит к экспоненциальной сложности.
|
||||
- Временная сложность: O(entities × max_path_length × triple_limit³)
|
||||
|
||||
**2. Последовательное разрешение меток (`get_labelgraph` function, строки 144-171)**
|
||||
- Обрабатывает каждый компонент тройки (субъект, предикат, объект) последовательно.
|
||||
- Каждый вызов `maybe_label` потенциально вызывает запрос к базе данных.
|
||||
- Отсутствует параллельное выполнение или пакетная обработка запросов меток.
|
||||
- Приводит до 3 × subgraph_size отдельных запросов к базе данных.
|
||||
|
||||
**3. Примитивная стратегия кэширования (`maybe_label` function, строки 62-77)**
|
||||
- Простой кэш в виде словаря без ограничений размера или TTL.
|
||||
- Отсутствие политики вытеснения из кэша приводит к неограниченному росту использования памяти.
|
||||
- Пропуски в кэше вызывают отдельные запросы к базе данных.
|
||||
- Отсутствует предварительная загрузка или интеллектуальное "прогрев" кэша.
|
||||
|
||||
**4. Субоптимальные шаблоны запросов**
|
||||
- Запросы на поиск сходства векторов сущностей не кэшируются между похожими запросами.
|
||||
- Отсутствует мемоизация результатов для повторяющихся шаблонов запросов.
|
||||
- Отсутствует оптимизация запросов для распространенных сценариев доступа.
|
||||
|
||||
**5. Критические проблемы с временем жизни объектов (`rag.py:96-102`)**
|
||||
- **Объект GraphRag пересоздается для каждого запроса**: Новый экземпляр создается для каждого запроса, что приводит к потере всех преимуществ кэширования.
|
||||
- **Объект Query имеет очень короткое время жизни**: Создается и уничтожается в рамках выполнения одного запроса (строки 201-207).
|
||||
- **Кэш меток сбрасывается для каждого запроса**: "Прогрев" кэша и накопленные знания теряются между запросами.
|
||||
- **Накладные расходы на повторное создание клиента**: Клиенты базы данных потенциально переподключаются для каждого запроса.
|
||||
- **Отсутствует оптимизация между запросами**: Невозможно воспользоваться преимуществами шаблонов запросов или совместного использования результатов.
|
||||
|
||||
### Анализ влияния на производительность
|
||||
|
||||
Текущий наихудший сценарий для типичного запроса:
|
||||
- **Извлечение сущности**: 1 запрос на поиск сходства векторов.
|
||||
- **Обход графа**: entities × max_path_length × 3 × triple_limit запросов.
|
||||
- **Разрешение меток**: subgraph_size × 3 отдельных запросов на метки.
|
||||
|
||||
Для параметров по умолчанию (50 сущностей, глубина 2, лимит 30 троек, размер подграфа 150):
|
||||
- **Минимальное количество запросов**: 1 + (50 × 2 × 3 × 30) + (150 × 3) = **9,451 запросов к базе данных**.
|
||||
- **Время отклика**: 15-30 секунд для графов умеренного размера.
|
||||
- **Использование памяти**: Неограниченный рост кэша со временем.
|
||||
- **Эффективность кэша**: 0% - кэш сбрасывается при каждом запросе.
|
||||
- **Накладные расходы на создание объектов**: Объекты GraphRag + Query создаются/уничтожаются для каждого запроса.
|
||||
|
||||
Данное техническое задание решает эти проблемы путем реализации пакетных запросов, интеллектуального кэширования и параллельной обработки. Оптимизируя шаблоны запросов и доступ к данным, TrustGraph может:
|
||||
|
||||
- Поддерживать графовые базы знаний предприятия с миллионами сущностей.
|
||||
- Обеспечивать время отклика менее 1 секунды для типичных запросов.
|
||||
- Обрабатывать сотни одновременных запросов GraphRAG.
|
||||
- Эффективно масштабироваться с ростом размера и сложности графа.
|
||||
|
||||
## Технический дизайн
|
||||
|
||||
### Архитектура
|
||||
|
||||
Оптимизация производительности GraphRAG требует следующих технических компонентов:
|
||||
|
||||
#### 1. **Архитектурная реорганизация для управления временем жизни объектов**
|
||||
- **Сделать GraphRag долгоживущим**: Перенести экземпляр GraphRag на уровень Processor для сохранения данных между запросами.
|
||||
- **Сохранить кэши**: Поддерживать кэш меток, кэш векторов и кэш результатов запросов между запросами.
|
||||
- **Оптимизировать объект Query**: Рефакторинг Query как легковесного контекста выполнения, а не контейнера данных.
|
||||
- **Сохранение подключений**: Поддерживать подключения к базе данных между запросами.
|
||||
|
||||
Модуль: `trustgraph-flow/trustgraph/retrieval/graph_rag/rag.py` (изменен)
|
||||
|
||||
#### 2. **Оптимизированный движок обхода графа**
|
||||
- Заменить рекурсивный `follow_edges` итеративным поиском в ширину.
|
||||
- Реализовать пакетную обработку сущностей на каждом уровне обхода.
|
||||
- Добавить обнаружение циклов с отслеживанием посещенных узлов.
|
||||
- Включить раннее завершение при достижении лимитов.
|
||||
|
||||
Модуль: `trustgraph-flow/trustgraph/retrieval/graph_rag/optimized_traversal.py`
|
||||
|
||||
#### 3. **Параллельная система разрешения меток**
|
||||
- Пакетная обработка запросов меток для нескольких сущностей одновременно.
|
||||
- Реализация паттернов async/await для параллельного доступа к базе данных.
|
||||
- Добавление интеллектуальной предварительной загрузки для распространенных шаблонов меток.
|
||||
- Включение стратегий "прогрева" кэша меток.
|
||||
|
||||
Модуль: `trustgraph-flow/trustgraph/retrieval/graph_rag/label_resolver.py`
|
||||
|
||||
#### 4. **Консервативный слой кэширования меток**
|
||||
- Кэш LRU с коротким TTL только для меток (5 минут) для баланса между производительностью и согласованностью.
|
||||
- Мониторинг метрик кэша и коэффициента попадания.
|
||||
- **Без кэширования векторов**: Уже кэшируются на уровне запроса, нет пользы для между запросами.
|
||||
- **Без кэширования результатов запросов**: Из-за проблем согласованности данных в графе.
|
||||
|
||||
Модуль: `trustgraph-flow/trustgraph/retrieval/graph_rag/cache_manager.py`
|
||||
|
||||
#### 5. **Фреймворк оптимизации запросов**
|
||||
- Анализ шаблонов запросов и предложения по оптимизации.
|
||||
- Координатор пакетных запросов для доступа к базе данных.
|
||||
- Пулинг подключений и управление таймаутами запросов.
|
||||
- Мониторинг производительности.
|
||||
Loading…
Add table
Add a link
Reference in a new issue