[Caffe] ubuntu 18.04에 caffe설치하기 - only CPU

JINJU·2021년 4월 11일
0

caffe

목록 보기
1/1

ubuntu 16.04 이상도 됨 ( 17.04, 18.04 기준)

나는 ubuntu 18.04를 virtual box로 사용 중이다.
caffe를 설치하게 된 계기는 코딩테스트의 한 일부라 설치하게 됐는데 진짜 이틀걸린 것 같다.. 그래서 나와 같은 사람이 없길 바라며 ㅠㅠ 글을 적는다.
그리고 caffe 설치는 only CPU버전이랑 ndivia-docker 플러그인을 사용해서 GPU를 사용하는 모드가 있다.
근데 나는 후자모드 하다가 너무 안되서 cpu버전했는데 노트북이라 gpu가 없긴하다.. (사실 이게 맞는진 모름..ㅋㅎㅋㅎㅋ)

1. dependencies pakage 다운받기

$ sudo apt install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler python-dev libgflags-dev libgoogle-glog-dev liblmdb-dev libboost-all-dev libatlas-base-dev libopenblas-dev libopencv-dev python-opencv python-pip python-dev python-protobuf build-essential

명령어를 입력한다.

2. caffe Git clone 하기

$ git clone https://github.com/BVLC/caffe

명령어를 입력 후

$ ls

명령어를 사용하게 되면

caffe directory가 생성된 것을 볼 수 있다.

$ cd caffe
$ ls

를 입력한다.

3. makefile 만들기

$ sudo vi Makefile.config

명령어를 입력해서

CPU_ONLY := 1
OPENCV_VERSION := 3
CUSTOM_CXX := g++
CUDA_DIR := /usr/local/cuda
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61

BLAS := atlas
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
PYTHON_LIB := /usr/lib
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
BUILD_DIR := build
DISTRIBUTE_DIR := distribute
TEST_GPUID := 0
Q ?= @

작성한다.
(작성방법(Linux기준): a -> ctrl+v -> esc -> :wq 입력)
a는 커서 다음 입력하는 명령어임 (i해도됨)

4. make 실행하기

$ make all
$ make test
$ make run test

아래는 수행 과정이다. (참고바람)

devops@devops-osetc:~/caffe$ make all
PROTOC src/caffe/proto/caffe.proto
CXX .build_release/src/caffe/proto/caffe.pb.cc
CXX src/caffe/solver.cpp
CXX src/caffe/parallel.cpp
CXX src/caffe/net.cpp
CXX src/caffe/layers/prelu_layer.cpp
CXX src/caffe/layers/contrastive_loss_layer.cpp
CXX src/caffe/layers/cudnn_lrn_layer.cpp
CXX src/caffe/layers/batch_norm_layer.cpp
CXX src/caffe/layers/threshold_layer.cpp
CXX src/caffe/layers/base_conv_layer.cpp
CXX src/caffe/layers/tanh_layer.cpp
CXX src/caffe/layers/inner_product_layer.cpp
CXX src/caffe/layers/flatten_layer.cpp
CXX src/caffe/layers/eltwise_layer.cpp
CXX src/caffe/layers/relu_layer.cpp
CXX src/caffe/layers/base_data_layer.cpp
......
CXX src/caffe/blob.cpp
AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so.1.0.0
CXX tools/upgrade_solver_proto_text.cpp
CXX/LD -o .build_release/tools/upgrade_solver_proto_text.bin
CXX tools/upgrade_net_proto_binary.cpp
CXX/LD -o .build_release/tools/upgrade_net_proto_binary.bin
CXX tools/compute_image_mean.cpp
CXX/LD -o .build_release/tools/compute_image_mean.bin
CXX tools/convert_imageset.cpp
CXX/LD -o .build_release/tools/convert_imageset.bin
CXX tools/upgrade_net_proto_text.cpp
CXX/LD -o .build_release/tools/upgrade_net_proto_text.bin
CXX tools/extract_features.cpp
CXX/LD -o .build_release/tools/extract_features.bin
CXX tools/caffe.cpp
CXX/LD -o .build_release/tools/caffe.bin
CXX examples/cifar10/convert_cifar_data.cpp
CXX/LD -o .build_release/examples/cifar10/convert_cifar_data.bin
CXX examples/cpp_classification/classification.cpp
CXX/LD -o .build_release/examples/cpp_classification/classification.bin
CXX examples/mnist/convert_mnist_data.cpp
CXX/LD -o .build_release/examples/mnist/convert_mnist_data.bin
CXX examples/siamese/convert_mnist_siamese_data.cpp
CXX/LD -o .build_release/examples/siamese/convert_mnist_siamese_data.bin

devops@devops-osetc:~/caffe$ echo $?
0


