2020年06月02日

「Ubuntu 20.04 LTS 日本語 Remix」に「CUDA 10.0」+「TensorRT 7.0.0」をインストールする

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 20.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10 Home 64bit) + 1TB 5400rpm HDD (Ubuntu 20.04 LTS 日本語 Remix)
--

2. 構築すべき「CUDA」環境
Ubuntu 18.04用のファイルを使ってUbuntu 20.04上に「CUDA 10.0」+「TensorRT 7.0.0」環境を構築する。

・Ubuntu 20.04 LTS
・CUDA 10.0
・cuDNN 7.6.5
・NCCL 2.6.4
・TensorRT 7.0.0

3. NVIDIA製GPU「GeForce MX150」ドライバのインストール
今回作業するコンピュータはNVIDIA製GPU「GeForce MX150」を搭載しているので、まずはこのGPUに対応する最新のドライバをインストールします。
じっさいの作業はむずかしくありませんが、基本的な考えかたを学ぶうえで、「Ubuntu 16.04 LTSにNVIDIA製ドライバーをインストールする3つの方法」がたいへん参考になりました。
「Ubuntu 20.04 LTS 日本語 Remix」で「GeForce MX150」用ドライバをインストールするには、「ソフトウェアとアップデート」を起動し、「追加のドライバー」タブを開きます。
すこし時間がかかって、使用できるドライバの一覧が表示されます。
型式が「NVIDIA Corporation: GP108M [GeForce MX150]」と表示されているのを確認して、いくつか選択肢が示されたら基本的に最新のものを選択します。
2020年6月2日現在の最新バージョンは「440」なので、「NVIDIA driver metapackageをnvidia-driver-440から使用します(プロプライエタリ、検証済み)」ボタンにチェックをいれます。
その状態で「変更の適用」をクリックすると、インストール処理がはじまりますが、終わるまでじゃっかん時間がかかります。
インストール処理が終わったら、「閉じる」をクリックして「ソフトウェアとアップデート」ウインドウを閉じてからシステムを再起動すると、標準の「Nouveau」ドライバではなくNVIDIA製「nvidia-440」ドライバで立ちあがります。
ターミナルをひらいて、「$ nvidia-smi」コマンドをたたいてみて、ドライバのバージョンやGPUの型式が正しく表示されることを確認しておきます。

$ nvidia-smi


デスクトップ関連の設定は、「$ nvidia-settings」コマンドを使って、グラフィカルにおこなうことができます。

$ nvidia-settings


設定内容は「⁠~/.nvidia-settings-rc」に保存され、ログインのたびに「/etc/xdg/autostart/nvidia-settings-autostart.desktop」がこの設定内容を読みこんで、反映させる仕組みです。
NVIDIA製「nvidia-440」ドライバのドキュメント類は、「⁠/usr/share/doc/nvidia-driver-440/index.html」に保管されています。
インストールしたNVIDIA製ドライバのバージョンは、以下のコマンドで確認できます。

$ cat /proc/driver/nvidia/version


4. 「CUDA 10.0」インストールまえの準備作業
「CUDA 10.0」をインストールする方法はいくつかありますが、NVIDIAウェブサイト「CUDA Toolkit 10.0 Archive」ページからUbuntu18.04用runファイル「cuda_10.0.130_410.48_linux.run」をダウンロードして、手動で「CUDA 10.0」をインストールすることにしました。
やってみてからの感想ですが、いろいろなところで互換性の問題がおこりやすい「CUDA」関連ライブラリについては、結果的にrunファイルでインストールして手動でバージョンを管理するのが一番いいと思います。
パッケージの競合という問題がないので、複数のバージョンをインストールしたうえで、パスとショートカットでバージョンを切りかえて使う、ということができるのもおおきなメリットといえます。
GPUドライバのみ別途Ubuntuパッケージで管理したうえで、ツールキットをrunファイルからインストールするだけなら、すべての処理をグラフィカルログイン状態で完了でき、システムに致命的なダメージをあたえかねないむずかしいプロセスもありません。

NVIDIA CUDA Installation Guide for Linux」ページの指示にしたがって、「CUDA 10.0」をインストールするまえに必要な確認作業、準備作業をおこないます。

「CUDA 10.0」に対応したGPUの確認。
$ lspci | grep -i nvidia
01:00.0 3D controller: NVIDIA Corporation GP108M [GeForce MX150] (rev a1)


