web-dev-qa-db-fra.com

Erreur d'installation Caffe sur Mac: "Erreur fatale: fichier 'cblas.h' non trouvé"

J'ai suivi ce guide à installer sur mon macbook pro El Capitan, en utilisant CMake pour créer le fichier makefile. Cependant, lorsque j'essaie de créer, je rencontre l'erreur de manquer le fichier cblas.h. J'ai réinstallé avec succès openblas avec: 

$ brew uninstall openblas; brew install --fresh -vd openblas 

et en ajoutant les deux drapeaux de construction:

LDFLAGS: -L/usr/local/opt/openblas/lib

CPPFLAGS: -I/usr/local/opt/openblas/include

Cependant, j'obtiens toujours l'erreur. Ensuite, j'ai réinstallé les outils d'installation CUDA et xcode-select comme recommandé here

Toutes les recommandations/autres spéculations sur la raison pour laquelle make ne voit pas mon fichier cblas.h sont appréciées!

6
Ethan Keller

Dans votre question, je vois cmake, mais dans le lien fourni Makefile.config.

Si vous voulez toujours continuer avec cmake :

tout d'abord, le script de construction n'est PAS endommagé - je l'ai essayé sur Yosemite avec le dernier fichier master branch (2016-02-25), mais vous devez l'ajuster légèrement si vous avez déjà créé

brew uninstall openblas; brew install --fresh -vd openblas

Il suffit de lancer votre cmake avec des arguments supplémentaires:

cmake -DCMAKE_CXX_FLAGS=-I/usr/local/opt/openblas/include <path to your sources>

puis make ou xcode habituel (dépend du générateur que vous utilisez).

Après cela, il a été construit avec succès sur mon système.

UPD: vous pouvez également utiliser des bibliothèques dans Accelerate.framework (vecLib) au lieu de openblas .

15
avtomaton

Allez au Makefile.config et éditez les lignes suivantes avec le chemin où se trouve votre openblas, dans mon cas la version est 0.2.18_2

Assurez-vous de ne pas commenter ces lignes:

BLAS_INCLUDE := /usr/local/Cellar/openblas/0.2.18_2/include
BLAS_LIB := /usr/local/Cellar/openblas/0.2.18_2/lib
4
Juan Camilo Zapata

Décommentez ces lignes dans Makefile.config:

# Homebrew puts openblas in a directory that is not on the standard search path 
BLAS_INCLUDE := $(Shell brew --prefix openblas)/include 
BLAS_LIB := $(Shell brew --prefix openblas)/lib
2
mayo

J'ai moi-même rencontré ce problème aujourd'hui et j'ai soumis une demande d'attraction à Caffe:

https://github.com/BVLC/caffe/pull/4247

Pour moi, le problème était que Caffe trouvait le framework vecLib obsolète (qui ne livre pas cblas.h) au lieu du nouveau framework Accelerate (qui vend cblas.h).

1
jklontz

Dans Makefile.config:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/local/opt/openblas/include/

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/opt/openblas/lib/

Pas sûr que ce soit la solution la plus élégante, mais ça marche.

0
mrgloom

Pour mon installation Caffe, c'était ma configuration:

  • MacOS 10.12 Sierra, CPU_ONLY = ON, pas de CUDA, pas d'Anaconda, avec interface Python
  • Compilation via Make (au lieu de Cmake) instructions officielles ici

Le répertoire de mon fichier cblas.h (via la recherche dans le Finder): /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Headers

Ajoutez ce chemin cblas.h à ./caffe/Makefile.config:

# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Headers/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

Notes complémentaires

Également pour moi, j'avais OpenBlas. Peut avoir un impact sur votre situation.

# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS := open

J'ai aussi modifié ./caffe/Makefile avec le chemin cblas.h, mais je ne suis pas sûr que cela soit nécessaire/fait une différence.

else ifeq ($(BLAS), open)
    # OpenBLAS
    LIBRARIES += openblas
    BLAS_INCLUDE ?= /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Headers/

Résultat obtenu

L'erreur d'origine a disparu:

Tams-MacBook-Pro:caffe tamtam$ make all
CXX src/caffe/blob.cpp
In file included from src/caffe/blob.cpp:7:
In file included from ./include/caffe/util/math_functions.hpp:11:
./include/caffe/util/mkl_alternate.hpp:14:10: fatal error: 'cblas.h' file not found
#include <cblas.h>
         ^
1 error generated.
make: *** [.build_release/src/caffe/blob.o] Error 1

Mais l'erreur suivante résolue était (la fin de la sortie):

CXX src/caffe/util/upgrade_proto.cpp
AR -o .build_release/lib/libcaffe.a
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_conv_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_lcn_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_lrn_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_pooling_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_relu_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_sigmoid_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_softmax_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_tanh_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(parallel.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn.o) has no symbols
LD -o .build_release/lib/libcaffe.so.1.0.0-rc5
clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument]
ld: warning: directory not found for option '-L/lib'
ld: library not found for -lopenblas
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [.build_release/lib/libcaffe.so.1.0.0-rc5] Error 1

Ce que je corrige/résout/modifie via ceci dans Makefile.config:

# Homebrew puts openblas in a directory that is not on the standard search path
BLAS_INCLUDE := $(brew --prefix openblas)/include /usr/local/Cellar/openblas/0.3.3/include
BLAS_LIB := $(brew --prefix openblas)/lib /usr/local/Cellar/openblas/0.3.3/lib

J'ai également résolu l'avertissement -pthread via ceci dans Makefile:

CXXFLAGS += -fPIC $(COMMON_FLAGS) $(WARNINGS) -std=c++11 #rm'd -pthread
LINKFLAGS += -fPIC $(COMMON_FLAGS) $(WARNINGS) -std=c++11 #rm'd -pthread

Avec un autre make clean, cp Makefile.config.example Makefile.config et make all, il s'agit de la fin de la sortie et de la même manière du Gist complet de la sortie:

In file included from ./include/caffe/caffe.hpp:12:
./include/caffe/net.hpp:41:5: warning: unused typedef 'INVALID_REQUESTED_LOG_SEVERITY' [-Wunused-local-typedef]
    LOG_EVERY_N(WARNING, 1000) << "DEPRECATED: ForwardPrefilled() "
    ^
/usr/local/include/glog/logging.h:943:30: note: expanded from macro 'LOG_EVERY_N'
                             INVALID_REQUESTED_LOG_SEVERITY);           \
                             ^
1 warning generated.
CXX/LD -o .build_release/examples/cpp_classification/classification.bin
ld: warning: directory not found for option '-L/lib'
CXX examples/mnist/convert_mnist_data.cpp
CXX/LD -o .build_release/examples/mnist/convert_mnist_data.bin
ld: warning: directory not found for option '-L/lib'
CXX examples/siamese/convert_mnist_siamese_data.cpp
CXX/LD -o .build_release/examples/siamese/convert_mnist_siamese_data.bin
ld: warning: directory not found for option '-L/lib'

Il semble donc que make all ait été construit avec succès, en supposant que cette erreur -L/lib ne causera plus de problèmes par la suite. Remarque: make all, make test et make runtest fonctionnent correctement avec seulement les avertissements générés. make pycaffe a cependant généré d'autres erreurs; Je pourrais créer un lien vers mes solutions plus tard. En outre, oui, cette réponse est longue et va bien au-delà de ce que le PO a demandé, mais j'espère que ma réponse pourrait aider quelqu'un d'autre dans ce processus d'installation épouvantable.

0
tamtam