윈도우 GPU tensorflow 설치 및 그래픽카드별 성능 비교


한국 시간으로 2016년 11월 29일 저녁
TensorFlow v0.12.0 RC0가 업데이트 되었다.

아래 실험은 TF 1.4.0에서 테스트 한것이다.
현재는 1.6까지 나온듯 하다 (2018-03.27).

핵심 변경 사항 중 Window에서 GPU 버전의 TensorFlow를 지원한다는 부분이 있다.
이제 Docker를 쓰지 않고 CPU 버전을 설치 할 수 있는것은 물론 Ubuntu에서만 가능하던 GPU 버전도 설치가 가능하다.
설치방법과 Window GPU 버전 텐서플로의 학습 속도를 분석해 본다.

설치방법

여러 방법이 있으나 필자는 Anaconda를 이용한 방법으로 설치한다. 가장 간단한다. 추가로 딱히 Window에선 Python 다른 응용을 개발하지 않으므로 특별히 conda 또는 virtualenv를 설정하지않고 global에 직접 설치한다. 기존 시스템과의 충돌을 걱정한다면 가상환경을 만들고 설치하길 권장한다.
방법: https://www.tensorflow.org/versions/r0.12/get_started/os_setup.html#pip-installation-on-windows

1. Anaconda 4.2.0 설치

NumPy, SciPy, Pandas, Matplotlib 등의 과학연산에 필요한 Python package들을 통합했으며 Jupyter Notebook을 제공하는 환경이다.

Window TensorFlow는 Python 3.5 이상부터 동작하므로 해당 Anaconda 관리자 권한으로 설치한다.

모든 작업을 anaconda만 설치하면 환경변수등 자동으로 설정 되므로 pip명령어를 이용해서 하나하나 설치하는것 보다 훨씬 효율적이다.

다운로드: https://www.continuum.io/downloads

2. CUDA 8.0.44 -win 10 설치

Tensorflow v0.12.0 RC0는 CUDA 8.0이상을 권장하므로 이것을 설치한다.
Network버전은 설치가 오래걸리므로 local버전 1.2GB 상당을 직접 다운받아서 설치한다.

다운로드 https://developer.nvidia.com/cuda-downloads

필자의 Window환경 컴퓨터의 GPU 스팩이다.

name: GeForce GTX 745
major: 5 minor: 0 memoryClockRate (GHz) 1.0325

3. CuDNN 5.1 설치

Deep Learning을 위해서 엔비디아에서 제공하는 추가 라이브러리 꾸러미이다.
다운로드: https://developer.nvidia.com/cudnn

CUDA 8.0 cuDNN 5.1을 설치해야한다.
회원 가입을 하고 다운 받는다.

다운받으면 그냥 압축 파일이므로 압축해제후 CUDA 설치 경로에 붙여넣기 해야한다.
CUDA 설치 경로 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0

4. TensorFlow-GPU 설치

윈도우 버전은 파이썬 3.5 에서 하다.
0.12 RC0 버전 부터는 텐서플로우 패키지가 PyPI 에 업로드되어 있어 pip 명령으로 간단히 설치할 수 있게 되었다.

처음 설치

pip install tensorflow-gpu

업데이트 방법 (추후에 새로운 버전이 나왔을 때)

pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.0rc1-cp35-cp35m-win_amd64.whl

최근에 RC0에서 RC1로 업데이트 되었다. 기존 RC0사용자라면 버그가 고쳐진 새로운 버전으로 업데이트 할 때 위 명령어를 이용 한다.

설치확인
Anaconda prompt를 관리자 권한으로 실행한다.
python을 실행하고 아래의 script를 실행해 본다.

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!

Jupyter Notebook에서의 실행결과
Anaconda를 설치하면 자동으로 Jupyter Notebook이 설치된다.
Jupyter Notebook을 실행해서 아래의 코드를 실행해보자.
정상적으로 수행되면 설치 성공이다.


성능 테스트

간단한 MNIST 셋의 CNN을 이용한 손글씨 인식을 학습해 본다.

CNN구조는 아래와 같다.

자세한 코드는 이전 POST를 참조한다.

소스코드 다운로드: URL
내부에서 CNNforMNIST.py를 실행 한다. 실행이 끝나면 경과된 시간이 출력 된다.

CNN으로 평가한 컴퓨터 환경들은 아래와 같다.

i7, 10 GFLOPS

105분 31초

GTX 745, 793 GFLOPS

36분 30초

K520, 2448*2 GFLOPS

22분 4초

GTX 970, 3.4 TFLOPS

9분 10초

GTX 1060 3GB, 3.9TFLOPS

8분 5초

GTX 1080, 8.87 TFLOPS

5분 27초

