![]() |
ノート/Titan CentOS-7 install (2015-12-05)https://pepper.is.sci.toho-u.ac.jp:443/pepper/index.php?%A5%CE%A1%BC%A5%C8%2FTitan%20CentOS-7%20install%20%282015-12-05%29 |
![]() |
ダウンロード・ISOイメージ
OSインストール
$ ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) cudaGetDeviceCount returned 38 -> no CUDA-capable device is detected Result = FAIL
Dec 15 10:10:24 mint kernel: NVRM: API mismatch: the client has the version 340.29, but Dec 15 10:10:24 mint kernel: NVRM: this kernel module has the version 343.36. Please Dec 15 10:10:24 mint kernel: NVRM: make sure that this kernel module and all NVIDIA driver Dec 15 10:10:24 mint kernel: NVRM: components have the same version. Dec 15 10:10:24 mint kernel: NVRM: nvidia_frontend_ioctl: minor 255, module->ioctl failed, error -22
$ lsmod | grep -i nvidia nvidia 11049298 0 i2c_core 31276 5 i2c_i801,nvidia,nouveau,drm_kms_helper,drm
$ modprobe -l | grep nvidia kernel/drivers/video/backlight/mbp_nvidia_bl.ko kernel/drivers/video/nvidia/nvidiafb.ko extra/nvidia-uvm.ko extra/nvidia.ko
$modinfo nvidia filename: /lib/modules/2.6.32-279.el6.x86_64/extra/nvidia.ko alias: char-major-195-* version: 343.36 supported: external license: NVIDIA alias: pci:v000010DEd00000E00sv*sd*bc04sc80i00* alias: pci:v000010DEd00000AA3sv*sd*bc0Bsc40i00* alias: pci:v000010DEd*sv*sd*bc03sc02i00* alias: pci:v000010DEd*sv*sd*bc03sc00i00* depends: i2c-core vermagic: 2.6.32-279.el6.x86_64 SMP mod_unload modversions parm: NVreg_Mobile:int 以下略
$ modinfo nvidia filename: /lib/modules/2.6.32-279.el6.x86_64/extra/nvidia.ko alias: char-major-195-* version: 340.65 supported: external license: NVIDIA alias: pci:v000010DEd00000E00sv*sd*bc04sc80i00* alias: pci:v000010DEd00000AA3sv*sd*bc0Bsc40i00* alias: pci:v000010DEd*sv*sd*bc03sc02i00* alias: pci:v000010DEd*sv*sd*bc03sc00i00* depends: i2c-core vermagic: 2.6.32-279.el6.x86_64 SMP mod_unload modversions parm: NVreg_Mobile:int parm: NVreg_ResmanDebugLevel:intカーネル側のバージョンが340になった。
$ ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 2 CUDA Capable device(s) Device 0: "GeForce GTX TITAN Z" CUDA Driver Version / Runtime Version 6.5 / 6.5 CUDA Capability Major/Minor version number: 3.5 Total amount of global memory: 6143 MBytes (6441730048 bytes) (15) Multiprocessors, (192) CUDA Cores/MP: 2880 CUDA Cores GPU Clock rate: 876 MHz (0.88 GHz) Memory Clock rate: 3505 Mhz Memory Bus Width: 384-bit L2 Cache Size: 1572864 bytes Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 1 copy engine(s) Run time limit on kernels: No Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device PCI Bus ID / PCI location ID: 6 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > Device 1: "GeForce GTX TITAN Z" CUDA Driver Version / Runtime Version 6.5 / 6.5 CUDA Capability Major/Minor version number: 3.5 Total amount of global memory: 6144 MBytes (6442254336 bytes) (15) Multiprocessors, (192) CUDA Cores/MP: 2880 CUDA Cores GPU Clock rate: 876 MHz (0.88 GHz) Memory Clock rate: 3505 Mhz Memory Bus Width: 384-bit L2 Cache Size: 1572864 bytes Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 1 copy engine(s) Run time limit on kernels: No Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device PCI Bus ID / PCI location ID: 7 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > > Peer access from GeForce GTX TITAN Z (GPU0) -> GeForce GTX TITAN Z (GPU1) : Yes > Peer access from GeForce GTX TITAN Z (GPU1) -> GeForce GTX TITAN Z (GPU0) : Yes deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.5, CUDA Runtime Version = 6.5, NumDevs = 2, Device0 = GeForce GTX TITAN Z, Device1 = GeForce GTX TITAN Z Result = PASS動いたっぽい。
[ FAILED ] 6 tests, listed below: [ FAILED ] PowerLayerTest/0.TestPowerGradientShiftZero, where TypeParam = caffe::FloatCPU [ FAILED ] PowerLayerTest/1.TestPowerGradientShiftZero, where TypeParam = caffe::DoubleCPU [ FAILED ] PowerLayerTest/1.TestPowerGradient, where TypeParam = caffe::DoubleCPU [ FAILED ] PowerLayerTest/2.TestPowerGradientShiftZero, where TypeParam = caffe::FloatGPU [ FAILED ] PowerLayerTest/3.TestPowerGradientShiftZero, where TypeParam = caffe::DoubleGPU [ FAILED ] PowerLayerTest/3.TestPowerGradient, where TypeParam = caffe::DoubleGPU
ここを見ると、boostのバージョンとか、BLASのバージョン(atlasかopenblasか)がリンク先と合わないとか?
カーネルイメージ自体に含まれてしまっている(少なくとも依存性があって、インストールしてしまう)らしい。いくらmodprobeでblacklistに入れても、lsmod | grep nouveau で見ると排除できていない。
これに従って、まずブートイメージをセーブ
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
nouveauドライバをロードしない起動イメージファイルを作成
dracut --omit-drivers nouveau /boot/initramfs-$(uname -r).img $(uname -r)
ほかのモジュールとの依存関係によってnouveauがロードされてしまう可能性があるので、下記2つのファイルを作成してmodprobe時にblacklist
vi /etc/modprobe.d/modprobe.conf # # /etc/modprobe.d/modprobe.conf (to omit nouveau driver) # blacklist nouveau vi /etc/modprobe.d/nouveau_blacklist.conf blacklist nouveau
再起動後,確認
lsmod | grep nouveau
今までと若干変更
Caffeインストールの準備としてAnacondaパッケージをインストールする。これによってCaffeに必要な幾つかの環境(ライブラリ等)が即時にインストールされるか、さもなければcondaコマンドでインストールできる。
condaコマンドを使ってインストールする理由は、Caffeの要求するライブラリが多いからだが、特に幾つかのライブラリはソースからコンパイルすると更に依存性があって、他のライブラリの依存性に抵触したりするようだ。本当はyumで入れれば、CentOS(Fedora)の統一した環境になるのだが、yumのレポジトリはCaffeなどの要求するバージョンより古くて不可な場合が散見される(結構多い)。condaの方が大分新しい。
ところが、Anacondaをインストールして、実行時の(動的)ライブラリ検索パスにanaconda/libを含めると、liblzmaのバージョンが書いていない、というエラーがselinuxから出る。selinuxから出るので、Caffeの標準環境であるubuntuでは出ないと想像できる。
このliblzmaのエラーは影響が大きくて、たとえばLD_LIBRARY_PATH環境変数で、/usr/lib64より前にanaconda/libを指定すると、OS起動時にエラーを検出して、起動できなくなる。その場合は、やむなくCentOSインストールCDで起動してレスキュー用シェルを起動し、HDDを適宜マウントしたのちに、anacondaをインストールしたディレクトリ全体を消去(=anacondaのアンインストール)して対応した。また、ld.so.conf.dにanaconda参照を組み込む(ファイルanaconda.confなどを作る)と、同様に起動不能になる。
このエラーは、動的ライブラリの参照パスが先にanacondaの中のliblzma.so.5...を参照していると起こるようで、起動時だけではなくて、anacondaインストール+動的ライブラリ参照パス設定直後から、コマンド実行時にも警告メッセージが出るようになるので、起こっていることが分かる。なので、インストール+パス設定の直後にこのメッセージが出る場合は、急いでインストールを外しておく方がよさそうだ。(さもないと、次に何かの加減で起動してしまったときにエラーが出て起動不能になって、えらい目にあうことを繰り返すことになる)
正しい対応策はよく分からないが、とにかくAnacondaが欲しいのであるから、Anacondaを入れないという選択肢はない。それで、Anacondaをインストールしたのち、元々/usr/lib64/liblzma***のsoファイル(liblzma.so, liblzma.so.5.0.99, liblzma.so.5)を、anaconda/lib/の下にコピーして入れ替えてしまうことで、対応した。マイナーバージョン番号は違ってしまっているが、一応動いている。
動的ライブラリのパスは、anacondaを全ユーザに共通に有効化するにはld.configに含めるのが良いと思うが、この件が怖いので、ld.configからは外し、それぞれのユーザが環境変数LD_LIBRARY_PATHでanacondaを含める(かどうか、順序をどうするかを決める)ことにした。
Anacondaで勝手に入ってくるライブラリでは足りないものがあるので、いくつか追加する。
といっても、学習フェーズは大変なので、最初に、既存の学習済みモデルを使って分類がうまくできることで遊ぶ。
詳細はCaffeで手軽に画像分類 - Yahoo! JAPAN Tech Blogにあるが、 get_caffe_reference_imagenet_model.shが無いのでreadme.mdの中から対象のファイルをダウンロードしなければならない( Caffe - RupyWiki参照)。
更に、classify.pyで呼び出されるio.pyで失敗するが、 PythonからCaffeを使う & ImageNetをリファレンスモデルとして使う(認識と特徴抽出) - Keep In Mindや OSX10.10でCaffeをインストール、リファレンスモデルで画像を分類 - Qiitaの方法で治るが、こういう指摘Caffe, Pylearn2をまとめて試す - Qiitaもある(試してない)。
また、参考として