몇년 전부터 딥러닝(DeepLearning)이 유행하기 시작했습니다.

조금 공부해 보시면, 그 역사와 왜 몇년전부터 다시 재조명 받기 시작했는지 아실겁니다.


그래서~

요즘 저도 딥러닝에 관심이 많이 생겼습니다. 물론 1~2년 늦은감은 있습니다. ㅠㅠ

모쪼록 그래서 시작해보려 합니다.

딥러닝!




TensorFlow 설치하기


현재 딥러닝 관련된 프레임워크가 많이 있습니다.

Caffe 라든지 mxnet, paddle, torch, pytorch 그리고 구글의 TensorFlow 가 있지요.

아무래도 구글이 미래기술이라든지 머신쪽 관련해서 많은 인력을 확보하고 선두주자가 될거라는 생각에

저는 TensorFlow 로 시작하려고 합니다.


지금 글을 작성하고 있는 시점에 TensorFlow 는 Python 을 주력으로 지원하고 있으며, C++ 을 얼마전부터 슬슬 지원하고 있습니다. 다시말해서 아직 Python 만큼은 완벽하지 않습니다. 자세한건 홈페이지에 가시보면 있습니다.


https://www.tensorflow.org/api_docs/



참고로 제가 설치하는 환경은 CentOS 6.6(Final) 입니다.



Bazel 설치하기




먼저 TensorFlow 설치를 하기 위해서는 Bazel 을 설치해야 합니다. 저도 처음 써보는데 구글에서 자체적으로 만든 범용 빌드툴이라고 합니다.


그런데 이걸 설치하려면, 또 먼저 설치해야 할것들이 있습니다 ^^;




http://blog.abysm.org/2016/06/building-tensorflow-centos-6/




  1. JDK 8
  2. Developer Toolset
    1. Software Collections (contos-release-scl)
    2. Developer Toolset
  3. Python 2.7
이것을 설치해 주어야 합니다. 그래야 Bazel 을 설치할 수 있습니다.



1 JDK 설치

sudo yum install java-1.8.0-openjdk-devel






http://blog.abysm.org/2016/03/installing-developer-toolset-rhel-based-distributions/


2. Software Collections

sudo yum install centos-release-scl



3. 파이썬

yum install python27 python27-numpy swig python27-python-devel python27-python-wheel



Install Developer Toolset

sudo yum install devtoolset-4




이제 빌드환경을 셋업 합니다.

scl enable devtoolset-4 bash




이제야 Bazel 을 설치할 수 있는 환경이 구축되었습니다.


Enter Software Collection environment with Developer Toolset.

1. 

1
scl enable devtoolset-4 bash


사실 Bazel 은 우분투면 설치가 쉽습니다. CentOS 는 소스를 직접 빌드해야 합니다.




https://github.com/bazelbuild/bazel/releases


위 주소에 들어가서 최신 버전을 다운로드 합니다.

Download bazel-<VERSION>-dist.zip


bazel-0.4.4-dist.zip


아래처럼 다운로드를 받은 뒤에 압축을 풀고 install 합니다.

미리 말씀드리자면.. 시간이 오래 걸립니다.


두손모아 기도합시다.


http://blog.abysm.org/2016/06/building-tensorflow-centos-6/


# download distribution archive
wget https://github.com/bazelbuild/bazel/releases/download/0.4.2/bazel-0.4.2-dist.zip
unzip bazel-0.4.2-dist.zip -d bazel-0.4.2-dist
cd bazel-0.4.2-dist



# compile
./compile.sh
 

빌드가 완료되고 나면, output 디렉토리안에 bazel 파일 하나가 생성됩니다.
self-contained 이므로 이 파일만 있으면 됩니다.

쓰기 좋게 /usr/local/bin 에 복사합니다.



# install
mkdir -p ~/bin
cp output/bazel ~/bin/
 
# exit from Software Collection environment
exit




이제야 TensorFlow 를 빌드 할 환경이 구축되었습니다.



1. 빌드환경을 아래처럼 변경합니다.

scl enable devtoolset-4 python27 bash



2. TensorFlow 소스를 다운로드 합니다.


git clone --recursive https://github.com/tensorflow/tensorflow


2
3
4
5
6
# clone source code repository
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
 
# select version (optional)
git checkout v0.12.0




3. CentOS6 에서는 GNU C 라이브러리의 버전이 2.17 이하라서 아래처럼 수정을 합니다.

-lrt 를 사용해야 합니다.


800 라인 근처에 보면 아래의 코드가 있습니다. 다음처럼 수정합니다.


1
2
def tf_extension_linkopts():
  return []  # No extension link opts



Modified tf_extension_linkopts Function
Python
1
2
def tf_extension_linkopts():
  return ["-lrt"]



4. 환경 설정을 해줍니다.

./configure 를 호출하면 각종 설정들이 나옵니다.

GPU 쓸꺼냐, CUDA 쓸꺼냐 등등. 알아서 설정해 줍니다.



5. 빌드!!!

이제 C++ 로 빌드할겁니다. Python 설정은 기존에 나온게 많으니까 그거 참고해주세요


bazel build -c opt --config=cuda //tensorflow:libtensorflow_cc.so


이렇게 하고나면 뭔가 나옵니다. 결과물이. SharedLibrary 형태로 나오죠.


http://memo.saitodev.com/home/tensorflow/build/

https://github.com/cjweeks/tensorflow-cmake


이런 애들보면 so 파일과 include 용 header 파일들을 어디다가 넣어야 하는지 나옴


sudo cp bazel-bin/tensorflow/libtensorflow_all.so /usr/local/lib



Copy the source to /usr/local/include/google and remove unneeded items:

sudo mkdir -p /usr/local/include/google/tensorflow
sudo cp -r tensorflow /usr/local/include/google/tensorflow/
sudo find /usr/local/include/google/tensorflow/tensorflow -type f  ! -name "*.h" -delete

Copy all generated files from bazel-genfiles:

sudo cp bazel-genfiles/tensorflow/core/framework/*.h  /usr/local/include/google/tensorflow/tensorflow/core/framework
sudo cp bazel-genfiles/tensorflow/core/kernels/*.h  /usr/local/include/google/tensorflow/tensorflow/core/kernels
sudo cp bazel-genfiles/tensorflow/core/lib/core/*.h  /usr/local/include/google/tensorflow/tensorflow/core/lib/core
sudo cp bazel-genfiles/tensorflow/core/protobuf/*.h  /usr/local/include/google/tensorflow/tensorflow/core/protobuf
sudo cp bazel-genfiles/tensorflow/core/util/*.h  /usr/local/include/google/tensorflow/tensorflow/core/util
sudo cp bazel-genfiles/tensorflow/cc/ops/*.h  /usr/local/include/google/tensorflow/tensorflow/cc/ops

Copy the third party directory:

sudo cp -r third_party /usr/local/include/google/tensorflow/
sudo rm -r /usr/local/include/google/tensorflow/third_party/py

# Note: newer versions of TensorFlow do not have the following directory
sudo rm -r /usr/local/include/google/tensorflow/third_party/avro



대충 요런식이죠.



근데 이게 runtime library 형태로 하고 쓸때보면,, Protobuf 랑 Eigen 같은걸 설치해야 됩니다.

https://github.com/cjweeks/tensorflow-cmake


여기 보면 잘 나와 있어요.