BTOのGPU搭載マシンの設定で詰まったところメモ

## これなーに
Deep Learningを動かす時に、これまでAWSを使っていたけど、毎月10万近く払うなら、GPU買った方が良いと思い購入。
OSをubuntuにして、cuda入れてごにょごにょ。
その際に、ubuntuのインストールやcudaのインストールは情報がめちゃあるので良いが、BIOSとかネットワークの設定などのGPU関係無いところで詰まったところのメモを残したいです。(自分用)
ちなみに、なぜかGUIがマウスカーソルだけ見えて背景真っ黒な状態で、これの解決ができなかったので全てCUIでやっています。

##BIOS周りでやったこと
### セキュアBOOTの無効化
BIOS画面に入って、Boot -> Security device supportをdisableに。
これをdisableにしないと、NVIDIAのドライバが認識されなかったり、NICのドライバを既存のものから変えてインストールしても認識されなかったりする。
なぜか、メモリを増設(単純に空きスロットにぶっ刺しただけ)したところ、BIOSの設定が初期化されて、セキュアBOOTがONになっていて、半日潰れた。ので注意

## ネットワーク周りでやったこと
### NICの種類の確認方法
```
lspci | grep Eth
> 05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
```

ネットワークの設定をしたのに、ping通らない場合、NICのドライバが正しく動作しているかを確認する必要がある。
まず、PCに付いているEthernet用のPCIを確認して、どのドライバが必要かを確認。今回の場合は、「RTL8111/8168/8411」で把握した。ググったら少ない情報の中に、このケースは「r8168」というドライバが必要だということが判明した。(なぜ8111とかじゃないのかは不明。。)

### 既存のNICのドライバの確認
```
lsmod | grep r8
> r8168                 487424  0
```

grepの後の文字列は、必要なドライバの名前で変える必要あり。今回は、NICの種類から、r8168が必要とわかっていたので、r8をgrep条件に入れた。
この結果は、既に正しいドライバを入れた後に出力したので問題ないが、最初は「r8169」が表示されていた。r8168が正しいがr8169がデフォで入っているというページを見つけ、r8168をインストールすることにした。

### NICドライバの変更について
ドライバは、まだネットが繋がっていない前提なので、.debファイルを他のPCでダウンロードして、usbでGPUのPCに持って行きインストールする形。
今回は、「r8168 driver download」とかでググって発見した。(紹介された大半のRealTec社のURLが404で辛かった。。)

ドライバのインストール時には、osのバージョンとosのカーネルのバージョン情報が必要になるので、調べておく。

```
# osとバージョン
cat /etc/os-release
> NAME="Ubuntu"
> VERSION="16.04.4 LTS (Xenial Xerus)"
> ID=ubuntu
> ID_LIKE=debian
> PRETTY_NAME="Ubuntu 16.04.4 LTS"
> VERSION_ID="16.04"
> HOME_URL="http://www.ubuntu.com/"
> SUPPORT_URL="http://help.ubuntu.com/"
> BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
> VERSION_CODENAME=xenial
> UBUNTU_CODENAME=xenial

# カーネルとバージョン
uname -a
> Linux foo 4.4.0-139-generic #165-Ubuntu SMP Wed Oct 24 10:58:50 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
```

これらの情報から、適切なインストーラーをGPU以外のPCにダウンロードしてusbに入れてGPUのPCへ移す。

usbを刺したら、以下の手順でmountする。

```
# usbを刺す前後で、以下のコマンドを打つ。
ls /dev/sd*
## ここに、刺す前になくて後で増えた物がusbの領域なので、それを使う。自分の場合は、/dev/sda4とかだった気がする(めちゃ曖昧)

sudo mkdir /media1
mount -t vfat /dev/sda4 /media1
```

で、/media1にusbをマウントできるので、後はこれをローカルのどこかにコピーしてdebファイルをGPUのPCへ持ってくる。
後は、以下でインストール

```
sudo apt install target.deb
```

インストール後、もう一回lsmod | grep r8をして、変わっていることを確認する。

### ネットワークインタフェースの名前の確認
```
sudo lshw -C network
```
これのlogical nameが名前。私はeth0という名前に慣れていたが、最近はenpxxxみたいな名前らしい。このコマンドで名前を確認して、
/etc/network/interfacesに情報を追記していく。

interfacesについて簡単に書いておくと、以下のような書き方(xxは数字が入ります。) inet staticというのがプライベートIPアドレスの固定を示していて、そのプライベートIPはaddressにある番号になる。

```
auto lo
iface lo inet loopback

auto enp5s0
iface enp5s0 inet static
address 192.168.xx.6
network 192.168.xx.0
netmask 255.255.255.0
broadcast 192.168.xx.255
gateway 192.168.xx.1
dns-nameservers 8.8.8.8 8.8.4.4
```

### ネットワークマネージャについて
nmcliというコマンドから、deviceの確認や有効化などができるので、これを利用するのも簡単そうでした。
途中で、nmcliを使うために利用の許可をどっかのファイルに記述してネットワークマネージャを立ち上げた記憶があるのですが、記憶が無いです。。ubuntu16.04だとこの手順が必要になりそう。18.04とかは、ネットワークマネージャで設定している記事が多かった気がします。

## メモリ増設について
```
sudo dmidecode -t memory
```

でメモリの情報が見える。スロットが何個あり、メモリの規格とか、刺さっていれば何Mのメモリが刺さっているかとかが確認できる。
増設する場合、このコマンドで規格を確認して、その規格に合うメモリを購入する必要があります。
私の場合は、DDR4だったので、これを買いました。

後は、サイドの蓋を開けて、メモリが刺さっているところを見つけて空いているスロットにぶっ刺します。
最後まで押し込んで、メモリのスロットの両サイドの固定するパーツがしっかり内側に固定しているかを確認すると良いと思います。

上で書いたのですが、刺したら、　BIOSが初期化されました(?)少なくとも、セキュアBOOTはONになっていたので、OFFに変えました。
その後、sudo dmidecode -t memoryを打って、増やした分のメモリの情報が出ていたらそれでOK。
freeとかtopのコマンドを使うと、メモリが増えていることを確認できます。