OpenCV
GPU
AMD
TensorFlow
ROCm

AMD製GPU + ROCm + OpenCV + TensorFlow でGPUコンピューティング環境をつくる

はじめに

今回はAMD製のGPU『Radeon RX Vega 56』を搭載した自作PCにGPUコンピューティングの環境を構築します。
手順としてはこのような流れで行いますが、初心者の方でもコピーアンドペーストでできるように書いていきたいと思います。

  1. UbuntuのブートUSBからOSをインストールする
  2. ROCmをインストールする
  3. Python3のライブラリをインストールする
  4. MIOpenをインストールする
  5. OpenCVをインストールする
  6. TensorFlowをインストールする

環境

Radeon RX Vega 56 Air Boost 8G

UbuntuのブートUSBからOSをインストールする

UbuntuのブートUSBの作成方法は前回の記事に詳しい手順がありますので参考にしてください。
OSのインストール方法はお使いのマザーボードによって多少異なるので説明は割愛しますが、
「マザーボードの種類 USB OSインストール」などで検索するとやり方が見つかると思います。

ROCmをインストールする

ROCm(Radeon Open Compute platform)とは、AMD製のGPUを使ってGPUコンピューティングするためのプラットフォームです。
NVIDIA社のGPUを使う場合はCUDA(Compute Unified Device Architecture)と呼ばれるものがあるのですが、今回はAMD社のGPUを使うためROCmをインストールします。

Ubuntuがインストールできたらターミナルを開き、下記のコマンドをひとつずつ順番に打ち込みます。
詳しく知りたい方はこちらのGitHubをご覧ください。

sudo apt update
sudo apt dist-upgrade
sudo apt install libnuma-dev
sudo reboot

wget -qO - http://repo.radeon.com/rocm/apt/debian/rocm.gpg.key | sudo apt-key add -
sudo sh -c 'echo deb [arch=amd64] http://repo.radeon.com/rocm/apt/debian/ xenial main > /etc/apt/sources.list.d/rocm.list'

sudo apt update

sudo apt purge libhsakmt
sudo apt purge compute-firmware
sudo apt purge $(dpkg -l | grep 'kfd\|rocm' | grep linux | grep -v libc | awk '{print $2}')
sudo apt autoremove rocm-dkms

sudo apt install -y rocm-dkms
sudo usermod -a -G video $LOGNAME

sudo apt install -y clinfo
clinfo

echo 'export HIP_VISIBLE_DEVICES=0' >> ~/.profile
echo 'export HCC_HOME=/opt/rocm/hcc' >> ~/.profile
echo 'export ROCM_HOME=/opt/rocm/bin' >> ~/.profile
echo 'export HIP_PATH=/opt/rocm/hip' >> ~/.profile
echo 'export PATH=/usr/local/bin:$HCC_HOME/bin:$HIP_PATH/bin:$ROCM_HOME:$PATH:/opt/rocm/opencl/bin/x86_64' >> ~/.profile
echo 'export LD_LIBRARY=$LD_LIBRARY:/opt/rocm/opencl/lib/x86_64' >> ~/.profile
echo 'export LC_ALL="en_US.UTF-8"' >> ~/.profile
echo 'export LC_CTYPE="en_US.UTF-8"' >> ~/.profile

source ~/.profile

export PIP=pip3
export PYTHON=python3
export HIP_PLATFORM=hcc
export PLATFORM=hcc

GPU EATERというGPUクラウドサービスの公式サイトのヘルプも参考にさせていただきました。

Python3のライブラリをインストールする

次に主要なPython3のライブラリをインストールします。
下記のコマンドをひとつずつ順番に打ち込んでください。

sudo apt update
sudo apt install -y build-essential python3 python3-dev python3-pip pkg-config check cmake libhdf5-dev
sudo pip3 install --upgrade pip
sudo pip3 install -y setuptools scipy numpy six pillow h5py

正しくインストールできているか確認します。
次のようにPython3を立ち上げて、試しにNumPyをインポートしてみてエラーがでなければ完了です。

python3
>>> import numpy
>>> quit()

MIOpenをインストールする

続いて、MIOpen(Machine Learning Open)をインストールします。
MIOpenは先ほどインストールしたROCmと組み合わせることで、より高度な機械学習ができるようになります。

