11
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

初めてのPCにNVIDIA+Ubuntu+Docker+Tensorflow+ROS2等を入れて、なるべくMacっぽくする[第6版:2023年11月]

Last updated at Posted at 2020-09-21

Ⅰ. やりたいこと

  • NVIDIAのGPU入りのデスクトップPCを10諭吉程度で入手する(更新 ③)
  • Ubuntu20.04をインストールして、22.04にアップグレードして、使い勝手をMacに合わせる(更新 ③)
  • Ubuntu22.04にDockerをインストールして、以下のシステムをDocker上に構築する(更新 ③)
    • TensorFlow+Keras(更新 ③)
    • ROS2(一時保留 ③)
    • PyTorch (更新 ⑤)

Ⅰ.Ⅰ. 使い勝手をMacに合わせる?
  1. 『Spaceキー』の『左隣キー(左Superキー)』を『左Ctrlキー』に変えて、『左Ctrlキー』+『X/C/V』で「カット/コピー/ペースト」が出来るようにする(Macの『左⌘キー』と同じ使い方):OK
  2. 『Spaceキー』と『左Ctrlキー』で「英語/日本語』の入力ソース切替」が出来るようにする(MacのUSキーでの入力ソース切替と同じ使い方):OK
  3. 『左Altキー』+『a/s/z/x/c』で「半角カタカナ/半角英語/ひらがな/全角カタカナ/全角英語」に変換が出来るようにする(Macのことえりの『Option+α』と同じ仕様):OK
  4. 『Capslockキー』も『Ctrlキー』にする(個人的趣味):OK
  5. 入力は『TrackPad』を使いたい(この20年ぐらい、Trackpadしか使ってないから):NG

結果は、4勝1敗でした

Ⅱ. 経緯

MacBookPro+仮想環境に「Ubuntu18.04」をインストールして、その上で「DeepLeaning/ROS1」を走らせて遊んできましたが、**【真面目に『DeepLeaning』を始めよう&『ゼロから作るDeepLeaning②』にはGPUが必要らしい】と言うことで、MacBookProに繋がる『eGPU』**を物色していたところ、

「DeepLeaning」には、『NVIDIAのGPU』が必須

との情報が! ずっと、AppleとNVIDIAは喧嘩中。 ただ、PCを買うのも悔しかった(所持金も少なかった)ので、色々とトライしましたが、

  • Microsoft Azure:Linux初心者は右往左往しているうちに重課金
  • Google Colab:90分タイムアウトにやられる
  • 仮想環境では、GPUが上手く動かないという現実(教えてくれたCDLE(Community of Deep Learning Evangelist)メンバー、多謝)

の結果から「ROSでも使うし」と腹をくくって、Ubuntu専用のGPU入りPCを買うことを決意しました(その時、生まれて初めて、Mac以外のPCを買うという現実に気づき、経験値の低さにちょっとビビる)

