ディープラーニング用にPCを自作しました。(Windows10, Ubuntu18.04デュアルブート）

#4年ぶりにPCを自作しました

**更新履歴**
20201123 タイトルや内容を一部わかりやすく変更しました。
20201129 CINEBENCH R23の結果と、しばらく使った感想を追記しました。


Qiita初投稿です、読みにくいかもしれませんが何かのお役に立てば・・・。
自宅のPCは2016年に自作したcorei7-6600k+GTX1060(6Gb)でやや力不足になってきました。Ampere世代のGPUへののりかえ、Zen3世代のRYZENも気になり、PC自作をすることにしました。

旧PCのスペックは
CPU : Corei7-6600k
Memory : 16GB(DDR4 2666MHz)
MB : ASUS H170 Pro Gaming
GPU : GTX1060(6GB)
システムドライブ1 : Windows10 Pro NVMe SSD PCIGen3 512GB
システムドライブ2 : Ubuntu 18.04 SATA SSD 1TB
データドライブ : 6TB HDD

新PCのスペックは
CPU : Ryzen9 5950x
Memory : 64GB(DDR4 3200MHz)
MB : ASUS  ROG STRIX B550-F GAMING (WI-FI)
GPU : GTX1060(6GB) (引き続き使用）
システムドライブ1 : Windows10 Pro, NVMe SSD PCIGen4, WesternDegital SN850 1TB
システムドライブ2 : Ubuntu 18.04, SATA SSD 1TB（引き続き使用）
データドライブ : WesternDegital SN550 2TB

#新PCの構成
###CPU
今年（2020年）の注目CPUはやはりZen3のRyzenでしょう。旧世代より約19%性能向上（[IPC比較](https://ascii.jp/elem/000/004/032/4032942/2)）したとのことで、これを導入しない手はありません。加えて自宅でも機械学習をするので、多コアが望ましい気がします。当初Ryzen9 5900x(12C24T)を考えていましたが、品薄でRyzen9 5950x(16C32T)に変更しました。発売開始後１週間くらいたってから秋葉原のパソコン工房さんで購入しました。

**20201129 追記**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664963/d37f25cf-9240-e674-784b-e59612a19a7c.png)
Ryzen9 5950xのCINEBENCH　R23を実施しました。
Multi core: 24727
Single core: 1586
MP Ratio 15.59x
でした。

2週間ほど使用してみましたが、特にトラブルもなく、すべての動作において快適です。とくに機械学習のdata augmentationが高速化しており、大満足です。

###GPU
ディープラーニングに使用するので、GPUメモリが12-16GBくらいほしいところです。Ampere世代のRTX30シリーズはCUDAコア数も旧世代より激増して、学習も高速化しそうです。ところがGPUメモリの条件をクリアしているのはRTX3090のみ、これは予算オーバーです。そこで2021年Q1に登場が噂されるRTX3080Ti（GPUメモリ20GB？)を待つことにしてひとまずGTX1060を流用することにしました。

###マザーボード
2020年11月時点でZen3に対応しているチップセットはX570, B550のいずれかです。X570はチップセットの冷却のためチップセットファンが搭載されていることが多く、トラブルと面倒ですし騒音も気になります。B550は低発熱でチップセットについてはファンレスですし、PCIe4も使用できるため、オーバークロックをするわけでなければ十分です。メーカーはやはり安定感のASUSでしょう。今回はROG STRIX B550-F GAMING (WI-FI)に決めました。

###メモリ
これまでの自作経験でメモリでトラブったことはありませんでしたが、やはり高くても安定したメーカーを選びたいところです。日本製で安心のメーカーといえばCENTURY MICROでしょうか。今回は同社が最近リリースした廉価版のCENTURY ESSENTIALのDDR4-3200　64GB（16GBｘ4）としました。同品はXMPによりDDR4-3600での動作が確認されたもので、簡単にメモリオーバークロックをすることができます。このあたり、20年前と比べると格段に簡単になっていて、隔世の感がありますね・・・。

###記憶領域
せっかくPCIe4が使用できるMBなので、最新のPCIe4 SSDを導入します。今回はWesternDegital社のSN850 (M2スロット、NVMe、1TB)をWindows10のシステムドライブとしました。Ubuntuには以前のSATA SSDを流用しています。データを収めるドライブについてはWesternDegital社のSN550（M2スロット、NVMe、2TB)としました。あまり使用しないデータについてはNASに保存することとすれば、データドライブは2TBもあれば十分ですね。
さてPCIe4のSN850ですが、最新のSSDだけあって、速度についてはとんでもなく早いです。
![CrystalDiskMark.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664963/ae7ecb7a-7785-f057-b831-b6b6b9559193.png)


