Докер / Python; штраф на одной машине, «незаконная инструкция» на другой; halp - PullRequest
0 голосов
/ 17 января 2019

Мы пытаемся развернуть ориентированное на Python приложение, ориентированное на математику (множество библиотек numpy / scipy / etc), через docker и обнаруживаем, что контейнер отлично работает на некоторых аппаратных средствах и завершается неудачно с «недопустимой инструкцией» на другие при запуске приложения Flask (я полагаю, это из-за какого-то импорта, но сообщение об ошибке бесполезно).

Контекст: это вошло в игру с AWS, когда я тестировал развертывание Fargate; он отлично работал на их экземплярах EC-2 и потерпел неудачу в качестве контейнера Fargate (и, к сожалению, тоже; нулевой выход. Потребовалось некоторое время, чтобы выследить это).

Действительно, эти две машины (любезно предоставленные / proc / cpuinfo) имеют разные процессоры (машина EC2 - это Intel Xeon E5-2676 v3@2.4GHz, а машина Fargate - это Intel Xeon E5-2680 v2@2.8GHz) и поддерживают различные флаги (кажется, что на машине EC2 эти флаги включены, а у Fargate нет: avx2, bmi1, bmi2, fma, invpcid, invpcid_single). Я видел случаи, когда несовместимости AVX / AVX2 могли привести к этому, но я не знаю, как подтвердить, что это проблема. Я чувствую, что это вопрос CFLAGS, но я не уверен.

Является ли это проблемой, как мне аккуратно изменить процесс сборки (переменная env?), Чтобы сделать контейнер более переносимым и устранить эту трудность? Мы делаем немного C ++, но это не вызывается до тех пор, пока не запустится приложение, так что это происходит из процесса установки / Pip Python, и я не совсем понимаю, как установить там параметры компиляции.

...