http://blog.naver.com/kjpark79/220781100554


When I follow the http://pythonkim.tistory.com/71 & https://marcnu.github.io/2016-08-17/Tensorflow-v0.10-installed-from-scratch-Ubuntu-16.04-CUDA8.0RC-cuDNN5.1-1080GTX/, I got the below after < bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package>

"The specified --crosstool_top '@local_config_cuda//crosstool:crosstool' is not a valid cc_toolchain_suite rule. ..."


However, I follow the instruction of http://blog.naver.com/kjpark79/220781100554, I succeed.



ubuntu 14.04 에서는 tensorflow가 잘 됐는데 ubuntu 16.04에서는 MNIST 예제에서 에러가 나더군요. (misaligned address error) CIFAR10, Imagenet 등 다른 예제는 잘됩니다.

검색을 해보니 cuda toolkit 8.0과 cudnn 5를 설치하고 tensorflow를 source로 설치해서 성공했다는 사람이 있어서 해봤습니다. 삽질을 좀 하긴 했지만 설치하고 나니까 MNIST 예제 잘 돌아갑니다. ㅎㅎ

참고로 제 장비는 레노버 Y700 (NVIDIA GTX 960M 탑재) 입니다.


GCC 4.8 설치

ubuntu 16.04에는  gcc 5가 설치되어 있는데 cuda toolkit은 gcc 5를 지원하지 않습니다. 따라서 gcc 4.8을 이용해야 합니다. gcc 4.8을 이용하려면 아래와 같이 하면 됩니다.


sudo apt-get install gcc-4.8

sudo apt-get install g++-4.8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 --slave /usr/bin/g++ g++ /usr/bin/g++-5

sudo update-alternatives --config gcc


위와 같이 실행하면 gcc 선택 화면이 나오는데 gcc 4.8에 해당하는 숫자를 선택하면 됩니다. 저의 경우에는 1번이었습니다.

선택후 gcc -v를 실행해보고 버전이 4.8인지 확인하세요.


CUDA Toolkit, cuDNN 설치

NVIDIA 홈페이지에서 cuda toolkit 8.0과 cudnn 5을 다운받으세요.

cuda_8.0.27_linux.run

cudnn-8.0-linux-x64-v5.0-ga.tgz


cudnn의 압축을 풉니다. 압축을 풀면 cuda 디렉토리가 생성됩니다.

tar -zxf cudnn-8.0-linux-x64-v5.0-ga.tgz

 

cuda toolkit을 설치합니다.

sudo ./cuda_8.0.27_linux.run


cuda toolkit이 설치된 디렉토리에 cudnn 파일들을 복사합니다.

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/

sudo cp -a cuda/lib64/* /usr/local/cuda/lib64/

 

라이브러리 path를 추가하기 위해 .bashrc에 아래 내용을 추가합니다.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64

export CUDA_HOME=/usr/local/cuda


.bashrc에 추가한 내용을 적용합니다.

source ~/.bashrc


Tensorflow 설치

tensorflow를 소스로 설치하는 방법은 홈페이지에 자세히 나와 있기 때문에 여기서는 간략하게 정리했습니다.


tensorflow 소스를 git을 이용해 가져옵니다.

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


bazel을 설치합니다. bazel은 tensorflow을 빌드하기 위한 툴입니다.

http://bazel.io/docs/install.html


tensorflow 디렉토리로 이동한후 configure를 실행해 환경 설정을 합니다. 아래와 같이 cuda toolkit과 cudnn 버전을 지정해 줍니다.

./configure

...

Do you wish to build TensorFlow with GPU support? [y/N] y

Please specify the Cuda SDK version you want to use, e.g. 7.0. [Leave empty to use system default]: 8.0

Please specify the Cudnn version you want to use. [Leave empty to use system default]: 5

...

 

환경 설정이 끝났으면 bazel을 이용해 빌드합니다.

bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer

 

아래와 같은 에러가 발생하면

ERROR: /home/thomas/Downloads/tensorflow/tensorflow/core/kernels/BUILD:1518:1: undeclared inclusion(s) in rule '//tensorflow/core/kernels:depth_space_ops_gpu':

this rule is missing dependency declarations for the following files included by 'tensorflow/core/kernels/spacetodepth_op_gpu.cu.cc':

설정 파일에 include 디렉토리를 추가해 줍니다. vi로 파일을 열고

vi third_party/gpus/crosstool/CROSSTOOL

cxx_builtin_include_directory: "/usr/include" 아래에 아래 내용을 추가하세요.

cxx_builtin_include_directory: "/usr/local/cuda-8.0/include"

 

빌드가 끝났으면 정상적으로 빌드되었는지 확인합니다. 에러없이 잘 실행되면 성공입니다.

bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu


혹시 libcuda.so.1이 없다는 에러가 나오면 그래픽 카드 드라이버가 367인지 확인하세요. 361로 바꾸면 libcuda.so.1이 다시 생깁니다. (바꾸고 재부팅 한번 해주세요)

 

Python 패키지 제작

python에서 사용하려면 패키지를 만들고 pip로 설치해줘야 합니다.

bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

sudo pip install /tmp/tensorflow_pkg/tensorflow-0.10.0rc0-py2-none-any.whl

 

이제 tensorflow 안에 있는 MNIST 예제를 실행해 봅니다.

cd tensorflow/models/image/mnist

python convolutional.py


GPU 잘 잡고 에러 안뜨면 성공입니다. 짝짝짝


만약 init를 못한다는 에러가 나면 아래와 같이 실행한 후 다시 해보세요.

sudo ldconfig /usr/local/cuda/lib64

sudo python convolutional.py


이렇게 한번 하고 나면 다음부터 잘됩니다.


Posted by uniqueone
,