tensorflow 2.0 и процессор без AVX

Oct 05, 2019 07:26

Дефолтный пакет tensorflow-gpu собран с инструкциями AVX. То есть, после установки при помощи 'pip install tensorflow-gpu' в системе со старым процессором, который про эти инструкции ничего не знает, попытка импорта будет заканчиваться ошибкой:

Illegal instruction (core dumped)

Проверить, какие инструкции поддерживает процессор, можно выполнив 'cat /proc/info'. Например, для моего старенького Core i5 760 их список выглядит так:

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid dtherm ida flush_l1d

Как видите, AVX среди них нет.

Единственный способ заставить tf работать на таком процессоре - собрать пакет самостоятельно из исходников. Инструкция на официальном сайте подробно описывает, что потребуется предварительно установить и как правильно запускать сборку, поэтому повторять её нет смысла. Однако, стоит уточнить, что bazel должен быть версии не выше 0.26.1, о чём в инструкции на сайте не сказано, но указано в файле configure.py:

_TF_MIN_BAZEL_VERSION = '0.24.1'
_TF_MAX_BAZEL_VERSION = '0.26.1'
Для отключения AVX, на этапе запуска './configure' в ответ на запрос:

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]:

нужно указать флаги:

-march=native -mno-avx

Затем запустить компиляцию и запастись терпением, потому что на старом процессоре она идёт чудовищно долго. У меня этот процесс занял около восьми часов.

Собранный с этими флагами пакет прекрасно подгружается и работает:

>>> tf.__version__
'2.0.0'

>>> print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
Num GPUs Available:  1

tensorflow

Previous post Next post
Up