Немедленная ошибка времени выполнения с API Tensorflow C на Mac M1

Я пытаюсь использовать API Tensorflow C в проекте xcode. Как только приложение начинает работать, в основном потоке генерируется ошибка BAD_INSTRUCTION. Эта ошибка возникает из-за:

tenorflow :: monitoring :: MetricDef ‹(tensorflow :: monitoring :: MetricKind) 1, long long, 2› :: MetricDef ‹char [11], char [7]› (absl :: lts_2020_02_25 :: string_view, absl :: lts_2020_02_25 :: string_view, char const (&) [11], char const (&) [7]) ()

Я установил api, используя: https://www.tensorflow.org/install/lang_c

Я создаю для архитектур x86_64 (используя Rosetta для перевода) и связал библиотеку, указав путь поиска пути к каталогу .dylib. Я также включил этот путь как обычный путь поиска и также добавил путь поиска заголовка. Наконец, я добавил оба файла .dylib в список «связать двоичный файл с библиотеками».

Я запускаю xcode 12.4 на MacBook Pro M1. Если кто-нибудь знает способ получить дополнительную информацию о сбое из xcode, это тоже будет полезно.

Я попытался установить на Intel MacBook, и это сработало.


person WalleyM    schedule 29.01.2021    source источник


Ответы (1)


Процессор M1 - ARM.

Вы скомпилировали для x86_64 (архитектура Intel), это означает, что он несовместим.

Вам придется скомпилировать его для ARM, иначе он не запустится. (Это похоже на попытку запустить байт-код JVM в .NET, это просто не сработает)

Для получения дополнительной информации см. Этот ответ

person JCWasmx86    schedule 29.01.2021
comment
Извините, забыл упомянуть, что приложение создается для x86_64. Xcode использует Rosetta для перевода. - person WalleyM; 29.01.2021
comment
Хорошо, я не специалист по тензорному потоку, но постараюсь скомпилировать как можно больше архитектур. (Вы знаете, что вместо использования AVX и других причудливых наборов инструкций) попробуйте скомпилировать только для универсальных процессоров. - person JCWasmx86; 29.01.2021
comment
Возможно, ваш процессор x86_64 / rosetta просто не поддерживает некоторые инструкции или rosetta генерирует для вас недопустимый машинный код. @KingWallmo - person JCWasmx86; 29.01.2021
comment
Хорошо, проблема в том, что tenorflow C api можно загрузить только на Mac для x86_64 здесь: tensorflow.org/ install / lang_c В настоящее время я пытаюсь выполнить сборку из исходного кода, чтобы посмотреть, поможет ли это. Так вы говорите, что Rosetta переводит, но процессор все еще не может понять? - person WalleyM; 29.01.2021
comment
@KingWallmo Вроде. Я имею в виду, что Rosetta либо декодирует инструкции из вашего двоичного файла x86 неправильно, либо переводит ваши инструкции в неправильные инструкции M1 / ​​ARM. - person JCWasmx86; 29.01.2021