Help us understand the problem. What is going on with this article?

Ubuntu 16.04 LTS インストール, CUDA, TensorFlow, Docker 等のセットアップ 20180913版

More than 1 year has passed since last update.

概要

  • Ubuntu 16.04 LTS
  • 日本語環境
  • 開発環境(Python, TensorFlow, Docker 等)
  • GPU(CUDA, cuDNN)
  • 主にサーバとして使う(ssh で別マシンから接続)
  • たまにデスクトップとしても使う
  • 20180913 時点

という用途でのセットアップのメモです.

16.04 or 18.04?

20180913 時点では,

ということから当面 TensorFlow を使うには 16.04 でよさそう.

20180922 追記: Ubuntu 18.04 に対応した CUDA 10 がリリースされていた. あとは TensorFlow が CUDA 10 に対応すれば 18.04 に移行できるかもしれない.

TensorFlow をソースからコンパイルする方法は以下を参照.

ISO ダウンロード

日本語環境のために Ubuntu Desktop 日本語 Remix の ISO を使う.

以下から ubuntu-ja-16.04-desktop-amd64.iso をダウンロード.

http://cdimage.ubuntulinux.jp/releases/16.04/

インストール USB ディスク作成

Mac なら以下のページに従って Etcher を使って ISO を USB ディスクに焼くのが楽.

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-macos#0

あるいは hdiutildd で作成する場合は以下を参照. ただし, dd するディスク番号によく気をつけること!

https://qiita.com/kpkpkp/items/6664a1dba97198b984ec

BIOS 設定

Ubuntu をインストールするマシンの BIOS 設定を変更して USB ディスクからブート出来るようにする. BIOS によるが以下の設定のどちらか or 両方でブート出来るはず.

  • ブートするメディアの優先順位の設定で USB ディスクを最優先にする
  • BIOS 起動時にキーを押してブートするメディアを選択する

なお, ASUS の P6X58D-E という結構古いマザーボードでは, BIOS ロゴ表示中に F8 を連打してブートメディアを選択すると USB ディスクから起動できる.

無事インストールが終わったら元の設定に戻しておくとよいかもしれない.

Ubuntu インストール

USB ディスクからブートして Ubuntu を試す を実行して問題なさそうなら Ubuntu をインストールする を実行.

以下を参照.

https://qiita.com/SUZUKI_Masaya/items/fbc10d437788dd95ad0d#ubuntu%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

パーティションの選択に特に気をつける! それ以外は基本的にデフォルトで OK.

システムアップデート

sudo apt update -y すると Error in 'appstreamcli': double free ... というエラーが出るので, このページを参考に修正.

