텐서플로우 소스코드 빌드 방법


텐서플로우 소스코드 빌드 방법
이번 글에서는 최신버전의 텐서플로우의 소스코드를 빌드하고 설치 방법에 대해서 설명드립니다.

기본 설치 명령어를 이용하여 텐서플로우를 바로 설치할 경우, 쉽고 간편하다는 장점이 있지만 범용적인 환경을 대상으로 빌드가 되었기 때문에 실제 시스템 환경과 차이가 있을 수 있다는 단점이 존재합니다.

예를 들어 CPU에서 지원하지 않는 명령어가 설치 버전에서 사용될 경우 실행되지 않는 문제가 발생할 수 있으며, CPU 제공되는 명령어로 성능을 높일 수 있지만 빌드가 된 버전에서 해당 명령어가 사용되지 않는 경우 성능이 제한 될 수 있습니다.

위의 문제를 해결하고, 최적의 시스템 자원을 활용하기 위해서 소스코드를 직접 빌드하여 텐서플로우를 사용할 수 있습니다.
직접 텐서플로우 소스코드를 빌드하는 경우 다소 복잡할 수 있는데, 한 단계씩 설명을 드리도록 하겠습니다.

1. 라이브러리 설치

$ sudo apt install python-dev python-pip python-wheel ruby linuxbrew-wrapper
$ sudo -H pip install six numpy wheel

위의 명령어를 이용하여 기본 파이썬 패키지들과 명령어등을 설치합니다. 그리고 Bazel이라는 소스코드 빌드 패키지를 아래와 같이 설치합니다.

$ sudo apt install openjdk-8-jdk

$ echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
$ curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -

$ sudo apt update && sudo apt install bazel
$ sudo apt upgrade bazel

Bazel에 대한 자세한 사용법 및 설치 방법등을 확인하실려면 아래의 글을 참고해 주시기 바랍니다.

Bazel 설치 사용법

그리고, 다음 명령어를 이용하여 GNU coreutils 패키지를 설치합니다.

$ brew install coreutils

환경 구축과 관련하여 GPU를 지원하는 텐서플로우를 빌드하실 경우, CUDA SDK Tookit과 cuDNN 등의 라이브러리를 함께 설치해야 합니다. CUDA와 cuDNN 라이브러리 설치 방법은 아래의 글을 참고해 주시기 바라며, CPU만 사용하는 버전을 빌드하실 경우 다음 단계를 진행하시면 됩니다.

CUDA 설치 우분투 환경

2. 소스코드 다운로드

아래의 명령어로 텐서플로우 소스코드를 다운 받고 원하시는 태그 버전으로 설정합니다.

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

$ git checkout tags/v1.10.0

$ git status
HEAD detached at v1.10.0
nothing to commit, working directory clean

텐서플로우 소스코드 디렉토리에서 git tag 라는 명령어를 이용하면 태깅된 버전정보를 확인 하실 수 있습니다. 위의 내용은 텐서플로우 빌드 버전을 v1.10.0으로 설정하는 내용으로, 원하시는 버전으로 빌드할 수 있습니다.

3. 설정

텐서플로우 디렉토리 안에서 아래와 같은 명령어를 실행하면, 빌드를 위한 설정 스크립트가 실행됩니다.

$./configure

상당히 많은 내용을 설정 할 수 있는데, 어떤 내용을 설정할지 모르면 기본값으로 입력하시면 됩니다. 기능들을 많이 추가하시면 빌드 시간이 오래걸리기 때문에 필요한 기능들만 설정하시면 됩니다. 보다 자세한 빌드 설정 내용에 대해서는 아래의 페이지 내용을 참고해 주시기 바랍니다.

텐서플로우 컴파일 설정 내용

참고로 설정 내용중에서 아래와 같은 내용이 있습니다.

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: 

위의 내용에도 기본 값으로 (-march=native) 선택하길 권장해 드립니다. 기본값으로 경우 빌드하고 있는 시스템에서 최적화하여 빌드가 될 예정이지만, 만약 빌드가 된 텐서플로우 패키지가 다른 CPU에서 실행 될 수 있는 경우 원하시는 플랫폼에 맞춰 설정해 주시면 됩니다.

그리고 GPU를 이용하실 경우, CUDA 등의 관련 설정을 함께 해주셔야 합니다.

4. 빌드

텐서플로우 설치 패키지를 빌드 할 준비가 완료되었습니다. CPU만 지원하는 버전과 GPU를 함께 지원하는 버전 중에서 원하시는 버전을 선택해서 해당 명령어를 실행하면 됩니다. 아래의 명령어는 CPU만 지원하는 패키지를 빌드하기 위한 명령어입니다.

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

그리고 GPU를 지원하는 텐서플로우 패키지를 빌드하기 위해서는, 아래의 명령어로 빌드하시면 됩니다.

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

소스코드를 빌드하는 과정에서 메모리가 부족하다는 오류가 발생할 경우, 아래의 글을 참고해 주시기 바랍니다.

리눅스 메모리 부족 문제 해결 방법

그리고 소스코드를 빌드하다가, AttributeError: ‘int’ object attribute ‘__doc__’ is read-only 라는 에러 또는 ImportError: No module named enum 라는 에러가 발생할 경우 아래 패키지를 추가 설치해 주시기 바랍니다.

$ sudo -H pip install enum34

빌드가 완료되면 아래의 명령어로 설치 패키지를 생성합니다.

$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
Sun Mar 4 18:08:31 KST 2018 : === Using tmpdir: /tmp/tmp.woBL7lrVj7
/data/tensorflow/bazel-bin/tensorflow/tools/pip_package/build_pip_package.runfiles /data/tensorflow
/data/tensorflow
/tmp/tmp.woBL7lrVj7 /data/tensorflow
Sun Mar 4 18:08:33 KST 2018 : === Building wheel
warning: no files found matching '*.dll' under directory '*'
warning: no files found matching '*.lib' under directory '*'
warning: no files found matching '*.h' under directory 'tensorflow/include/tensorflow'
warning: no files found matching '*' under directory 'tensorflow/include/Eigen'
warning: no files found matching '*' under directory 'tensorflow/include/external'
warning: no files found matching '*.h' under directory 'tensorflow/include/google'
warning: no files found matching '*' under directory 'tensorflow/include/third_party'
warning: no files found matching '*' under directory 'tensorflow/include/unsupported'
/data/tensorflow
Sun Mar 4 18:08:48 KST 2018 : === Output wheel file is in: /tmp/tensorflow_pkg

5. 패키지 설치

위에서 지정한 디렉토리인 /tmp/tensorflow_pkg 의 내용을 확인하면, 설치 패키지가 생성된 것을 확인 할 수 있습니다. 생성된 패키지를 최종적으로 아래의 명령어로 설치하면 됩니다.

$ sudo -H pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.10.0-cp27-cp27mu-linux_x86_64.whl
본문 내용 인용시에는 출처를 밝혀 주시기 바랍니다.