まひろ量子のハックログ

プログラミングや機械学習などの知識を記録・共有します

pip face_recognitionでcmakeエラー(Mac OSX)

Macでpip install face_recognitionが失敗してハマったので、解決策をメモしておく。

まず、筆者がハマったときのエラーを以下に示す。

  -- Looking for sys/types.h - found
  -- Looking for stdint.h
  -- Looking for stdint.h - found
  -- Looking for stddef.h
  -- Looking for stddef.h - found
  -- Check size of void*
  -- Check size of void* - done
  -- Found LAPACK library
  -- Found CBLAS library
  -- Looking for cblas_ddot
  -- Looking for cblas_ddot - found
  -- Looking for sgesv
  -- Looking for sgesv - found
  -- Looking for sgesv_
  -- Looking for sgesv_ - found
  -- Found CUDA: /usr/local/cuda (found suitable version "9.2", minimum required is "7.5")
  -- Looking for cuDNN install...
  -- Found cuDNN: /usr/local/cuda/lib/libcudnn.dylib
  -- Building a CUDA test project to see if your compiler is compatible with CUDA...
  -- Checking if you have the right version of cuDNN installed.
  CMake Error at /private/var/folders/0z/r_3km1sj22gfl2fdx7g09gz40000gn/T/pip-install-s5e1bkz6/dlib/dlib/cmake_utils/use_cpp_11.cmake:74 (target_compile_features):
    target_compile_features The compiler feature "cxx_thread_local" is not
    known to CXX compiler

    "Clang"

    version 6.1.0.6020053.
  Call Stack (most recent call first):
    /private/var/folders/0z/r_3km1sj22gfl2fdx7g09gz40000gn/T/pip-install-s5e1bkz6/dlib/dlib/cmake_utils/test_for_cudnn/CMakeLists.txt:18 (enable_cpp11_for_target)


  CMake Error at /private/var/folders/0z/r_3km1sj22gfl2fdx7g09gz40000gn/T/pip-install-s5e1bkz6/dlib/dlib/CMakeLists.txt:662 (try_compile):
    Failed to configure test project build system.


  -- Configuring incomplete, errors occurred!
  See also "/private/var/folders/0z/r_3km1sj22gfl2fdx7g09gz40000gn/T/pip-install-s5e1bkz6/dlib/build/temp.macosx-10.11-x86_64-3.5/CMakeFiles/CMakeOutput.log".
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/private/var/folders/0z/r_3km1sj22gfl2fdx7g09gz40000gn/T/pip-install-s5e1bkz6/dlib/setup.py", line 257, in <module>
      'Topic :: Software Development',
    File "/usr/local/var/pyenv/versions/3.5.2/lib/python3.5/distutils/core.py", line 148, in setup
      dist.run_commands()
    File "/usr/local/var/pyenv/versions/3.5.2/lib/python3.5/distutils/dist.py", line 955, in run_commands
      self.run_command(cmd)
    File "/usr/local/var/pyenv/versions/3.5.2/lib/python3.5/distutils/dist.py", line 974, in run_command
      cmd_obj.run()
    File "/usr/local/var/pyenv/versions/3.5.2/lib/python3.5/site-packages/wheel/bdist_wheel.py", line 202, in run
      self.run_command('build')
    File "/usr/local/var/pyenv/versions/3.5.2/lib/python3.5/distutils/cmd.py", line 313, in run_command
      self.distribution.run_command(command)
    File "/usr/local/var/pyenv/versions/3.5.2/lib/python3.5/distutils/dist.py", line 974, in run_command
      cmd_obj.run()
    File "/usr/local/var/pyenv/versions/3.5.2/lib/python3.5/distutils/command/build.py", line 135, in run
      self.run_command(cmd_name)
    File "/usr/local/var/pyenv/versions/3.5.2/lib/python3.5/distutils/cmd.py", line 313, in run_command
      self.distribution.run_command(command)
    File "/usr/local/var/pyenv/versions/3.5.2/lib/python3.5/distutils/dist.py", line 974, in run_command
      cmd_obj.run()
    File "/private/var/folders/0z/r_3km1sj22gfl2fdx7g09gz40000gn/T/pip-install-s5e1bkz6/dlib/setup.py", line 133, in run
      self.build_extension(ext)
    File "/private/var/folders/0z/r_3km1sj22gfl2fdx7g09gz40000gn/T/pip-install-s5e1bkz6/dlib/setup.py", line 170, in build_extension
      subprocess.check_call(cmake_setup, cwd=build_folder)
    File "/usr/local/var/pyenv/versions/3.5.2/lib/python3.5/subprocess.py", line 581, in check_call
      raise CalledProcessError(retcode, cmd)
  subprocess.CalledProcessError: Command '['cmake', '/private/var/folders/0z/r_3km1sj22gfl2fdx7g09gz40000gn/T/pip-install-s5e1bkz6/dlib/tools/python', '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/private/var/folders/0z/r_3km1sj22gfl2fdx7g09gz40000gn/T/pip-install-s5e1bkz6/dlib/build/lib.macosx-10.11-x86_64-3.5', '-DPYTHON_EXECUTABLE=/usr/local/var/pyenv/versions/3.5.2/bin/python3.5', '-DCMAKE_BUILD_TYPE=Release']' returned non-zero exit status 1

  ----------------------------------------
  Failed building wheel for dlib

解決策

結論から言うと、以下に示す環境にすることでうまくインストールできた。筆者はGPUを使っているが、GPU無しの場合はCUDAやcudnnは不要と思われる。

  • OSX: 10.13.2 (High Sierra)
  • CUDA: 9.2
  • cudnn: 7.2
  • cmake: 3.12.1
  • clang: Apple LLVM version 8.0.0 (clang-800.0.42.1)

CUDAのバージョン確認

 ls /Developer/NVIDIA/CUDA-9.2 # CUDA Toolkitをdmgからインストールするとデフォルトでこのディレクトリに入る

古いバージョンが入っていたら、それをアンインストールしてから新しいCUDA Toolkit dmgをダウンロードしてきて再インストール。

cudnnのバージョン確認

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_M

メジャーバージョンとマイナーバージョンが表示される。メジャーが7、マイナーが2なら、バージョン7.2ということ。上述のディレクトリにcudnn.hが無い場合はそもそもインストールされていない。

NVIDIAのサイトからtgz形式のcudnn7.2をダウンロードしてきて、解凍後、includeの中身を全て/usr/local/cuda/include/に、libの中身を全て/usr/local/cuda/lib/にコピーすればインストール完了。

cmakeのバージョン確認

cmake --version

pipで最新版をインストールする。

pip install cmake

clangのバージョン確認

clang --version

以下の記事を参考に、Command_Line_Tools_macOS_10.12_for_Xcode_8.2.dmg をインストールした。

qiita.com

以下のコマンドで、コマンドラインツールのバージョンを切り替える。

$ sudo xcode-select --switch /Library/Developer/CommandLineTools

$ clang --version
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin17.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

この状態で、pip install face_recognitionをたたくと成功した。

Kozuko Mahiro's Hacklog ―― Copyright © 2018 Mahiro Kazuko