При компиляции моей программы с использованием Caffe2 я получаю следующие предупреждения:
[E init_intrinsics_check.cc:43] CPU feature avx is present on your machine, but the Caffe2 binary is not compiled with it. It means you may not get the full speed of your CPU.
[E init_intrinsics_check.cc:43] CPU feature avx2 is present on your machine, but the Caffe2 binary is not compiled with it. It means you may not get the full speed of your CPU.
[E init_intrinsics_check.cc:43] CPU feature fma is present on your machine, but the Caffe2 binary is not compiled with it. It means you may not get the full speed of your CPU.
Поскольку я хочу получить поддержку многопоточности для Caffe2, я искал, что делать. Я обнаружил, что Caffe2 необходимо перекомпилировать, установив некоторые аргументы при создании файла cmake
или в файле CMakeLists
.
Поскольку я уже установил pytorch
в окружении conda
, я сначала удалил Caffe2 с помощью:
pip uninstall -y caffe2
Затем я следовал инструкциям из документов Caffe2, построить его из исходников. Сначала я установил зависимости, как указано. Затем я загрузил pytorch
в свою среду conda
с помощью:
git clone https://github.com/pytorch/pytorch.git && cd pytorch
git submodule update --init --recursive
На данный момент я думаю, что настал момент изменить только что загруженный файл pytorch\caffe2\CMakeLists
. Я читал, что для включения поддержки многопоточности достаточно включить параметр USE_NATIVE_ARCH
внутри этого CMakeLists
, однако я не могу найти такой вариант там, где ищу. Может быть, я делаю что-то не так. Какие-нибудь мысли? Спасибо.
Вот некоторые подробности о моей платформе:
- Я на macOS Big Sur
- Моя
python
версия3.8.5
ОБНОВЛЕНИЕ:
Чтобы ответить Неге, это то, что у меня есть:
python3 -c 'import torch; print(torch.__config__.parallel_info())'
ATen/Parallel:
at::get_num_threads() : 1
at::get_num_interop_threads() : 4
OpenMP not found
Intel(R) Math Kernel Library Version 2020.0.2 Product Build 20200624 for Intel(R) 64 architecture applications
mkl_get_max_threads() : 4
Intel(R) MKL-DNN v0.21.1 (Git Hash 7d2fd500bc78936d1d648ca713b901012f470dbc)
std::thread::hardware_concurrency() : 8
Environment variables:
OMP_NUM_THREADS : [not set]
MKL_NUM_THREADS : [not set]
ATen parallel backend: OpenMP
ОБНОВЛЕНИЕ 2:
Оказалось, что Clang, поставляемый с XCode, не поддерживает OpenMP. gcc
, который я использовал, был просто символической ссылкой на Clang. На самом деле после запуска gcc --version
я получил:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin20.3.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
Я установил из Homebrew gcc-10
и установил такой псевдоним alias gcc='gcc-10'
. На самом деле теперь с gcc --version
я получаю следующее:
gcc-10 (Homebrew GCC 10.2.0_4) 10.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Я также попробовал простой Hello World для OpenMP с использованием 8 потоков, и все работает. Однако после повторного запуска команды:
python3 -c 'import torch; print(torch.__config__.parallel_info())'
Я получаю тот же результат. Какие-нибудь мысли?