TensorFlow with GPU support on Windows 10 설치기
# 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