Note to Self by notekunst

ただの備忘録です

Nvidia Driver, CUDA, cuDNN, gcc, g++のインストール(Ubuntu 20.04 on MacBookPro 15" Late 2013)

NvidiaGPUは、"Compute Capability"と呼ばれるパラメータを用いて区分されます。 "Compute Capability" によって、利用可能なCUDAのバージョンとcuDNNのバージョンが決まります。

私のMacBookProに関しては、GPUは"GeForce GT 750M"であり、"Compute Capability"は3.0です。
この場合、以下の組み合わせを用いると、GPUを使うアプリがうまく動きました。

CUDA 10.2
cuDNN 7.6.5
gcc, g++ 8系列

参考

以下、インストールの記録です。

gcc-8, g++-8

インストール

Ubuntu 20.04がインストールされた環境では、gcc-9, g++-9が利用可能です。しかし、CUDA10.2, cuDNN7.6.5のサンプルプログラムは、この環境ではコンパイルできません。そこで、gcc-8, g++-8をインストールします。

$ sudo apt install gcc-8
$ sudo apt install g++-8
環境の制御

共存する8系列と9系列を使い分けるために、"update-alternatives"を用います。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 70 --slave /usr/bin/g++ g++ /usr/bin/g++-9
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50 --slave /usr/bin/g++ g++ /usr/bin/g++-8

上記2個のコマンドの実行後、以下のコマンドで8系列と9系列の間で環境を切り替えることができます。

$ sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
  0 /usr/bin/gcc-9 70 auto mode
* 1 /usr/bin/gcc-8 50 manual mode
  2 /usr/bin/gcc-9 70 manual mode

上記表示の後に、希望の選択肢を入力します。

  • リターンキー : 現状が維持されます。上記の例では、1番(8系列)が選択されています。
  • "1" : "gcc-8"とそれに紐付けられた"g++-8"が、"gcc","g++"にリンクされます。
  • "2" : "gcc-9"とそれに紐付けられた"g++-9"が、"gcc","g++"にリンクされます。
  • "0" : 優先度に基づいて自動的に環境が選択されます。上記の例では、9系列の優先度"70"が8系列の優先度"50"よりも大きいので、9系列の環境が選択されます。

CUDA 10.2

Nvidiaの"CUDA 10.2"の解説ページを参照して、作業を進めます。
https://docs.nvidia.com/cuda/archive/10.2/cuda-installation-guide-linux/index.html
具体的な手順は、以下の通りです。

"linux-headers"のインストール

自分のシステムのカーネルのバージョンと同じバージョンのヘッダをインストールします。

$ uname -r
5.4.0-39-generic
$ sudo apt install linux-headers-5.4.0-39-generic

Nvidiaのページには、以下のone linerがありました。

sudo apt-get install linux-headers-$(uname -r)
"CUDA Toolkit 10.2"のインストール

下記URLで自分のシステムの情報を入力すると、インストール用のコマンドセットが表示されます。
https://developer.nvidia.com/cuda-10.2-download-archive

  • "Ubuntu"のバージョンとして"18.04"を選びます。
  • "Installer Type"としては、私は"deb [local]"を選びました。

表示されたコマンドを入力して、CUDAをインストールします。

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
$ sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-10-2-local-10.2.89-440.33.01/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get -y install cuda
パスの設定

~/.bashrc に、以下の設定を追加します。

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

以上により、CUDAがインストールされます。nvccを実行してみます。

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89

また、CUDA10.2に適した nvidia driver (最新ではない)もインストールされます。nvidia-smiを実行してみます。

$ nvidia-smi 
Sat Jul  4 01:25:50 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GT 750M     On   | 00000000:01:00.0 N/A |                  N/A |
| N/A   52C    P8    N/A /  N/A |    332MiB /  1999MiB |     N/A      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0                    Not Supported                                       |
+-----------------------------------------------------------------------------+

CUDAのサンプルをビルドしてみます。

$ cuda-install-samples-10.2.sh ./
(カレントディレクトリにサンプルコードのセットがコピーされます)
$ cd NVIDIA_CUDA-10.2_Samples/
ここで、makeと入力すると、多数のサンプルをコンパイルしますが、時間もかかるので、
適当なサンプルを選んでコンパイルします。
$ cd 5_Simulations/smokeParticles/
$ make
$ ./smokeParticles

cuDNN 7.6.5

Nvidiaの下記ページから、cuDNNのパッケージをダウンロードします。
メンバー登録が必要です。
https://developer.nvidia.com/rdp/cudnn-download

CUDA10.2用のcuDNN v7.6.5の3つのパッケージをダウンロードします。

  • 1) libcudnn7_7.6.5.32-1+cuda10.2_amd64.deb
  • 2) libcudnn7-dev_7.6.5.32-1+cuda10.2_amd64.deb
  • 3) libcudnn7-doc_7.6.5.32-1+cuda10.2_amd64.deb