Ⅲ. ミッション終了までの流れ

  1. ハードウェアの確保(更新 ③
  2. UbuntuインストールとNVIDIAのドライバー動作確認(更新 ③)
  3. 基本設定とキーボード設定をMacぽく(更新 ③
  4. 内蔵HDDのマウント(OS用SSDとData用HDDを分けて使いたい)(更新 ③)
  5. 基本環境とソフトのインストール(更新 ③ ⑥)
  6. 開発系の基本ソフトのインストール更新 ③
  7. Docker(NVIDIA用)のインストール更新 ③
  8. Docker上にNGCイメージから【TensorFlow+Keras】の環境を構築(更新 ③)
  9. Docker上に【ROS2】の環境を構築(一旦、保留 ③)
  10. Docker上に【PyTorch】の環境を構築(更新 ⑤)

Ⅳ. ミッション開始

1. ハードウェアの確保(更新 ③ ⑥)
  • 1.1. PC本体(DeepLeaningの初学者レベル用)
    • Mac以外のハードを購入したことがないので、「CDLE」Slackで相談して、オススメスペックに近いBTOのゲーミングPCをNetショップ購入することに決めました(ゲーミング用PCには必ずGPUが入っており、トータルコスパが良いとのアドバイスから)
項目 相談結果 現実
CPU Core i7 or i5 Gen10以上 i5 Gen9
memory なるべく多く 16GB
GPU GeForce GTX1600 SUPER 程度 GeForce GTX1600 SUPER
SSD (OS用) 250GB x2個 (UbuntuとWinのDualBoot) 480GB x1個 (Ubuntuのみ)
HDD (Data用) - 2TB
  • オススメと現実との違いは、「各ショップの基本モデルの違い」「予算」の折り合いの結果です。結局、13諭吉ぐらいの金額になりました

【CDLEメンバーからの教え】
・DeepLeaning用のPCは「GPUやGPU上のメモリサイズを重視」と書いてあるが、実運用上では、前処理のCPUやメモリがボトルネックになる事も多いので、バランス良い構成が望ましい

・BTOPCは、CPU/メモリ/GPUは後からある程度は変更できるので、まずは予算に合わせて購入して、やりたい事にあっているかをトライ&エラーをして構成を変えていくのが良い

【私の経験則】
機械学習に使うGPUは、GPU上のメモリ量が大事でした。画像系を実装するには、『12G』程度のメモリが無いとバッチサイズが増やす事ができず、精度が上がりません。スピードが遅くても、メモリが大きいGPUを購入する事をお勧めします

【トラブル】
購入から1ヶ月後、『マザーボードから一度メモリを抜かないと8割の確率で起動しない』現象が発生。購入したNetショップに相談したところ、

  • 自費でPCを送り返す
  • 実店舗に持ち込む

の、2択
運良く、近所に実店舗があったので、持ち込みして4日入院後、メモリ交換で退院
ついでに『ASUSのマーザーボード』のLED色による起動ステータスの切り分け法も教えてもらう
結構焦ったので、近くに実店舗があって、本当に助かりました。次もその店で買います

【教訓】
・安さとスペックがBTOPCには重要だが、初心者はトラブル対応を考慮して購入先を選ぶべき

  • 1.2.入力系

    • 作業スペースが狭いので、全て無線で構築しました → キーボードは有線に変更 ③
  • 1.2.1.PC側:Bluetooth USBドングル

    • Newiy Start製 Ver4.0アダプター: 1個 → 2個 → 1個 ③

      • Amazonの商品説明に「Linuxでも使える」とあったので、購入。確かに動いたが、1個でマウスとキーボードの相手はしんどいらしく時々マウスカーソルが飛ぶなど動作がおかしくなるので、追加購入して2個に変更(でも時々、マウスが重くなる。原因はPC側?)
      • キーボードを有線式に変えたので、1個に減らしました。今にして思えば、2個にして効果があったのか不明です③
      • 急にBluetoothが繋がらなくなり、ドングルを買い替えました。Linuxで動作保証のある『CSR V4.0』のICが搭載されているドングルを購入。問題なくドングルを認識しましたが、マウスとキーボードが認識されず、6回ほど再起動を繰り返した結果、どうにか接続しました。⑥
      • Bluetoothのドングルを認識して、マウスを繋ぎましたが、カーソルがスムーズに動きません。調べたところ、「USB3.1」ではうまく動かない事があるとの事。USB2.0のポートに差し替える事で正常動作しましたい。【サポートブログ】USB 3.0の端子と2.4GHz帯の電波を利用する周辺機器について
  • 1.2.2.マウス(?)

    • Apple:Magic TrackPad(初代) → LogiCool:M337

      • 入力系をMacBookに合わせたくて、Magic TrackPad(初代)をヤフオクでGet

      • 【トラブル】

        • 『fusuma』というとても良いソフトでマルチタッチは良い感じになったのですが、カーソル自体の動きが気持ち悪く、丸2日色々「ググる+設定+再起動」を繰り返したがいま一つなじまず、逆にストレスがつのるばかり。すっぱり諦めてロジクールの安価な『Blurtoothマウス』に購入
        • 意外とマウスのボタン(左右のスクロール/ナビゲーションボタン)がUbuntu上でもキーアサインされており、「もう少しボタンの多いマウス」にすればよかったと少し後悔
  • 1.2.3.キーボード

    • Apple wireless keyboard(US) → サンワサプライ SKB-E3U③

      • Apple wireless keyboard(US) は、Apple:Magic TrackPad(初代)と並べて見栄えが良いので、ヤフオクでゲット。キーは馴染んだUSキー(昔のMacはJISキー自体がなかったので、未だにUSキーしか使えません)

      • 【トラブル】

        • 比較的順調に動いていますが、時々(スリープ時/OSの設定を変えて再起動したとき)接続が切れます。切れたら、有線キーボードを繋いで『Bluetoothの接続設定』して再起動しないと使えません。結構困っているので、【買い換えるか?】を思案中(キータッチは良いのですが)
        • あんまり接続切れが多いので、有線キーボードに変更しました。手頃な価格のUSB接続のUSキーボードを購入 ③
        • 【Apple Wireless Keyboard】は、起動時に一度キーを叩いて、Keyboard右上のLEDがON/OFFするまで2秒ほど待てば、正しく接続することがわかった(以前は我慢が足りなかった)ので、【Apple Wireless Keyboard】を再接続 ⑤

【教訓】
・Apple製品はLinuxに繋いだだけでは、Apple製品と同等のTouch&Feelは簡単には得られない。結局、全滅。ヤフオクの海に帰っていきました(涙)③
・緊急用の有線のキーボードとマウスは必須。手の届く範囲に準備しましょう

2. UbuntuインストールとNVIDIAのドライバー動作確認(更新 ③)

2.1. Ubuntu20.04(日本語版)のインストールイメージの準備

<参考>
Ubuntu 20.04インストールしてからやること

  • UbuntuはUbuntu日本公式サイト の20.04のイメージファイルをダウンロードします

    • このあたり、詳しいページが多数ありますので、そちらに譲ります。各自のインストール環境にあわせて探してみてください
      • 私は購入したPCに『DVDドライブ』がオマケについていたので、イメージファイルをライブDVDに焼きました
      • ubuntuのイメージファイルをDVDにそのまま焼けば、完了です

2.2. Ubuntu22.04のインストール

  • インストールメディアを入れて、マザーボードのBIOSに従った方法で『起動ディスクを各インストールメディア』にして変更して起動すれば、インストールが開始されます
  • Ubuntu20.04をインストール後、Ubuntu22.04にアップグレードしました。⑥

【注意点】

  • NVIDIAのGPUを追加している場合、以下の手順が必要です(私は、はまりました)
    - ブートメニューで「Ubuntu (safe graphics)」を選択して「Ubuntu」を起動(普通は「Ubuntu」を選択)

IMG_3614.jpg

  • インストーラの「アップデートと他のソフトウェア」で「グラフィックスと・・・」の項目をオンにしてから、インストールを続行

IMG_3613.jpg

<参考>
Ubuntu 20.04 その25 - Ubuntu 20.04 LTSの既知の問題

  • nvidiaのドライバーインストールの確認
    -  $ nvidia-smiコマンドで以下の様な表示がでれば、nvidiaドライバーは動作しています
$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.100      Driver Version: 440.100      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 GTX 166...  Off  | 00000000:01:00.0  On |                  N/A |
| 42%   37C    P8     8W / 125W |    249MiB /  5936MiB |      3%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1127      G   /usr/lib/xorg/Xorg                            35MiB |
|    0      2006      G   /usr/lib/xorg/Xorg                            94MiB |
|    0      2202      G   /usr/bin/gnome-shell                          97MiB |
|    0      6565      G   /usr/lib/firefox/firefox                       2MiB |
|    0      7875      G   /usr/lib/firefox/firefox                       2MiB |
|    0     10070      G   /usr/lib/firefox/firefox                       2MiB |
+-----------------------------------------------------------------------------+

3. 基本設定とキーボード設定をMacぽく(更新 ③

3.1. キーボード設定:USキーボードに対応

  • 下記のコマンドでキーボードとマッチングするまで試してみてください
$ sudo dpkg-reconfigure keyboard-configuration
  • 3.1.1. USキーボードで有ることを設定を書き込む
$ sudo nano /usr/share/ibus/component/mozc.xml
<layout>us</layout>

3.2. ホーム内のディレクトリを英語にする

  • ターミナル上からアクセスする時、日本語だと面倒くさいので英語に戻します
$ LANG=C xdg-user-dirs-gtk-update
  • 3.2.1. うまく行かない場合は、~/.config/user-dirs.dirs を以下のように編集します
$ sudo nano ~/.config/user-dirs.dirs
________________________
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Share"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"
________________________
  • 3.2.2. 実際のフォルダをリネームします
$ mv $HOME/デスクトップ $HOME/Desktop
$ mv $HOME/ダウンロード $HOME/Downloads
$ mv $HOME/テンプレート $HOME/Templates
$ mv $HOME/公開 $HOME/Share
$ mv $HOME/ドキュメント $HOME/Documents
$ mv $HOME/音楽 $HOME/Music
$ mv $HOME/画像 $HOME/Pictures
$ mv $HOME/ビデオ $HOME/Videos
  • 3.2.3.ログインしなおすとOKです(時々、サイドバーの表示が英/和混合になるけど諦めました)

3.3. キーアサインをMacに合わせる

  • 3.3.1 『Caps lockキー』を『Ctrlキー』に変更する
    • 3.3.1.1.Gnome Tweaks をインストール
      • Ubuntu Softwareからインストールします/【Tweaks】がプログラム名
      • 【Tweaks】 > キーボードとマウス
      • アクティビティ画面のショートカットを『左super』から『右super』へ(『左superキー』を開ける為)(キーボードレイアウトが変わったので、削除 ③)
        • 【Tweaks】 > キーボードとマウス > 追加のレイアウトオプション > Ctrl position > 『Caps LockをControlとして扱う』を選択(『Caps lockキー』を『Ctrlキー』に変更)
    • 【再起動】して、正常に動作する事を確認してください

Tweak.png

  • 3.3.1.2.『左superキー』まわりを変更(キーボードレイアウトが変わったので、全面改訂 ③)
    • キー配列を以下のように変更する
      • 『Winキー』 → 『左Altキー』
      • 『左Altキー』 → 『左Ctrlキー』
      • 『右Altキー』 → 『左super(Win)キー』
      • 『Menuキー』 → 『右Altキー』
        IMG_3625.PNG
3.3.1.3.Plan A:xmodmapを変更してキーアサインを変える ③
- キーアサインのバックアップを取っておく
$ xmodmap -pke > ~/.Xmodmap_default
  • 各キーのキー番号を探す ③
    • 下記のコマンドを打つと四角い窓が開きますので、それが見えた状態で『キー入力』するとキー番号が表示されます(私の場合は、以下の通りでした)
      • 『Winキー』 → 133
      • 『左Altキー』 → 64
      • 『右Altキー』 → 108
      • 『Menuキー』 → 135
$ xev | grep keycode

キー入力.png

  • スクショは、『Returnキー』を押した時の表示です

キーバインドの変更 Xmodmapの基本的な設定方法

  • 新しく”~/.Xmodmap”ファイルを作って、下記の内容を書く。記載内容は各自のキーボードレイアウトに合わせる事(新しいキーアサインに対応③)
$ nano ~/.Xmodmap
________________________
clear control
clear mod1
clear mod4

! win -> Alt_L
keycode 133 = Alt_L

! Alt_L -> Control_L
keycode 64 = Control_L

! Alt_R -> Super_L
keycode 108 = Super_L

! Menu -> Alt_R
keycode 135 = Alt_R

add control = Control_L Control_R
add mod1 = Alt_L Alt_R
add mod4 = Super_L Super_R Super_L Hyper_L
_________________________
  • 設定を反映させて、動作を確認する
$ xmodmap ~/.Xmodmap
  • 間違ったら、バックアップファイルに戻す
$ xmodmap ~/.Xmodmap_default
  • 【再起動】して、設定したキーアサイン通りなら完了

  • 3.3.1.3.1.再起動したら、キーバインドが消える場合 ③

    • .bashrcにスクリプトを書き込んで、Ubuntu起動時にターミナルが自動起動させる事で、.bashrcと一緒に.Xmodmapを読み込ませます(③ Kimuraさん、多謝)

      • 起動時のスクリプトは、絶対パスを指定する事 ③
    • ターミナルが自動起動するスクリプトを書く ③

<参考>
Ubuntu起動と同時に自動でターミナルを開く

$ nano ~/.config/autostart/gnome-terminal.desktop
_________________________
[Desktop Entry]
Exec=gnome-terminal
Type=Application
_________________________
  • .Xmodmapを読み込ませるスクリプトを.bashrcの末尾に追記します ③
    • sleep 7は、7秒待ちのことです。この値が短いと正しくキーバインドが切り替わらないことがあったので、我慢できる限界の「7秒」にしました。各環境で値を調整してください ③
$ nano ~/.bashrc
_________________________
# キーボード配列変更
/bin/bash -c "sleep 7; /usr/bin/xmodmap /home/#USER/.Xmodmap"
_________________________
  • 【再起動】して、設定したキーアサイン通りなら完了 ③
3.3.1.4.Plan B:xkbを変更してキーアサインを変える ③
  • xkbmapの変更:"xkb"でキーアサインを変える方が主流的な記事があったので、トライ ③

<参考>
xkbでキーバインドを変更する(Ubuntu)
XKBによるHHKB (US) のためのキーマップ変更 (Ubuntu 18.04 LST)
xkbでキーバインドを変更する

  • ~/.xkbの設定を確認 ③
$ setxkbmap -print
_________________________
xkb_keymap {
	xkb_keycodes  { include "evdev+aliases(qwerty)"	};
	xkb_types     { include "complete"	};
	xkb_compat    { include "complete"	};
	xkb_symbols   { include "pc+us+us:2+inet(evdev)+ctrl(nocaps)"	};
	xkb_geometry  { include "pc(pc105)"	};
};
_________________________
  • ~/.xkb用のフォルダを作成し、ベースとなる設定ファイルを格納する ③
$ mkdir -p ~/.xkb/keymap ~/.xkb/symbols
$ setxkbmap -print > ~/.xkb/keymap/mykbd
  • 変更するキーバインドを設定する ③
    • /usr/share/X11/xkb/symbols/内のファイルが変更するキーバインドの参考になります
$ sudo nano ~/.xkb/symbols/myswap  
_________________________
partial modifier_keys
xkb_symbols "swapkeys" {
  replace key <LWIN> { [ Alt_L ] };
  replace key <LALT> { [ Control_L, Control_L  ] };
  replace key <RALT> { [ Super_L ] };
  replace key <MENU> { [ Alt_R ] };
  modifier_map Control { <LCTL>, <RCTL>, <LALT> };
  modifier_map Mod1 { <LWIN>, <MENU> };
  modifier_map Mod4 { <RALT> };
};
_________________________
  • コピー済みのxkbの設定を参考に、mykbdファイルを作成します ③
    • xkb_symbolsの内容にmyswap(swapkeys")を追加しただけです
$ sudo nano ~/.xkb/symbols/myswap  
_________________________
<before>
xkb_symbols   { include "pc+us+us:2+inet(evdev)+ctrl(nocaps)"	};

<after>
xkb_symbols   { include "pc+us+us:2+inet(evdev)+ctrl(nocaps)+myswap(swapkeys")" };
_________________________
  • 作成したキーマップがログイン時に読み込むように、 .bashrcにスクリプトを書き込む ③

    • Ubuntu起動時にターミナルが自動起動させる事で、 .bashrcと一緒に.Xmodmapを読み込ませます(③ Kimuraさん、多謝)
    • 起動時のスクリプトは、絶対パスを指定する事
  • ターミナルが自動起動するスクリプトを書く ③

<参考>
Ubuntu起動と同時に自動でターミナルを開く

$ nano ~/.config/autostart/gnome-terminal.desktop
_________________________
[Desktop Entry]
Exec=gnome-terminal
Type=Application
_________________________
  • .xkbを読み込ませるスクリプトを.bashrcの末尾に追記します ③
$ nano ~/.bashrc
_________________________
# キーボード配列変更
sleep 2
xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null
_________________________
  • 【再起動】して、設定したキーアサイン通りなら完了 ③
  • 【xmodmap】と、【xkb】どちらのPlanにするか?お試し期間中です
    • どっちも、時々スクリプトが空振りしてます"涙"③
3.3.1.5.Plan C:xmodmapを変更して【Apple Wireless Keyboard】を復活させる ⑤
  • 【Apple Wireless Keyboard】は、起動時に一度キーを叩いて、Keyboard右上のLEDがON/OFFするまで2秒ほど待てば、正しく接続することがわかった(以前は我慢が足りなかった)ので、【Apple Wireless Keyboard】を再接続 ⑤
  • 合わせて、キーアサイン』を変更
    • 『左commandキー』を『左Ctrlキー』へ変更

      • 『左commandキー』+『C/X/Vキー』で【コピー/カット/ペースト】が可能
      • 『左commandキー』+『左Optionキー』+『▲/▼キー』で【Workspaceの切り替え】が可能
    • 『右commandキー』を『左Superキー』へ変更

      • 『右command』で【Workspaceの一覧表示】が可能
    • 以下は、[3.3.1.3.Plan A:xmodmapを変更してキーアサインを変える]を参考にしてください。⑤

    • 『左commandキー』と『右commandキー』のキー番号を確認します(私の場合は、以下の通りでした)⑤

      • 『右commandキー』 → 133
      • 『右commandキー』 → 134
    • キーアサインのバックアップを取っておく

$ xmodmap -pke > ~/.Xmodmap_default

キーバインドの変更 Xmodmapの基本的な設定方法

  • 新しく”~/.Xmodmap”ファイルを作って、下記の内容を書く。記載内容は各自のキーボードレイアウトに合わせる事(以下は、Apple Wireless Keyboardへの私の変更内容です)
$ nano ~/.Xmodmap

clear control
clear mod4
		
! Command_L -> Control_L
keycode 133 = Control_L
			
! Super_R -> Super_L
keycode 134 = Super_L
		
add control = Control_L Control_R
add mod4 = Super_L Super_R Super_L Hyper_L

  • 設定を反映させて、動作を確認する
$ xmodmap ~/.Xmodmap
  • 間違ったら、バックアップファイルに戻す
$ xmodmap ~/.Xmodmap_default
  • 【再起動】して、設定したキーアサイン通りなら完了

  • 再起動したら、キーバインドが消える場合は、 「3.3.1.3.1.」を参照の事③

  • これで、【Apple Wireless Keyboard】が復活!!

  • これで、キーボードの左半分にCtrlキーが、『3個(左Super/Caps Lock/本来のCtrlキー)』というゴージャスなキー配列になりました

    • これで、『左altキー』+『c』でコピーができます
  • 3.3.3 『左Altキー』+『s』で『半角英語』に変換

    • mozcの設定:GUIツールのインストール
    • 標準では『mozc』のGUIツールがインストールされていないので、インストールします
      • 標準でインストールされているバージョンもあるようです。その時はスルーしてください ③
$ sudo apt install mozc-utils-gui
  • 設定 > 地域と言語 > 入力ソース > Mozcの歯車アイコン > キー設定の選択 > ことえりを選択

  • これだけで、『Option(Start)キー』+『s/a/c/x/z』で『半角カタカナ/半角英語/ひらがな/全角カタカナ/全角英語』という慣れたことえり風になります。Mozc、エライ

  • 3.3.4.『左Superキー』+『Spaceキー』で英/和の入力ソース切替(USキーボード用)

    • 入力ソース切り替えショートカットキーの変更(USキーボード対応)

      • 設定 > キーボード・ショートカット > タイピングウィンドウの「前の入力ソースへ切り替える」「次の入力ソースへ切り替える」を共に【無効】に
    • Mozcのプロパティウィンドウ > キー設定の選択 > 編集 > Mozcキー設定画面 >『Hankaku/Zenkaku』入力キー(4箇所)>【Ctrl+Space】に変更

  • これで、『左Super(Ctrl)キー』+『Spaceキー』で英/和の切替ができます

4. 内蔵HDDのマウント(OS用SSDとData用HDDを分けて使いたい)(更新 ③)

<参考>
2TB以上のHDDをCentOSにマウントする方法

  • HDDを探す
$ sudo parted -l
  • 表示されたディスクのアドレスを記録しておく ③
ディスク /dev/sdb: 2000GB
  • 2TBを超えているので「GPT」でディスクラベルをつける
$ sudo parted /dev/sdb
(parted) mklabel gpt
(parted) p
  • 全容量をext4、1パーティションとします
(parted) mkpart primary ext4 0% 100%
(parted) p
  • パーティションができたので、partedを終了させます
(parted) quit
  • 「ext4」でフォーマットする
$ sudo mkfs.ext4 /dev/sdb1
  • マウントポイントを作成して、HDDをマウントする。Dockerから楽にアクセスしたかったので、userフォルダ内にマウントポイントを変更 ③(マウントポイントって、単なるディレクトリでした。但し、この場所で良かったのかは、不明だったので、chmod777はやっておきました)
$ sudo chmod 777 sda
$ sudo chmod 777 sda1
$ sudo mkdir /home/#USER/Hdd_2nd
$ sudo mount -t ext4 /dev/sdb1 /home/#USER/Hdd_2nd
$ sudo mount
  • 自動マウントの設定(/etc/fstab に情報を書き込む)
$ sudo nano /etc/fstab
  • 開いたファイルに以下の行を追加(文字間はSpaceではなく、【tab】。アクセス先の末尾には「/」は不要。ココでハマりました)
/dev/sdb1       /home/#USER/Hdd_2nd   ext4    defaults        0       0
  • 再起動して、#userフォルダ内に”Hdd_2nd”がマウントされていれば、成功です ③

5. 基本環境とソフトのインストール(更新 ③ ⑥)

<参考>
Ubuntu 20.04インストールしてからやること

5.1. 不要なソフトのアンインストール

  • Ubuntu Software > インストール済み > 不要なソフトを『削除』する

5.2. CopyQのインストール(コピー/ペーストの強化ソフト):必要に応じて

$ sudo apt install copyq
  • 基本設定
    • 自動的に起動する オンに
    • グローバルショートカット マウスカーソルの下にメインウィンドウを表示をAlt+Ctrl+Vに

5.3. dumpのインストール:バックアップソフト(システムのフルバックアップ用):必要に応じて

$ sudo apt install dump
  • 実際のバックアップコマンド(データ用HDDにバックアップしてみました)コマンドに誤記(保存元と保存先が逆)があったので修正 ③
  • 事前に/home/#USER/Hdd_2nd/Sys_Backup まではフォルダを作成すること⑥
$ sudo dump -0 -u -j -f /home/#USER/Hdd_2nd/Sys_Backup/backup_2021_04_04.dump /dev/sda2

  • 実行して、最終的に以下の表示が出れば、バックアップ完了 ③
DUMP: DUMP IS DONE

5.4. Google Chromeインストール(Google翻訳+Google Colabの専用ブラウザ):必要に応じて ⑥:コマンドが通らなくなっていたので修正

5.4.1. 公式サイトから「64 ビット .deb(Debian/Ubuntu用)」 を選択し、「同意してインストール」を選択します。
Screenshot 2023-08-27 at 12-11-17 Google Chrome - Google の高速で安全なブラウザをダウンロード.png

5.4.2. [ダウンロード]フォルダ から ダウンロードした .debファイルを右クリックして、「別のアプリケーションで開く」を選択します。
5.4.3. ソフトウェアのインストール から「 選択 」をクリックします。
5.4.4.「インストール」をクリックして、パスワードを入力します。

Screenshot from 2023-08-27 12-48-58.png

5.4.5.「インストール」が完了するので、ウィンドウを閉じます。

Screenshot from 2023-08-27 12-50-30.png

<参考>
【図解】Ubuntu Desktop 22.04 LTS:Google Chromeインストール手順

5.5. Thunderbirdの設定

  • iCloudのメールアカウントを設定するには、AppleIDホームページから「特別なパスワード」の取得が必要です
  • それ以外は、普通です

5.6. Mozcの辞書を強化

<参考>
Mozc(Google IME)でカナ英・和英変換

  • 上記を参考に、「カナ英辞書v2.txt」と「和英辞書.txt」、「Google日本語入力強化辞書.txt」を「Mozc→辞書ツール」で「新規辞書にインポート」します(間違って、「選択した辞書にインポート」すると面倒くさいことになりました。ご注意ください)
  • 辞書の優先順位が気になる方は、参考ページの「ユーザー辞書の優先回避」を参考にしてください

5.7. ウィルスソフトを入れておく(メインPCとのやり取り用)

  • ”Ubuntu Software” で”ClamTk”をインストール

5.8. メインPCとのデータのやりとり

  • 色々手法があるようですが、システム改変が不要なブラウザ経由でやり取りする以下のサービスが無難です
    • OneDrive
    • GoogleDrive

5.9. Dock にゴミ箱を表示する ③

$ gsettings set org.gnome.shell.extensions.dash-to-dock show-trash true 

5.10. フォント(沼ですので、趣味でどうぞ) ③

  • 標準フォントにTakaoフォントのインストール③
    • 標準フォントの「Noto Sans CJK Regular」はアジア圏用なので、少し字体が日本語らしくない箇所があるそうです。気分の問題ですが、Ubuntu 16.04 の日本語環境の標準となっていたTakaoフォントをインストールします ③
$ sudo apt install fonts-takao
$ sudo fc-cache -fv
$ cp -r HackGen展開フォルダ ~/.local/share/fonts #現在のユーザーにインストール 
$ fc-cache -vf #キャッシュを更新して、再起動 
  • 終わったら、Zipファイルと展開したフォルダを削除
  • Tweaksの「フォント」で使用するフォントを設定

Screenshot from 2021-04-08 19-21-05.png

5.11. 見た目も個性的に(ここも沼ですので、趣味でどうぞ) ③

  • サンプル:Papirusのインストール:Tweaksがインストール済みの前提です
$ sudo add-apt-repository ppa:papirus/papirus
$ sudo apt-get update
$ sudo apt-get install papirus-icon-theme
  • Tweaksの「外観」で使用するアイコンを設定します(スクショのアイコンは変更済みです)
    Screenshot from 2021-04-11 13-31-57.png

6. 開発系の基本ソフトのインストール(更新 ③

6.1 シェルのマニュアルの内容を日本語に:英語が苦手な方

  • シェルの環境変数LANGが「ja_JP.UTF-8」で有ることを確認
$ echo $LANG
  • 違っていたら、変更
$ export LANG=ja_JP.utf8
  • 変更した内容を再確認
$ echo $LANG
  • 日本語のマニュアルをインストール
$ sudo apt-get install manpages-ja
  • 英語に戻したいときは、
$ export LANG=en_US

6.2 fishシェルとfisherのインストール:好きな人だけ

  • 使いやすいと評判のシェルを入れてみました
    • 文字化けしない様にpowerline fontをインストール ③
$ sudo apt-add-repository ppa:fish-shell/release-3
$ sudo apt-get update
$ sudo apt-get install -y fish

$ sudo apt install curl #curlがインストール済みなら不要
$ curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
$ fish /fishを起動
$ fish > fisher -v #fisherのインストール確認
  fisher, version 4.3.0
$ fish > fisher install oh-my-fish/theme-bobthefish #テーマのインストール
$ fish > exit #通常のShellに戻る
  • PowerLineに対応したフォントのインストール
    • fishシェルではフォントによって文字化けor文字ズレするらしいので入れます
    • 下記の"fonts-powerline"以外に"Cica"とかおすすめですが、私は"白源"を流用するのでインストールしていません
$ sudo apt-get install fonts-powerline #powerline fontをインストール
  • <先人からの教え>
    • ログインシェルはbashから変更しない事
    • fishをログインシェルに設定していません。terminator専用にしました

6.3 terminatorインストール:好きな人だけ

  • ROSでシェルを複数開けるので、入れておきます
$ sudo apt install terminator
  • 起動してします
$ terminator
  • ターミナル内で右クリックして『設定』します:以下は、お好みで設定します
    • 「プロファイル>default>背景>背景」で背景を透過:0.80
    • 「プロファイル>default>コマンド」で、[ログイン・シェルではなく、カスタムコマンドを実行]にチェックを入れて [/usr/bin/fish] を入力
    • 「プロファイル>一般>Font」にてフォントを「○○○ for Powerline」等のPowerlineフォントに変更

6.4. gitインストール:必要な人だけ

  • 開発(特にROS)には必須ですが、必要になった時に入れましょう
$ sudo apt install git
  • 最低限の設定はしておきます
$ git config --global user.name ユーザー名
$ git config --global user.email メールアドレス
$ git config --global core.editor nvim
  • githubに公開鍵登録
    • gitプロトコル使う場合は鍵認証が便利です
$ sudo apt install xclip 
$ bash
$ ssh-keygen -t rsa -b 4096 -C メールアドレス
$ #〜パスフレーズ使わない人はエンター連打〜
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub | xclip -selection c #xclipコマンドでクリップボードに生成されたSSH Keyがコピーされる
$ # githubのSettingsページの[SSH and GPG Keys]からSSH KEYを登録する
$ # xclipコマンドでクリップボードにコピーされた公開鍵をペーストする

6.5. やっぱり、DeelL翻訳がUbuntuでも気軽に使いたい:必要に応じて

<参考>
LinuxでDeepL翻訳(masan4444さん、グッジョブ!)
- Scriptはフルパスで書くことと記載がありますので、このソフトのフルパスは『sh /home/ユーザー名/deepl-clip/app.sh』となります
- 私はScriptの起動を「Ctrl+BCtrl+Alt+C」としたので、「Ctrl+C」+「Ctrl+Alt+C」でブラウザ上にDeepL翻訳の結果が表示されます。(「Ctrl+B」だと、[TMUX]使用時にコマンドと干渉するので、キーアサインを変更

6.6. Visual Studio Codeをインストール:オススメ

  • Ubuntu上でのProgramEditorのデファクトスタンダード(だそうです)
    • 機能が多いので、慣れるために会社のWindowsと家のMacのEditorをVS Code に統一しましょう

    • ダウンロードページからLinux版をダウンロードして、インストール

    • 設定

      • PATHが通っているか?
        • code -v
        • バージョンがでたらOK
      • PATHが通っていなかったら、
        • [Command]+[Shift]+[P]キーを入力して、「コマンドパレット」を表示したら、・Shell Command: Install 'code' command in PATH)
    • 使いやすくする

      • 画面左のExtensionをクリックして、MARKETPLACEを開く
        • Remote Development をインストール:Docker用
        • Docker をインストール:Docker用
      • フォントの変更
        • 「ファイル>ユーザー設定>設定>「設定の検索」を開き、「Font-Family」を検索する
          • お気に入りのPowerLineフォントを「Font-Family」リストの左端に記載する
            • お気に入りの和英フォント1つだけでも無問題
    • 日本語化する

    • Visual Studio Codeを再起動

6.7. 一区切りついたので、システムのバックアップを行う:必要な人だけ

  • バックアップを行うコマンドに誤記(保存元と保存先が逆)があったので修正 ③
$ sudo dump -0 -u -j -f /home/#USER/Hdd_2nd/Sys_Backup/backup_2021_04_25.dump /dev/sda2

(バックアップ元は尾番の数字(/dev/sda2の2)まで記載すること)

6.8. ターミナル用のエディタをインストールする ④

  • "Vim"や"Emac"等、試してみましたが、初心者に優しい"nano"でも今一つ。全エディタともキーアサインが特殊すぎて、Ubuntuに戻った時に頭と手が切り替わりません
  • Ubuntuのキーアサインを「Mac」に寄せたので、ターミナル用エディタも寄せたい。調べてみたところ、"Micro"というエディタがDesktopのキーアサインに近いとの記事がありましたので、インストールしてみます

<参考>
Linux初心者の悩みを解消!「micro」を使って簡単ファイル編集
Micro のホームページから「ダウンロード」して、ファイルを右クリックから「別のアプリケーションで開く」「ソフトウェアのインストール」の順番でインストールする ⑥

6.9. 温度表示用のソフトをインストール ④

  • そろそろ暖かくなってきて、ファンの音が気になってきたので、温度表示用のソフトウェアをインストールします
  • CUIとGUIの両方で使えて、ディスクの温度もわかる"psensor"というソフトを入れてみました
    GUIでのみ使用するなら、『Ubuntu Software』を立ち上げて、【psensor】で検索してインストールする ⑥
$ sudo apt install lm-sensors hddtemp # 依存関係のあるソフトを事前にインストール
$ sudo apt install psensor
$ sudo sensors-detect # Hardwareの検出(結構な数を検出先を聞いてきますし、検出完了まで時間が掛かるものがあります。気長に待ちましょう)
  • CUIでの確認
$ sudo sensors #ターミナルでの温度表示

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +58.0°C  (high = +84.0°C, crit = +100.0°C)
Core 0:        +58.0°C  (high = +84.0°C, crit = +100.0°C)
Core 1:        +48.0°C  (high = +84.0°C, crit = +100.0°C)
Core 2:        +49.0°C  (high = +84.0°C, crit = +100.0°C)
Core 3:        +49.0°C  (high = +84.0°C, crit = +100.0°C)
Core 4:        +51.0°C  (high = +84.0°C, crit = +100.0°C)
Core 5:        +49.0°C  (high = +84.0°C, crit = +100.0°C)

acpitz-acpi-0
Adapter: ACPI interface
temp1:        +27.8°C  (crit = +119.0°C)

iwlwifi_1-virtual-0
Adapter: Virtual device
temp1:        +34.0°C  
  • GUIでの確認
    • "アプリケーションボタン(9個の点)"をクリックして、検索ウィンドウに「psensor」と入力して、表示されたアイコンをクリックするとソフトが立ち上がります
    • 起動時はグラフが表示されません。グラフは、画面の左端を左にドラッグすると出てきます
      Screenshot from 2021-05-16 13-57-40.png

6.10. Screenshot用のソフト【Flameshot】をインストール ⑤

7. Docker(NVIDIA用)のインストール(更新 ③
7.1.Plan A:NVIDIA推奨版 ③ 以下、22.04で再トライ ⑥
NVIDIAの佐々木さんのアドバイスで新規追加 <参考> [NVIDIA Docker って今どうなってるの? (20.09 版)](https://medium.com/nvidiajapan/nvidia-docker-って今どうなってるの-20-09-版-558fae883f44)
  • 7.1.1 NVIDIA ドライバのインストール

<参考>
CUDA ToolkitのWeb サイト

  • 上記のサイトで自分の環境をセレクトすると、コマンドが発行されます(下記は私の設定と発行された結果です。必ずサイトから最新のコマンドを発行してください)

Screenshot from 2023-10-22 18-38-44.png

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
$ sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/12.3.0/local_installers/cuda-repo-ubuntu2204-12-3-local_12.3.0-545.23.06-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu2204-12-3-local_12.3.0-545.23.06-1_amd64.deb
$ sudo cp /var/cuda-repo-ubuntu2204-12-3-local/cuda-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get -y install cuda-toolkit-12-3
  • 最後の行を$ sudo apt-get install -y cuda-drivers に置き換えれば、最新のドライバだけがインストールされます

  • インストールが終わったら、一旦再起動 ⑥

  • $ nvidia-smi でステータスを確認すると2.2.の時よりドライバーのバージョンなどが上がっていました

$ nvidia-smi       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.39       Driver Version: 460.39       CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
  • この手順だと「nouveau」を手動で止める手間が不要だそうです

  • 7.1.2 Dockerのインストール

    • 公式の便利Scriptが簡単そうだが"Using these scripts is not recommended for production environments"と書いてあるのに入れる勇気は無いので、以前失敗した通常インストールを再トライ

<参考>
Install Docker Engine on Ubuntu

  • 上記サイトの順番にインストールを行う(最新のサイト情報に従ってください)

    • 新規なので、アンインストールは不要
  • aptリポジトリを使用してインストールします

  • 新コマンドでインストール ⑥

# Add Docker's official GPG key:
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
$ echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
  • 最新パッケージのDockerパッケージをインストール ⑥
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • Docker エンジンのインストールが成功したことを確認する ⑥
$ sudo docker run hello-world
  • 上記のコマンドを走らせると、情報メッセージが表示されます。その中に以下の文言があれば成功です ⑥
Hello from Docker!
This message shows that your installation appears to be working correctly.
  • 下記のコマンドを走らせると、sudo なしにDockerコマンドを実行できますが、それ以外にDockerコマンドで発生していたパーミッションエラーが発生しなくなりました!
$ sudo usermod -aG docker $USER
  • 7.1.3 nvidia-docker2パッケージのインストール

<参考>
NVIDIA Container Toolkit:Installation Guide

  • 上記サイトの順番にインストールを行う(最新のサイト情報に従ってください)

  • Aptインストールするためのリポジトリーを設定する ⑥

$ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list \
  && \
    sudo apt-get update
  • インストール ⑥
$ sudo apt-get install -y nvidia-container-toolkit
  • Docker の構成 ⑥
  • Dockerランタイムを構成 ⑥
$ sudo nvidia-ctk runtime configure --runtime=docker
  • Docker デーモンを再起動 ⑥
$ sudo systemctl restart docker
  • 動作確認 ⑥
$ sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
# 以下の表示が出たら、成功
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.06              Driver Version: 545.23.06    CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
  • 後片付け
$ docker container prune # コンテナの全削除
$ docker image ls # イメージの表示
$ docker image rm  hello-world # Hello-worldした時のイメージを削除
$ docker image rm  2ec708416bb8 # nvidia/cudaは素直に消えてくれなかったので"IMAGE ID"でイメージを削除
  • 無事にインストールできた様です
7.2.Plan B:2020年9月の実績あり版 ③
<参考> [DockerでのディープラーニングGPU学習環境構築方法](https://qiita.com/karaage0703/items/e79a8ad2f57abc6872aa)
  • 3版(2021年4月)改版時は[7.2.]の再チェックを行っていません

  • 7.2.1. Docker-GPUの設定

  • 7.2.1.1 セキュアブートの無効化

    • Docker上でnvidia-smi コマンドが上手く通らないそうなので、必ず実施する事
    • 私の環境では、nvidia-smi コマンドは上手く通ったが、不安なのでちゃんと「無効化」する
    • BIOSで変更します(ASUSのマザーボードは「セキュアブートキーの削除」で無効化表示になった)
      • 「セキュアブートの無効化は不要」とのアドバイスで削除 ③
  • 7.2.1.2 nouveauの停止確認

    • インストール時にGPUの設定時に止まっているはずなので、確認します
$ lsmod | grep -i nouveau
  • 何も表示がでなければOK

  • 7.2.1.3 NVIDIAドライバーの更新

    • ソフトウェアとアップデート > 追加のドライバーから(プロプライエタリ, 検証済み)のドライバーを選んで、【再起動】してください
      追加のドライバー.png
      【トラブル】
      「追加のドライバー」で(プロプライエタリ, 検証済)のドライバーを選択してインストールすると、
$ nvidia-smi
$ Failed to initialize NVML: Driver/library version mismatch

と表示されました(本来、7.3.のGPUステータスが表示されるのが正しい)

コマンド入力でもインストールしても状況は変わらず

$ sudo ubuntu-drivers autoinstall
  • (プロプライエタリ, 検証なし)のドライバーだと正しく$ nvidia-smiコマンドの結果が(多分)正しく出るので、しばらくはこのままとします

  • NVIDIAのホームページにはもう少し新しいドライバーがあるが、自分で入れるとハマる場合も多い様なので、ひとまずUbuntuさんの『2番めにオススメ』のドライバーで【良し】とします

  • 7.2.2. nvidia-cuda-toolkit のインストール

    • NVIDIA社製GPUカードを汎用的な数値計算目的で利用したい場合に必要となるソフトウェアです
      • 「NVIDIA Docker使うなら、NVIDIAのドライバさえ入れれば、CUDAもcuDNNもいれなくてよいです。NVIDIAのドライバが対応している範囲で好きなイメージ使えばよいです」 ①
$ sudo apt install nvidia-cuda-toolkit
$ sudo apt install -y curl(インストール済みなら不要)
$ curl -s https://raw.githubusercontent.com/karaage0703/ubuntu-setup/master/install-docker.sh | /bin/bash
  • 【再起動】してください
  • Dockerのインストール確認
$ sudo docker run hello-world
  • エラーがでなければOKです

  • 後片付け

$ docker container prune
$ docker image rm hello-world:latest
  • 7.2.4. NVIDIA Container Toolkitのインストール
    • Dockerコンテナからホスト上のGPUを使用するためのソフトです
    • これも、『からあげさん』のスクリプトを使わせてもらいます(からあげさん、再多謝)
$ curl -s https://raw.githubusercontent.com/karaage0703/ubuntu-setup/master/install-nvidia-container-toolkit.sh | /bin/bash
  • 起動確認
$ docker run --gpus all --rm nvidia/cuda nvidia-smi
  • 何故かエラーが出るけど、無視 (からあげさんも無視してたし(笑))
  • 7.3. Docker上でNVIDIA GPUの動作確認
    • あえて、TensorFlow公式のDockerイメージをrunする
$ docker run --gpus all -it --rm --name tensorflow-gpu -p 8888:8888 tensorflow/tensorflow:latest-py3-jupyter bash
# (-p 8888:8888 は、jupyter notebookのポート用)
  • $ nvidia-smiコマンドで以下の表示がでれば、Docker上でGPUが動作しています
$ nvidia-smi

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.06              Driver Version: 545.23.06    CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce GTX 1660 ...    On  | 00000000:01:00.0  On |                  N/A |
| 41%   31C    P8              12W / 125W |    187MiB /  6144MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

【注意】

  • Docker上で$ nvidia-smiコマンドしても、プロセスの詳細が表示されません。これは仕様のようです

    • StackOverflowで質問したら、【You will not be able to see, due to driver not being aware of PID namespace.(DeepL翻訳:ドライバがPIDネームスペースを認識していないため、見ることができません)】と回答がありました
  • この状態からJupyterNotebookにアクセスできます

$ jupyter notebook
# もしくは
$ jupyter notebook --port 8888 --ip=0.0.0.0 --allow-root
  • jupyter notebookが起動し、ターミナル上にアドレスが表示されます
http://127.0.0.1:8888/?token=xxxxxxxxxxxxxx`
  • アドレスを右クリックして、『アドレスを開く』を選択すると、ブラウザが開き、「Jupyter Notebook」が起動します
  • 「New」から「Python3」を選択します
  • 以下のコマンド実行して、GPUが表示されたらDocker上の「Jupyter Notebook」でGPUが認識されています
from tensorflow.python.client import device_lib
device_lib.list_local_devices()

Screenshot from 2021-04-13 19-09-53.png

  • 確認できたら、ブラウザの「Logout」をクリックして、"Jupyter Notebook"を止めます
  • ブラウザを閉じで、以下の手順で"Jupyter Notebook"と"Docker"を終了させます
# Ctrl+C:"Jupyter Notebook"の動作を止める
$ exit # Dockerを止めて、通常のターミナルに戻る
  • 7.4. お試しで走らせたDockerのcontainerとimageの削除
$ docker container prune
$ docker image rm tensorflow/tensorflow:latest-py3-jupyter bash
  • 7.5. Dockerのお勉強:必要な人だけ

    • 後々、Dockerの仕組みやコマンドは一通り知っている方が楽なので、この辺で少し勉強しておくと良いと思います
    • Dockerのインストールまでは終わっているので、それ以降を学べばOKです
    • 私は、Udemyの講座を(例の)セールで買いました
  • 折角なので、Dockerhubのアカウントも取っておきます

8. Docker上にNGCイメージから【TensorFlow+Keras】の環境を構築(更新 ③
  • NVIDAの提供しているNGCのTensorFlow イメージを使います。TensorFlow公式のDockerイメージにNVIDIAのGPUにチューニングしてあるらしいので、初学者の勉強用にはちょうどよいかなと思ってます
    • 「NVIDIAの推奨方法」で[NVIDIA Docker]をインストールした前提で全面修正 ③

8.1. cuDNNのインストール NVIDIAのDriverとCUDAのバージョンの確認

  • CuDNNも必要かどうか判らないのですが、NGCのイメージ決めにバージョンが必要なので入れます

  • 「NVIDIA Docker使うなら、NVIDIAのドライバさえ入れれば、CUDAもcuDNNもいれなくてよいです。NVIDIAのドライバが対応している範囲で好きなイメージ使えばよいです」 ①

  • "NVIDIA Driver"と"CUDA"のバージョン確認

$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.39       Driver Version: 460.39       CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
  • CUDAのバージョン確認方法

$ nvcc -V

-NVIDIA cuDNNのホームページにアクセスします
- ユーザー登録して、インストールしたCUDAのバージョンに対応するdebファイルをダウンロードします
- ランタイムとDeveloper Libraryをダウンロードしました
- cuDNN Runtime Library for Ubuntu18.04 (Deb)
- cuDNN Developer Library for Ubuntu18.04 (Deb)

  • dpkgコマンドでインストールを実行します(インストールの順番は重要な様です)

$ sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.1_amd64.deb
$ sudo dpkg -i libcudnn8-dev_8.0.2.39-1+cuda10.1_amd64.deb
$ sudo dpkg -i libcudnn8-doc_8.0.2.39-1+cuda10.1_amd64.deb

8.2. NVIDIAのドライバーのバージョンを確認

  • CUDAのバージョン確認方法

$ nvcc -V

  • CuDNNのバージョン確認方法

$ cat /usr/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)

  • この場合、「7.6.5」となります

8.3. TensorFlow用DockerをNGCイメージを選択

  • 以下リンク先と"NVIDIA Driver"と"CUDA"のバージョンからPULLするイメージを決めます
    <参考>
    TensorFlow Release Notes

  • nvidia-smiコマンドで"Driver"と"CUDA"のバージョンは判りますが、リンク先の「Driver Requirements」のバージョン表示にはもう一桁あります
    - 例:11.2 → 11.2.1

    • NVIDIAのドライバが対応している範囲で好きなイメージ使えばよいです ①を参考に、Driverのバージョンを主体にNGCイメージを決めます(正しい判断かは不明)
  • PC上でわかっているバージョンは、"NVIDIA Driver:460.56/CUDA:11.2"です

  • 「TensorFlow Release 21.03」の場合、"NVIDIA Driver:460.32.03 or later/CUDA:11.2.1"となっているので使えると判断しました

    • 結局、私の環境では「21.03」では"jupyter notebook"が正しく動作せず、「21.02」に変えました。「21.02」の場合、"NVIDIA Driver:460.27.04 or later/CUDA:11.2.0"です
    • nvidia-smiで表示されない桁は切り捨てるのが正解かもしれませんが、詳細は不明です
    • PCの環境を荒らさないDockerのイメージファイルなので、色々試してみてください
  • 以下のホームページから先程えらんだNGCイメージの「Pullコマンド」を入手します
    <参考>
    NGC|catalog TensorFlow

    • 私の場合、「TensorFlow Release 21.02」を選んだので、「21.02-tf1-py3」のNGCファイルをPULLすることにしました
      • まだ、"TensorFlow2"を学習する予定が無いので、TF1を選んでます。ここは趣味でどうぞ
    • 欲しい「NGC」ファイルの右端の「…」をクリックすると、「Pull Tag」と表示されます
    • 「Pull Tag」をクリックすると、欲しいNGCイメージの「Pullコマンド」がクリップボードにコピーされます
        Screenshot from 2021-04-19 18-26-30.png

8.4. TensorFlow用DockerをNGCイメージを取得して、containerを起動

  • TensorFlow用DockerをNGCイメージを取得
    • 先程クリップボードにコピーされたコマンドを端末にペーストします
$ docker pull nvcr.io/nvidia/tensorflow:21.02-tf1-py3
  • NGCイメージを「my_tensor_1」という名前でコンテナとして立ち上げます
    • Host側の"~/Docker_File/sk_learn"フォルダとDocker内の"/workspace"フォルダを【-v】オプションで結合 ④
      • Host側のフォルダは好きなフォルダを選ぶ。Docker内のフォルダは、【-v】オプションなしでRUNさせて、中身を確認して選ぶ。ともに「絶対パス」で記載すること
# Before
docker run --name my_tensor_1 --gpus all -it -p 8888:8888 nvcr.io/nvidia/tensorflow:21.02-tf1-py3
# After
docker run --name my_tensor_1 --gpus all -it -v ~/Docker_File/sk_learn:/workspace -p 8888:8888 nvcr.io/nvidia/tensorflow:21.02-tf1-py3

8.5. containerの内部ファイルをチェックして、不足する分をインストール

  • 既にインストールされているプログラムをチェックします
$ pip list
  • あとは必要に応じて、インストールしていきますが、この状態で「Jupyter Notebook上でkerasを使って、"matplotlib"描画できる」ぐらいはてんこ盛りにインストールされているので、とりあえずはこのままで良いと思います。

  • 以下のコマンドを行うとアップデートが必要なプログラムもてんこ盛りですが、パッケージの依存関係や互換性からすんなり「まとめてアップデート完了」というわけには行きません。(私もプログラムバージョンの依存関係を注意してアップデートしたのですが、結局デッドロックしてしまいました(笑))

  • 実害がでるまでは、放置して楽しみましょう

$ pip list -o
  • 私はとりあえず、以下を行いましたw
$ pip install --upgrade pip
  • 参考:頑張ってアップデートする人用
$ pip install pip-review # あまりにアップデートが多いので一括アップデート用
$ pip install -U pip-review # 安心のために"pip-review"自体をアップデートを確認
$ pip-review --auto # アップグレードをまとめて処理
  • 下記の章を参考に、同様に「jupyter notebook」の立ち上げと「GPU」の動作確認、と描画確認を行います
    • 7.3. Docker上でNVIDIA GPUの動作確認

8.6. containerの停止と再起動

  • 8.6.1. containerを止めます
$ exit
  • 8.6.1. containerを再起動します
$ docker start my_tensor_1 #(Container名)
# もしくは
$ docker restart my_tensor_1 #(Container名)
  • Containerを起動しても、Container内に入れない場合の対応
$ docker container ls -a # Containerが起動している事を確認
# "STATUS""Exited"と表示されていなければ、動いてます。
$ docker attach my_tensor_1 (Container名) # (多分)ターミナルがDocker表示に切り替わります

8.7. 変更したcontainerの内容をDockerイメージファイルに保存する

  • 本来、Dockerファイルで管理する方がディスク容量も食わずクールなのでしょうが、折角PULLしてインストールしたコンテナなので、修正したコンテナからDockerイメージを新たに作成します

  • 今のNGCファイルだと追加インストールは不要かもしれませんが、今後のために記載

  • 8.7.1. 保存したいDockerコンテナを止めます

$ exit
  • 8.7.2. 対象のコンテナが止まっていることを確認します
  • 『STATUS』が『Exited』になっていればOKです
$ docker container ls -a
CONTAINER ID   IMAGE                                     COMMAND                  CREATED          STATUS          PORTS                                                           NAMES
edbc4c5aacb8   nvcr.io/nvidia/tensorflow:21.02-tf1-py3   "/usr/local/bin/nvid…"   12 minutes ago   Up 47 seconds   6006/tcp, 6064/tcp, 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp   my_tensor_1

  • 8.7.3. イメージファイルに保存します
  • 修正したコンテナを「my_tensorflow_img:1.0」という名前のイメージファイルとして保存します
  • ここで、DockerHubに上げる事を考慮した場合、DockerHubのアカウント名(inata)が必要になります
$ docker container commit -a "INA-Ta" my_tensor_1 inata/my_tensorflow_img:1.0
  • ローカル保存だけなら、署名「-a "INA-Ta"」や「アカウント名」が無くても通ります
$ docker container commit my_tensor_1 my_tensorflow_img:1.0
  • 8.7.4. 修正したDockerイメージからコンテナ駆動する
  • 今後、コンテナを新たに立ち上げる場合は、保存したイメージファイルから行えば、変更後の状態からスタートできます(セーブポイントですね)
  • 「my_tensorflow_img:1.0」イメージファイルを「my_tensor_2」という名前でコンテナを立ち上げます
$ docker run --name my_tensor_2 --gpus all -it -p 8888:8888 inata/my_tensorflow_img:1.0

8.8. 変更したイメージファイルをDockerhubへ保存する

  • DockerHubにログインします
$ docker login
  • 新しく作ったイメージファイルをDockerHubへプッシュします
$ docker image push inata/my_tensorflow_img:1.0

DockerHub.png

  • 終わったら、ログアウトします
$ docker logout

8.9. 変更したイメージファイルをローカルフォルダ保存する/読み出す

  • Dockerhubのファイルも「「6カ月間利用されていないコンテナイメージを削除する」そうなので、ローカルファイルにも保存します。保存先はデータ用のHDDとします。tarファイルで保存されます。コマンドの誤記を修正
$ docker image save inata/my_tensorflow_img > /home/#USER/Hdd_2nd/Docker_Image/my_tensorflow_img_1.0.tar 
  • ローカルファイルからイメージファイルを読み込みます。コマンドの誤記を修正
$ docker image load  < /home/#USER/Hdd_2nd/Docker_Image/my_tensorflow_img_1.0.tar

【一旦、終了】m(_ _)m

9. Docker上に【ROS2】の環境を構築【一旦、保留 ③】
  • 2021年4月現在、"Docker"から描画させる事が思いの外難しく、Docker初学者が"Docker"上から"Gazebo"にアクセスなど絶対無理!という感じです
  • "Docker"+"描画"の敷居がもう少し下がるまで、一時保留しますm(_ _)m
  • 「機械学習」と「ROS」を同じPC上で勉強している方は、私の様に色々やりすぎて本体側のPythonを壊してUbutn再インストールにならないように、[Pyenv]を使うか、[デュアルブート化]をおすすめします

10. Docker上に【PyTorch】の環境を構築【更新 ⑤】
  • NGCイメージから【TensorFlow+Keras】をPullしたところ、ソフトがてんこ盛りでイメージサイズが『14.5GB』もあったので、【PyTorch】環境は、なるべくシンプルを目指す事にします

#### 10.1. PyTorchの純正イメージをPullする

$ docker pull pytorch/pytorch:latest
  • Pullされたイメージはv1.8.1、ホームページ上の最新はv1.9.0
  • CUDA等のVersionの問題だと思われるが、泥沼なので”これで良し”とします
  • dockerイメージが保存されていることを確認します
$ docker image ls -a
  REPOSITORY                  TAG             IMAGE ID       CREATED        SIZE
  pytorch/pytorch             latest          5ffed6c83695   4 months ago   7.25GB
  • 直接比較はできませんが、『14.5GB』→『7.25GB』まで減ったので、少し嬉しい♪

#### 10.2. PyTorchの純正イメージからコンテナを生成する

  • dockerイメージを「my_torch_1」という名前でコンテナとして立ち上げます
  • データ用にマウント済みのHDD(Hdd_2nd)内の”pytorch”フォルダとDocker内の"/workspace"フォルダを【-v】オプションで結合します
$ docker run --name my_torch_1 --gpus all -it -v ~/Hdd_2nd/pytorch:/workspace -p 8888:8888 pytorch/pytorch

#### 10.3. PyTorchコンテナの動作確認

  • 10.3.1. PyTorchフォルダとつながっているか?
    • ”~/Hdd_2nd/pytorch”内に仮フォルダ(test)を作成し、DockerのWorkspace上に表示されるか?
root@33d8508ba18c:/workspace# ls -a
.  ..  test
  • 10.3.2. GPUは繋がっているか?
    • ”nvidia-smi”コマンドでドライバー等が表示されれば、OK
    • ”nvidia-smi”コマンドでもプロセスは表示されません。7.3を参照ください
root@33d8508ba18c:/workspace# nvidia-smi
     
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.91.03    Driver Version: 460.91.03    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce GTX 166...  Off  | 00000000:01:00.0  On |                  N/A |
| 41%   35C    P8    11W / 125W |    666MiB /  5936MiB |      3%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

#### 10.4. PyTorchコンテナのインストール済プログラムをチェックして、不足分を追加する

  • 既にインストールされているプログラムをチェックします
root@33d8508ba18c:/workspace# pip list
  • ざっと見て、必要そうなプログラムはインストール済みでした。”tensorflow”もいるし(笑)
tensorflow                       1.15.5+nv
tensorflow-estimator             1.15.1
  • PythonのVersionは、以下の通り
root@33d8508ba18c:/workspace# python -V
Python 3.8.5

#### 10.5. PyTorchコンテナのプログラムのアップデート

  • 以下のコマンドでチェックすると、アップデート可能なプログラムがてんこ盛りですが、【TensorFlow】でアップデートした時にプログラムの依存関係が崩れてコンテナ自体が動かなくなったので、実害がでるまで放置します
root@33d8508ba18c:/workspace# pip list o
  • データ保存用にHDDをマウントさせているので、問題が出たらImageファイル自体のVersionを上げたほうが簡単だと思います
  • 動かそうとした途端、Jupyter系が入っていないことに気づき、そこだけインストールした。(上記のチェックでは気が付かず)
root@33d8508ba18c:/workspace# pip install --upgrade pip # pipするなら、アップデートはやっておこう程度の気持ち
root@33d8508ba18c:/workspace# pip install ipython==7.23.1 # jupyter labのインストール時にバージョンが古いと怒られたから。最低限のバージョンにアップデート
  • jupyterlabの場合
root@33d8508ba18c:/workspace# pip install jupyterlab  
root@33d8508ba18c:/workspace# jupyter lab --ip=0.0.0.0 --allow-root #  rootでは動かなかったので、とりあえず"--allow-root"を追加
  • jupyter notebookの場合
root@33d8508ba18c:/workspace# pip install notebook 
root@33d8508ba18c:/workspace# jupyter notebook --ip=0.0.0.0 --allow-root
  • matplotlibを追加インストールする
    • "matplotlib−inline"が入っていたので大丈夫かなと思っていたけど、エラーが出るので追加インストールする
pip install matplotlib
  • これで正常♪

  • 残件:Docker上でのrootを使わない方法を考えなきゃ

#### 10.6. PyTorchコンテナが再起動しない場合

  • 8.6を参照してください

#### 10.7. 【VSCode】からコンテナにアクセスできるようにする

  • インストールは、6.6を参照してください

  • 10.7.1. "Remote - Containers" をインストール

    • 【VSCode】の『機能拡張』→『"Remote"と入力して、表示される【Remote - Containers】を選択』→『インストール』する。(スクショは、インストール済みの画面を加工しています。実際とは少し違うと思います。)
      image.png
  • 10.7.2. 実行中のコンテナにAttachする

  • 【VSCode】の左下の緑色アイコンをクリックして、リモードウィンドを開く
    image.png

  • リモートウィンドウに『At』と入力すると、『Attach to Running Container…』が補完表示されるので選択する
    image.png

  • 『Attach』できるコンテナのリストが表示されるので、目的のコンテナを選択
    image.png

  • これで、【VSCode】が目的のコンテナに接続されます。細かい設定は、使いながら考えます

  • <参考>
    Attach to a running container

変更履歴

0版:2020年9月21日

1版:2020年9月22日 ①

  • からあげさんからのコメントを反映(多謝:からあげさん)

2版:2020年9月25日

  • あんまり長いので、折りたたみ表示に変更

3版:2021年4月25日 ③

  • 『NVIDIAの佐々木さん』と『Shunsuke Kimuraさん』からのアドバイスを反映(多謝:佐々木さん&Kimuraさん)
    • 参考:NVIDIA Docker って今どうなってるの?
    • 壊れたUbuntuを治すべく、全ステップをやり直して、内容確認と修正
    • ここ半年の変化の追記と誤記修正
    • システム再インストール時に動かなかったScriptなどを修正
    • "xmodmap"か、"xkb"を変更してキーアサインを変え方法を併記
    • "Docker"のインストールを"Nvidia推奨"と"実績版"を併記
    • 3章と4章を入れ替え

4版:2021年5月16日 ④

  • ターミナル用エディタに"Micro"を導入
  • Host側のフォルダとDocker側のフォルダを同期させる
  • 温度表示のソフトウェアを追加

5版:2021年8月22日 ⑤

  • Apple Wireless Keyboard 復活
  • スクショ用ソフトの追加
  • 軽め(?)なPyTorch用のDockerを作成
  • VSCodeでコンテナにアクセスできるようにする
  • PyTorchコンテナにmatplotlibをインストールアクセス:2021年8月26日
  • 7.1.PlanA:NVIDIAの佐々木さんの書かれたNVIDIA Dockerの紹介ページのリンク先が変わっていたので修正:2021年9月6日

6版:2023年11月05日 ⑥

  • 22.04.2へのアップデート時に「Emergency mode」から抜けられなくなって、再インストール。その際、7章まで記載内容の動作チェックを実施
11
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?