bskyvision$

[python] tensorflow에서 GPU 사용가능 여부 확인하기(+ 실제로 얼마나 빠른지 확인)

코딩/python
@2020-06-09 20:16:21

GPU를 사용하면 빠르죠. 왜냐하면 병렬 연산이 가능하기 때문입니다. 이것이 무슨 말인가 하면 명령을 하나씩 순차적으로 처리하는 CPU와 달리 GPU는 여러 명령을 동시에 처리할 수 있다는 뜻입니다. 그래서 연산량이 많은 딥러닝을 다룰 때는 GPU를 사용하는 것이 좋습니다. 

 

GPU 사용가능 여부 확인

먼저 tensorflow에서 GPU를 사용 가능 여부를 확인해보는 것에 대해 다루도록 하겠습니다. 사용가능 여부를 알기 위해서는 다음 두 줄의 코드를 입력해보면 됩니다.

 

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

 

만약 다음과 같이 CPU 관련된 내용 뿐만 아니라 GPU에 관한 것이 출력된다면 사용가능한 것입니다. 

 

GPU 사용가능

 

보시다시피 제 노트북에는 GeForce GTX 1050 그래픽 카드가 설치되어 있습니다.

 

그런데 이와 달리 CPU에 관한 것만 나온다면 GPU는 사용할 수 없는 상태입니다. 

 

CPU만 사용가능

 
참고로 GPU를 사용하시려면 컴퓨터에 그래픽 카드가 깔려 있어야 하고, 또 그에 맞는 드라이버와 적절한 버전의 CUDA, cuDNN이 설치되어 있어야합니다.

 

실제로 얼마나 빠른지 확인

이번에는 GPU를 사용하는 것이 CPU만 사용할 때에 비해 얼마나 빠른지를 비교해보겠습니다. 저는 하나의 CNN 모델을 CPU를 이용해서 훈련시킬 때와 GPU를 이용해서 훈련시킬 때 각각 얼마의 시간이 소요되는지를 체크해봤습니다. 소요된 시간 측정과 관련해서는 링크글을 참고하세요.^^

 

먼저 CPU만을 이용해서 훈련시킬 때 소요되는 시간을 측정해봤습니다. 아래 캡쳐 화면을 보시면 CPU는 일하고 있지만 GPU는 쉬고 있다는 것을 알 수 있습니다. 

 

CPU는 열일중. GPU는 휴식중.

 

CPU만 사용했을 때 소요된 시간

 

약 221분이 소요되었네요. 거의 4시간 가까이 걸린 것이니 꽤 오래 걸렸죠. 네트워크의 구조와 훈련셋의 크기에 따라 이보다 더 걸릴 수도 있습니다.

 

이번에는 GPU를 이용해서 훈련시켜보겠습니다. 보시다시피 GPU도 CPU와 함께 열일하고 있죠?

 

GPU도 열일중.

 

훈련에 소요된 시간은 다음과 같습니다. 

 

GPU 사용했을 때 소요된 시간

 

약 30분이 소요됬습니다. CPU만 사용했을 때에 비해 1/7 정도의 시간밖에 소요되지 않았습니다. 말도 안되게 빨라졌죠? 이래서 한번 GPU의 맛을 보면 GPU를 쓸 수밖에 없습니다. 우리의 시간은 소중하니까요. ㅎㅎ 

 

 

bskyvision의 추천글 ☞

[python] 코드 실행 시간 측정(매우 간단)

딥러닝 알고리즘의 대세, 컨볼루션 신경망(convolutional neural network, CNN)

[Anaconda+python] CIFAR-10 데이터셋으로 이미지 분류기 만들기(컨볼루션 신경망)

 

 

<참고자료>

[1] https://light-tree.tistory.com/25, All about, "CPU와 GPU의 차이"

[2] https://lucycle.tistory.com/237, LuCycle, "텐서플로우 GPU 작동 확인하는 방법"

댓글

  1. BlogIcon DNA구너 @2020.05.12 21:08 신고   댓글주소   수정/삭제   댓글쓰기

    엔비디아 글카를 사야 하는 이유가 여기있죠..ㅎㅎ

  2. 딥러닝하고싶어요 @2020.11.23 13:08   댓글주소   수정/삭제   댓글쓰기

    training에 사용된 데이터의 크기는 어느정도였나요?
    feature 개수나 hiddenlayer의 개수 정보를 알면 제가 사용할 분야에 대해서 어느정도 시간이 소요될지 예측이 가능하지 않을까해서요~ ^^

    • BlogIcon bskyvision @2020.11.26 01:37 신고   댓글주소   수정/삭제

      제가 이걸 언제 어떤 코드 실행할 때 측정했던 것인지 정확하게 기억이 나지 않아서 정확하게 말씀은 못드리겠네요ㅜㅜㅎㅎ 아마 3000개의 이미지를 여러 개의 작은 패치로 분할한 것을 훈련셋으로 삼았던 것 같아요. 그러다보니 훈련셋이 십만 이상 단위였던 것으로 기억합니다. 작성 당시에 좀 더 구체적인 정보를 제공했다면 더 좋았겠다는 아쉬움이 드네요^^;

[1] [···] [165] [166] [167] [168] [169] [170] [171] [172] [173] [···] [542]