###電源
将来的にRTX3080程度のGPUを考えていたので、それなりの電源容量が必要です。以前から愛用して、特に問題が起きたことのないCorsair社にすることとして今回は850Wのものを選択しました。
電源容量の目安はwebで計算できるものがあります（https://www.dospara.co.jp/5info/cts_str_power_calculation_main）。

###CPUクーラー
さてRyzen9では簡易水冷が推奨されていますが、今回は空冷を試してみました。選んだのはこれまた自作する人たちには有名なNoctuaのNH-U12Aです。実際くみ上げてOCCTでストレステストを行いましたが、MAXでもCPU温度は70度前後であり、アイドル時には40度前後です（室温20度）ので問題なく運用ができます。ただしGPUをアップグレードすると若干厳しいかもしれません。。。
![OCCT.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664963/0fa5fea3-6a58-b211-f634-f4caa0ce2885.png)

#Windows10とUbuntu18.04のインストール
インストール時にスクリーンキャプチャしていなかったので、あまり詳しくは記載できません。
###Windows10
下記Microsoftのサイトより、インストールメディア(USB)を作成するツールをダウンロードします。これによって最新のWindows10がインストールできます。
https://support.microsoft.com/ja-jp/windows/windows-%E7%94%A8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB-%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-99a58364-8c02-206f-aa6f-40c3b507420d
PCをくみ上げたのち、電源を入れてキーボードのF8を押すとBootドライブが選択できます（ASUSのMBではF8です）。そこで、インストールメディアとしたUSBを指定するとインストールが始まります。この構成ですとインストールは数分で終了します。
####SSDを守るために
メインメモリが多いとハイバーネーションによって、SSDへの書き込み量が激増します。そのため忘れずにハイバーネーションをオフにしましょう。
コマンドプロンプトを管理者権限で実行し　`powercfg /h off` のみでオフにできます。
###Ubuntu18.04のインストール
こちらもUSBのインストールUSBを作成します。まず下記サイトよりUbuntu18.04日本語版のISOイメージをDLします。
https://www.ubuntulinux.jp/products/JA-Localized/download

ISOをUSBに焼くために今回はRufusを使用しました。下記よりDLできます。
https://rufus.ie/en_IE.html

ここまでの作業をWindowsPCで準備し、再起動の際にF8でブートドライブの選択でUbuntuのインストールUSBを選択します。
ここから先が重要なのですが、キャプチャとっておらず、、、申し訳ございません。
インストール先のSSDを選択する際に、間違ってWindowsをインストールしたSSDを選択しないように注意します。ちなみにNVMeのSSDはubuntuでは`/dev/nvme0n1`や`/dev/nvme1n1`のように表示されます（環境ごとに表示される名称が異なるので注意です）。
インストール自体は短時間で終了します。
インストール後再起動し、UEFI画面に入り、ブート順序を編集し、UbuntuをインストールしたSSDを1番に持っていきます。これによって電源オン後にUbuntu のブートローダーが起動するようになってUbuntuかWindowsのどちらを起動するかできるようになります。

なお作業自体は下記サイトが非常にわかりやすく参照にさせていただきました。ありがとうございます。
https://www.pc-koubou.jp/magazine/35542

####INTEL I225-Vを認識しない件について
このMBは2.5GBEのINTEL社NIC（I225-V）を搭載していますが、Ubuntu18.04では認識されません。私の場合はカーネルバージョンを最新の5.4.0にしたところを無事に認識されました。このI225-Vですが、windows上でも動作不安定（突然NICが認識されなくなる）ですので、USB-LAN変換ケーブルなどを用意しておいたほうが良いと思います。

**20201206追記**
Windowsアップデートによって、自動的にLANのドライバーが更新され、windowsで有線LANが突然認識されなくなる不具合が生じた。
現状ではversion　1.0.1.4が安定しているので、再度インストールし、ドライバーが更新されないように設定した。（[参考サイト](https://freesoft.tvbok.com/win10/driver-auto-install-invalid.html))

#おわりに
4年ぶりに自作をしてみましたが、年々簡単になっているような気がします。それこそ20年前の1GHzのAthlonが初自作だったのですが、コア欠けの恐怖に怯えながらFirebirdをつけたことが懐かしいです。一発で電源がはいらず、悪戦苦闘していろいろ学んだのですが、今回はあっけないほど簡単に起動してしまいました。
今後はディープラーニングの環境設定などについてアップしてみようと思います。