新しいGPUで古いverの深層学習フレームワークのコードを動かす際の注意点


はじめに

深層学習界隈は時の進みが異常に早くて,一年前のコードが今のフレームワークで動かないことがザラにある.

ハマった例

手元にNvidiaのRTX 2080 Ti 及び GTX 1080 Tiがある環境で,下記のコードを動かすことを考える.

mil-tokyo/bc_learning_sound

SetUpの項目に次のように書いてある.

Install Chainer v1.24 on a machine with CUDA GPU.

それならばと思ってchainerのdockerhubへ飛び,v1.24.0をpullする.

ところが,そのままだと次のエラーが出てプログラムが終了する.

nvcc fatal : Value ‘sm_75’ is not defined for option ‘gpu-architecture’

GTX 1080 Tiに切り替えても同様のエラーが生じる.

nvcc fatal : Value ‘sm_61’ is not defined for option ‘gpu-architecture’

原因は何か?

GPUが新しすぎるため,CUDAが対応していないためだった.
sm_(num)は,GPUのアーキテクチャの番号を表しており,ここに詳細が載っている.

chainerのtag:v1.24.0の環境では,CUDAのバージョンが7.5だったが,GTX 1080 TiはCUDA 8 から,RTX 2080 Tiに至ってはCUDA 10以降でないとCUDAが使えない.

解決策

公式GitHubに転がっているDockerfileを拝借し,cuda 8.0に書き換えてbuildした

Dockerfile
FROM nvidia/cuda:8.0-cudnn5-devel
RUN apt-get update -y && \
    apt-get install -y --no-install-recommends \
    python3-dev \
    python3-pip \
    python3-wheel \
    git \
    cmake \
    libblas3 \
    python3-setuptools && \
    rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*
RUN pip3 install chainer==1.24.0

おわりに

公式イメージだけだとどうしても限界があるので,自前でどんどんbuildしようね.