1 minute read

주로 사용하는 개발머신은 우분투 위에 2개의 NVIDIA P106-090 GPU로 구성되어있다.

리눅스 + NVIDIA CUDA 조합이라 TensorFlow, Keras에 GPU 환경을 구성하는데 큰 문제가 없었다.

하지만, 전기세도 그렇고 간단한것 할때마다 개발머신을 켜고끄기 좀 그래서, 주로 사용하는 PC (윈도우10 + RX580 8G)에서도 GPU로 머신러닝을 돌릴수는 없을까? 라는 생각에 구글링을 해보았다.

NVIDIA GPU로 윈도우 / Linux에서 Keras를 실행하는 최적의 방법

INTEL GPU로 윈도우에서 Keras를 실행하는 최적의 방법

INTEL GPU로 Linux에서 Keras를 실행하는 최적의 방법

AMD GPU로 윈도우에서 Keras를 실행하는 최적의 방법

AMD GPU로 Linux에서 Keras를 실행하는 최적의 방법

OpenCL은 윈도우, 리눅스를 포함해 다양한 플랫폼을 지원하는 개방형 범용 병렬 컴퓨팅 프레임워크이다.

SYCL은 OpenCL 1.2 상에서 계층적으로 구현 가능한 플랫폼으로서, OpenCL 1.2의 상위호환이라고 생각하면 되겠다.

CUDA는 고속 병렬 컴퓨팅을 위한 NVIDIA의 독자 GPGPU 기술이다.

ROCm은 NVIDIA CUDA의 AMD 버전이라고 생각하면 쉽겠다. 아직 윈도우를 지원하지 않는다.

ROCm과 CUDA 같은 경우는 별도의 설치과정이 필요한데, OpenCL 같은 경우는 대부분 그래픽 드라이버 설치 패키지에 기본으로 포함이 되어있어 별도의 설치가 필요없다. clinfo 라는 툴을 받아 확인하면 된다.

사용중인 PC가 윈도우 + AMD GPU 이기 때문에 OpenCL + PlaidML + Keras 조합을 사용하기로 했다.

설치방법은 매우 간단하다.

# OpenCL은 AMD 드라이버 설치에 기본으로 포함되어 있다.

# PlaidML 설치 (Keras도 같이 설치된다)
pip install plaidml-keras

# 기본 장치 설정
plaidml-setup

# 벤치마킹 툴 (옵션)
pip install plaidbench
plaidbench --batch-size 32 keras --train mobilenet

만약 tensorflow를 설치한적이 있다면 %USERPROFILE%/.keras/keras.json에 백엔드가 tensorflow로 잡혀있을 것이다. 이 파일을 다음과 같이 수정해주어야 한다.

"backend": "tensorflow"
-> "backend": "plaidml.keras.backend"

이렇게 수정한다고 해서 import tensorflow.keras를 할때 PlaidML이 백엔드로 잡히는게 아니다. import tensorflow.keras를 하면 TensorFlow가 백엔드가 되고, import keras를 하면 PlaidML이 백엔드로 잡힌다.

CIFAR-10에 배치사이즈 200으로 간단한 CNN을 돌려본 결과, 제온 E3-1230v3 (TensorFlow Backend)와 RX580 8G (PlaidML Backend)의 수행시간이 8배 가량 차이가 났다.

사용중인 GPU가 AMD라 AMD 기준으로 작성했는데, INTEL 내장 GPU도 크게 다르지 않다. 노트북 CPU가 i7-3537U (Intel HD Graphics 4000)이라 너무 구버전이어서 여기서도 될까..? 했는데 된다.. OpenCL 1.2 이상이면 상관없는것 같다.

다만, Intel HD Graphics 4000은 호환성 문제가 조금 있어, PlaidML 0.6.0 이하의 버전에서만 동작한다.

plaidbench –batch-size 8 keras –train mobilenet 을 실행한 결과, i7-3537U (TensorFlow Backend)와 Intel HD Graphics 4000 (PlaidML Backend)의 수행시간이 4배 가량 차이가 났다.

AMD / INTEL GPU라고 포기하지 말고 GPU를 신명나게 갈궈보자..