# TensorFlow with GPU support on Windows

    _

    [TensorFlow](https://www.tensorflow.org/)는 Ubuntu / Mac OS X / Windows를 공식적으로 지원하고 OS 별로 여러 설치 옵션을 제공해 준다. 필자의 경우 Ubuntu나 Mac을 사용하기는 하지만, TensorFlow 공부는 주로 집에 있는 데스크탑에서 진행 할 예정이므로 Windows 환경에 설치하고자 한다.~~*(집 데스크탑에 리눅스를 깔고 싶진 않다)*~~

    _

    TensorFlow가 Windows 환경을 공식적으로 지원하지만 모든 Windows 환경을 지원 하는 것은 아니다.

    CPU Architecture에 따라 지원 하지 않을 수도 있으며, **아주 중요하게 Python 2.x 버전은 지원하지 않는다.**

    _

    물론 docker를 사용 하면 Windows / Python 2.8 기반으로 TensorFlow를 설치 할 수 있다. 하지만 Windows 환경에서의 Docker는 Linux VM을 사용 하는 것과 다름없으므로 정식적인 지원이라고 할 수 없다. 또한 GPU의 지원도 받을 수 없다.

    _

    다른 OS 환경과 같이 Windows에서 TensorFlow를 설치 할 때 먼저 CPU support only 버전으로 설치 할 지, GPU support 버전으로 설치 할 지 선택해야 한다.

    _

    CUDA를 지원하는 GPU를 가지고 있다면 GPU support를 설치 하는 것이 좋다. 설치 과정이 조금 더 귀찮아 질 수는 있으나 CPU 버전에 비해 GPU 버전은 훨신 빠르게 동작 한다. GPU support 버전은 NVDIA의 CUDA를 사용하여 훨신 더 빠르게 학습한다. 필자 또한 i7 cpu~~(비록 2세대지만)~~를 사용 하다 좀더 적극 적으로 TensorFlow를 공부해 보고자 GTX1060을 질렀다.*(매우 신난다. 부인 고마워요)*

    _

    위에서 언급했듯이 GPU support 버전의 TensorFlow는 CUDA기반으로 CPU 버전 보다 더 빠르게 동작 한다. 하지만 모든 CUDA GPU가 지원 되는 것은 아니고 호환을 위하여 특정 버전 이상을 지원 하는 CUDA 그래픽 카드를 사용하여야 한다.*(필자는 CUDA 프로그래밍을 공부하기 위하여 대학원생 때 GTS450을 질렀었다. 한 때 아주 유용했던 이 구시대 유물은 Compute Capability가 2.1 버전이라 TensorFlow를 돌리지 못한다ㅠㅠ 잘가렴)*

    _

    서론이 길었다. 이제 설치를 시작해 보자.

    _

    ## Tensor with GPU support를 설치하기 위한 환경

    Tensor with GPU support를 설치하기 위해서는 아래 조건을 만족 해야 한다.

    * CUDA Compute Capability 3.0 또는 그 이상 버전의 그래픽 카드

    * CUDA Toolkit 8.0

    * CUDA Toolkit 8.0을 지원하는 NVIDIA 그래픽 드라이버

    * cuDNN 5.1


    _

    ### CUDA Compute Capability 3.0 또는 그 이상 버전의 그래픽 카드

    당연하겠지만? NVDIA 그래픽 카드를 사용해야한다~~(AMD는 그저 눙물이. 라이젠은 다음에 사볼께요)~~. 먼저 하나하나 살펴 보자. 당신의 그래픽카드가 노후하고 아파한다면 [CUDA Compute Capability 문서](https://developer.nvidia.com/cuda-gpus)를 확인해 보라*(새 그래픽 카드 지름의 당위성을 얻을 수 있다.)*. 적어도 3.0 버전을 지원해야 TensorFlow를 돌릴 수 있다. 3.0 미만의 버전을 지원한다면 글을 잠시 멈추고 그래픽 카드를 사오면 된다.

    _


    ### CUDA Toolkit 8.0 설치 및 CUDA Toolkit 8.0을 지원하는 NVIDIA 그래픽 드라이버 설치

    그래픽카드가 준비되었다면 Toolkit 8.0을 설치 해보자. TensorFlow 공식문서에서는 [CUDA Installation Guide](http://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/)를 참고하라고 언급되어 있다. 이 블로그 글도 서론 및 잡설이 매우 긴데 저기는 영어로 길다. 먼저, 아래 표의 Windows OS 버전과, Visual C++ compiler 버전이 반드시 필요하다. **Visual C++ compiler가 설치 되어 있지 않다면 CUDA Toolkit 설치 전에 반드시 설치하고 오자.** Visual C++ compiler는 Microsoft Visual Studio 내에 포함되어 있다.

    _

    <center>

    ![cuda systems and compiler support](http://taesaza0.ignorelist.com/taesaza0/blog_images/12/1.png)

    > Windows OS, Compiler 지원 현황

    </center>

    _

    위 표의 x86_32는 OS나 compiler의 아키텍처를 말하는 것이 아니다. 32bit 버전의 CUDA Toolkit을 말하는 것이다. x86_32버전의 CUDA Toolkit이 지원되기는 하지만 native하게는 지원이 되지 않으며 몇몇 제약이 있다. 64bit 환경에서 64bit Toolkit을 설치 하자.

    _

    OS, compiler환경이 준비 되었다면 [CUDA ToolKit 8.0](https://developer.nvidia.com/cuda-downloads)을 다운로드 하자.

    필자의 경우 아래와 같이 선택하여 다운로드 하였는데, Installer Type을 network가 아닌 local을 사용하는 것을 추천한다. local로 다운받아 설치 할 경우 network 설치 방법 보다 속도가 훨신 더 빠르다.

    _

    <center>

    ![...](http://taesaza0.ignorelist.com/taesaza0/blog_images/12/2.png)

    > CUDA ToolKit 8.0 Download

    </center>

    _

    CUDA Toolkit을 설치 하면 필요한 드라이브 등 필요한 패키지를 함께 설치해 준다.

    _

    하지만 필자의 환경에서는 윈도우 환경임에도 불구하고 아래와 같이 드라이버 설치 단계에서 설치를 실패했다.

    _

    <center>

    ![...](http://taesaza0.ignorelist.com/taesaza0/blog_images/12/3.png)

    > 윈도우인데.... 윈도우인데... 설치가 실패하다니.

    </center>

    _

    한참 동안 헤매어 찾은 이유는 다음과 같았다. 기존에 있었던(또는 디폴트로 설치 되는) 그래픽 드라이버의 버전이 CUDA Toolkit 설치 파일에 포함 된 376.51 버전 보다 이상이었다. 친절한 윈도우 인스톨러라면 더 최신 버전의 드라이버가 설치 되어 있으므로 그래픽 드라이버 설치를 스킵 하거나 설치를 실패하지 않았어야 한다. 불행하게도 불친절 한 NVIDIA 인스톨러는 그래픽 드라이버 설치 단계에서 실패로 간주하고 거기서 멈춰 버린다. 따라서 필요한 컴포넌트나 드라이버들이 설치가 되지 않아 문제가 발생한다.


    CUDA Toolkit 설치 시 아래와 같이 설치 요소에서 제거 해주면 실패 없이 성공적으로 설치를 마칠 수 있다~~*(매우 불친절한 녀석)*~~

    _

    <center>

    ![...](http://taesaza0.ignorelist.com/taesaza0/blog_images/12/4.png)

    > 그냥 리눅스에 설치 할 껄 그랬나...

    </center>

    _

    ### cuDNN 5.1 설치

    cuDNN은 [https://developer.nvidia.com/cudnn](https://developer.nvidia.com/cudnn)에서 다운로드 할 수 있다. 하지만 CUDA Toolkit 다운로드와는 달리 아래와 같이 회원가입을 요구 한다. 회원가입을 해주자.

    _

    <center>

    ![...](http://taesaza0.ignorelist.com/taesaza0/blog_images/12/5.png)

    > 그냥 받게 해주지...

    </center>

    _

    회원가입 및 설문의 문을 지나면 OS 버전별로 라이브러리 다운로드 메뉴를 제공해 준다.. cuDNN 6.0 버전이 다운로드 가능 하였으나, TensorFlow 가이드에 따라 5.1 버전으로 다운로드 한다. 다운 받은 cudnn-8.0-windows10-x64-v5.1.zip 파일의 압축을 풀면 아래와 같은 폴더 구조를 볼 수 있다.

    _

    <center>

    ![...](http://taesaza0.ignorelist.com/taesaza0/blog_images/12/6.png)

    > cudnn-8.0-windows10-x64-v5.1.zip

    </center>

    _

    cnDNN라이브러리를 설치하기 위하여 위 폴더를 적당한 위치로 옮기고, PATH 환경변수에 등록하는 방법을 사용 할 수도 있다. 하지만 PATH 환경변수 등록이 귀찮은 사람들은 CUDA Toolkit 설치 폴더에 복사 해 주어도 된다(CUDA Toolkit 설치 시 CUDA Toolkit 경로는 PATH 환경변수에 자동 등록 된다). 필자의 CUDA Toolkit 설치 경로는 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0 이다.

    _

    여기 까지 왔다면 Tensor with GPU support를 설치 하기 위한 준비단계를 모두 설치 했다.

    _

    ## Install TensorFlow

    이제 본격적으로 TensorFlow를 설치 해보자. 아래 두 가지 방법 중 하나를 택일 하여 선택 하면 된다.

    - "native" pip

    - Anaconda


    _

    두 가지 방법의 장단점들이 있겠지만 필자는 "native" pip 방법을 선택하여 진행하도록 하겠다.

    _

    ### Installing with native pip

    먼저 Python이 설치 되어야 한다. 글 상단에서도 언급 했듯이 Windows 환경에서는 3.5.x 버전의 Python만 지원한다. Pyhton 3.5.x 버전이 설치 되어있지 않다면 아래 링크에서 설치 하고 오자.

    https://www.python.org/downloads/release/python-352/

    _

    Python 설치 후 아래 명령어와 같이 pip3 package mangeer를 사용하여 TensorFlow를 설치 할 수 있다.

    ```

    pip3 install --upgrade tensorflow-gpu

    ```


    명령어 실행 시 아래와 같이 설치가 이루어 진다.

    <center>

    ![...](http://taesaza0.ignorelist.com/taesaza0/blog_images/12/7.png)

    > 준비단계는 엄청나게 길었지만 정작 TensorFlow 설치는 매우 간단하다.

    </center>

    _

    ### TensorFlow 설치 검증

    TensorFlow 설치가 올바르게 되었는지, 복잡했던 사전 준비 단계 설치는 올바른지 확인하기 위하여 개발덕후라면 한번쯤은 해본다는 Hello world를 출력해 보자.

    _

    아래와 같은 짧은 프로그램을 작성~~(복붙)~~해 보자

    ```python

    import tensorflow as tf


    hello = tf.constant('TensorFlow, Hello world!')

    sess = tf.Session()

    print(sess.run(hello))


    ```

    _

    설치 한 TensorFlow가 정상적으로 동작하고 있다면 아래와 같은 메시지가 출력된다.

    ```

    b'Hello, TensorFlow!'

    ```

    _

    설치를 완료 했으니 TensorFlow를 열심히 사용해 보자.


    @markdown




    Posted by 이거니거니료니