Существует два основных способа получения параллелизма при оценке нейронной сети:
- Матричные вычисления
- параллельный параллелизм
Вычислительный граф для многих нейронных сетей является последовательным (таким образом, у Кераса есть Последовательная модель). то есть один вычисляет layer1 ... layerN в последовательности как на прямом, так и на обратном шагах. Последовательная сеть не может быть ускорена путем распределения слоев по разным ядрам.
Однако в большинстве вычислений используются матричные операции, которые обычно реализуются с использованием высокопроизводительной библиотеки, такой как BLAS, которая использует все ядра, доступные для ЦП. Как правило, чем больше размер пакета, тем больше возможностей для параллелизма.
Параллелизм микропакетов - это стратегия, используемая multi_gpu_model , когда разные микропартии распределяются по разным вычислительным блокам (это действительно имеет смысл в первую очередь для графических процессоров).
Непоследовательные модели также могут быть распараллелены путем тщательного размещения устройства; Я не уверен, что это сценарий здесь. Но TLDR: увеличьте свой batch_size и наслаждайтесь всеми своими 36 ядрами, вращающимися на матричных вычислениях.