sudo killall -KILL apt.systemd.daily
sudo mv /etc/apt/apt.conf.d/50appstream /etc/apt/apt.conf.d/50appstream.disable
sudo apt update -y
sudo apt upgrade -y
sudo mv /etc/apt/apt.conf.d/50appstream.disable /etc/apt/apt.conf.d/50appstream
sudo rm /var/crash/*

改めてアップデート. -y はお好みで.

sudo apt update -y
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove -y
sudo apt autoclean -y
sudo apt clean -y

各種設定

日本語フォルダ名を英語に変更

以下を参照.

https://qiita.com/take5249/items/13ada73bbd01ee12a2c3

LANG=C xdg-user-dirs-gtk-update

Emacs

sudo apt install emacs24
emacs  ~/.emacs.d/init.el
~/.emacs.d/init.el
(set-language-environment "Japanese")
(setq inhibit-startup-message t)
(setq initial-scratch-message "")

(dolist (elt '((width . 80) (height . 60) (top . 0) (left . 0)
               (foreground-color . "white")
               (background-color . "black")))
  (add-to-list 'default-frame-alist elt))

;;; emacs -nw
(unless (eq 'x window-system)
  (menu-bar-mode -1))

;;; X
(when (eq 'x window-system)
  (tool-bar-mode 0)
  (set-frame-parameter (selected-frame) 'alpha '(85 50)))

sshd

Ubuntu のターミナルで,

sudo apt install openssh-server
ssh localhost # テスト. ~/.ssh が作られて known_hosts が追加.

公開鍵認証

公開鍵認証でログインできるようにする.

別 PC のターミナルで (user@ip は Ubuntu のユーザと IP), 公開鍵を Ubuntu にコピー.

scp ~/.ssh/id_rsa.pub user@ip:~/.ssh/authorized_keys
ssh user@ip

パスワードなしでログインできれば OK.

最低限の sshd 設定

Ubuntu のターミナルで,

sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.org
sudo emacs /etc/ssh/sshd_config

以下 3 箇所の該当行を変更. ポート変更, root ログイン不可, パスワード認証不可.

/etc/ssh/sshd_config
Port 10022
PermitRootLogin no
PasswordAuthentication no

変更箇所を確認して, 問題なければ sshd 再起動.

diff -u /etc/ssh/sshd_config.org /etc/ssh/sshd_config
sudo systemctl restart ssh

別 PC のターミナルで, 以下のようにしてポート指定してパスワードなしでログインできれば OK.

ssh -p 10022 user@ip

OS 起動時の UI

サーバとして使うので GUI が必要ない場合は multi-user.target, デスクトップとして使いたい場合は graphical.target を指定.

sudo systemctl get-default
sudo systemctl set-default multi-user.target # or graphical.target
sudo systemctl get-default
sudo shutdown -r now # 再起動

ロケール

色々なメッセージが日本語で出て面倒なので C.UTF-8 にする. 日本語に戻すには ja_JP.UTF-8 にする.

localectl set-locale LANG=C.UTF-8
exit
ssh -p 10022 user@ip

GNU Screen

sudo apt install screen
emacs ~/.screenrc
~/.screenrc
# Encoding
defencodig utf-8

# Prefix Key
escape ^Jj

# set scrollback
defscrollback 1000000

# Delete start up screen
startup_message off

# Enable Auto detach
autodetach on

# alternate screen
altscreen on

# Enable mouse scroll
termcapinfo xterm* ti@:te@

screen を実行して Ctrl-j d でデタッチして screen -r でアタッチ出来れば OK.

Python

venv で仮想環境を作成してテストするところまで.

Python 開発環境のインストール

sudo apt install python3-pip python3-dev
pip3 freeze

結構色々入ってる.

venv のインストール

デフォルトでは入っていないので apt でインストール.

sudo apt install python3-venv

venv のテスト

# 以下のコメントのようになれば OK.

which python3
which python # 2
which pip3
which pip # ない
python3 -V
python -V # 2
mkdir somewhere
cd somewhere
python3 -m venv venv # venv フォルダが作られる
source venv/bin/activate # プロンプトに (venv) が付く
which python3
which python # 3
which pip3
which pip # ある
python3 -V
python -V # 3
pip3 freeze # pkg-resources==0.0.0 だけ
deactivate # プロンプトの (venv) が消える
pip3 freeze # 色々出てくる

TensorFlow GPU 版

TensorFlow 1.5 から 1.10.1 までのバイナリは CUDA 9.0, cuDNN 7 向けにコンパイルされているので, バイナリをインストールするのであればそのバージョンに合わせる必要がある.

https://www.tensorflow.org/install/source#tested_build_configurations

また TensorFlow 1.6 以降からは CPU の AVX というオプション付きでコンパイルされているので, AVX がない CPU の場合はソースからコンパイルするか 1.5 以前を使う必要がある. 自分の CPU に AVX があるかどうかは cat /proc/cpuinfo して flags を確認.

CUDA 9.0

以下のページを参考に cuda-9-0cuda-drivers をインストールする.

https://developer.nvidia.com/cuda-downloads
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
https://qiita.com/yukoba/items/3692f1cb677b2383c983

wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.2.148-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604_9.2.148-1_amd64.deb
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda-9-0 cuda-drivers

~/.bashrc の末尾に以下を追加.

~/.bashrc
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

再起動して nvidia-smi で確認.

sudo reboot
nvidia-smi

cuDNN 7.0.5

TensorFlow のバージョンによっては cuDNN 7.2 辺りをインストールしないといけないかもしれない. とりあえず TensorFlow 1.5.0 は cuDNN 7.0.5 で動く.

以下ページからユーザ登録して,

https://developer.nvidia.com/rdp/cudnn-download

I Agree To the Terms of the cuDNN Software License Agreement, Archived cuDNN Releases の順にクリックして,

Download cuDNN v7.0.5 (Dec 5, 2017), for CUDA 9.0

をクリックして,

cuDNN v7.0.5 Runtime Library for Ubuntu16.04 (Deb)
cuDNN v7.0.5 Developer Library for Ubuntu16.04 (Deb)
cuDNN v7.0.5 Code Samples and User Guide for Ubuntu16.04 (Deb)

の 3 つをダウンロードする. 以下ページに従って進める.

https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installlinux-deb

.deb をインストールする.

sudo dpkg -i libcudnn7_7.0.5.15-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.0.5.15-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.0.5.15-1+cuda9.0_amd64.deb

サンプルプログラムで cuDNN の動作を検証する.

cp -r /usr/src/cudnn_samples_v7/ $HOME
cd $HOME/cudnn_samples_v7/mnistCUDNN
make clean && make
./mnistCUDNN

Test passed! とでれば検証完了.

TensorFlow GPU

以下を参考に Python3 の venv に TensorFlow GPU をインストールする (Python3 しか使わないので virtualenv ではなく venv).

https://www.tensorflow.org/install/install_linux#InstallingVirtualenv

python3 -V
pip3 -V
sudo apt install python3-pip python3-dev python3-venv
mkdir ~/tensorflow
cd ~/tensorflow
python3 -m venv venv
source ~/tensorflow/venv/bin/activate

最新版バイナリをインストールする. 20180912 現在 は 1.10.1 が最新.

pip install --upgrade tensorflow-gpu
python -c "import tensorflow as tf; print(tf.__version__)"

1.10.1 と表示されれば OK.

ここで, AVX が有効になっている CPU であればバージョン番号がでて正常に終了するはず. が AVX がない CPU の場合は Illegal instruction (core dumped) とでて実行できない(1.6 以降のバイナリは CPU の AVX というオプションを有効にしてコンパイルされているため).

ここではひとまず AVX が必要ない 1.5.0 をインストールして動作確認する(なお, pip からインストールできる 1.5.1 は AVX が有効になってしまっているので注意).

pip install --upgrade tensorflow-gpu==1.5.0
python -c "import tensorflow as tf; print(tf.__version__)"

1.5.0 と表示されれば OK.

Docker

Docker CE for Ubuntu

Docker の公式ドキュメント通りの手順でインストールする.

https://docs.docker.com/install/linux/docker-ce/ubuntu/

sudo apt-get remove docker docker-engine docker.io
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt-get update
sudo apt-get install docker-ce

docker -v
sudo docker run hello-world

sudo なしで実行できるようにする

https://docs.docker.com/install/linux/linux-postinstall/

grep docker /etc/group
sudo usermod -aG docker $USER
grep docker /etc/group
exit
ssh -p 10022 user@ip
docker run hello-world

Docker Compose

以下ページに従ってインストールする.

https://docs.docker.com/compose/install/#install-compose

以下のページで最新リリースのバージョン番号を確認して curl の URL の該当部分を書き換える. 20180910 現在では 1.22.0

https://github.com/docker/compose/releases

sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

NVIDIA Container Runtime for Docker (nvidia-docker2)

以下ページに従ってインストールする.

https://github.com/NVIDIA/nvidia-docker

docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

以上.

Guwashi
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした