Докер / Python; штраф на одной машине, "незаконная инструкция" на другой; halp

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

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

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

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

0 ответов

Другие вопросы по тегам