devops@devops-osetc:~/caffe$ make test
CXX src/caffe/test/test_reshape_layer.cpp
CXX src/caffe/test/test_blob.cpp
CXX src/caffe/test/test_euclidean_loss_layer.cpp
CXX src/caffe/test/test_db.cpp
CXX src/caffe/test/test_common.cpp
CXX src/caffe/test/test_rnn_layer.cpp
CXX src/caffe/test/test_hinge_loss_layer.cpp
CXX src/caffe/test/test_random_number_generator.cpp
CXX src/caffe/test/test_util_blas.cpp
CXX src/caffe/test/test_slice_layer.cpp
CXX src/caffe/test/test_argmax_layer.cpp
CXX src/caffe/test/test_contrastive_loss_layer.cpp
CXX src/caffe/test/test_gradient_based_solver.cpp
CXX src/caffe/test/test_dummy_data_layer.cpp
CXX src/caffe/test/test_bias_layer.cpp
CXX src/caffe/test/test_neuron_layer.cpp
......
LD .build_release/src/caffe/test/test_tanh_layer.o
LD .build_release/src/caffe/test/test_multinomial_logistic_loss_layer.o
LD .build_release/src/caffe/test/test_filler.o
LD .build_release/src/caffe/test/test_internal_thread.o
LD .build_release/src/caffe/test/test_tile_layer.o
LD .build_release/src/caffe/test/test_math_functions.o

devops@devops-osetc:~/caffe$ echo $?
0


$ make runtest
[----------] 5 tests from SPPLayerTest/0, where TypeParam = caffe::CPUDevice<float>
[ RUN ] SPPLayerTest/0.TestEqualOutputDims
[ OK ] SPPLayerTest/0.TestEqualOutputDims (1 ms)
[ RUN ] SPPLayerTest/0.TestForwardBackward
[ OK ] SPPLayerTest/0.TestForwardBackward (0 ms)
[ RUN ] SPPLayerTest/0.TestSetup
[ OK ] SPPLayerTest/0.TestSetup (0 ms)
[ RUN ] SPPLayerTest/0.TestEqualOutputDims2
[ OK ] SPPLayerTest/0.TestEqualOutputDims2 (0 ms)
[ RUN ] SPPLayerTest/0.TestGradient
[ OK ] SPPLayerTest/0.TestGradient (2822 ms)
[----------] 5 tests from SPPLayerTest/0 (2829 ms total)

[----------] Global test environment tear-down
[==========] 1162 tests from 152 test cases ran. (138945 ms total)
[ PASSED ] 1162 tests.

5. pycaffe 만들기

$ make pycaffe

실행 후

$ echo $?

입력하면 output은 0이나온다.

6. path 정해주기

$ export PYTHONPATH=/home/devops/caffe/python:$PYTHONPATH

경로를 지정해줘야하는데 devops 에 자신의 ubuntu이름을 적어주면된다. 이대로 복사해서 넣으면 안됨!!!

7. python 실행하기

$ python

입력 후

import caffe

를 입력

정상으로 입력 시 다음과 같음

그러나!!!!! 이게 정상으로 되면 참 좋겠지만
역시 안되는 부분이 있어서 겪는 error를 적어놓겠음


AttributeError: 'module' object has no attribute '_internal_create_key'

나는 이런 error가 발생했었는데 이 문제해결방법은

pip install --upgrade protobuf

protocol buffer를 업그레이드해야한다.
이것이 필요한 이유는 직접 찾아보시길!
처음 설치할 당시에는 이걸 따로 설치했었는데 진짜 너무 복잡해서
다 초기화하고 다시함 ㅠㅠ 이런 에러를 겪으시는 분은 한번에 해결하시길 바래요 ㅠ

그리고 참고한 홈페이지에서 또 다른 에러가 발생할 수 있다는데

>>> import caffe
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/devops/caffe/python/caffe/__init__.py", line 1, in <module>
from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
File "/home/devops/caffe/python/caffe/pycaffe.py", line 15, in <module>
import caffe.io
File "/home/devops/caffe/python/caffe/io.py", line 2, in <module>
import skimage.io

import caffe 시에 skimage.io에 대한 import 에러가 날때는

$ sudo apt install python-skimage

명령어를 치면 됨

-모두 행복한 설치되세요 'ᴗ' -



[참고]

[caffe설치] https://www.osetc.com/en/how-to-install-caffe-on-ubuntu-16-04-17-04-18-04-linux.html
[AttributeError]
https://stackoverflow.com/questions/61922334/how-to-solve-attributeerror-module-google-protobuf-descriptor-has-no-attribu

1개의 댓글

comment-user-thumbnail
2022년 6월 19일

감사합니다~2번부터는 잘 되는데 왜 1번은 안될까요..?ㅠㅠ

답글 달기