텐서플로우 컴파일 설정 내용
텐서플로우(Tensorflow)를 컴파일 할 때 설정하는 내용을 설명드립니다. jemalloc, XLA JIT, VERBS, CUDA, TensorRP 등 다소 생소 할 수 있는 내용들을 자세히 설명드립니다. 소스코드 컴파일에 대한 전체 방법은 아래의 글을 참고해 주시기 바랍니다.
소스코드 디렉토리안에 configure 라는 배시(bash) 스크립트 파일이 존재합니다.
이 스크립트 파일은 텐서플로우를 컴파일하는데 의존성을 갖는 경로등을 입력받고, 컴파일러 플래그등 설정 내용을 묻습니다.
pip 패키지를 생성하거나 텐서플로우를 설치하기 전에 반드시 이 스크립트를 실행하여 컴파일 설정을 해야 합니다. 설정 스크립트를 실행하면 다양한 옵션들을 설정할 수 있는데 사용하지 사용하지 않는 기능들을 설정하면 컴파일 시간도 오래걸릴 뿐더러 패키지 용량도 커지게 됩니다. 따라서 필요한 옵션들만 설정하여 사용하시길 권장해 드립니다.
만약 GPU를 지원하는 텐서플로우를 빌드하기 위해서는 CUDA 와 cuDNN의 버전 정보를 요청합니다. 여러 종류의 CUDA와 cuDNN 버전이 이미 시스템에 설치 되었을 경우, 기본 경로가 아닌 특정한 경로를 설정해 줘야 할 수도 있습니다.
CUDA 및 cuDNN 라이브러리가 설치되지 않았을 경우 먼저 아래의 글을 참고하시여, NVIDIA 드라이버 및 필 수 라이브러리 등을 설치해 주시기 바랍니다.
환경 및 플랫폼 설정
아래의 내용은 configure 스크립트를 실행했을 때의 내용을 설명드리며, 여러분이 입력한 내용에 따라 출력되는 설정 내용이 차이가 있을 수 있습니다.
Please specify the location of python. [Default is /usr/bin/python]:
Python이 설치된 경로를 입력합니다. 기본 입력은 /usr/bin/python 입니다.
Found possible Python library paths:
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
Please input the desired Python library path to use. Default is [/usr/local/lib/python2.7/dist-packages]
Python 라이브러리 경로를 입력합니다. 위에서 가능한 경로들이 검색되었고 기본 라이브러리 경로는 /usr/local/lib/python2.7/dist-packages 입니다.
Do you wish to build TensorFlow with jemalloc as malloc support? [Y/n]:
malloc 대신에 jemalloc를 사용할지 물어보는 내용입니다. malloc는 기본적으로 시스템 메모리를 할당받는 함수지만, jemalloc는 메모리 단편화를 방지하고, 확장성을 지원합니다. 위의 jemalloc 를 설정하기 전에 아래의 명령어로 jemalloc 를 먼저 설치해야 합니다.
$ sudo apt-get install libjemalloc-dev
Do you wish to build TensorFlow with Google Cloud Platform support? [Y/n]:
구글 클라우드 플랫폼을 지원할지 설정하는 내용으로, 구글 클라우드 상에서 텐서플로우를 실행 할 수 있도록 설정하는 내용입니다.
https://cloud.google.com/solutions/running-distributed-tensorflow-on-compute-engine
Do you wish to build TensorFlow with Hadoop File System support? [Y/n]:
텐서플로우에서 하둡(Hadoop) 기반 파일시스템을 지원할 것인지 설정하는 내용입니다.
하둡 파일 시스템을 사용하는 자세한 방법은 아래의 페이지에서 참고 하실 수 있습니다.
https://www.tensorflow.org/deploy/hadoop
Do you wish to build TensorFlow with Amazon S3 File System support? [Y/n]:
텐서플로우에서 Amazon Simple Storage Service(S3)에 저장된 파일을 처리 할 수 있도록 설정하는 내용입니다.
아래 페이지에서 보다 자세한 내용을 참고 하실 수 있습니다.
https://www.tensorflow.org/versions/master/deploy/s3
Do you wish to build TensorFlow with Apache Kafka Platform support? [y/N]:
아파치 카프카는 아파치 소프트웨어 재단이 스칼라로 개발한 오픈 소스 메시지 브로커 플랫폼으로, 카프카를 지원할지 설정하는 내용입니다.
최적화및 병렬처리 설정
Do you wish to build TensorFlow with XLA JIT support? [y/N]:
XLA (Accelerated Linear Algebra)은 텐서플로우 연산 중 선형대수학(linear algebra, 벡터, 선형변환, 행렬 등) 분야에서 최적화 하기 위한 컴파일러입니다.
이 컴파일러의 결과로 메모리 사용 및 속도 와 서버 및 모바일 등의 플랫폼의 이식성 등의 장점이 될 수 있습니다.
대부분의 사용자가 XLA로 큰 효과가 없을 수 있습니다. 하지만 개발자를 대상으로 새로운 하드웨어 가속 기능과 함께 just-in-time (JIT) 빌드와 ahead-of-time (AOT) 빌드를 통한 XLA의 실험적인 사용이 환영되고 있습니다.
XLA JIT 빌드는 현재 x86-64 시스템과 NVIDIA GPU에서 지원되며, AOT 빌드는 x86-64시스템과 ARM 에서 지원됩니다.
보다 자세한 내용은 아래 페레지를 참고하실 수 있습니다.
https://www.tensorflow.org/performance/xla/
Do you wish to build TensorFlow with GDR support? [y/N]:
텐서플로우 분산 실행환경에서, 커다란 용량의 텐서(100MB 이상)의 불필요한 메모리 복사를 방지하기 위한 기능을 지원할 것인지 확인 하는 내용입니다.
GDR 대역외 전송(out-of-band transport)라고 불리는 기능으로 이 기능을 사용하기 위해서는 사용할 수 있는 환경인지 확인해 봐야 합니다.
GDR, RDMA 를 사용할수 있는 디바이스이며, nv_peer_mem 커널등 관련 패키지가 시스템에 설치되어 있어햐 합니다.
Do you wish to build TensorFlow with VERBS support? [y/N]:
텐서플로우가 ibverbs 기반의 Remote Direct Memory Access (RDMA) 기능을 사용할지 설정하는 내용입니다.
Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]:
OpenCL(Open Computing Language)은 개방형 범용 병렬 컴퓨팅 프레임워크로 CPU, GPU, DSP 등의 프로세서로 이루어진 이종 플랫폼에서 실행되는 프로그램을 작성할 수 있게 합니다. C로 개발된 OpenCL을 C++ 스타일로 개발하여 다중 플랫폼에서 활용할 수 있도록 한 것이 SYCL 입니다. OpenCL SYCL 를 사용할 것인지 묻는 내용입니다.
GPU 지원 설정
Do you wish to build TensorFlow with CUDA support? [y/N]:
Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 9.0]:
Please specify the location where CUDA 9.0 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:
Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7.0]:
Please specify the location where cuDNN 7 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:
Do you wish to build TensorFlow with TensorRT support? [y/N]:
Please specify a list of comma-separated Cuda compute capabilities you want to build with.
You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.
Please note that each additional compute capability significantly increases your build time and binary size. [Default is: 5.0]
Do you want to use clang as CUDA compiler? [y/N]:
nvcc will be used as CUDA compiler.
Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]:
CUDA를 설정하는 부분입니다. CUDA와 cuDNN 등의 버전정보를 입력해 주시고 필요하시면 TensorRT가 지원되도록 빌드 하실 수 있습니다. TensorRT 부분은 아래의 링크 내용을 참고해 주시기 바랍니다.
실행 환경 설정
Do you wish to build TensorFlow with MPI support? [y/N]:
MPI(Message Passing Interface)라고 불리는 메시지 전달 인터페이스를 사용할 것인지 묻는 설정 내용입니다.
Please specify optimization flags to use during compilation when bazel option “–config=opt” is specified [Default is -march=native]:
가장 중요한 옵션 중에 하나로, 컴파일시 사용되는 최적화 옵션을 설정합니다.
현재 시스템에서만 사용되는 경우 기본 값인 -march=native 를 권장하지만, 빌드된 텐서플로우 바이너리 파일이 다른 시스템에서도 함께 사용되는 경우 호환이 되는 최적화 옵션을 선택하셔야 합니다.
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]:
안드로이드와 관련하여 설정할것인지 묻는 내용입니다. 보다 자세한 내은 아래 페이지에서 참고 하실 수 있습니다.
https://www.tensorflow.org/mobile/android_build
설정이 완료가 되었을 경우 아래와 비슷한 내용으로 설정이완료되었다는 메세지를 확인 하실 수 있으실 겁니다.
Preconfigured Bazel build configs. You can use any of the below by adding "--config=<>" to your build command. See tools/bazel.rc for more details.
--config=mkl # Build with MKL support.
--config=monolithic # Config for mostly static monolithic build.
Configuration finished
( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)