Ubuntu14.04のChainer1.9でGPU(CUDA)を使う

公開日: : Chainer, GPU, Ubuntu, ディープラーニング

スポンサーリンク

ChainerでCUDAを使おうとしたら下記エラーが現れてしまいGPUを使うことができませんでしたが、解決したのでメモ

・AttributeError: ‘module’ object has no attribute ‘cupy’
・modprobe FATAL Module nvidia-uvm not found

nvidia-uvmのUVMはUnified Virtual Memoryの略のようでこれが無いとメモリ確保がうまくいかず、エラーになります。

環境

Ubuntu 14.04 LTS
NVIDIA GTX 950M(2G)

※WindowsとのデュアルブートPCです。詳細はこちら

アンインストール

NVIDIA・CUDA削除

NVIDIAおよびCUDAを削除してインストールしなおしました。この辺は早まってアンインストールしましたが、後述の対処を試してからでも良いと思います。

sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove cuda-*

Chainerアンインストール

ついでにChainerもアンインストール

sudo -H pip uninstall chainer

一度にすべて削除しきれるとは限らないようなのでもうアンインストール済みと怒られるまでこのコマンドを実行。

Nouveauドライバ無効化

次にNouveauドライバの無効化をしました。NVIDIAのドライバと競合するそうなのでブラックリストに入れておきました。

sudo vim /etc/modprobe.d/blacklist-nouveau.conf

で下記を記入して保存

blacklist nouveau
options nouveau modeset=0

その後

sudo update-initramfs -u

そして再起動。若干UIまわりの雰囲気が前と変わった気がしますが気にしない。

インストール

NVIDIA・CUDAインストール

NVIDIA公式サイトより自分のOSなどを選びdebファイルをダウンロード(1~2Gあるので注意)して、CUDA7.5をインストールします。自分は「cuda-repo-ubuntu1404_7.5-18_amd64.deb」というファイルをダウンロードしました。

NVIDIA公式サイト
https://developer.nvidia.com/cuda-downloads

そしてインストール

sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb
sudo apt-get update
sudo apt-get install cuda

この時点でNVIDIAのドライバも一緒にインストールされるようです。

パスの追加

さらにパスの追加。自分は「vim ~/.bashrc」の末尾に追記
これは公式アナウンスに書いてあります。(https://github.com/pfnet/chainer)

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

NVIDIA確認

下記コマンドでnvidiaのカーネルモジュールが出るはずですが、「nvidia_uvm」が出てこない事態が発生し、GPUを利用をしようとしてもメモリ確保ができずにエラーが出て終了してしまいました。

lsmod | grep nvidia
nvidia_uvm 73728 0
nvidia 8642560 1 nvidia_uvm
drm 360448 8 i915,drm_kms_helper,nvidia

↑これは正しい(と思われる)表示

この3つが出ていれば大丈夫のようですが自分のところでは「nvidia_uvm」が出ていませんでした。

dpkg -l | grep nvidia

上記コマンドで確認してみると「nvidia-352-uvm」が自分のPCに入っているのを確認しました。

nvidia_uvmの登録

おそらくnvidia_uvmとして登録されていないようなので
このコマンドによりカーネルモジュールに「nvidia-uvm」が入れれば良いみたいです

sudo modprobe nvidia-352-uvm

再度「lsmod | grep nvidia」で確認すると追加されていることを確認

Chainerインストール

さらにChainerのインストール
インストールの前に「CUDNN」シリーズ(hとsoファイル)をコピーします。これをしないと「cudnn.h」が無いというエラーが出ました。
下記コピーは自分の環境のものですので各自確認してください。

cd /usr/local
sudo cp cudnn-6.5/cudnn.h cuda/include/cudnn.h
sudo cp cudnn-6.5/libcudnn.so.6.5 cuda/lib64/libcudnn.so.6.5
sudo cp cudnn-6.5/libcudnn.so cuda/lib64/libcudnn.so
sudo cp cudnn-6.5/libcudnn.so.6.5.48 cuda/lib64/libcudnn.so.6.5.48

そして下記コマンドによりインストール

sudo pip install chainer --no-cache-dir -vvvv

このコマンド自体はGPUを使おうとしたら無理だから再インストールしろといった形で提示されたもので前のキャッシュを見ないようにしているようです。

終わり

なんとかGPUで動かせました。畳み込み層を入れたものだとCPUの10倍くらい早いんじゃないかと思います(適当)。

個人的注意事項

ソースコードに関して途中でGPUを使うために「model.to_gpu()」などとすると思いますが、もしパラメータの保存などで「model.to_cpu()」を使って戻してしまった場合、直後にもう一度「model.to_gpu()」でGPU利用意思表示をする必要があります。

スポンサーリンク
Amazon
  • このエントリーをはてなブックマークに追加

関連記事

Windows7とUbuntu14.04のデュアルブート

Windows7の入っているノートPCにUbuntu14.04 LTSをマルチブートできるようにした

記事を読む

Windowsユーザが初めてMacBookを購入したときの注意点や感想

最近12インチのMacBookを購入しました。今までWindowsしか

Redmine3.2をUbuntu14.04にインストールして躓いた所についてメモ

はじめに Ubuntu14.04 ServerにRedmine3.2

UWSCを使ったソフト自動立ち上げ【SoftEther VPN Server】

やりたいこと 最近SoftEtherという筑波大学発のベンチャー企業

【PHP】headerでContent-Typeを指定したのに効かない場合の対処法

PHPでサイトマップを作ろうと思い、XML形式のファイルを出力しようと

スマホ向け幅固定サイトの回転時の幅対応方法

幅固定サイトでのスマホ回転時Webサイトの横幅を合わせる方法のメモ。

【PHP】特定のURLからそのAtomやRSSのフィードを抽出する方法

特定のURLからRSSやATOMのフィードを抽出する方法をメモ。 流

フィード抽出ツール(RSS1.0、RSS2.0、atom)

任意URL サイト名 サイトURL RSS1.0

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