1,2は必須、3は任意です。

各パッケージをインストールします。

$ sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.2_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.2_amd64.deb
$ sudo dpkg -i libcudnn7-doc_7.6.5.32-1+cuda10.2_amd64.deb

cuDNNのサンプルをビルドしてみます。

$ cp -r /usr/src/cudnn_samples_v7 ./
(サンプルコードのセットがカレントディレクトリにコピーされます)
$ cd ./udnn_samples_v7/mnistCUDNN/
$ make
$ ./mnistCUDNN
(これで"Test passed!"と表示されれば成功です)

以上で、インストールは終了です。

Ubuntu 20.04 のインストール後にするちょっとしたこと

ネット上にはいろいろな TIps がありますが、自分用にメモ。

 

 

キーボードのCapsをCtrlに変更する

/etc/default/keyboard の以下の行を編集する
XKBOPTIONS="ctrl:nocaps"

("ctrl:nocaps"の代わりに"ctrl:swapcaps"でもよい)

 

gnome desktop の背景を画像ではなく単色にする

gsettings set org.gnome.desktop.background picture-uri ''
gsettings set org.gnome.desktop.background color-shading-type 'solid'
gsettings set org.gnome.desktop.background primary-color '#2d7d9a'

 

スクロールバーを常に表示する。

gsettings set org.gnome.desktop.interface overlay-scrolling false

 

スクロールバー領域のクリックを、その位置へのワープから1ページ移動に変更する

~/.config/gtk-3.0/settings.ini に以下を記載
[Settings]
gtk-primary-button-warps-slider = false

 

Dockの"Show Applications"を上(左)に表示させる。

gsettings set org.gnome.shell.extensions.dash-to-dock show-apps-at-top true

 

ログイン画面上にユーザ名を表示させない

/var/lib/AccountsService/users/XXXに以下を追加する(XXXは実際のユーザ名)
[User]
SystemAccount=true

 

Japanese Teamによる追加パッケージのインストール

以下の記事が参考になります。

www.ubuntulinux.jp

 

 

日本語入力の設定(fcitx + mozc)

Ubuntu上の日本語入力ツールには、いろいろなものがあります。私は、fcitx + mozc を選びました。この組み合わせは、JISキーボードとUSキーボードを簡単に使い分けることができます。

 

fcitx, mozc のインストールとfcitxの有効化

  • sudo apt -y install fcitx-mozc
  • gnomeの"Settings"を起動
  • "Settings"画面内の左欄の "Region & Language" をクリック
  • 右欄の "Manage Installed Languages"ボタンをクリック
  • もし、"The Language support is not installed completely" と表示されたら "Install"ボタンをクリック
  • 表示されている "Language Support"画面の"Language"タブの"Keyboard input method system"のプルダウンメニューで "fcitx" を選択。そして、"Close"
  • sudo apt -y purge ibus (念のため)
  • システムを再起動

Mozcの有効化と設定

  • "Fcitx Configuration" を起動(Dockの"Show Applications"ボタンから、又は、Top Barのキーボードアイコンから、起動できます。これで、"Input Method Configuration"画面が開きます)
  • "Input Method"タブを選択し、以下の手順で"Mozc"を追加
  1. 左下の "+" ボタンをクリック
  2. "Only Show Current Language" のチェックを外す
  3. 下の検索文字入力欄に "Mozc" を入力する
  4. 上のリストに表示された" Mozc" の行を選び、"OK"ボタンをクリック
  • "Global Config"タブを選択
  • "Trigger Input Method"の右のボタンをクリックして、入力言語切り替えのキー組み合わせを入力し、画面を閉じる

キー組み合わせの入力ボタンが2個あるので、2つの設定を保存できます。デフォルトの "Ctrl+Space" は、emacsキーバインドと競合します。私は、1つのボタンに、USキーボードから "Alt+`" を入力し、別のボタンに、JISキーボードから"Alt+Kanji(半角/全角)"を入力しました。 

なお、私の選んだキー組み合わせは、gnomeの設定と競合するので、gnomeの設定を変更します。

  • gnomeの"Settings"を起動
  • "Settings"画面内の左欄の "Keyboard Shortcuts"をクリック
  • 右欄のリストのうち "Switch windows of an application" のデフォルト設定は、 競合する"Super+`"
  • これを競合しない組み合わせ(e.g. "Alt+F1")に変更
  • "Settings"画面を閉じる。

fcitx の設定

以下の記事が参考になります。