sudo apt update

sudo apt install -y --allow-unauthenticated rocm-dkms rocm-dev rocm-libs rocm-device-libs hsa-ext-rocr-dev hsakmt-roct-dev hsa-rocr-dev rocm-opencl rocm-opencl-dev rocm-utils rocm-profiler cxlactivitylogger miopen-hip miopengemm

cd ~/src
git clone https://github.com/ROCmSoftwarePlatform/hcRNG.git && cd hcRNG
./install.sh

cd ~/src
git clone https://github.com/ROCmSoftwarePlatform/hcFFT.git && cd hcFFT
./install.sh

OpenCVをインストールする

こちらのサイトを参考にさせていただきました。
「#」が付いている行は説明なので飛ばして1行ずつコマンドを打ち込みます。

# Update packages
sudo apt update
sudo apt upgrade

# Install dependencies
sudo apt install -y build-essential
sudo apt install -y cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

# To process images
sudo apt install -y python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

# To process videos
sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt install -y libxvidcore-dev libx264-dev

# For GUI
sudo apt install -y libgtk-3-dev

# For optimization
sudo apt install -y libatlas-base-dev gfortran pylint

# To build OpenCV binding for both python 2 and 3
sudo apt install -y python2.7-dev python3.5-dev

# To Download OpenCV
mkdir -p ~/src

# To Download OpenCV 3.3.0
wget https://github.com/opencv/opencv/archive/3.3.0.zip -O ~/src/opencv-3.3.0.zip

# To Download OpenCV Contrib 3.3.0
wget https://github.com/opencv/opencv_contrib/archive/3.3.0.zip -O ~/src/opencv_contrib-3.3.0.zip

# We need to unzip to extract the zip files
sudo apt install -y unzip

# Extract OpenCV and OpenCV Contrib
cd ~/src
unzip opencv-3.3.0.zip
unzip opencv_contrib-3.3.0.zip
cd opencv-3.3.0
mkdir build
cd build

# Run cmake
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D USE_V4L=ON -D USE_V4L2=ON -D WITH_V4L=ON -D WITH_V4L2=ON -D INSTALL_C_EXAMPLES=OFF -D INSTALL_PYTHON_EXAMPLES=OFF -D BUILD_EXAMPLES=OFF -D WITH_QT=OFF -D WITH_QUICKTIME=OFF -D WITH_QTKIT=OFF -D WITH_OPENGL=OFF -D WITH_OPENCL=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D WITH_CUDA=OFF -D WITH_QUICKTIME=OFF -D WITH_GSTREAMER=OFF -D WITH_FFMPEG=ON -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON ..

次のコマンドを打ち込み、出力された数字を覚えておいてください。

nproc

今回は「8」でしたのでその数字に合わせて次のコマンドを打ちます。

$ make -j8

続いてこちらのコマンドを打てば、OpenCVのインストールは完了です。

sudo make install
sudo ldconfig

それでは正しくインストールできたか確認してみます。
エラーがでなければ成功です。

python3
>>> import cv2
>>> cv2.__version__
>>> quit()

TensorFlowをインストールする

最後にTensorFlowをインストールします。
こちらのサイトを参考にしています。

sudo pip3 install wheel cython
wget http://repo.radeon.com/rocm/misc/tensorflow/tensorflow-1.3.0-cp35-cp35m-linux_x86_64.whl
sudo pip3 install tensorflow-1.3.0-cp35-cp35m-linux_x86_64.whl && rm tensorflow-1.3.0-cp35-cp35m-linux_x86_64.whl

正常にインストールできているか確認してみます。

python3
>>> import tensorflow
>>> quit()

以上で全てのインストールが終了しました。お疲れ様でした。

最後に

今回はAMD+ROCm(OpenCL)の上に機械学習や画像処理などに必要な主要ライブラリをインストールしてGPUコンピューティング環境を構築しました。
初心者の方でも気軽に真似できるようにインストールの手順をメインに書いており、それぞれのライブラリなどの専門知識は極力避けましたので、興味のある方はご自身で調べてみてください。
GPUといえばNVIDIA+CUDAが有名でドキュメントの量も圧倒的に多いので、AMD製のGPUを使う方に少しでも参考になれば幸いです。