はじめに †
Mac Pro (2010 Mid)にGeForce GTX 1080を積んで、TensorFlowを動かすまでのメモです。
macOSではGeForce GTX 1080がまだサポートされていないので、UbuntuをインストールしてUbuntu上で動かします。
現在、TensorFlow 1.4, CUDA 9.0, cuDNN 7.0がリリースされていますが、この組み合わせでは動かなかったので、TensorFlow 1.3, CUDA 8.0, cuDNN 6.0の組み合わせで動かしています。
この記事の内容は、次の環境で確認しました。
- Ubuntu 17.10
- Nvidia Driver 384.90
- CUDA 8.0
- cuDNN 6.0.21
- TensorFlow 1.3
用意したもの †
- ASUS TURBO-GTX1080-8G
- Mini PCIe 6 pin to PCIe 6 pinケーブル
- PCIe 6 pin x 2 to PCIe 8 pinケーブル
- 2TB 3.5inch SATA HDD
- 16GB USBメモリー
HDDの容量はもっと小さくても構いません。 USBメモリーの容量は16GB以上必要です。
Ubuntuインストール用USBメモリーを作成する †
次のページを参考にしました。
- Ubuntu 16.04 LTSをダウンロードします。
- ディスクユーティリティを使って、USBメモリーを、MS-DOS (FAT)、GUIDパーティションで消去します。
- diskutilコマンドで、USBメモリーのデバイスを調べます。
$ diskutil list
- 調べたデバイスをアンマウントします。(これはデバイスが /dev/disk2 の時の例です。)
$ diskutil unmountDisk /dev/disk2
- ダウンロードしたUbuntuのISOイメージをコピーします。
$ sudo dd if=ubuntu-16.04-desktop-amd64.iso of=/dev/rdisk2 bs=1m
Ubuntu用のHDDを用意する †
- macOSをシャットダウンし、HDDを増設します。
- macOSを起動し、ディスクユーティリティで増設したHDDを、MS-DOS (FAT)、GUIDパーティションで消去します。
スワップ領域を作りたい場合は2パーティションにすればいいと思いますが、今回のMac Proは32GBのメモリーを積んでいるので、スワップ領域はなしにしました。
ブート・マネージャーを準備する †
BootCampはUbuntuをサポートしていません。 そこで、rEFIndというブート・マネージャーを使います。
- rEFIndをダウンロードし、展開する。
- macOSをシャットダウンし、Command+Rを押しながら起動する。
- リカバリー・モードで起動したら、ターミナルを起動し、rEFIndを展開したフォルダーに移動する。
- rEFIndをインストールする。
# ./refind-install
- macOSを再起動する。
Ubuntuをインストールする †
- Ubuntuインストール用のUSBメモリーを接続する。
- macOSをシャットダウンし、Optionを押しながら起動する。
- 「EFI Boot」を選択する。
- 「Try Ubuntu without installing」を選択し、USBメモリーからUbuntuを起動する。
- 起動したUbuntuのデスクトップにある「Install Ubuntu 16.04 LTS」をダブルクリックする。
Ubuntuをアップデートする †
最新版にアップデートします。
- 「システム環境設定」の「ソフトウェアとアップグレード」の「アップデート」にあるUbuntuの新バージョンの通知を「全ての新バージョン」に変更する。
- アップデートする
$ sudo apt update $ sudo do-release-upgrade $ sudo shutdown -r $ sudo do-release-upgrade -d $ sudo shutdown -r
UbuntuにSSHをインストールする †
リモートで作業できるように、sshdをインストールします。
- sshをインストールする。
$ sudo apt-get install openssh-server
- sshが自動で起動するように設定する。
$ sudo systemctl enable ssh.service
- Ubuntuを再起動してリモートからsshでログインできるか確認する。
セキュリティのことを考えると、インターネットから見える環境では、rootでのログインはできないようにしておくべきです。
UbuntuにNvidiaのドライバーをインストールする †
次のページを参考にしました。
- インストールの準備をする。
$ sudo add-apt-repository ppa:xorg-edgers/ppa $ sudo add-apt-repository ppa:graphics-drivers/ppa $ sudo apt-get update
- 最新版のドライバーを調べる。
$ sudo apt-cache search 'nvidia-[0-9]+$'
- 最新版のドライバーをインストールする。
$ sudo apt-get install nvidia-384 $ sudo apt-get install mesa-common-dev $ sudo apt-get install freeglut3-dev
最新版を入れようとしたけど入らなかったので、384にしました。
Mac ProにASUS TURBO-GTX1080-8Gを装着する †
Mac Pro (Mid 2010) には、GPU用の電源として、Mini PCIe 6pinのソケットが2つ付いています。 PCIe 6 pinケーブルは75 Wまでしか供給できません。
そこで、PCIe 6 pinケーブル2本をまとめてPCIe 8 pinに変換してくれるケーブルを使います。 PCIe 8 pinは150Wまで供給できます。
PCIeソケットから75W共有できるので、Mac Pro (Mid 2010)は全部で225Wまで供給できます。
GeForce GTX 1080を搭載したビデオカードはたくさん出ていますが、その多くがPCIe 8pin x 2やPCIe 8 pin + PCIe 6 pinだったりします。
ASUS TURBO-GTX1080-8Gは、最大消費電力が225Wで、かつ、補助電源がPCIe 8 pin 1本のみなので、Mac Pro (Mid 2010)でも使うことができます。
- Ubuntuをシャットダウンする。
- Mac Proから現在のビデオカードを外す
- Mini PCIe 6 pin to PCIe 6 pinケーブルを空いているソケットに接続する。
- 2本のPCIe 6 pinケーブルをPCIe 6 pin x 2 to PCIe 8 pinケーブルに接続する。
- PICe 8 pinケーブルをASUS TURBO-GTX1080-8Gに接続する。
- ASUS TURBO-GTX1080-8GをMac Proに装着する。
- Ubuntuを起動し、画面が表示されることを確認する
UbuntuにCuda 8.0をインストールする †
次のページを参考にしました。
- Ubuntuを起動する。
- Cudaをダウンロードする(Linux, x86_64, Ubuntu, 16.04, dev(local)を選択して、Downloadボタンからリンクを取得します)。
パッチもダウンロードします。
$ wget https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb $ wget https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local-cublas-performance-update_8.0.61-1_amd64.deb
- Cudaをインストールする。
$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb $ sudo apt-key add /var/cuda-repo-8-0-local-ga2/7fa2af80.pub $ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-cublas-performance-update_8.0.61-1_amd64.deb $ sudo apt-get update $ sudo apt-get install cuda-8-0
- .bashrcに以下の2行を追加する。
export PATH="/usr/local/cuda-8.0/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH"
- Ubuntuを再起動する。
$ sudo reboot
- ログインして、動作確認する。
$ nvidia-smi
cuDNN 6.0をインストールする †
- NvidiaのAccelerated Computing Developer Programにメンバー登録する。
- cuDNN v6.0 library for Linuxをダウンロードする。
- ダウンロードしたファイルを展開してインストールする。
$ tar zxvf cudnn-8.0-linux-x64-v6.0.tgz $ sudo cp -a cuda/lib64/* /usr/local/cuda-8.0/lib64/ $ sudo cp -a cuda/include/* /usr/local/include/ $ sudo cp -a cuda/include/* /usr/local/cuda-8.0/include/ $ sudo ldconfig $ rm -R -f cuda cudnn-8.0-linux-x64-v6.0.tgz
LightDMを止める †
ディスプレイ・マネージャーのLightDMが動いているとGPUパワーを使ってしまうので、LightDMを止めます。
- /etc/default/grub の12行目を以下のように変更する。
GRUB_CMDLINE_LINUX="systemd.unit=multi-user.target"
- 設定を反映させて、Ubuntuを再起動する
$ sudo update-grub $ sudo reboot
画面が出なくなってしまったので、ここからは全てsshでリモート・ログインして作業します。
TensorFlow 1.3をインストールする †
次のページを参考にしました。
- Installing TensorFlow on Ubuntu - TensorFlow
TensorFlow 1.3.0 GPU版のURLは次のページで調べました。
- tensorflow-gpu 1.3.0 - Python
- libcuptiをインストールする。
$ sudo apt-get install libcupti-dev
- pip3とpython3とvirtualenvをインストールする。
$ sudo apt-get install python3-pip python3-dev python-virtualenv
- virtualenvの環境を ~/tensorflow に構築する。
$ virtualenv --system-site-packages -p python3 ~/tensorflow
- virtualenvをアクティベートする。
$ source ~/tensorflow/bin/activate
- TensorFlow 1.3のGPU版をインストールする。
(tensor flow)$ pip3 install --upgrade https://pypi.python.org/packages/b8/16/14fbe414f2b3c39c5d01521e38e7aaec384f8fbf26eec021d247345260c3/tensorflow_gpu-1.3.0-cp36-cp36m-manylinux1_x86_64.whl#md5=7b694289e1fc977a47cd89f2876d3528
- TensorFlowの動作を確認する。
(tensorflow) $ python3 >>> import tensorflow as tf >>> hello = tf.constant('Hello, TensorFlow!') >>> sess = tf.Session() >>> print(sess.run(hello)) >>> a = tf.constant(10) >>> b = tf.constant(32) >>> print(sess.run(a + b))