kledgeb.blogspot.com

 

私のマシンのキーボードはUSキーボードですが、リモートデスクトップでJISキーボードを使う場合があります。そこで、USキーボードとJISキーボードを使えるように、Fcitxを設定しました。

  • "Fcitx Configuration" を起動(Dockの"Show Applications"ボタンから、又は、Top Barのキーボードアイコンから、起動できます)
  • "Input Method"タブを選択
  • 以下の3つを登録
  1. "Keyboard - English (US)"
  2. "Mozc"
  3. "Keyboard - Japanese"
  • 使うキーボードを1番上に移動させて、画面を閉じる

USキーボードを用いる場合、"Keyboard - English (US)"を一番上に移動させ、JISキーボードを用いる場合、"Keyboard - Japanese"を一番上に移動させます。

"入力言語切り替えのキー組み合わせ"を入力する毎に、"1番のメソッド"と"他のメソッド"とが交互に切り替わります。

例えば、US, Mozc, JPの順に登録されている場合、"US"と"Mozc"との間の切り替え、または、"US"と"JP"との間の切り替えが、生じます。

このように、1番を除く複数のメソッドのうち有効化されるメソッドは1つだけです。

これを変更するには、"Ctrl-Shift"を入力します。上記の例では、"JP"が有効な状態で"Ctrl-Shift"を入力すれば、有効なメソッドが"JP"から"Mozc"に変更されます。

 

なお、gnomeの"Settingsの"Region & Language"でも、キーボードの種類を登録できます。このgnomeの設定とFcitxの設定との間の関係は、不勉強のためわかりません。

現状、私のgnomeの設定は"English (US)"のみです。ここに"Japanese"を追加したところ、ログイン後にデスクトップが表示されないなどの不具合が生じました。ですから、元に戻しました。

デスクトップが表示されず、gnome設定の変更が難しい場合、sshなどでログインして以下のコマンドを実行すれば、gnome設定を"English (US)"のみに戻せます。
gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us')]"

 

Ubuntu 20.04 LTS を MacBook Pro (Retina, 15-inch, Late 2013) にインストールする

Ubuntu 20.04 のインストールの記録です。このマシンは古いものなので、macOSUbuntuとのデュアルブートは簡単でした。何もせずにWi-Fiも動作しました。Macが新しい場合、Ubuntuのインストールは簡単ではないようです。

Ubuntuのインストール後に更に作業することによって、Facetime HDカメラ,  CUDA, cuDNN, PyTorch も、動作しました(これらの話は、別記事に纏める予定です)。古いマシンですが、いろいろ楽しめます。

 

目次

まずは、バックアップ

  • Time Machine で Mac をバックアップ
  • 必要なデータを外付ストレージにバックアップ

Disk Utility によるUbuntuパーティションの作成

内蔵SSDに重要なデータが無かったので、私はパーティションを切り直しました。

マシンが古いからか "APFS" は選択肢にありません。macOS用には "OS X Extended (Journaled)" を選択し、Ubuntu用には、とりあえず "MS-DOS (FAT)" を選択しました。

Time Machineからの macOS のリストア

  • "command (⌘) + R" を押しながら MAC を起動
  • Utilities メニューから "Restore From Time Machine Backup" を選択
  • Time Machine BackUp からリストア

 私の場合、macOS Mojave のバックアップを、新しく作ったパーティションにリストアしました。

Ubuntu 20.04 のインストール

私は、日本語Remixでなく素の Ubuntu Desktop を用いました。"Try Ubuntu" を選択すれば、Ubuntu の動作を確認できます。確認できたら、再起動し、"Install Ubuntu" を選択し、処理を進めます。インストール時、Thunderbolt - Ethernet アダプタは、問題なく動作しました。

  • Keyboard: 実機に合うものを選択します。私のキーボードは English (US)。
  • Update ...:"Install third-party..."もチェックします (Wi-Fi用)。
  • Installation Type:"something else" を選択して "Continue"。
  • 次のメニューで Ubuntu用のパーティションを選択します。パーティションの設定画面で、以下の設定を行いました。
  1. Size:変更せずにそのまま
  2. Use as:"Ext4 journaling ..."を選択
  3. Format the partition:チェックを入れる
  4. Mount Point: "/" に設定
  5. そして"OK"
  • メニュー下部の "Device for boot loader installation" で Ubuntuをインストールするパーティションを選択。
  • そして、"Install Now"

これで、Ubuntuを無事にインストールできました。再起動すると、Ubuntuが起動します。この状態で、Wi-Fiも動きました。"option (⌥)" を押しながらMACを起動すると、macOSも選択できます。なので、私は、rEFind等のブートマネージャを入れてません。