Linux OSの対応状況確認。「Ubuntu 20.04 LTS」は対応ディストリビューションのリストにはいっていませんが、このまますすめていきます。
$ uname -m && cat /etc/*release
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04 LTS"
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal


コンパイラの存在およびバージョンを確認。「CUDA 10.0」は「Ubuntu 20.04 LTS」には対応しておらず、「Ubuntu 20.04 LTS」標準の「gcc-9」と の互換性に問題があります。
$ gcc --version
gcc-9 (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


そのため、あらかじめ互換性のある「gcc-7」をインストールし、「CUDA-10.0」ライブラリのインストール作業および「CUDA-10.0」環境でのビルド作業では優先的に「gcc-7」が使用されるように設定します。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90

$ sudo apt-get install gcc-7 g++-7

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 100


こうした「gcc-7」が必要なインストール作業が終わったら、かならず「gcc-7」「g++-7」の優先順位をさげて、自動モードでシステム標準の「gcc-9」「g++-9」が使われるように設定をもどしておきます。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70


Linuxカーネルのバージョン確認。
$ uname -r
5.4.0-33-generic


Linuxカーネルのヘッダと開発キットをインストール。
$ sudo apt-get install linux-headers-$(uname -r)


5. 「CUDA 10.0」のインストール
CUDA Toolkit 10.0 Archive」ページで「Linux」「x86_64」「Ubuntu」「18.04」「runfile (local)」を選択し、「Download Installers for Linux Ubuntu 18.04 x86_64」タブを開きます。
「Base Installer」「Patch 1 (Released May 10, 2019)」それぞれの「Download」ボタンを押して、「cuda_10.0.130_410.48_linux.run」「cuda_10.0.130.1_linux.run」をダウンロードします。
ファイルをダウンロードしたディレクトリへ移動し、ベースインストーラのrunファイルに実行権限を付与してから、「sudo」で実行します。
長い使用許諾書を「Enter」キーを押して全部表示してから「accept」し、「Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?」には、すでに最新ドライバ「440」をインストールしているので「no」と回答します。
「Install the CUDA 10.0 Toolkit?」に「yes」と回答し、「/usr/local/cuda-10.0」にライブラリをインストールのうえ「/usr/local/cuda」からシンボリックリンクをはり、動作確認のためのサンプルファイルは「~/NVIDIA_CUDA-10.0_Samples」にコピーする設定にします。

$ chmod +x cuda_10.0.130_410.48_linux.run
$ sudo ./cuda_10.0.130_410.48_linux.run

Do you accept the previously read EULA?
accept/decline/quit: accept

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: no

Install the CUDA 10.0 Toolkit?
(y)es/(n)o/(q)uit: yes

Enter Toolkit Location
[ default is /usr/local/cuda-10.0 ]:

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: yes

Install the CUDA 10.0 Samples?
(y)es/(n)o/(q)uit: yes

Enter CUDA Samples Location
[ default is /home/username ]:

Installing the CUDA Toolkit in /usr/local/cuda-10.0 ...
Installing the CUDA Samples in /home/username ...
Copying samples to /home/username/NVIDIA_CUDA-10.0_Samples now...
Finished copying samples.

===========
= Summary =
===========

Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-10.0
Samples: Installed in /home/username

Please make sure that
- PATH includes /usr/local/cuda-10.0/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-10.0/lib64, or, add /usr/local/cuda-10.0/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-10.0/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.0/doc/pdf for detailed information on setting up CUDA.

***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 10.0 functionality to work.
To install the driver using this installer, run the following command, replacing with the name of this run file:
sudo .run -silent -driver

Logfile is /tmp/cuda_install_4325.log


ベースインストーラのインストール処理が終わったら、パッチをあてていきます。
「CUDA 10.0 Toolkit」をインストールしたディレクトリ「/usr/local/cuda-10.0」をターゲットに、パッチファイルを実行するだけです。

chmod +x cuda_10.0.130.1_linux.run
$ sudo ./cuda_10.0.130.1_linux.run

Do you accept the previously read EULA?
accept/decline/quit: accept

Enter CUDA Toolkit installation directory
[ default is /usr/local/cuda-10.0 ]:

Installation complete!
Installation directory: /usr/local/cuda-10.0


ここまでの作業が終わったら、「~/.bashrc」に以下二行を追加して、パスをとおしておきます。

export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}


あるいは、以下のようなかたちで「CUDA_HOME」変数を使ってもO.K.です。

# CUDA 10.0 path
export CUDA_HOME="/usr/local/cuda-10.0"
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_HOME/lib64:/usr/lib/x86_64-linux-gnu/
export CPATH=$CPATH:$CUDA_HOME/include


いったんターミナルを閉じるか、「$ source ~/.bachrc」コマンドを実行して、パスの変更を反映させます。
いくつかライブラリがたりない(「libGLU.so」「libX11.so」「libXi.so」「libXmu.so」「libGL.so」など)ことがあるので、必要な場合はあとで該当パッケージをインストールし、パスのとおった「/usr/lib」からライブラリファイルへシンボリックリンクをはっておけば問題ありません。

$ sudo apt install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev


ここまででインストール作業は完了です。
以下のコマンドを実行して、インストールした「CUDA 10.0」のバージョンが正しく表示されることを確認します。

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130


問題なければ、サンプルのビルドを実行します。
$ cd ~/NVIDIA_CUDA-10.0_Samples
$ make


ビルド処理が終わったら、「~/NVIDIA_CUDA-10.0_Samples/bin/x86_64/linux/release/」以下に「deviceQuery」が生成するので、それを実行してみます。

$ ~/NVIDIA_CUDA-10.0_Samples/bin/x86_64/linux/release/deviceQuery


デバイスが検出され、「Result = PASS」と表示されていれば、インストールは正常に完了しています。

NVIDIA公式インストール手順書にも記載がありますが、「CUDA Toolkit 10.0」をrunfileを使ってインストールしたときは、以下のスクリプトを実行することでアンインストールできます。

$ sudo /usr/local/cuda-10.0/bin/uninstall_cuda_10.0.pl


なお、今回のインストール方法では必要ありませんが、NVIDIA製ドライバをrunfileを使ってインストールしたときのアンインストールコマンドは以下のとおりです。

$ sudo /usr/bin/nvidia-uninstall


6. 「cuDNN 7.6.5」のインストール
基本的には、NVIDIA公式の「cuDNN Installation Guide」の指示にしたがって、インストール作業をすすめていきます。
まず「cuDNN Download」ページへいき、必要におうじてログインしたうえで、「I Agree To the Terms of the cuDNN Software License Agreement」にチェックをいれます。
ここで「Download cuDNN」をクリックして、「cuDNN Download」ページへ飛び、「Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.0」をクリックしてタブをひらきます。
一覧表のなかから「cuDNN Library for Linux」をクリックして、「cudnn-10.0-linux-x64-v7.6.5.32.tgz」をダウンロードします。
ダウンロードしたディレクトリへ移動してファイルを解凍のうえ、「CUDA 10.0」ライブラリをインストールした「/usr/local/cuda-10.0」ディレクトリ以下に配置し、読み込み権限をあたえておきます。

$ tar -xzvf cudnn-10.0-linux-x64-v7.6.5.32.tgz
cuda/include/cudnn.h
cuda/NVIDIA_SLA_cuDNN_Support.txt
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.7
cuda/lib64/libcudnn.so.7.6.5
cuda/lib64/libcudnn_static.a
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*


「cuDNN」ライブラリの配置が完了したら、以下のコマンドで正しく配置されているかどうか確認します。

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 5
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

#include "driver_types.h"


インストールしたバージョン「7.6.5」が正しく表示されれば、問題ありません。
最後に、debian package「cuDNN Code Samples and User Guide for Ubuntu18.04 (Deb)」をクリックしてダウンロードした「libcudnn7-doc_7.6.5.32-1+cuda10.0_amd64.deb」からサンプルを抽出、ビルドしてみます。

$ dpkg-deb -x libcudnn7-doc_7.6.5.32-1+cuda10.0_amd64.deb ./
$ cp -r usr/src/cudnn_samples_v7/ ~/
$ cd ~/cudnn_samples_v7/mnistCUDNN
$ make clean && make
$ ./mnistCUDNN

.....
Test passed!


「Test passed!」と表示が出れば、「cuDNN 7.6.5」のインストール作業は完了しています。

7. 「NCCL 2.6.4」のインストール
「NCCL 2.6.4」をインストールするには、NVIDIA公式の「NCCL 2.6.4 Installation Guide」にしたがって、作業をすすめます。

まず「NVIDIA Collective Communications Library (NCCL) Download Page」へいき、必要におうじてログインしたうえで、「I Agree To the Terms of the Software License Agreement」にチェックをいれます。
「Download NCCL v2.6.4, for CUDA 10.0, March 26,2020」をクリックしてタブをひらき、「O/S agnostic local installer」をクリックして、「nccl_2.6.4-1+cuda10.0_x86_64.txz」をダウンロードします。
ダウンロードしたディレクトリに移動したら、ファイルを解凍のうえ、「/usr/local/nccl-2.6」ディレクトリ以下へ配置します。

$ tar xvf nccl_2.6.4-1+cuda10.0_x86_64.txz
nccl_2.6.4-1+cuda10.0_x86_64/include/
nccl_2.6.4-1+cuda10.0_x86_64/include/nccl_net.h
nccl_2.6.4-1+cuda10.0_x86_64/include/nccl.h
nccl_2.6.4-1+cuda10.0_x86_64/lib/
nccl_2.6.4-1+cuda10.0_x86_64/lib/pkgconfig/
nccl_2.6.4-1+cuda10.0_x86_64/lib/pkgconfig/nccl.pc
nccl_2.6.4-1+cuda10.0_x86_64/lib/libnccl.so
nccl_2.6.4-1+cuda10.0_x86_64/lib/libnccl.so.2
nccl_2.6.4-1+cuda10.0_x86_64/lib/libnccl_static.a
nccl_2.6.4-1+cuda10.0_x86_64/lib/libnccl.so.2.6.4
nccl_2.6.4-1+cuda10.0_x86_64/LICENSE.txt
$ sudo cp -r nccl_2.6.4-1+cuda10.0_x86_64 /usr/local/nccl-2.6


最後に、「.bashrc」に以下の行を追加し、「/usr/local/nccl-2.6」へパスをとおしておきます。

export NCCL_ROOT="/usr/local/nccl-2.6"
export CPATH=$CPATH:$NCCL_ROOT/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NCCL_ROOT/lib/
export LIBRARY_PATH=$LIBRARY_PATH:$NCCL_ROOT/lib/


いったんターミナルを閉じるか、「$ source ~/.bachrc」コマンドを実行して、パスの変更を反映させます。

8. 「TensorRT 7.0.0」インストール

NVIDIA TensorRT 7.x Download
」ページへいき、必要におうじてログインしたうえで、「I Agree To the Terms of the Software License Agreement」にチェックをいれます。
「Tar File Install Packages」リストのなかの「TensorRT 7.0.0.11 for Ubuntu 18.04 and CUDA 10.0 tar package」をクリックして、「TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz」ファイルをダウンロードします。
ダウンロードしたディレクトリへ移動して、ファイルを解凍のうえ、適当なディレクトリ(ここでは「/usr/local/TensorRT-7.0.0」)に配置します。

$ tar xzvf TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz
$ sudo cp -r TensorRT-7.0.0.11 /usr/local/TensorRT-7.0.0


「.bashrc」に以下の行を追加し、「TensorRT-7.0.0」ディレクトリへパスをとおしておきます。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/TensorRT-7.0.0/lib


あとは、NVIDIA公式の「TensorRT 7.0.0 Installation Guide」の手順どおり、「Python TensorRT」「Python UFF」「Python graphsurgeon」パッケージをインストールします。
「TensorRT 7.0.0」をインストールしたディレクトリの「samples/sampleMNIST/」へいき、サンプルをmakeしてみます。
「TensorRT 7.0.0」をインストールしたディレクトリの「bin」に「sample_mnist」ができているので、これを実行して「TensorRT 7.0.0」が正しくインストールされていることを確認します。
この生成したサンプルファイルをきちんと動かすためには、あらかじめ「data/mnist/download_pgms.py」を実行しておく必要があるかもしれません。

9. 「CUPTI」パス登録
「CUPTI」は「CUDA 10.0 Toolkit」にふくまれているため、あらためてインストールする必要はありませんが、パスをとおしておく必要はあります。
「.bashrc」に以下の一行を追加し、いったんターミナルを閉じるか「$ source ~/.bachrc」コマンドを実行するかして、パスの変更を反映させます。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/extras/CUPTI/lib64


以上で、「Ubuntu 20.04 TLS」上に「CUDA 10.0」+「TensorRT 7.0.0」環境を構築する作業は完了です。
今回は「TensorRT 7.0.0」環境が必要だったため、動作要件となっている「CUDA 10.0」+「cuDNN 7.6.5」環境の構築をめざした記述になっていますが、 より広い意味で現時点で一般性の高い「Ubuntu 20.04 LTS」+「CUDA 10.0」+「cuDNN 7.6.5」+「NCCL 2.6.4」という環境を構築するための手引きとしてもご参照いただければ幸甚です。
上記手順にしたがってインストールすれば、だいたいうまくいくと思いますが、「CUDA」の動作に問題が発生するときは以下のパス設定(上記手順のなかで設定した「CUDA」関連ライブラリに関係する部分のみ)を再確認してみてください。
$ printenv
LD_LIBRARY_PATH=:/usr/local/cuda-10.0/lib64:/usr/local/cuda-10.0/extras/CUPTI/lib64:/usr/local/nccl-2.6/lib/:/usr/local/TensorRT-7.0.0/lib
CPATH=:/usr/local/cuda-10.0/include:/usr/local/nccl-2.6/include
PATH=/usr/local/cuda-10.0/bin



参考ウェブページ一覧表(順不同)
posted by hatakazu at 20:27| Comment(0) | Linuxとか | 更新情報をチェックする

「Ubuntu 20.04 LTS 日本語 Remix」のインストール、Windows10とのデュアルブート化

1. 基本的なOS構成設計
Inspiron14はWindows10プリインストールモデル、記憶領域は「SSD 128GB」+「HDD 1TB」で、最初は以下のようなかたちになっています。

「SSD 128GB」:起動ディスク、Windows Boot Manager -> Windows10起動。
「HDD 1TB」:データ領域。

今回は、「Ubuntu 20.04 LTS 日本語 Remix」をインストールして、「Windows10 Home 64bit」とのデュアルブート環境を構築します。
hatakazuは自宅では基本的にLinuxしか使わないので、デフォルトでUbuntu20.04が立ちあがるかたちにしておき、必要なときだけWindows10を起動できればO.K.です。
そのため、以下のような設計としました。

「SSD 128GB」:Windows Boot Manager -> Windows10起動。
「HDD 1TB」:起動ディスク、GRUB -> Ubuntu20.04起動。Windows10と共有するデータ領域。

GRUB画面でWindows Boot Managerを呼びだすことができるので、Windows10が必要な場合はそこから起動、通常は「Enter」キー押下によって(もしくは一定時間経過後に自動的に)Ubuntu20.04が立ちあがる仕様です。
この設計にしたおおきな理由は、「HDD 1TB」のUbuntu20.04環境が「SSD 128GB」のWindows10環境に依存してないため、Ubuntu20.04がわの設定変更やOS再インストールなどのさいにWindows10がわからなんの制約も受けないことです。
場合によっては、「HDD 1TB」を取りはずしたり交換したりしても、Windows10はまったく問題なく起動するわけです。
その意味で、非常に自由度が高く、hatakazuのようにいろいろ遊んでみたいひとにとっては最適なデュアルブート構成になっていると思います。
あらかじめWindows10上で

・回復ドライブの作成:「コントロールパネル」→「システムとセキュリティ」→「回復ドライブの作成」
・高速スタートアップの無効化:「コントロールパネル」→「ハードウェアとサウンド」→「電源オプション」→「システム設定」から「現在利用可能ではない設定を変更します」をクリック、「高速スタートアップを有効にする」のチェックをはずして設定を保存
・Ubuntu 20.04をインストールするスペースの確保:「コントロールパネル」→「システムとセキュリティ」→「ハードディスクパーティションの作成とフォーマット」

はすませておきます。
記憶装置は「SSD 128GB」+「HDD 1TB」なので、Linuxをインストールする領域として、「HDD 1TB」上におよそ700GBを確保しました。

2. 「Ubuntu 20.04 LTS 日本語 Remix」インストール用USBメモリの作成
Ubuntu Japanese Team」サイトから「Ubuntu Desktop 日本語 Remixのダウンロード」ページへいき、最新の長期サポート版日本語対応バージョン「Ubuntu 20.04 LTS 日本語 Remix」のイメージファイル「ubuntu-ja-20.04-desktop-amd64.iso」を取得します。
イメージファイルをダウンロードしたディレクトリへ移動して、USBメモリを挿入したあと、以下のコマンドでUSBメモリのデバイス名を確認します。

$ sudo fdisk -l


ハードディスク一台の構成であれば、USBメモリは「/dev/sdb」などに割りあてられていることが多いと思います。
USBメモリに余計なパーティションが設定してあると、インストールイメージを書きこむさいに失敗することがあるので、あらかじめパーティション構成を確認しておきます。

$ sudo fdisk /dev/sdb


「d」コマンドで既存パーティションを削除、「n」コマンドで新規パーティションを作成、USBメモリ全体をひとつの基本パーティションにしておきます。
イメージを書きこむためにはddコマンドを使用しますが、「if」オプションで対象となるイメージファイルを、「of」オプションで書きこみ先のデバイスを指定します。

$ sudo dd if=./ubuntu-ja-20.04-desktop-amd64.iso of=/dev/sdb


これで「Ubuntu 20.04 LTS 日本語 Remix」インストール用USBメモリができました。

3. 「Ubuntu 20.04 LTS 日本語 Remix」インストール
コンピュータを再起動して、Dellのロード画面が表示されているあいだに「F2」キーを押し、Setup Utilityを起動します。

・「Secure Boot Enable」項目をひらいて、「Disabled」を選択する。
・「Fastboot」検査をスキップしない設定にする。初期値のままでO.K.だった。
・「CSM」項目が存在しない。存在する場合は有効化しておく必要があると思う。
・「Virtualization」初期値で有効化されていたが、あえて無効化する必要もないので、そのままにした。Winsows10上で「VirtualBox」などの仮想化環境を使う場合は、有効化されていることを確認する。
・「POST Behavior」→「Fn Lock Options」にて、「Fn lock」にチェックをいれて、「Lock Mode Disabled/Standard」を選択する。

ここまでの設定を保存してUSBメモリを挿入のうえInspironを再起動し、「F12」を押下してBoot Menu画面を開いて、挿入したUSBメモリからブートします。
まずUSBイメージのファイルが壊れてないかチェックが走りますが、二度目以降は「Ctrl」+「C」キーを押してスキップすることができます。
表示される画面で「Ubuntuを試す」オプションを選択、デスクトップが表示されるところまでいけば、Ubuntu20.04がこのコンピュータ上で問題なく動作することが確認できたということです。
デスクトップ上にある「Ubuntu 20.04 のインストール」アイコンをダブルクリックして、インストールを開始します。
インストール手順は、たいていのLinuxディストリビューションでだいたいおなじような流れになっていますが、Ubuntu20.04の場合はとくにかんたんです。
ただし、Windows10とのデュアルブートにする場合は、「インストールの種類」画面ですこし気をつけないといけません。
「それ以外」ボタンにチェックをいれて「続ける」をクリック、パーティション設定画面へすすみます。
Ubuntu20.04をインストールする領域として「HDD 1TB」上におよそ700GBを確保したので、そのうち15GBていどを「swap area」に、残りをすべて「/」に割り当てることにします。
そしてブートローダは「HDD 1TB」のMBRにインストール、Setup Utilityで優先起動ドライブに設定して最初にGRUBが起動するようにし、必要なときだけGRUBからWindows Boot Managerを選択して「SSD 128GB」のWindows10を起動する設計でした。
そのため、「インストールの種類」画面では、最終的に以下のようなパーティション構成になります。

/dev/sda1 ntfs 300GBくらい(Ubuntu20.04とWindows10で共有するデータ領域)
/dev/sda2 ext4 / 680GBくらい
/dev/sda3 swap 15GBくらい

ブートローダをインストールするデバイス
/dev/sda


Windows10がプリインストールされている「SSD 128GB」は、「/dev/sdc」として認識されていますが、これにはまったくさわらずそのままにしておきます。
「インストール」をクリックすると、タイムゾーンやキーボードやユーザの設定をへて、インストールがはじまります。
インストールが終わったら、インストールメディアを抜いてから再起動するように指示されるので、UBSメモリを取りはずしてから「Enter」キーを押下してコンピュータをリブートさせます。
起動時に「F2」キーを押してSetup Utility画面を開き、「HDD 1TB」を優先起動するよう指定します。
それによってまずGRUB画面が開くようになるので、GRUB画面でUbuntu20.04(デフォルト)とWindows10(Windows Boot Managerを指定)を選択起動できる、設計どおりの仕様を実現したことになります。
Ubuntu20.04を起動、オープニング画面で登録したユーザを選んで設定したパスワードを入力すれば、Ubuntu20.04のデスクトップがあらわれるはずです。

4. 「Ubuntu 20.04 LTS 日本語 Remix」インストール後の設定
「Ubuntu 20.04 LTS 日本語 Remix」をインストールしたあと、hatakazuの使用形態にあわせて環境をととのえた部分を、以下に列挙しておきます。

・時刻設定
Windows10とのデュアルブート環境では、標準ではUCTとなるUbuntu20.04の時計を、Windows10とおなじ現地時間に設定する必要があります。
UCTのままだと、Windows10とUbuntu20.04をいったりきたりするたびに、時計がどんどんずれていってしまうからです。
以下のコマンドを実行することで、「/etc/adjtime」が作成されて、Ubuntu20.04を現地時間で動かすことができます。
UCTにもどすときは、最後の「1」を「0」にして、おなじコマンドを実行すればO.K.です。

$ sudo timedatectl set-local-rtc 1


・ターミナル
「Ctrl」+「Alt」+「T」で端末が開くので、ランチャにあらわれたアイコンを右クリックして、ランチャに固定しておきます。

・スーパーユーザのパスワード設定
以下のコマンドを実行し、必要になる場合にそなえて、あらかじめスーパーユーザのパスワードを設定しておきます。

$ sudo passwd root


・設定画面
dock位置変更、アイコンサイズ変更、タッチパッドのエッジスクロール有効化、など必要におうじて。

・Javaランタイムのインストール
せっかくなので、ランタイムをふくむ「Java Development Kit」をまるごとインストールしておきます。
Java SE Development Kit 14 Downloads」ページから「jdk-14.0.1_linux-x64_bin.tar.gz」をダウンロード、解凍して「/usr/lib/jdk-14.0.1」に設置します。

$ tar xzvf jdk-14.0.1_linux-x64_bin.tar.gz
$ sudo cp -r jdk-14.0.1 /usr/lib/jdk-14.0.1


そのあと、エディタで「~/.bashrc」に以下二行を追記して、パスをとおしておきます。

export JAVA_HOME=/usr/lib/jdk-14.0.1
export PATH=$PATH:$JAVA_HOME/bin


「$ java -version」コマンドを実行して、バージョン情報が正しく表示されれば、パスの設定はO.K.です。

・「google-chrome-stable」インストール
パソコン版Chrome」サイトで「Chromeをダウンロード」ボタンを押し、「64 bit .deb (Debian / Ubuntu 版)」を選択してから、「同意してインストール」ボタンを押します。
「google-chrome-stable_current_amd64.deb」ファイルをダウンロードしたら、ダウンロードしたフォルダへ移動して、以下のコマンドを入力してインストールします。
ターミナルから「google-chrome-stable」コマンドで起動できるようになるので、ランチャにあらわれたアイコンを右クリックして、ランチャに固定しておきます。

$ sudo apt install ./google-chrome-stable_current_amd64.deb


--別法--
$ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
$ sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$ sudo apt update
$ sudo apt install google-chrome-stable

--

「google-chrome-stable」を起動したときに、「NSS」の更新を要求するエラーメッセージが出た場合、要求されたパッケージをインストールすれば起動できるようになります。

$ sudo apt install libnss3


・「exfat」フォーマット対応
exfat形式のデバイス(SDカードなど)をあつかえるよう、必要なパッケージをインストールしておきます。

$ sudo apt install exfat-fuse exfat-utils


たとえばSDカードのデバイス名が「/dev/sd」だとしたら、「mkfs.exfat /dev/sd」コマンドで、SDカードをexfat形式でフォーマットできるようになります。

・「MTP」対応
Android端末とのMTP接続には、MTP関連のファイルをまとめてインストールします。

$ sudo apt install mtpfs mtp-tools gmtp


・「7z」対応
このごろサイズの大きいファイルを配布するのに、「7z」形式が増えてきているので、それに対応する「p7zip」パッケージをインストールします。
これにより、「$ p7zip -d xxxxx.7z」コマンドで「7z」形式のファイルを解凍できるようになります。

$ sudo apt install p7zip p7zip-full


・パッケージ管理ソフト「synaptic」
以下のコマンドでインストール、「$ synaptic」コマンドで起動して、これもランチャに固定しておきます。

$ sudo apt install synaptic


・音楽管理ソフト「rhythmbox」用プラグイン
「m4a」形式ファイルをサポートするために「streamer1.0-plugins-bad」を、「mp3」形式ファイルをサポートするために「gstreamer1.0-plugins-ugly」をインストールします。

$ sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly


・音楽管理ソフト「gtkpod」
初代iPod Shuffleに音楽ファイルを転送するため、「gtkpod」をインストールします。

$ sudo apt install gtkpod


初代iPod Shuffleが自動的に認識されないときは、「synaptic」を起動して、初代iPod Shuffleの認識を妨げている「libgpod-common」を削除してやればO.K.です。
iPodが認識されているのに「gtkpod」にロードできない場合は、一度iPod内のファイルをすべて削除してから「gtkpod」へつなぎ、「Tools」 -> 「Create iPod's Directories...」でiPod内のディレクトリを再構築する必要があるかもしれません。

・組版環境「texlive」および楽譜組版パッケージ「MusiXTeX」

$ sudo apt install texlive-lang-japanese texlive-music


・エディタ「emacs」

$ sudo apt install emacs emacs-mozc


・「emacs」で使うフォント

$ sudo apt install fonts-takao-gothic fonts-takao-mincho fonts-takao-pgothic
$ sudo rm /etc/fonts/conf.d/65-fonts-takao-*


・「skype」インストール

skypeをダウンロード」ページの「デスクトップ用skype」から「Skype for Linux DEBをダウンロード」を選択し、Ubuntu用インストールファイル「skypeforlinux-64.deb」を取得して、aptコマンドでインストールします。
インストール後は「skypeforlinux」コマンドで起動できます。
「Ubuntu Software」からインストールできる「skype」アプリケーションは、現時点で日本語でのチャットができないようなので、上記インストールを実行するのがおすすめです。

$ sudo apt install ./skypeforlinux-64.deb


・「zoom」インストール

ダウンロードセンター - Zoom」ページの「Linuxタイプ」から「Ubuntu」を選択し、「OSアーキテクチャ」は「64ビット」、「バージョン」は「16.04+」を選んで「ダウンロード」ボタンをクリック、Ubuntu用インストールファイル「zoom_amd64.deb」を取得して、aptコマンドでインストールします。
インストール後は「zoom」コマンドで起動できます。
ログイン時に自動的に起動するよう、「自動起動するアプリケーションの設定」から「/usr/bin/zoom」を登録しておいてもいいかもしれません。

$ sudo apt install ./zoom_amd64.deb



参考ウェブページ一覧表(順不同)

http://www.dell.com/support/home/jp/ja/jpdhs1/product-support/product/inspiron-14-7472-laptop/diagnose
http://www.dell.com/support/manuals/jp/ja/jpbsd1/inspiron-14-7472-laptop/inspiron-14-7472-servicemanual/inspiron-14-7000-サービスマニュアル
https://itsfoss.com/install-ubuntu-1404-dual-boot-mode-windows-8-81-uefi/
https://www.g104robo.com/entry/ubuntu-dualboot-win10-uefi
https://hnakamur.github.io/blog/2018/03/23/ubuntu-17.10-windows10-dual-boot/
posted by hatakazu at 19:24| Comment(0) | Linuxとか | 更新情報をチェックする

2020年05月17日

「Ubuntu 18.04 LTS 日本語 Remix」に「CUDA 10.0」+「TensorRT 7.0.0」をインストールする

コンピュータ囲碁プログラムの「GLOBIS-AQZ」が「GitHub」上でオープンソース化されたのを機に、自宅コンピュータの「CUDA」環境を一新することにしました。
Linux用およびWindows用の実行バイナリも配布されているので、基本的にはきちんと要件を満たす「CUDA」環境を構築できれば、問題なく「GLOBIS-AQZ」を動かすことができるはずです。

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 18.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10 Home 64bit) + 1TB 5400rpm HDD (Ubuntu 18.04 LTS 日本語 Remix)
--

2. 構築すべき「CUDA」環境
まずは目標設定ですが、最終的には「GLOBIS-AQZ」とFacebook「ELF OpenGo」を動かしたいと思っているので、それらが動作する「CUDA」環境を構築するということになります。
まず、「GLOBIS-AQZ」GitHubレポジトリの記述によれば、「GLOBIS-AQZ」の動作条件は以下のとおりです。

・OS : Windows 10, Linux (64-bit)
・GPU : Nvidia's GPU (Compute Capability >3.0)
・CUDA Toolkit 10.0 or 10.2
・TensorRT 7.0.0

「ELF OpenGo」のほうは、「ELF Opengo」GitHubレポジトリの記載によれば、動作保証しているのは以下の条件です。

・Ubuntu 18.04
・Python 3.7
・GCC 7.3
・CUDA 10.0
・CUDNN 7.3
・NCCL 2.1.2

とりあえずこれで動かしていたので間違いないというだけで、リソースの制限もあるので互換性の検証はしていないそうなので、じっさいにはもっとゆるやかな条件で動作するはずです。
「GLOBIS-AZQ」を動かすためには「TensorRT 7.0.0」の動作要件を満たす必要があるので、「Ubuntu 18.04」に「CUDA 10.0」+「cuDNN 7.6.5」+「NCCL 2.6.4」をインストールして、そこにさらに「TensorRT 7.0.0」を導入するという方針でいきたいと思います。
いずれ試行錯誤することになるとは思いますが、とりあえず以下の構成を基本に、作業をはじめてみることにしました。

・Ubuntu 18.04 LTS
・CUDA 10.0
・cuDNN 7.6.5
・NCCL 2.6.4
・TensorRT 7.0.0

3. NVIDIA製GPU「GeForce MX150」ドライバのインストール
今回作業するコンピュータはNVIDIA製GPU「GeForce MX150」を搭載しているので、まずはこのGPUに対応する最新のドライバをインストールします。
じっさいの作業はむずかしくありませんが、基本的な考えかたを学ぶうえで、「Ubuntu 16.04 LTSにNVIDIA製ドライバーをインストールする3つの方法」がたいへん参考になりました。
「Ubuntu 18.04 LTS 日本語 Remix」で「GeForce MX150」用ドライバをインストールするには、「ソフトウェアとアップデート」を起動し、「追加のドライバー」タブを開きます。
すこし時間がかかって、使用できるドライバの一覧が表示されます。
型式が「NVIDIA Corporation: GP108M [GeForce MX150]」と表示されているのを確認して、いくつか選択肢が示されたら基本的に最新のものを選択します。
2020年5月14日現在の最新バージョンは「440」なので、「NVIDIA driver metapackageをnvidia-driver-440から使用します(プロプライエタリ、検証済み)」ボタンにチェックをいれます。
その状態で「変更の適用」をクリックすると、インストール処理がはじまりますが、終わるまでじゃっかん時間がかかります。
インストール処理が終わったら、「閉じる」をクリックして「ソフトウェアとアップデート」ウインドウを閉じてからシステムを再起動すると、標準の「Nouveau」ドライバではなくNVIDIA製「nvidia-440」ドライバで立ちあがります。
ターミナルをひらいて、「$ nvidia-smi」コマンドをたたいてみて、ドライバのバージョンやGPUの型式が正しく表示されることを確認しておきます。

$ nvidia-smi


デスクトップ関連の設定は、「$ nvidia-settings」コマンドを使って、グラフィカルにおこなうことができます。

$ nvidia-settings


設定内容は「⁠~/.nvidia-settings-rc」に保存され、ログインのたびに「/etc/xdg/autostart/nvidia-settings-autostart.desktop」がこの設定内容を読みこんで、反映させる仕組みです。
NVIDIA製「nvidia-440」ドライバのドキュメント類は、「⁠/usr/share/doc/nvidia-driver-440/index.html」に保管されています。
インストールしたNVIDIA製ドライバのバージョンは、以下のコマンドで確認できます。

$ cat /proc/driver/nvidia/version


4. 「CUDA 10.0」インストールまえの準備作業
「CUDA 10.0」をインストールする方法はいくつかありますが、NVIDIAウェブサイト「CUDA Toolkit 10.0 Archive」ページからUbuntu18.04用runファイル「cuda_10.0.130_410.48_linux.run」をダウンロードして、手動で「CUDA 10.0」をインストールすることにしました。
やってみてからの感想ですが、いろいろなところで互換性の問題がおこりやすい「CUDA」関連ライブラリについては、結果的にrunファイルでインストールして手動でバージョンを管理するのが一番いいと思います。
パッケージの競合という問題がないので、複数のバージョンをインストールしたうえで、パスとショートカットでバージョンを切りかえて使う、ということができるのもおおきなメリットといえます。
GPUドライバのみ別途Ubuntuパッケージで管理したうえで、ツールキットをrunファイルからインストールするだけなら、すべての処理をグラフィカルログイン状態で完了でき、システムに致命的なダメージをあたえかねないむずかしいプロセスもありません。

NVIDIA CUDA Installation Guide for Linux」ページの指示にしたがって、「CUDA 10.0」をインストールするまえに必要な確認作業、準備作業をおこないます。

「CUDA 10.0」に対応したGPUの確認。
$ lspci | grep -i nvidia
01:00.0 3D controller: NVIDIA Corporation GP108M [GeForce MX150] (rev a1)


Linux OSの対応状況確認。「Ubuntu 18.04 LTS」は対応ディストリビューションのリストにはいっているので、このまますすめていきます。
$ uname -m && cat /etc/*release
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic


コンパイラの存在およびバージョンを確認。「CUDA 10.0」は「Ubuntu 18.04 LTS」に対応していて、「gcc-7」と 互換性があるので問題ありません。
$ gcc --version
gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Linuxカーネルのバージョン確認。
$ uname -r
4.15.0-99-generic


Linuxカーネルのヘッダと開発キットをインストール。
$ sudo apt-get install linux-headers-$(uname -r)


5. 「CUDA 10.0」のインストール
CUDA Toolkit 10.0 Archive」ページで「Linux」「x86_64」「Ubuntu」「18.04」「runfile (local)」を選択し、「Download Installers for Linux Ubuntu 18.04 x86_64」タブを開きます。
「Base Installer」「Patch 1 (Released May 10, 2019)」それぞれの「Download」ボタンを押して、「cuda_10.0.130_410.48_linux.run」「cuda_10.0.130.1_linux.run」をダウンロードします。
ファイルをダウンロードしたディレクトリへ移動し、ベースインストーラのrunファイルに実行権限を付与してから、「sudo」で実行します。
長い使用許諾書を「Enter」キーを押して全部表示してから「accept」し、「Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?」には、すでに最新ドライバ「440」をインストールしているので「no」と回答します。
「Install the CUDA 10.0 Toolkit?」に「yes」と回答し、「/usr/local/cuda-10.0」にライブラリをインストールのうえ「/usr/local/cuda」からシンボリックリンクをはり、動作確認のためのサンプルファイルは「~/NVIDIA_CUDA-10.0_Samples」にコピーする設定にします。

$ chmod +x cuda_10.0.130_410.48_linux.run
$ sudo ./cuda_10.0.130_410.48_linux.run

Do you accept the previously read EULA?
accept/decline/quit: accept

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: no

Install the CUDA 10.0 Toolkit?
(y)es/(n)o/(q)uit: yes

Enter Toolkit Location
[ default is /usr/local/cuda-10.0 ]:

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: yes

Install the CUDA 10.0 Samples?
(y)es/(n)o/(q)uit: yes

Enter CUDA Samples Location
[ default is /home/username ]:

Installing the CUDA Toolkit in /usr/local/cuda-10.0 ...
Installing the CUDA Samples in /home/username ...
Copying samples to /home/username/NVIDIA_CUDA-10.0_Samples now...
Finished copying samples.

===========
= Summary =
===========

Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-10.0
Samples: Installed in /home/username

Please make sure that
- PATH includes /usr/local/cuda-10.0/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-10.0/lib64, or, add /usr/local/cuda-10.0/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-10.0/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.0/doc/pdf for detailed information on setting up CUDA.

***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 10.0 functionality to work.
To install the driver using this installer, run the following command, replacing with the name of this run file:
sudo .run -silent -driver

Logfile is /tmp/cuda_install_4325.log


ベースインストーラのインストール処理が終わったら、パッチをあてていきます。
「CUDA 10.0 Toolkit」をインストールしたディレクトリ「/usr/local/cuda-10.0」をターゲットに、パッチファイルを実行するだけです。

chmod +x cuda_10.0.130.1_linux.run
$ sudo ./cuda_10.0.130.1_linux.run

Do you accept the previously read EULA?
accept/decline/quit: accept

Enter CUDA Toolkit installation directory
[ default is /usr/local/cuda-10.0 ]:

Installation complete!
Installation directory: /usr/local/cuda-10.0


ここまでの作業が終わったら、「~/.bashrc」に以下二行を追加して、パスをとおしておきます。

export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}


あるいは、以下のようなかたちで「CUDA_HOME」変数を使ってもO.K.です。

# CUDA 10.0 path
export CUDA_HOME="/usr/local/cuda-10.0"
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_HOME/lib64:/usr/lib/x86_64-linux-gnu/
export CPATH=$CPATH:$CUDA_HOME/include


いったんターミナルを閉じるか、「$ source ~/.bachrc」コマンドを実行して、パスの変更を反映させます。
いくつかライブラリがたりない(「libGLU.so」「libX11.so」「libXi.so」「libXmu.so」「libGL.so」など)ことがあるので、必要な場合はあとで該当パッケージをインストールし、パスのとおった「/usr/lib」からライブラリファイルへシンボリックリンクをはっておけば問題ありません。

$ sudo apt install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev


ここまででインストール作業は完了です。
以下のコマンドを実行して、インストールした「CUDA 10.0」のバージョンが正しく表示されることを確認します。

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130


問題なければ、サンプルのビルドを実行します。
$ cd ~/NVIDIA_CUDA-10.0_Samples
$ make


ビルド処理が終わったら、「~/NVIDIA_CUDA-10.0_Samples/bin/x86_64/linux/release/」以下に「deviceQuery」が生成するので、それを実行してみます。

$ ~/NVIDIA_CUDA-10.0_Samples/bin/x86_64/linux/release/deviceQuery


デバイスが検出され、「Result = PASS」と表示されていれば、インストールは正常に完了しています。

NVIDIA公式インストール手順書にも記載がありますが、「CUDA Toolkit 10.0」をrunfileを使ってインストールしたときは、以下のスクリプトを実行することでアンインストールできます。

$ sudo /usr/local/cuda-10.0/bin/uninstall_cuda_10.0.pl


なお、今回のインストール方法では必要ありませんが、NVIDIA製ドライバをrunfileを使ってインストールしたときのアンインストールコマンドは以下のとおりです。

$ sudo /usr/bin/nvidia-uninstall


6. 「cuDNN 7.6.5」のインストール
基本的には、NVIDIA公式の「cuDNN Installation Guide」の指示にしたがって、インストール作業をすすめていきます。
まず「cuDNN Download」ページへいき、必要におうじてログインしたうえで、「I Agree To the Terms of the cuDNN Software License Agreement」にチェックをいれます。
ここで「Download cuDNN」をクリックして、「cuDNN Download」ページへ飛び、「Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.0」をクリックしてタブをひらきます。
一覧表のなかから「cuDNN Library for Linux」をクリックして、「cudnn-10.0-linux-x64-v7.6.5.32.tgz」をダウンロードします。
ダウンロードしたディレクトリへ移動してファイルを解凍のうえ、「CUDA 10.0」ライブラリをインストールした「/usr/local/cuda-10.0」ディレクトリ以下に配置し、読み込み権限をあたえておきます。

$ tar -xzvf cudnn-10.0-linux-x64-v7.6.5.32.tgz
cuda/include/cudnn.h
cuda/NVIDIA_SLA_cuDNN_Support.txt
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.7
cuda/lib64/libcudnn.so.7.6.5
cuda/lib64/libcudnn_static.a
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*


「cuDNN」ライブラリの配置が完了したら、以下のコマンドで正しく配置されているかどうか確認します。

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 5
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

#include "driver_types.h"


インストールしたバージョン「7.6.5」が正しく表示されれば、問題ありません。
最後に、debian package「cuDNN Code Samples and User Guide for Ubuntu18.04 (Deb)」をクリックしてダウンロードした「libcudnn7-doc_7.6.5.32-1+cuda10.0_amd64.deb」からサンプルを抽出、ビルドしてみます。

$ dpkg-deb -x libcudnn7-doc_7.6.5.32-1+cuda10.0_amd64.deb ./
$ cp -r usr/src/cudnn_samples_v7/ ~/
$ cd ~/cudnn_samples_v7/mnistCUDNN
$ make clean && make
$ ./mnistCUDNN

.....
Test passed!


「Test passed!」と表示が出れば、「cuDNN 7.6.5」のインストール作業は完了しています。

7. 「NCCL 2.6.4」のインストール
「NCCL 2.6.4」をインストールするには、NVIDIA公式の「NCCL 2.6.4 Installation Guide」にしたがって、作業をすすめます。

まず「NVIDIA Collective Communications Library (NCCL) Download Page」へいき、必要におうじてログインしたうえで、「I Agree To the Terms of the Software License Agreement」にチェックをいれます。
「Download NCCL v2.6.4, for CUDA 10.0, March 26,2020」をクリックしてタブをひらき、「O/S agnostic local installer」をクリックして、「nccl_2.6.4-1+cuda10.0_x86_64.txz」をダウンロードします。
ダウンロードしたディレクトリに移動したら、ファイルを解凍のうえ、「/usr/local/nccl-2.6」ディレクトリ以下へ配置します。

$ tar xvf nccl_2.6.4-1+cuda10.0_x86_64.txz
nccl_2.6.4-1+cuda10.0_x86_64/include/
nccl_2.6.4-1+cuda10.0_x86_64/include/nccl_net.h
nccl_2.6.4-1+cuda10.0_x86_64/include/nccl.h
nccl_2.6.4-1+cuda10.0_x86_64/lib/
nccl_2.6.4-1+cuda10.0_x86_64/lib/pkgconfig/
nccl_2.6.4-1+cuda10.0_x86_64/lib/pkgconfig/nccl.pc
nccl_2.6.4-1+cuda10.0_x86_64/lib/libnccl.so
nccl_2.6.4-1+cuda10.0_x86_64/lib/libnccl.so.2
nccl_2.6.4-1+cuda10.0_x86_64/lib/libnccl_static.a
nccl_2.6.4-1+cuda10.0_x86_64/lib/libnccl.so.2.6.4
nccl_2.6.4-1+cuda10.0_x86_64/LICENSE.txt
$ sudo cp -r nccl_2.6.4-1+cuda10.0_x86_64 /usr/local/nccl-2.6


最後に、「.bashrc」に以下の行を追加し、「/usr/local/nccl-2.6」へパスをとおしておきます。

export NCCL_ROOT="/usr/local/nccl-2.6"
export CPATH=$CPATH:$NCCL_ROOT/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NCCL_ROOT/lib/
export LIBRARY_PATH=$LIBRARY_PATH:$NCCL_ROOT/lib/


いったんターミナルを閉じるか、「$ source ~/.bachrc」コマンドを実行して、パスの変更を反映させます。

8. 「TensorRT 7.0.0」インストール
「GLOBIS-AZQ」では「TensorRT 7.0.0」がサポートされています。

NVIDIA TensorRT 7.x Download
」ページへいき、必要におうじてログインしたうえで、「I Agree To the Terms of the Software License Agreement」にチェックをいれます。
「Tar File Install Packages」リストのなかの「TensorRT 7.0.0.11 for Ubuntu 18.04 and CUDA 10.0 tar package」をクリックして、「TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz」ファイルをダウンロードします。
ダウンロードしたディレクトリへ移動して、ファイルを解凍のうえ、適当なディレクトリ(ここでは「/usr/local/TensorRT-7.0.0」)に配置します。

$ tar xzvf TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz
$ sudo cp -r TensorRT-7.0.0.11 /usr/local/TensorRT-7.0.0


「.bashrc」に以下の行を追加し、「TensorRT-7.0.0」ディレクトリへパスをとおしておきます。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/TensorRT-7.0.0/lib


あとは、NVIDIA公式の「TensorRT 7.0.0 Installation Guide」の手順どおり、「Python TensorRT」「Python UFF」「Python graphsurgeon」パッケージをインストールします。
「TensorRT 7.0.0」をインストールしたディレクトリの「samples/sampleMNIST/」へいき、サンプルをmakeしてみます。
「TensorRT 7.0.0」をインストールしたディレクトリの「bin」に「sample_mnist」ができているので、これを実行して「TensorRT 7.0.0」が正しくインストールされていることを確認します。
この生成したサンプルファイルをきちんと動かすためには、あらかじめ「data/mnist/download_pgms.py」を実行しておく必要があるかもしれません。

9. 「CUPTI」パス登録
「CUPTI」は「CUDA 10.0 Toolkit」にふくまれているため、あらためてインストールする必要はありませんが、パスをとおしておく必要はあります。
「.bashrc」に以下の一行を追加し、いったんターミナルを閉じるか「$ source ~/.bachrc」コマンドを実行するかして、パスの変更を反映させます。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/extras/CUPTI/lib64


以上で、「Ubuntu 18.04 TLS」上に「CUDA 10.0」+「TensorRT 7.0.0」環境を構築する作業は完了し、「GLOBIS-AQZ」を導入する準備がととのったことになります。
最初から「GLOBIS-AZQ」を動かすことが目的なので、動作要件となっている「CUDA 10.0」+「TensorRT 7.0.0」環境の構築をめざした記述になっていますが、 より広い意味で現時点で一般性の高い「Ubuntu 18.04 LTS」+「CUDA 10.0」+「cuDNN 7.6.5」+「NCCL 2.6.4」という環境を構築するための手引きとしてもご参照いただければ幸甚です。
上記手順にしたがってインストールすれば、だいたいうまくいくと思いますが、「CUDA」の動作に問題が発生するときは以下のパス設定(上記手順のなかで設定した「CUDA」関連ライブラリに関係する部分のみ)を再確認してみてください。
$ printenv
LD_LIBRARY_PATH=:/usr/local/cuda-10.0/lib64:/usr/local/cuda-10.0/extras/CUPTI/lib64:/usr/local/nccl-2.6/lib/:/usr/local/TensorRT-7.0.0/lib
CPATH=:/usr/local/cuda-10.0/include:/usr/local/nccl-2.6/include
PATH=/usr/local/cuda-10.0/bin



参考ウェブページ一覧表(順不同)
posted by hatakazu at 17:32| Comment(0) | Linuxとか | 更新情報をチェックする

2020年05月06日

「Ubuntu 18.04 LTS 日本語 Remix」でBluetoothマウスを使う

Ubuntu Forum」に以下のスレッドが立っていて、そこに記載されているとおりの手順を実行することで、電源オン/オフやログイン/アウト後も問題なくBluetoothマウスが使えるようになりました。

Bluetooth Mouse Won't Connect after Reboot - Ubuntu 18.04 LTS

じっさいに入力したコマンドと、そのコマンドの動作を確認するために重要なメッセージだけ、以下に書き出しておきます。


username@machinename $ bluetoothctl

[bluetooth]# list
Controller XX:XX:XX:XX:XX:XX machinename [default]

[bluetooth]# select XX:XX:XX:XX:XX:XX

[bluetooth]# show
Controller XX:XX:XX:XX:XX:XX (public)
......

[bluetooth]# power on
Changing power on succeeded

[bluetooth]# scan on
Discovery started
[CHG] Controller XX:XX:XX:XX:XX:XX Discovering: yes
[NEW] Device YY:YY:YY:YY:YY:YY Bluetooth Mouse
......

[bluetooth]# scan off
[CHG] Controller XX:XX:XX:XX:XX:XX Discovering: no
Discovery stopped

[bluetooth]# agent on
Agent registered
......

[bluetooth]# pair YY:YY:YY:YY:YY:YY
Pairing successful
......

[bluetooth]# connect YY:YY:YY:YY:YY:YY
Connection successful
......

[bluetooth]# trust YY:YY:YY:YY:YY:YY
Trust succeeded
......

[bluetooth]# exit

posted by hatakazu at 07:37| Comment(0) | Linuxとか | 更新情報をチェックする

2018年07月30日

「Ubuntu 18.04 LTS 日本語 Remix」に「TensorFlow」をソースからインストールする

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 18.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10) + 1TB 5400rpm HDD (Ubuntu18.04)
--

ここでは、「Python 3.6」仮想環境にGPU版「TensorFlow」をソースからインストールするものとして、インストールまえに必要になる準備作業について記述します。
CPU版「TensorFlow」をインストールする場合は、GPUサポートのために必要になる「CUDA」関連の部分、および「GCC 4.8」設定の部分は無視してください。

・Google製ビルドツール「Bazel」インストール
「TensorFlow」をビルドするためには、「Bazel」というビルドツールを使います。
Install TensorFlow From Souces」ページ下のほうにある動作検証環境一覧表によると、「tensorflow_gpu-1.8.0」については、「Bazel 0.9.0」と記載されています。
ここでは、「Bazel 0.11.1」がインストールされているものとします。

・「python3-numpy」「python3-dev」「python3-pip」「python3-wheel」インストール
「TensorFlow」をソースからインストールするさい、必要になる「Python 3」パッケージをあらかじめインストールしておきます。

$ sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel


・GPUサポート
Install TensorFlow From Souces」ページ下のほうにある動作検証環境一覧表によると、「tensorflow_gpu-1.8.0」については、「CUDA 9」「cuDNN 7」と記載されています。
ここでは、「CUDA 9.0」+「cuDNN 7.0」が「/usr/local/cuda-9.0」ディレクトリへ、「NCCL 2.1」が「/usr/local/nccl-2.1」ディレクトリへ、「TensorRT 3.0.4」が「/usr/local/TensorRT-3.0.4」ディレクトリへインストールされ、そこへのパスがとおっているものとします。
「CUPTI」は「CUDA 9.0 Toolkit」にふくまれているため、あらためてインストールする必要はありませんが、パスをとおしておく必要はあります。

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.0/extras/CUPTI/lib64


・「GCC 4.8」準備
Install TensorFlow From Souces」ページ下のほうにある動作検証環境一覧表によると、「tensorflow_gpu-1.8.0」については、「GCC 4.8」と記載されています。
Ubuntu18.04標準の「gcc-7」では、GPU版「TensorFlow」をソースからビルドすることはできず、かわりに「gcc-4.8」を使う必要があります。
そのため、「gcc-4.8」「g++-4.8」をインストールのうえ「update-alternatives」コマンドを使って「gcc-7」「g++-7」より優先順位をあげて、一時的に自動モードで「gcc-4.8」「g++-4.8」が使われるように設定します。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70

$ sudo apt-get install gcc-4.8 g++-4.8

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 80
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 80


なお「gcc-4.8」でビルドするさいには、エディタで「/usr/include/x86_64-linux-gnu/c++/4.8/bits/c++config.h」ファイルをひらいて、以下の二行を追加しておきます。

#define _GLIBCXX_USE_C99 1
#define _GLIBCXX_USE_C99_MATH 1


上記はGPU版「TensorFlow」をソースからインストールするさいに必要な特殊設定なので、GPU版「TensorFlow」のインストール作業が終わったら「gcc-4.8」「g++-4.8」の優先順位をさげて、自動モードでシステム標準の「gcc-7」「g++-7」が使われるように設定をもどしておきます。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 48
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 48


「GCC 5」以降のバージョンでGPU版「TensorFlow」をソースからインストールする場合は、「bazel build --config=opt --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" --config=cuda」などのように、「--cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"」を追加してビルドする必要があります。
これによって、「GCC 5」以降でパッケージをビルドするさいに、古いABIを使う「GCC 4」でビルドされたバイナリとの互換性をたもつことができます。

最終的に、「TensorFlow」をソースからインストールするためにととのえた環境は、以下のようになっています。

・Ubuntu 18.04 LTS 日本語 Remix
・CUDA 9.0 -> /usr/local/cuda-9.0
・cuDNN 7.0.5 -> /usr/lcoal/cuda-9.0
・NCCL 2.1.15 -> /usr/local/nccl-2.1
・Bazel 0.11.1
・TensorFlow 1.8.0 -> 「1.9.0」以降のバージョンをビルドするには「Bazel 0.13」以降が必要になるため、ここでは「Bazel 0.11」と互換性のある「1.8.0」を使う。
・GCC 4.8

2. 「TensorFlow」ソース取得
ここでは、「~/tensorflow」ディレクトリにソースを取得するものとして、インストール作業をすすめていきます。
「TensorFlow」の最新バージョンは「1.9.0」ですが、今回は互換性の観点から「1.8.0」を採用することにして、以下のコマンドを実行します。

$ cd
$ git clone https://github.com/tensorflow/tensorflow
$ cd tensorflow
$ git checkout v1.8.0
$ git submodule update --init --recursive


3. 「TensorFlow」環境設定
まずは、「TensorFlow」をインストールする環境にあわせて設定していきます。

$ ./configure


Pythonのバージョン「/usr/bin/python3.6」とライブラリのパスを指定したあと、たくさん質問がつづきますが、以下の項目だけはしっかりと確認してください。

・CPU版:「jemalloc」と「XLA」を有効化する。
・GPU版:「CUDA」サポートを有効化し、「CUDA 9.0 /usr/local/cuda-9.0」「cuDNN 7.0 /usr/local/cuda-9.0」「NCCL 2.1 /usr/local/nccl-2.1」「TensorRT 3.0.4 /usr/local/TensorRT-3.0.4」のバージョンとパスを指定する。

4. pipパッケージ作成
「TensorFlow」環境設定が終わったら、環境にあった「TensorFlow」をインストールするためのpipパッケージを作成していきます。
あらかじめインストールしておいた「Bazel 0.11.1」を使って、ソースからビルドしていきますが、GPUサポートの有無によって指定するオプションがかわってきます。

・CPU版
Intel MKL-DNNサポートなし
$ bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

Intel MKL-DNNサポートあり
$ bazel build --config=mkl --config=opt //tensorflow/tools/pip_package:build_pip_package


・GPU版
$ bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package


上記「bazel build」コマンドによって、「~/tensorflow/bazel-bin/tensorflow/tools/pip_package/」ディレクトリ以下に「build_pip_package」スクリプトが生成しています。
つづいて、以下のコマンドを実行することで、「/tmp/tensorflow_pkg」以下に.whlファイルを出力することができます。
「/tmp/tensorflow_pkg」は、「~/worktable」など、すきなディレクトリに変更してかまいません。

$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg


上記コマンドを実行した結果として、「/tmp/tensorflow_pkg」ディレクトリ以下に、pipパッケージ「tensorflow-1.8.0-cp36-cp36m-linux_x86_64.whl」が生成します。

5. pipパッケージのインストール
Install TensorFlow on Ubuntu」で推奨されている手順にしたがって、Python環境管理ツール「Virtualenv」を利用して「Ptyhon 3.6」仮想環境を作成し、そのなかに「TensorFlow」をインストールしていきます。
ここでは、「~/virtualenv」ディレクトリ以下に、「Python 3.6」仮想環境「py3」を作成します。

$ sudo apt-get install python3-pip python3-dev python-virtualenv
$ sudo pip install -U pip
$ mkdir ~/virtualenv
$ cd ~/virtualenv
$ virtualenv --system-site-packages -p /usr/bin/python3.6 py3


作成した仮想環境「py3」を有効化し、「TensorFlow」ソースから生成したpipパッケージをインストールします。

$ source py3/bin/activate
(py3) $ pip update -U pip
(py3) $ pip install /tmp/tensorflow_pkg/tensorflow-1.8.0-cp36-cp36m-linux_x86_64.whl


6. 「TensorFlow」インストールの検証
ここで、「TensorFlow」が正しくインストールされているかどうか、検証しておきます。
「~/virtualenv」ディレクトリへ移動し、「TensorFlow」をインストールした「Python 3.6」仮想環境「py3」を有効化したうえで、「Python 3.6」シェルをひらきます。

$ cd ~/virtualenv
$ source py3/bin/activate
(py3) $ python


「Python 3.6」シェルで以下のようなコマンドをたたいていき、「Hello, TensorFlow!」と出力されれば、「TensorFlow」のインストールは正常に完了しています。

# Python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))


7. pipパッケージのアンインストール、および仮想環境の削除
仮想環境「py3」にインストールした「TensorFlow」pipパッケージをアンインストールするには、仮想環境「py3」が有効化された状態で、以下のコマンドを実行します。

(py3) $ pip uninstall tensorflow


この仮想環境「py3」じたいが不要になった場合は、仮想環境「py3」を無効化したうえで、「~/virtualenv」ディレクトリ以下の「py3」ディレクトリをそのまま削除してしまいます。

(py3) $ deactivate
$ rm -r ~/virtualenv/py3



参考ウェブページ一覧表(順不同)

https://www.tensorflow.org/
https://www.tensorflow.org/install/
https://www.tensorflow.org/install/install_linux
https://www.tensorflow.org/install/install_sources
https://github.com/tensorflow/tensorflow
posted by hatakazu at 22:24| Comment(0) | Linuxとか | 更新情報をチェックする

2018年07月23日

「Ubuntu 18.04 LTS 日本語 Remix」に「TensorFlow」バイナリをインストールする

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 18.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10) + 1TB 5400rpm HDD (Ubuntu18.04)
--

ここでは、「Python 3.6」仮想環境にGPU版「TensorFlow」をバイナリインストールするものとして、インストールまえに必要になる準備作業について記述します。
CPU版「TensorFlow」をインストールする場合は、GPUサポートのために必要になる「CUDA」関連の部分は無視してください。

・「python3-pip」「python3-dev」インストール
「TensorFlow」バイナリをインストールするさい、必要になる「Python 3」パッケージをあらかじめインストールしておきます。

$ sudo apt-get install python3-pip python3-dev


・GPUサポート
ここでは、「CUDA 9.0」+「cuDNN 7.0」が「/usr/local/cuda-9.0」ディレクトリへインストールされ、そこへのパスがとおっているものとします。
「CUPTI」は「CUDA 9.0 Toolkit」にふくまれているため、あらためてインストールする必要はありませんが、パスをとおしておく必要はあります。

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.0/extras/CUPTI/lib64


2. 「TensorFlow」pipパッケージのインストール
Install TensorFlow on Ubuntu」で推奨されている手順にしたがって、Python環境管理ツール「Virtualenv」を利用して「Ptyhon 3.6」仮想環境を作成し、そのなかに「TensorFlow」をインストールしていきます。
ここでは、「~/virtualenv」ディレクトリ以下に、「Python 3.6」仮想環境「py3」を作成します。

$ sudo apt-get install python3-pip python3-dev python-virtualenv
$ sudo pip install -U pip
$ mkdir ~/virtualenv
$ cd ~/virtualenv
$ virtualenv --system-site-packages -p /usr/bin/python3.6 py3


作成した仮想環境「py3」を有効化し、必要におうじて「pip」を最新のものに更新しておきます。

$ source py3/bin/activate
(py3) $ pip update -U pip


必要な仕様におうじて、該当する「TensorFlow」pipパッケージをインストールします。

・CPU版「TensorFlow」インストールのためのpipコマンド

(py3) $ pip install -U tensorflow

もしくは、バージョンなどを指定するさいは、該当するリモートURLを使います。
(py3) $ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.9.0-cp36-cp36m-linux_x86_64.whl


・GPU版「TensorFlow」インストールのためのpipコマンド

(py3) $ pip install -U tensorflow-gpu

もしくは、バージョンなどを指定するさいは、該当するリモートURLを使います。
(py3) $ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.9.0-cp36-cp36m-linux_x86_64.whl


3. 「TensorFlow」インストールの検証
ここで、「TensorFlow」が正しくインストールされているかどうか、検証しておきます。
「~/virtualenv」ディレクトリへ移動し、「TensorFlow」をインストールした「Python 3.6」仮想環境「py3」を有効化したうえで、「Python 3.6」シェルをひらきます。

$ cd ~/virtualenv
$ source py3/bin/activate
(py3) $ python


「Python 3.6」シェルで以下のようなコマンドをたたいていき、「Hello, TensorFlow!」と出力されれば、「TensorFlow」のインストールは正常に完了しています。

# Python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))


4. pipパッケージのアンインストール、および仮想環境の削除
仮想環境「py3」にインストールした「TensorFlow」pipパッケージをアンインストールするには、仮想環境「py3」が有効化された状態で、以下のコマンドを実行します。

(py3) $ pip uninstall tensorflow


この仮想環境「py3」じたいが不要になった場合は、仮想環境「py3」を無効化したうえで、「~/virtualenv」ディレクトリ以下の「py3」ディレクトリをそのまま削除してしまいます。

(py3) $ deactivate
$ rm -r ~/virtualenv/py3



参考ウェブページ一覧表(順不同)

https://www.tensorflow.org/
https://www.tensorflow.org/install/
https://www.tensorflow.org/install/install_linux
https://www.tensorflow.org/install/install_sources
https://github.com/tensorflow/tensorflow
posted by hatakazu at 21:28| Comment(0) | Linuxとか | 更新情報をチェックする

2018年07月21日

「Ubuntu 18.04 LTS 日本語 Remix」に「CUDA 9.0」+「cuDNN 7.0」をインストールする

コンピュータ囲碁プログラムのFacebook「ELF OpenGo」やTencent「PhoenixGo」を動かしてみたくて、そのためにわざわざ外部GPU搭載のラップトップを購入したようなものなので、なんとか「Ubuntu 18.04 LTS 日本語 Remix」上に「CUDA」環境を構築してみたいと思っています。
そのうえで、GPU版「PyTorch」やGPU版「TensorFlow」を導入して、最終的にはFacebook「ELF OpenGo」やTencent「PhoenixGo」を動かすことをめざします。

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 18.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10 Home 64bit) + 1TB 5400rpm HDD (Ubuntu 18.04 LTS 日本語 Remix)
--

2. 構築すべき「CUDA」環境
まずは目標設定ですが、最終的には「ELF OpenGo」と「PhoenixGo」を動かしたいわけなので、それらが動作する「CUDA」環境を構築するということになります。
まず、「ELF Opengo」GitHubレポジトリの記載によれば、「ELF OpenGo」は以下の条件で動いていたようです。

・Ubuntu 18.04
・Python 3.6
・GCC 7.3
・CUDA 9.0
・CUDNN 7.0
・NCCL 2.1.2

とりあえずこれで動いたというだけで、人手不足のため互換性の検証はしていないそうなので、じっさいにはもっとゆるやかな条件で動作するはずではあります。
でもまあ基本的に、「Ubuntu 18.04」に「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」をインストールして、Facebookが開発している機械学習フレームワーク「PyTorch」のGPU版を導入する、という方針でいきたいと思います。
「PyTorch」はいろいろな方法でインストールできますが、「ELF OpenGo」を動かすためにはソースからインストールする必要がある可能性もあり、ソースからのインストールにさいして推奨されている「Anaconda」環境をあらかじめ構築しておきます。

それに対して、「PhoenixGo」GitHubレポジトリのほうでは、以下のようにしか書かれていません。

・GCC with C++11 support
・Bazel (0.11.1 is known-good)
・(Optional) CUDA and cuDNN (for GPU support)
・(Optional) TensorRT (for accelerating computation on GPU, 3.0.4 is known-good)

Windowsバイナリのインストールは「CUDA 9.0」+「cuDNN 7.1.4」を前提としていたのですが、現時点ではとりあえず、互換性の高そうな「CUDA 9.0」+「cuDNN 7.0」のほうでいってみたいと思います。
オプションで「TensorRT 3.0.4」をためしてみるとしても、「CUDA 9.0」+「cuDNN 7.0」環境はサポートされているようなので。
「PhoenixGo」のほうは、Google開発の機械学習フレームワーク「TensorFlow」で動いているため、おなじくGoogle開発のビルドツール「Bazel」をあらかじめインストールしておきます。

いずれ試行錯誤することになるとは思いますが、とりあえず以下の構成を基本に、作業をはじめてみることにしました。

・Ubuntu 18.04 LTS
・CUDA 9.0
・cuDNN 7.0.5
・NCCL 2.1.15
・PyTorch 0.4.0(ソースからインストール)
・Anaconda3 5.2.0
・TensorFlow 1.8.0(ソースからインストール)
・Bazel 0.11.1
・TensorRT 3.0.4(オプション)

3. NVIDIA製GPU「GeForce MX150」ドライバのインストール
今回作業するコンピュータはNVIDIA製GPU「GeForce MX150」を搭載しているので、まずはこのGPUに対応する最新のドライバをインストールします。
じっさいの作業はむずかしくありませんが、基本的な考えかたを学ぶうえで、「Ubuntu 16.04 LTSにNVIDIA製ドライバーをインストールする3つの方法」がたいへん参考になりました。
「Ubuntu 18.04 LTS 日本語 Remix」で「GeForce MX150」用ドライバをインストールするには、「ソフトウェアとアップデート」を起動し、「追加のドライバー」タブを開きます。
すこし時間がかかって、使用できるドライバの一覧が表示されます。
型式が「NVIDIA Corporation: GP108M [GeForce MX150]」と表示されているのを確認して、「NVIDIA driver metapackageをnvidia-driver-390から使用します(プロプライエタリ、検証済み)」ボタンにチェックをいれます。
その状態で「変更の適用」をクリックすると、インストール処理がはじまりますが、終わるまでじゃっかん時間がかかります。
インストール処理が終わったら、システムを再起動すると、標準の「Nouveau」ドライバではなくNVIDIA製「nvidia-390」ドライバで立ちあがります。
ターミナルをひらいて、「$ nvidia-smi」コマンドをたたいてみて、ドライバのバージョンやGPUの型式が正しく表示されることを確認しておきます。

$ nvidia-smi


デスクトップ関連の設定は、「$ nvidia-settings」コマンドを使って、グラフィカルにおこなうことができます。

$ nvidia-settings


設定内容は「⁠~/.nvidia-settings-rc」に保存され、ログインのたびに「/etc/xdg/autostart/nvidia-settings-autostart.desktop」がこの設定内容を読みこんで、反映させる仕組みです。
NVIDIA製「nvidia-390」ドライバのドキュメント類は、「⁠/usr/share/doc/nvidia-driver-390/index.html」に保管されています。
インストールしたNVIDIA製ドライバのバージョンは、以下のコマンドで確認できます。

$ cat /proc/driver/nvidia/version


4. 「CUDA 9.0」インストールまえの準備作業
「CUDA 9.0」をインストールする方法はいくつかありますが、最終的には、NVIDIAウェブサイトからUbuntu17.04用runファイルをダウンロードしてインストールすることにしました。
「$ sudo apt install nvidia-cuda-toolkit」コマンドでUbuntuパッケージをインストールすると「CUDA 9.1」がはいってしまうし、ライブラリの格納箇所がNVIDIAの標準とはちがうので、ほかと連携させるさいパスの管理に手間がかかりそうな気がします。
それではということで、NVIDIA配布のUbuntu17.04用debファイル「cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64-deb」をためしてみようと思ったら、Ubuntu18.04ではパッケージの整合性がとれないということで、インストールできませんでした。
そのため、「CUDA Toolkit 9.0 Downloads」ページからUbuntu17.04用runファイル「cuda_9.0.176_384.81_linux-run」をダウンロードして、手動で「CUDA 9.0」をインストールすることにしました。
やってみてからの感想ですが、いろいろなところで互換性の問題がおこりやすい「CUDA」関連ライブラリについては、結果的にrunファイルでインストールして手動でバージョンを管理するのが一番いいと思います。
パッケージの競合という問題がないので、複数のバージョンをインストールしたうえで、パスとショートカットでバージョンを切りかえて使う、ということができるのもおおきなメリットといえます。
GPUドライバのみ別途Ubuntuパッケージで管理したうえで、ツールキットをrunファイルからインストールするだけなら、すべての処理をグラフィカルログイン状態で完了でき、システムに致命的なダメージをあたえかねないむずかしいプロセスもありません。

NVIDIA CUDA Installation Guide for Linux」ページの指示にしたがって、「CUDA 9.0」をインストールするまえに必要な確認作業、準備作業をおこないます。

「CUDA 9.0」に対応したGPUの確認。
$ lspci | grep -i nvidia
01:00.0 3D controller: NVIDIA Corporation GP108M [GeForce MX150] (rev a1)


Linux OSの対応状況確認。「Ubuntu 18.04 LTS」は対応していませんが、気にせずこのまますすめます。
$ uname -m && cat /etc/*release
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS"
NAME="Ubuntu"
VERSION="18.04 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
username@machine_name:~$ gcc --version
gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


コンパイラの存在およびバージョンを確認。「CUDA 9.0」は「gcc-7」と互換性がないので、インストールまえにすこし工夫する必要があります。
$ gcc --version
gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Linuxカーネルのバージョン確認。
$ uname -r
4.15.0-23-generic


Linuxカーネルのヘッダと開発キットをインストール。
$ sudo apt-get install linux-headers-$(uname -r)


「CUDA 9.0」と互換性のない「gcc-7」を標準とするUbuntu18.04では、ここで互換性のある「gcc-5」もしくは「gcc-4.8」をインストールし、「update-alternatives」コマンドで標準の「gcc-7」よりも優先順位をあげて、一時的に自動モードで「gcc-5」もしくは「gcc-4.8」が使われるように設定しておきます。
「CUDA 9.0」は基本的に「gcc-5」で動作しますが、GPU版「TensorFlow」をソースからインストールする場合や、GPU版「PyTorch」をソースからインストールする場合など、「gcc-4.8」が必要になるケースもあるようです。
そのため、ここでは「gcc-4.8」「g++-4.8」をインストールのうえ「update-alternatives」コマンドを使って優先順位をあげて、一時的に自動モードで「gcc-4.8」「g++-4.8」が使われるように設定します。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70

$ sudo apt-get install gcc-4.8 g++-4.8

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 80
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 80


なお「gcc-4.8」でビルドするさいには、エディタで「/usr/include/x86_64-linux-gnu/c++/4.8/bits/c++config.h」ファイルをひらいて、以下の二行を追加しておきます。

#define _GLIBCXX_USE_C99 1
#define _GLIBCXX_USE_C99_MATH 1


こうした「gcc-4.8」が必要なインストール作業が終わったら、かならず「gcc-4.8」「g++-4.8」の優先順位をさげて、自動モードでシステム標準の「gcc-7」「g++-7」が使われるように設定をもどしておきます。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 48
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 48


5. 「CUDA 9.0」のインストール
CUDA Toolkit 9.0 Downloads」ページで「Linux」「x86_64」「Ubuntu」「17.04」「runfile (local)」を選択し、「Download Installers for Linux Ubuntu 17.04 x86_64」タブを開きます。
「Base Installer」「Patch 1 (Released Jan 25, 2018)」「Patch 2 (Released Mar 5, 2018)」「Patch 3 (Released Jun 7, 2018)」それぞれの「Download」ボタンを押して、「cuda_9.0.176_384.81_linux.run」「cuda_9.0.176.1_linux.run」「cuda_9.0.176.2_linux.run」「cuda_9.0.176.3_linux.run」をダウンロードします。
ファイルをダウンロードしたディレクトリへ移動し、ベースインストーラのrunファイルに実行権限を付与してから、「sudo」で実行します。
長い使用許諾書を「Enter」キーを押して全部表示してから「accept」し、「You are attempting to install on an unsupported configuration. Do you wish to continue?」には「yes」と、「Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?」にはかならず「no」と回答します。
「Install the CUDA 9.0 Toolkit?」に「yes」と回答し、「/usr/local/cuda-9.0」にライブラリをインストールのうえ「/usr/local/cuda」からシンボリックリンクをはり、動作確認のためのサンプルファイルは「~/NVIDIA_CUDA-9.0_Samples」にコピーする設定にします。

$ chmod +x cuda_9.0.176_384.81_linux.run
$ sudo ./cuda_9.0.176_384.81_linux.run

「gcc7」+「g++7」環境でかまわずインストールするなら、「--override」オプションをつけて、「$ sudo ./cuda_9.0.176_384.81_linux.run --override」とします。


Do you accept the previously read EULA?
accept/decline/quit: accept

You are attempting to install on an unsupported configuration. Do you wish to continue?
(y)es/(n)o [ default is no ]: yes

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
(y)es/(n)o/(q)uit: no

Install the CUDA 9.0 Toolkit?
(y)es/(n)o/(q)uit: yes

Enter Toolkit Location
[ default is /usr/local/cuda-9.0 ]:

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: yes

Install the CUDA 9.0 Samples?
(y)es/(n)o/(q)uit: yes

Enter CUDA Samples Location
[ default is /home/username ]:

Installing the CUDA Toolkit in /usr/local/cuda-9.0 ...


ベースインストーラのインストール処理が終わったら、パッチをあてていきます。
「CUDA 9.0 Toolkit」をインストールしたディレクトリ「/usr/local/cuda-9.0」をターゲットに、パッチファイルを実行するだけです。

$ chmod +x cuda_9.0.176.1_linux.run cuda_9.0.176.2_linux.run cuda_9.0.176.3_linux.run
$ sudo ./cuda_9.0.176.1_linux.run
$ sudo ./cuda_9.0.176.2_linux.run
$ sudo ./cuda_9.0.176.3_linux.run


ここまでの作業が終わったら、「~/.bashrc」に以下二行を追加して、パスをとおしておきます。

export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}


あるいは、以下のようなかたちで「CUDA_HOME」変数を使ってもO.K.です。

export CUDA_HOME="/usr/local/cuda-9.0"
export PATH="$CUDA_HOME/bin:$PATH"
export LD_LIBRARY_PATH="$CUDA_HOME/lib64:$LD_LIBRARY_PATH"
export CPATH="$CUDA_HOME/include:$CPATH"


いったんターミナルを閉じるか、「$ source ~/.bachrc」コマンドを実行して、パスの変更を反映させます。
いくつかライブラリがたりない(「libGLU.so」「libX11.so」「libXi.so」「libXmu.so」「libGL.so」など)ことがあるので、必要な場合はあとで該当パッケージをインストールし、パスのとおった「/usr/lib」からライブラリファイルへシンボリックリンクをはっておけば問題ありません。

$ sudo apt install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev


ここまででインストール作業は完了です。
以下のコマンドを実行して、インストールした「CUDA 9.0」のバージョンが正しく表示されることを確認します。

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176


問題なければ、サンプルのビルドを実行します。
自動モードで「gcc-4.8」を使うよう、「update-alternatives」コマンドを使って、「gcc-4.8」「g++4.8」の優先順位をあげておきます。

$ cd ~/NVIDIA_CUDA-9.0_Samples
$ make


ビルド処理が終わったら、「~/NVIDIA_CUDA-9.0_Samples/bin/x86_64/linux/release/」以下に「deviceQuery」が生成するので、それを実行してみます。

$ ~/NVIDIA_CUDA-9.0_Samples/bin/x86_64/linux/release/deviceQuery


デバイスが検出され、「Result = PASS」と表示されていれば、インストールは正常に完了しています。

NVIDIA公式インストール手順書にも記載がありますが、「CUDA Toolkit 9.0」をrunfileを使ってインストールしたときは、以下のスクリプトを実行することでアンインストールできます。

$ sudo /usr/local/cuda-9.0/bin/uninstall_cuda_9.0.pl


なお、今回のインストール方法では必要ありませんが、NVIDIA製ドライバをrunfileを使ってインストールしたときのアンインストールコマンドは以下のとおりです。

$ sudo /usr/bin/nvidia-uninstall


6. 「cuDNN 7.0.5」のインストール
基本的には、NVIDIA公式の「cuDNN Installation Guide」の指示にしたがって、インストール作業をすすめていきます。
まず「cuDNN Download」ページへいき、必要におうじてログインしたうえで、「I Agree To the Terms of the cuDNN Software License Agreement」にチェックをいれます。
ここで「Archived cuDNN Releases」をクリックして、「cuDNN Archive」ページへ飛び、「Download cuDNN v7.0.5 (Dec 5, 2017), for CUDA 9.0」をクリックしてタブをひらきます。
一覧表のなかから「cuDNN v7.0.5 Library for Linux」をクリックして、「cudnn-9.0-linux-x64-v7.tgz」をダウンロードします。
ダウンロードしたディレクトリへ移動してファイルを解凍のうえ、「CUDA 9.0」ライブラリをインストールした「/usr/local/cuda-9.0」ディレクトリ以下に配置し、読み込み権限をあたえておきます。

$ tar -zxvf cudnn-9.0-linux-x64-v7.tgz
cuda/include/cudnn.h
cuda/NVIDIA_SLA_cuDNN_Support.txt
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.7
cuda/lib64/libcudnn.so.7.0.5
cuda/lib64/libcudnn_static.a
$ sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include/
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64/
$ sudo chmod a+r /usr/local/cuda-9.0/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*


「cuDNN 7.1.4」が必要な場合は、「cuDNN Download」ページへいき、必要におうじてログインしたうえで、「I Agree To the Terms of the cuDNN Software License Agreement」にチェックをいれます。
「Download cuDNN v7.1.4 (May 16, 2018), for CUDA 9.0」をクリックしてタブをひらいたら、「cuDNN v7.1.4 Library for Linux」をクリックして、「cudnn-9.0-linux-x64-v7.1.tgz」をダウンロードします。
以下の作業は、バージョンにかかわらず共通です。

$ tar -zxvf cudnn-9.0-linux-x64-v7.1.tgz
cuda/include/cudnn.h
cuda/NVIDIA_SLA_cuDNN_Support.txt
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.7
cuda/lib64/libcudnn.so.7.1.4
cuda/lib64/libcudnn_static.a
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64/
$ sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include/
$ sudo chmod a+r /usr/local/cuda-9.0/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*


「cuDNN」ライブラリの配置が完了したら、以下のコマンドで正しく配置されているかどうか確認します。

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 0
#define CUDNN_PATCHLEVEL 5
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

#include "driver_types.h"


インストールしたバージョンが正しく表示されれば、問題ありません。
最後に、debian packageからサンプルを抽出、ビルドしてみます。
自動モードで「gcc-4.8」を使うよう、「update-alternatives」コマンドを使って、「gcc-4.8」「g++-4.8」の優先順位をあげておきます。
ビルド処理が終わったら、「~/cudnn_samples_v6/mnistCUDNN」以下に「mnistCUDNN」が生成するので、それを実行してみます。

$ dpkg-deb -x libcudnn7-doc_7.0.5.15-1+cuda9.0_amd64.deb ./
$ cp -r /usr/src/cudnn_samples_v7/ ~/
$ cd ~/cudnn_samples_v7/mnistCUDNN
$ make clean && make
$ ./mnistCUDNN
.....
Test passed!


「Test passed!」と表示が出れば、「cuDNN 7.0」のインストール作業は完了しています。

7. 「NCCL 2.1.15」のインストール
「NCCL 2.1」をインストールするには、NVIDIA公式のNCCL 2.1.15 Installation Guideにしたがって、作業をすすめます。
「NCCL 2.2」を使いたい場合は、NCCL 2.2.13 Installation Guideのほうを参照します。

まず「NVIDIA Collective Communications Library (NCCL) Download Page」へいき、必要におうじてログインしたうえで、「I Agree To the Terms of the Software License Agreement」にチェックをいれます。
「Download NCCL v2.1.15, for CUDA 9.0, March 8, 2018」をクリックしてタブをひらき、「NCCL 2.1.15 O/S agnostic and CUDA 9」をクリックして、「nccl_2.1.15-1cuda9.0_x86_64.txz」をダウンロードします。
ダウンロードしたディレクトリに移動したら、ファイルを解凍のうえ、「/usr/local/nccl-2.1」ディレクトリ以下へ配置します。

$ tar xvf nccl_2.1.15-1+cuda9.0_x86_64.txz
$ sudo cp -r nccl_2.1.15-1+cuda9.0_x86_64 /usr/local/nccl-2.1


最後に、「.bashrc」に以下の行を追加し、「/usr/local/nccl-2.1」へパスをとおしておきます。

export NCCL_ROOT="/usr/local/nccl-2.1"
export CPATH=$NCCL_ROOT/include:$CPATH
export LD_LIBRARY_PATH=$NCCL_ROOT/lib/:$LD_LIBRARY_PATH
export LIBRARY_PATH=$NCCL_ROOT/lib/:$LIBRARY_PATH


いったんターミナルを閉じるか、「$ source ~/.bachrc」コマンドを実行して、パスの変更を反映させます。

8. 「TensorRT 3.0.4」インストール
「PhoenixGo」では、オプションとして「TensorRT」がサポートされており、バージョンとしては「TensorRT 3.0.4」が推奨されています。
NVIDIA TensorRT 3.x Download」ページへいき、必要におうじてログインしたうえで、「I Agree To the Terms of the Software License Agreement」にチェックをいれます。
「Tar File Install Packages」リストのなかの「TensorRT 3.0.4 for Ubuntu 16.04 and CUDA 9.0 tar package」をクリックして、「TensorRT-3.0.4.Ubuntu-16.04.3.x86_64.cuda-9.0.cudnn7.0-tar.gz」ファイルをダウンロードします。
ダウンロードしたディレクトリへ移動して、ファイルを解凍のうえ、適当なディレクトリ(ここでは「/usr/local/TensorRT-3.0.4」)に配置します。

tar xzvf TensorRT-3.0.4.Ubuntu-16.04.3.x86_64.cuda-9.0.cudnn7.0.tar.gz
sudo mv TensorRT-3.0.4 /usr/local


「.bashrc」に以下の行を追加し、「TensorRT-3.0.4」ディレクトリへパスをとおしておきます。

export LD_LIBRARY_PATH=/usr/local/TensorRT-3.0.4/lib:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}


あとは、NVIDIA公式の「TensorRT 3.0.4 Installation Guide」の手順どおり、「Python TensorRT」パッケージと「Python UFF」パッケージをインストールします。

9. 「CUPTI」パス登録
「CUPTI」は「CUDA 9.0 Toolkit」にふくまれているため、あらためてインストールする必要はありませんが、パスをとおしておく必要はあります。
「.bashrc」に以下の一行を追加し、いったんターミナルを閉じるか「$ source ~/.bachrc」コマンドを実行するかして、パスの変更を反映させます。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/extras/CUPTI/lib64


以上で、「Ubuntu 18.04 TLS」上に「CUDA」環境を構築する作業は完了し、GPU版「TensorFlow」やGPU版「PyTorch」を導入する準備がととのったことになります。


参考ウェブページ一覧表(順不同)

https://docs.nvidia.com/cuda/archive/9.0/
https://docs.nvidia.com/cuda/archive/9.0/cuda-installation-guide-linux/index.html
https://docs.nvidia.com/cuda/index.html
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
https://medium.com/@taylordenouden/installing-tensorflow-gpu-on-ubuntu-18-04-89a142325138
https://carterturn.com/h/Guides/NVIDIA%20CUDA%209.1%20with%20GCC%207.2
https://devtalk.nvidia.com/default/topic/1032269/cuda-9-gcc-7-compatibility-with-nvcc/
https://medium.com/@Inoryy/compiling-pytorch-4-0-on-ubuntu-17-10-with-cuda-9-0-and-python-3-6-6769a0df56d5
https://github.com/nathtest/Tutorial-Ubuntu-18.04-Install-Nvidia-driver-and-CUDA-and-CUDNN-and-build-Tensorflow-for-gpu
https://stackoverflow.com/questions/50213089/linking-error-with-gcc-g-7-3-0-on-ubuntu-18-04/50232797
https://deepinsider.jp/tutor/prepareenv/gpuubuntu
posted by hatakazu at 10:55| Comment(0) | Linuxとか | 更新情報をチェックする

2018年07月20日

Google開発のビルドツール「Bazel」のインストールと使いかた

「TensorFlow」をソースからインストールする場合、ビルドツールとしてGoogleが開発した「Bazel」を使用する必要があります。
hatakazuが動かしたいと思っているコンピュータ囲碁プログラム「AQ」と「PhoenixGo」も、「TensorFlow」フレームワークにもとづいているので、ソースから「Bazel」を使ってビルドすることになっています。
そういうわけで、あらかじめ「Bazel」をインストールしておくことにしました。

Bazel: プロジェクトページGitHubレポジトリインストール手順

ここでは、「Ubuntu 18.04 LTS 日本語 Remix」に「Bazel」をインストールする方法と、基本的な使いかたについて記述していきます。

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 18.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10) + 1TB 5400rpm HDD (Ubuntu18.04)
--

「Bazel」を動かすために必要になるライブラリを、あらかじめインストールしておきます。

$ sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python


なお、「Bazel」の動作には「JDK 8」が要求されますが、「Bazel」標準インストールパッケージには必要な「JDK」ライブラリがふくまれています。
そのため、「JDK 8」がインストールされているかどうか、互換性のあるバージョンかどうか、などを気にする必要はありません。

2. 「Bazel」インストールファイルのダウンロード
「Bazel」をインストールするには、いくつかの方法がありますが、ここでは推奨されているバイナリからのインストールをおこないます。
「Bazel」の最新バージョンは「0.15.0」ですが、「Bazel」の場合はバージョンが完全に上位互換にはなってないようで、過去のバージョンでしかビルドできないというケースもよくあるそうです。
そのため、ここでは「PhoenixGo」GitHubレポジトリにて動作確認ずみとされている、「0.11.1」をインストールすることにします。
「Bazel」GitHubレポジトリ」から「Releases」へすすみ、「0.11.1」ページをひらきます。
そこで、64bit Linux用の「bazel-0.11.1-installer-linux-x86_64.sh」をクリックして、該当するインストールスクリプト「bazel-0.11.1-installer-linux-x86_64.sh」をダウンロードします。

3. 「Bazel」のインストール
ファイルをダウンロードしたディレクトリへ移動し、ダウンロードしたファイルに実行権限を付与したうえで、コマンドラインから実行します。
そのさい、「Install Bazel on Ubunt」ページで推奨されているとおり、「--user」フラグをつけてユーザ環境へインストールするものとします。

$ chmod +x bazel-0.11.1-installer-linux-x86_64.sh
$ ./bazel-0.11.1-installer-linux-x86_64.sh --user


インストールが完了したら、「~/.bashrc」に以下の行を追加します。

export PATH="$PATH:$HOME/bin"


いったんターミナルを閉じてからあらためて開き(もしくは「$ source ~/.bashrc」コマンドを実行)、以下のコマンドを実行して、「Bazel」のバージョンが正しく表示されることを確認します。

$ bazel version
Build label: 0.11.1
.....


4. 「Bazel」によるビルド方法

基本的には、以下のコマンドによって、ビルドプロセスを走らせます。

$ bazel build


「--config=opt (-march=native by default)」「--config=monolithic」「--config=cuda」など、必要におうじてオプションを指定します。
おなじソースツリー内で、たとえばGPUバージョンとCPUバージョンなどの設定を切りかえる場合、「$ bazel clean」を実行してから「$ bazel build」へすすむ必要があります。
「Bazel」がビルド作業にもちいるRAM容量を限定するために、「--local_resources 2048,.5,1.0」などのオプションを指定することもできます。

Build Tutorial - C++
C++ and Bazel
User Manual

「GCC 5」以降のシステムでGPU対応「TensorFlow」をソースからインストールする場合など、「bazel build --config=opt --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" --config=cuda」などのように、「--cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"」を追加してビルドする必要があります。
これによって、「GCC 5」以降でパッケージをビルドするさいに、古いABIを使う「GCC 4」でビルドされたバイナリとの互換性をたもつことができます。


5. 「Bazel」のアンインストール
Bazelをアンインストールするには、「~/.bazel」「~/.bazelrc」「~/.cache/bazel」を手動で削除します。

$ rm -rf ~/.bazel
$ rm -rf ~/.bazelrc
$ rm -rf ~/.cache/bazel


「~/bin」に「~/.bazel/bin/bazel」へのショートカットを作成した場合は、これも手動で削除します。

$ rm ~/bin/bazel



参考ウェブページ一覧表(順不同)

https://www.tensorflow.org/install/install_sources
posted by hatakazu at 21:03| Comment(0) | Linuxとか | 更新情報をチェックする

2018年07月18日

仮想環境管理ツール「Virtualenv」を導入する

「TensorFlow」や「PyTorch」などの機械学習フレームワークを動かすにあたって、Pythonのバージョンなどにおうじて仮想環境を構築し、それぞれの仮想環境内部で各種設定をおこなうのが一般的です。
hatakazuもこの方法を使っていますが、その理由は単純に「よくわからないでいじっているのでかならず問題が発生するが、そうしたときに仮想環境ごと削除してあらたな仮想環境を構築しなおすことで、かんたんにやりなおすことができるから」です。
仮想環境の管理によく使われるのは、「Virtualenv」と「Anaconda」だと思います。

Virtualenv: プロジェクトページGitHubレポジトリ
Anaconda: ホームページダウンロードページANACONDA CLOUD

これら(とくに「Anaconda」)を「仮想環境管理ツール」と呼ぶのが正しいのかどうか、よくわからないところはありますが、とりあえずhatakazuにとって役にたつ部分(複数の仮想環境を構築してそれぞれ独立の環境設定で作業できるようにする機能)についてのみまとめておきます。
ここでは、「Ubuntu 18.04 LTS 日本語 Remix」上に「Virtualenv」を導入し、仮想環境を管理する方法を記述します。

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 18.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10) + 1TB 5400rpm HDD (Ubuntu18.04)
--

2. 「Virtualenv」インストール
いまのところ、基本的にはシステムが「Python 3.6」ベースなので、「python3」系の「Virtualenv」を導入していきます。

$ sudo apt install python3-pip python3-dev python-virtualenv


上記のコマンドにより、「python3」系の必要なパッケージがすべてインストールされ、「Virtualenv」を動かすための準備がととのいました。

3. 「Vertualenv」仮想環境の管理
「Vertualenv」仮想環境を管理するために、「~/virtualenv」ディレクトリを作成し、そのなかに仮想環境「environment_name」を構築していきます。

$ mkdir ~/virtualenv
$ cd ~/virtualenv
$ virtualenv --system-site-packages -p python3 environment_name
「--system-site-packages」を指定しないと、デフォルトの「--no-site-packages」が適用され、システム環境にインストールされたパッケージを使わない仮想環境が作成されます。


作成した仮想環境「environment_name」を有効化する場合は、以下のコマンドを使います。

$ source ~/virtualenv/environment_name/bin/activate
(environment_name) $ <- プロンプトに「(environment_name)」と追加され、「Virtuelenv」の「environment_name」環境にいることがわかる。


現在の仮想環境を無効化し、システム環境に戻る。

(environment_name) $ deactivate
$ <- プロンプトから「(environment_name)」が消え、通常のシステム環境にもどったことがわかる。


不要になった仮想環境を削除するには、該当の仮想環境を無効化したうえで、仮想環境名のディレクトリごと削除します。

$ rm -rf ~/virtualenv/environment_name


4. 「pip」コマンドの整理

「pip」じたいのアップデート。
$ pip install -U pip

現在の環境にインストールされているパッケージのリスト。
$ pip list

更新可能なパッケージをマークしてパッケージリストを表示。
$ pip list -o

パッケージをインストールする。
$ pip install package_name

パッケージをアンインストールする。
$ pip uninstall package_name

パッケージをアップデートする。
$ pip install -U package_name

パッケージをインストールしないでダウンロードだけする。
$ pip install package_name -d target_directory

ダウンロードしておいたパッケージをインストールする。
$ pip install /target_directory/package_name

インストールされているパッケージの情報を表示する。
$ pip show package_name


5. 「Virtualenv」のアンインストール
通常のパッケージとおなじく、以下の「apt」コマンドでかんたんにアンインストールできます。

$ sudo apt remove python-virtualenv
$ sudo apt autoremove



参考ウェブページ一覧表(順不同)

https://virtualenv.pypa.io/en/stable/
https://github.com/pypa/virtualenv
posted by hatakazu at 21:49| Comment(0) | Linuxとか | 更新情報をチェックする

2018年07月17日

仮想環境管理ツール「Anaconda」を導入する

「TensorFlow」や「PyTorch」などの機械学習フレームワークを動かすにあたって、Pythonのバージョンなどにおうじて仮想環境を構築し、それぞれの仮想環境内部で各種設定をおこなうのが一般的です。
hatakazuもこの方法を使っていますが、その理由は単純に「よくわからないでいじっているのでかならず問題が発生するが、そうしたときに仮想環境ごと削除してあらたな仮想環境を構築しなおすことで、かんたんにやりなおすことができるから」です。
仮想環境の管理によく使われるのは、「Virtualenv」と「Anaconda」だと思います。

Virtualenv: プロジェクトページGitHubレポジトリ
Anaconda: ホームページダウンロードページANACONDA CLOUD

これら(とくに「Anaconda」)を「仮想環境管理ツール」と呼ぶのが正しいのかどうか、よくわからないところはありますが、とりあえずhatakazuにとって役にたつ部分(複数の仮想環境を構築してそれぞれ独立の環境設定で作業できるようにする機能)についてのみまとめておきます。
ここでは、「Ubuntu 18.04 LTS 日本語 Remix」上に「Anaconda」を導入し、仮想環境を管理する方法を記述します。

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 18.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10) + 1TB 5400rpm HDD (Ubuntu18.04)
--

2. 「Anaconda」インストールファイルのダウンロード
「Anaconda」をインストールするには、いくつかの方法がありますが、ここでは推奨されているバイナリからのインストールをおこないます。
「Anaconda」の最新バージョンは「5.2.0」です。
Home - Anaconda」から「Download」ボタンを押して「Downloads Anaconda」ページへすすみ、「「Python 3.6 version」用「64-Bit (x86) Linux Installer」」をクリックして、該当するインストールスクリプト「Anaconda3-5.2.0-Linux-x86_64.sh」をダウンロードします。

3. 「Anaconda」のインストール
ファイルをダウンロードしたディレクトリへ移動し、ダウンロードしたファイルに実行権限を付与したうえで、コマンドラインから実行します。
そのさい、「Installing on Linux」ページで推奨されているとおり、ユーザ環境へインストールするものとします。

$ chmod +x Anaconda3-5.2.0-Linux-x86_64.sh
$ bash ./Anaconda3-5.2.0-Linux-x86_64.sh


ライセンス条項への同意を求められるので、全文を表示してから「yes」と回答します。
インストール先は、ユーザ環境へインストールする場合は標準で「/home/username/anaconda3」になっているので、そのまま「Enter」キーを押します。
途中で「~/.bashrcにPATHを追加するかどうか」確認を求められるので、そこは確実に「No」と回答します。

Do you accept the license terms? [yes|no]
[no] >>> yes

Anaconda3 will now be installed into this location:
/home/username/anaconda3

- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below

[/home/username/anaconda3] >>>
PREFIX=/home/username/anaconda3
.....
installation finished.
Do you wish the installer to prepend the Anaconda3 install location
to PATH in your /home/username/.bashrc ? [yes|no]
[no] >>> no

You may wish to edit your .bashrc to prepend the Anaconda3 install location to PATH:

export PATH=/home/username/anaconda3/bin:$PATH

Thank you for installing Anaconda3!

===========================================================================

Do you wish to proceed with the installation of Microsoft VSCode? [yes|no]
>>> no


インストールが完了したら、「~/.bashrc」に以下の行を追加します。

. /home/username/anaconda3/etc/profile.d/conda.sh
かつては、「~/.bashrc」に「export PATH="/home/username/anaconda3/bin:$PATH"」行を追加し、ユーザログインにともなって自動的に「Anaconda」環境がシステム環境より優先されるようにしていました。
しかし現在ではほかの仮想環境を使うこともあり、ふつうは「Anaconda」環境は表に出てこない状態でログインし、必要におうじて「$ conda activate」「$ conda deactivate」コマンドでシステム環境と切りかえるほうが便利だ(そして混乱もすくない)と思います。


いったんターミナルを閉じてからあらためて開き(もしくは「$ source ~/.bashrc」コマンドを実行)、以下のコマンドを実行して、「ANACONDA NAVIGATOR」が正常に起動することを確認します。

$ conda activate
$ anaconda-navigator
$ conda deactivate


4. 「Anaconda」仮想環境の管理
「Anaconda」ベース環境を有効化するには、以下のコマンドを使います。

$ conda activate
(base) $ <- プロンプトに「(base)」と追加され、「Anaconda」の「base」環境にいることがわかる。


「Anaconda」ベース環境を無効化するには、以下のコマンドを使います。
(base) $ conda deactivate
$ <- プロンプトから「(base)」が消え、通常のシステム環境にもどったことがわかる。


あたらしく仮想環境「environment_name」を作成したい場合は、仮想環境の名前と同時に、使いたいPythonのバージョンを指定することができます。

$ conda create --name environment_name python=3.6


「anaconda」オプションをつけることで、現在の「Anaconda」ベース環境のパッケージをすべてインストールした状態で、仮想環境を作成できます。

$ conda create --name environment_name python=3.6 anaconda


作成した仮想環境を有効化する場合は、以下のコマンドを使います。

$ conda activate environment_name
(environment_name) $ <- プロンプトに「(environment_name)」と追加され、「Anaconda」の「environment_name」環境にいることがわかる。


現在の仮想環境にインストールされているパッケージのリスト表示。

(environment_name) $ conda list


現在の仮想環境の情報を表示する。

(environment_name) $ conda info


現在の仮想環境を無効化し、システム環境に戻る。

(environment_name) $ conda deactivate
$ <- プロンプトから「(environment_name)」が消え、通常のシステム環境にもどったことがわかる。


不要になった仮想環境を削除する。

$ conda remove --name environment_name --all


5. 「Anaconda」で使うコマンドの整理

「Anaconda」じたいのアップデート。
$ conda update conda

登録されている仮想環境のリストを見る。
$ conda info --envs

指定した仮想環境にインストールされているパッケージのリストを見る。
$ conda list --name environment_name

パッケージをインストールする。
$ conda install package_name

パッケージをアンインストールする。
$ conda remove package_name

指定したチャンネルのパッケージをインストールする。
$ conda install --channel channel_name package_name

指定したチャンネルのパッケージをアンインストールする。
$ conda remove --channel channel_name package_name

パッケージを検索する。
$ conda search package_name

指定したチャンネルのパッケージを検索する。
$ conda search --channel channel_name package_name


6. 「Anaconda」のアンインストール
アンインストール用のツール「anaconda-clean」を使って、「Anaconda」をアンインストールします。

$ conda install anaconda-clean
$ anaconda-clean


そのあとで、残ったディレクトリなどをきれいに消してしまえば、アンインストール作業は完了です。

$ rm -rf ~/anaconda3
$ rm -rf ~/.anaconda
$ rm -rf ~/.anaconda_backup


「~/.bashrc」に「export PATH="/home/username/anaconda3/bin:$PATH"」や「. /home/hatanaka/anaconda3/etc/profile.d/conda.sh」などの記述がある場合は、それも削除しておきます。


参考ウェブページ一覧表(順不同)

https://deepinsider.jp/tutor/prepareenv/gpuubuntu
https://docs.anaconda.com/anaconda/faq#how-do-i-get-the-latest-anaconda-with-python-3-5
https://docs.anaconda.com/anaconda/faq#distribution-faq-linux-path
https://www.digitalocean.com/community/tutorials/how-to-install-the-anaconda-python-distribution-on-ubuntu-16-04
posted by hatakazu at 21:29| Comment(0) | Linuxとか | 更新情報をチェックする