Кейс недели
Подготовка данных, chunking и прочие задачи подсистемы RAG, которые выполняются до того, как за дело берётся GPU, выполняются "обычным" центральным процессором, воспользоваться которым на полную мощность в общем виде нетривиальная задача. И прежде чем организовать поток задач в несколько очередей эффективным образом, мы готовим инфраструктуру.
Одна из подходящих задач привела к следующему тесту на производительность предобработки изображений для формирования запросов к векторному хранилищу и к мультимодальной модели.
Дано:
i7-8750H (6 ядер, 12 потоков) и 6 тысяч качественных фото
Пытаемся обрабатывать изображения в несколько потоков (не процессов – накладные расходы не устроили) и при первых запусках получаем примерно следующее:

Так CPU используется "из коробки". Он явно способен на большее. Наверное медленный питон* виноват.
*) Python GIL, конечно,
иногда мешает, и этот тест о нём. Но так не всегда. А для хороших танцоров – никогда.
Что делаем:
Собираем Python и необходимый обвес в таком виде, в котором отключение GIL не приводит к Segmentation Fault и Race Conditions
"Лёгкий" инференс запускаем в среде, которая по дизайну обязана помочь оптимизации под Intel (OpenVino)
И в итоге выходим на кратный прирост производительности:
Wall Time: 66.20 сек.
91 fps
Wall Time: 17.34 сек.
346 fps
CPU теперь при деле: оцениваем, в какой мере удалось при меньшем "шуме" извлечь полезную работу
$ vmstat 10 # Без показателей по RAM и I/O
procs --system--- -------cpu-------
r b in cs us sy id wa st gu
# "обычный порошок"
1 0 7504 35528 11 2 87 0 0 0
1 0 7516 38168 11 2 87 0 0 0
# оптимизация
8 0 7914 128729 51 5 44 0 0 0
8 0 8015 122072 51 5 45 0 0 0и воспользоваться имеющимся вычислительным ресурсом.

P.S.
- Базовый образ под такие задачи удалось сохранить легковесным: в пределах 200 МБ.
- Если ваша служба ИБ/AppSec/DevSecOps принимает от нас VEX-декларации, то при таком наборе отчётов вы проходите этап SCA без остановки.