Я сравнил m xnet производительность между Mathematica и Python и наблюдаю различия в производительности более чем на порядок и хотел бы посоветовать, как улучшить производительность при Python.
Мой NN - это MLP для регрессии, с 3 входами с плавающей запятой, 8, 16, 24, 8 полностью связанными слоями нейронов и 2 выходами с плавающей запятой, Sigmoid используется везде, кроме входных и выходных нейронов. Оптимизатор, используемый в Mathematica - это Адам, поэтому я тоже использовал его в Python с теми же параметрами. Набор обучающих данных содержит 4215 записей, отображающих цвета xyY в Munsell Hue и Chroma.
Mathematica - версия 11.2, выпущенная в 2017 году, и Mathematica использует m xnet под капотом для задач глубокого обучения. Со стороны Python я использую последнюю версию с m xnet -mkl и проверил, включен ли MKLDNN.
Лицензия Mathematica работает на ноутбуке MS Surface Pro с Windows 10, i7- 7660U, 2,5 ГГц, 2 ядра, 4 гиперпотока, AVX2. Я запустил Python на этом компьютере для сравнения.
Вот время для циклов обучения 32768 эпох и
Batch Sizes: 128, 256, 512, 1024, 2048, 4096
Mathematica: 8m12s, 5m14s, 3m34s, 2m57s, 3m4s, 3m48s
PythonMxNet: 286m, 163m, 93m, 65m, 49m, 47m
Я попробовал приемы оптимизации переменных среды m xnet, предложенные Intel, но только на 120% медленнее.
Я также переключил все массивы на float32 с float64 с гипотезой, что MKL может обрабатывать в 2 раза больше операций за одно и то же время (исключая издержки, конечно) с SIMD регистрирует, но не заметил даже небольшого улучшения.
Причина, по которой я переключил свою работу в NN с Mathematica на Python, заключается в том, что я хотел обучить NN на разных и более мощных компьютерах. И мне также не нравится, когда моя тетрадь связана с заданиями обучения NN.
Как мне следует интерпретировать эти результаты?
Что может быть причиной этих различий в производительности?
Могу ли я что-нибудь сделать для повышения производительности при Python?
Или это просто неизбежные накладные расходы, налагаемые интерпретатором Python?