Как многопоточность в среде выполнения ONNX?
Использование ONNX Runtime для выполнения логического вывода по моделям глубокого обучения. Допустим, у меня есть 4 разные модели, каждая со своим собственным входным изображением, могу ли я запустить их параллельно в 4 потока? Будет ли одна "среда", а затем 4 сеанса (с использованием той же среды)?
1 ответ
Да, одна среда и 4 отдельных сеанса - вот как бы вы это сделали.
"состояние только для чтения" весов и смещений специфичны для модели.
Сеанс имеет отношение 1:1 с моделью, и такие вещи не используются в разных сеансах, поскольку вам нужен только один сеанс для каждой модели, если вы можете вызвать Run одновременно с разными размерами ввода (при условии, что модель поддерживает динамический пакет / ввод размеры).
Что касается потоковой передачи, по умолчанию используются пулы потоков для каждого сеанса, но также возможно совместное использование глобальных пулов потоков между сеансами.
Как это сделать, зависит от используемого API:
- Для использования C API
CreateEnvWithGlobalThreadPools
. - Для C++ API предоставьте
OrtThreadingOptions
при строительствеOrt::Env
.