1.8 KiB
1.8 KiB
Improvements / TODO по оптимизации Embedding-service
1. Оптимизация вычислений в VectorStore
- Заменить
np.sort(...)[-k:]наnp.argpartition+np.takeдля выбора top‑k:- снизит асимптотику с O(n log n) до O(n) по числу примеров;
- особенно актуально при росте числа эмбеддингов до тысяч и выше.
2. Работа с типами данных эмбеддингов
- Рассмотреть хранение эмбеддингов в
VectorStoreв форматеfloat16:- веса модели остаются в
float32(как сейчас); - вектора примеров после нормализации можно приводить к
float16; - это даст ~2× экономию памяти на примерах при минимальной потере точности для косинусного сходства.
- веса модели остаются в
3. Управление потоками Torch
- Явно ограничить количество потоков для Torch:
- при инициализации добавить:
torch.set_num_threads(1–2)torch.set_num_interop_threads(1)
- это снизит конкуренцию за CPU на серверах, где крутятся ещё боты.
- при инициализации добавить:
4. Батчирование запросов к модели
- На будущее, если появится нагрузка:
- добавить внутри
RAGServiceочередь запросов на эмбеддинги и воркер, который шлёт их в модель батчами (например, окно 5–20 мс); - это уменьшит overhead от частых одиночных вызовов
encode.
- добавить внутри