Tesla P100, 9.3 TFlops

4분 57초

Tesla P100, 9.3 TFlops (8개)

실험 예정

결론

I7-CPU를 기준으로 비교했을 때 각각의 성능 향상은 아래와 같다.

  • GTX 745는 2.89x
  • K520은 4.78x
  • GTX 970 11.5x
  • GTX 1060 13x
  • GTX 1080 19.3x
  • P100 21.3x

  1. 이전 댓글 더보기
  2. 로이 2017.02.04 05:00 신고

    정말 감사합니다. 윈도우에서 GPU기반의 텐서플로우 어찌 설치하나 고민했는데
    덕분에 정말 편하게 설치를 하였습니다. 감사합니다

  3. 미카이 2017.02.04 15:52 신고

    다시한번만 질문드림니다 ㅠㅠ..
    gpu버전으로 제대로 다 설치되고 MNIST 를 Logistic classification으로 코드상으로 구성하여 돌릴때는 문제없이 잘돌아가는데
    CNN 으로 MNIST로 돌릴경우
    Extracting /tmp/data/train-images-idx3-ubyte.gz
    Extracting /tmp/data/train-labels-idx1-ubyte.gz
    Extracting /tmp/data/t10k-images-idx3-ubyte.gz
    Extracting /tmp/data/t10k-labels-idx1-ubyte.gz

    Kernel died, restarting
    이런식으로 커널이 죽어버리고 시작이 안되는 현상이 발견되는데, 혹시 input data문제인거 같아 수정도 해봤는데 데이터들은 제대로 받아지고 하는데 혹시 뭐가 문제일까요 ? 감사합니다

    • JAYNUX 2017.02.05 13:38 신고

      음 메모리 부족일 경우 exhausted resource 라는 에러가 나오는데 적어주신 메시지는 그건 아닌것 같네요.

      저도 커널이 죽는 현상은 경험해 보지 못해서요.

      일단 제가 올려드린 예제는 아무래도 버전에 문제가 있거나 잘못된 심볼이 있어서 나타나는 현상일 수도 있으니 TensorFlow 설치된 디렉터리에 있는 아래의 공식 예제 코드를 돌려보심이 좋을것 같습니다.

      /tensorflow/models/image/mnist/convolutional.py

    • JAYNUX 2017.02.06 11:47 신고

      TensorBoard 쓸려고 name이랑 summary 잘못 쓰니 kernel 죽는 현상이 생기네요.

      TensorBoard 관련 코드 지우고 한번 해보심이 좋을것 같습니다.

      그쪽에 문제 생기면 그렇게 되는것 같습니다.

  4. 미카이 2017.02.06 11:49 신고

    지속적인 댓글 감사합니다 저도 네임쪽문제라 생각하며 관련코드지운후 돌리니 잘돌아가는 것을 확인할수 있엇습니다 감사합니다!

  5. cyberyoshi 2017.02.07 13:28 신고

    좋은 글 감사합니다.

    저도 딥러닝 공부해보려고, windows 10에 anaconda 4.2.0, python 3.5.2 깔고, CUDA, cuDNN 설치하고서 python 테스트를 했는데, 이렇게 나오네요..

    >>> import tensorflow as tf
    I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:119] Couldn't open CUDA library cublas64_80.dll

    CUDA, cuDNN은 디폴트로 설치했는데, 링크가 잘못된 걸까요? ㅠㅠ

    • JAYNUX 2017.02.07 17:32 신고

      에러 메시지를 보면 cuDNN 파일 복사가 잘 이뤄 지지 않은것 같은데

      C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0

      보통 여기가 CUDA SDK 설치 경로 입니다.

      이곳에 cublas64_80.dll이 있는지 검색해서 확인해 보심이 좋을것 같습니다.

      없다면 cuDNN 압축 푼 dll 파일들을 복사 하셔야 합니다.

    • cyberyoshi 2017.02.08 07:08 신고

      답변 감사합니다.

      말씀 주신대로 하고 관리자 모드로 재설치했더니 잘 돌아가네요. 실습 환경이 마련되어 기쁩니다. ㅋㅋ

      감사합니다.

  6. ksh 2017.02.22 17:22 신고

    좋은글 잘 봤습니다!!
    잘 따라하다가 tensorflow-gpu 설치하는거 까진 잘 완료가 되었는데
    import tensorflow 하는 부분에서 많은 오류들이 나서 질문드려요!
    successfully opened CUDA library cublas64_80.dll locally
    Couldn't open CUDA library cudnn64_5.dll
    Unable to load cuDNN DSO
    successfully opened CUDA library cufft64_80.dll locally
    Couldn't open CUDA library nvcuda.dll
    hostname: x??
    되게 길게 에러가 나왔는데 젤 위에 있는 오류만 써보았구여
    CUDNN 압축 풀어서 폴더채로 해당경로에 집어넣는 것도 했는데
    어떤것이 문제인지 알려주시면 감사하겠습니다!!

    • JAYNUX 2017.02.23 17:03 신고

      보통 이런 경우 권한 문제던데 한번 관리자 권한으로 다시 설치해 보심을 추천 드립니다.

  7. ksh 2017.02.27 11:20 신고

    pip로 설치할때 tensorflow-gpu는 안되더니 tensorflow로 하닌까 되네영

    • JAYNUX 2017.02.27 11:46 신고

      그냥 tensorflow 하시면 cpu 버전으로 설치되서 gpu를 사용하지 않게 됩니다.

      NVIDA gpu를 사용하신다면, anaconda를 한번 관리자 권한으로 설치하신 후에

      CUDA, cuDNN 설정을 모두 다시 해보심을 추천 드립니다.

  8. ksh 2017.03.02 01:06 신고

    찾아보니 CUDA를 실행시키려면 nvidia에서 나온 gpu가 필요한거같은데 제가 nvidia gpu가 아니여서 안되는거일까요?

    • JAYNUX 2017.03.02 13:59 신고

      네 맞습니다. 안타갑게도 nvidia 그래픽카드가 아니면 CUDA는 사용할 수 없습니다..

  9. ksh 2017.03.02 23:20 신고

    그럼 cuda가 안되는게 anaconda에서 tensorflow-gpu가 설치후 import시 문제가 일어나는 거랑 관련이 있는거죠..?

    • JAYNUX 2017.03.02 23:27 신고

      네 맞습니다. gpu버전 tensotflow는 cuda랑 cuDNN 라이브러리들 로딩 하거든요. 그때 문제가 생기는게 맞습니다. 아직까지 tf가 공식적으론 openCL이나 openBLAS계열 지원을 안해서 엔비디아 외의 gpu는 사용 하시기 어려운것 같습니다. 당분간은 cpu버전 쓰셔야 할것 같네요.

  10. ksh 2017.03.05 15:41 신고

    답해주지 않으셨으면 왜 안되나 한참을 헤맬뻔 했는데 귀찮은 질문들 다 답해주셔서 감사합니다!!!

  11. 신서현 2017.03.29 14:56 신고

    안녕하세요 올려주신 코드를 따라하는 와중에 문제가 생겨서 문의드립니다.
    음.. 우선 제 그래픽 카드는 GeForce8800GT 인데요.. NVIDIA 사의 그래픽 카드가 맞는데
    알려주신데로 CUDA와 CUdnn을 설치 하고 (Cudnn은 맞는 경로에 붙여넣기, 폴더자체를 그냥 대체해서 붙여넣었습니다)
    아나콘다의 cmd창을 띄워서 tensor flow를 다운받고 import 하는것 까지는 되었습니다만.. sess = tf.Session() 만 하게 되면 오류가 뜹니다.
    Check failed: s.ok() could not find cuDevice PrimaryCtxSetFlags in libcuda DSOl dlerror: cuDevicePrimaryCtxSetFlags nor found
    음.. 혹시 제 컴퓨터에서는 gpu가 안되는것일까요?

    • JAYNUX 2017.03.29 16:29 신고

      88000GT 같은경우
      최신 버전 CUDA SDK랑
      cuDNN이 지원 안될 수도 있으니 그 부분을 한번 확인해 보심이 좋을것 같습니다.
      공식 홈페이지가면 그래픽카드별 지원 버전이 나와 있습니다.

  12. 신서현 2017.03.29 20:30 신고

    아이고.. 그랬군요. 연구실 그래픽 카드라 오래된거였어요. ㅠㅠ.
    서버에서 사용해야겠네요
    답변 감사드립니다

  13. 와우우와우 2017.04.07 03:55 신고

    주인장님 정말 감탄하면서 블로그글 잘 보고 있습니다. 같은 전문연 입장이라 훈련소 후기부터 또 저도 연구실에서 딥러닝을 하고 있어서 정말 많은 도움 얻고 있어요. 거기에 일일이 답글해주시는 친절함에 감동 받았습니다. 언제 밥한끼라도 대접하고 싶은 마음까지 드네요 (꾸벅)

  14. cuda 2017.05.04 12:04 신고

    현재 그래픽카드를 NVIDIA GeForce GTX 1060 3GB를 사용하고 있습니다.

    그런데 cuda 8.0 버전 설치시 오류가 발생합니다.

    NVIDIA 설치프로그램 실패라는 창이 계속 뜨네요.

    설치된 프로그램을 다 삭제하고 다시 깔아보아도 증상이 계속 같은데 뭐가 문제일까요?

  15. DY 2017.06.26 15:15 신고

    안녕하세요, 최근 프로그래밍에 입문하게 된 사람인데요,
    블로그에 쉽게 따라할 수 있게 포스팅 해주셔서 감사하단 말 먼저 올리고 싶습니다.
    위의 과정을 따라하던 중 아래와 같은 단계에서 계속 오류가 나서 질문드립니다.
    아나콘다를 관리자권한으로 실행한 뒤,
    (D:\Anaconda3) C:\WINDOWS\system32>python
    로 파이썬을 실행하고,

    >>> import tensorflow as tf
    이 명령을 쳤는데, 자꾸 아래와 같은 오류가 나서요..

    Traceback (most recent call last):
    File "D:\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 18, in swig_import_helper
    return importlib.import_module(mname)
    File "D:\Anaconda3\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
    File "<frozen importlib._bootstrap>", line 978, in _gcd_import
    File "<frozen importlib._bootstrap>", line 961, in _find_and_load
    File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
    File "<frozen importlib._bootstrap>", line 648, in _load_unlocked
    File "<frozen importlib._bootstrap>", line 560, in module_from_spec
    File "<frozen importlib._bootstrap_external>", line 922, in create_module
    File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
    ImportError: DLL load failed: 지정된 모듈을 찾을 수 없습니다.

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "D:\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 41, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
    File "D:\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 21, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
    File "D:\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 20, in swig_import_helper
    return importlib.import_module('_pywrap_tensorflow_internal')
    File "D:\Anaconda3\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
    ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "D:\Anaconda3\lib\site-packages\tensorflow\__init__.py", line 24, in <module>
    from tensorflow.python import *
    File "D:\Anaconda3\lib\site-packages\tensorflow\python\__init__.py", line 49, in <module>
    from tensorflow.python import pywrap_tensorflow
    File "D:\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 52, in <module>
    raise ImportError(msg)
    ImportError: Traceback (most recent call last):
    File "D:\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 18, in swig_import_helper
    return importlib.import_module(mname)
    File "D:\Anaconda3\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
    File "<frozen importlib._bootstrap>", line 978, in _gcd_import
    File "<frozen importlib._bootstrap>", line 961, in _find_and_load
    File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
    File "<frozen importlib._bootstrap>", line 648, in _load_unlocked
    File "<frozen importlib._bootstrap>", line 560, in module_from_spec
    File "<frozen importlib._bootstrap_external>", line 922, in create_module
    File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
    ImportError: DLL load failed: 지정된 모듈을 찾을 수 없습니다.

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "D:\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 41, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
    File "D:\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 21, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
    File "D:\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 20, in swig_import_helper
    return importlib.import_module('_pywrap_tensorflow_internal')
    File "D:\Anaconda3\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
    ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'

    어떻게 하면 좋을까요..?
    모든 설치는 권리자권한으로도 재시도해보았으나 같은 증상이 나타납니다.
    혹시, 아나콘다와 파이썬을 D드라이브에 깔고, C드라이브에 cuda를 깔아서 경로가 충돌하는 것인지..

    도움 주시면 정말 감사하겠습니다!

  16. 만능kimmy 2017.07.07 02:28 신고

    저 설치할때 Deprecation 됬다는 메세지를 봤는데 분명히 예전에 이 글 보고 잘 했는데... ㅠㅠ 뭐가 어디서 바뀐건지 모르겠어요 ㅠㅠㅠㅠㅠㅠ 뭐죠? ㅠㅠㅠ SSD 해볼라고 했는데 지금 살짝 멘붕이네요 ㅠㅠ

  17. 김한솔 2017.08.27 20:24 신고

    I5-4460에 GTX 960으로 돌려보니 687초 걸렸습니다. 11분 27초네요

  18. 2017.10.02 21:14

    비밀댓글입니다

  19. 10010 2018.03.02 13:17 신고

    TITAN V로 위의 예제를 실행해본 결과 2분 45초가 나오네요 ^^

  20. 10010 2018.03.02 13:19 신고

    1080Ti 병렬로 4대가 묶여있는 컴퓨터가 있어서 테스트를 해보았는데요
    cuda out of memory 에러가 나면서 화면이 나가버립니다 ㅠㅠ
    해결하게되면 성능 측정 해드리겠습니다 ^^

    • JAYNUX 2018.03.27 15:09 신고

      정보 공유 감사합니다. ㅎㅎ

      저도 최근 P100이 생겨서 분산으로 코드를 바꿔봐야겠네요

  21. 그저 정보 2018.07.20 14:12 신고

    EVGA GTX 1080Ti FTW3로 실행한 결과 "time elapsed: 175.20s"가 나옵니다.

+ Recent posts