ディープラーニングで必要なパソコンパーツ、スペックをまとめてみた

#はじめに

ディープラーニング向けのパソコンのパーツの選び方がまとまったサイトがないので自分で作りました。
間違っているところもあるのでその時は指摘してください。




#パーツごとの解説
ディープラーニングでのパーツの選び方の順番は、
・GPU
・CPU
・SSD/HDD
・メモリ
・電源
・マザーボード
・PCケース

の順で選ぶといいと思います。

##GPU
なんといっても今のディープラーニングではGPUが一番重要です
CPUと比べて十数倍の速さがあります。

ディープラーニングでは
・専用メモリ(VRAM)
・cudaコア
・機械学習専用コア
が重要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/82cce82d-be1e-32b2-0f7e-e5f3f4087299.png)

###専用メモリ
gpuのバッチサイズが決まります。

https://nori-life-log.com/nn%E3%81%AE%E5%AD%A6%E7%BF%92%E3%81%A7%E5%BF%85%E8%A6%81%E3%81%AAgpu%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%92%E7%AE%97%E5%87%BA%E3%81%99%E3%82%8B

このサイトや、

https://support.dl.sony.com/docs-ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%9A%E6%9C%80%E9%81%A9%E3%81%AA%E5%AD%A6%E7%BF%92%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%AE%E9%81%B8%E3%81%B3%E6%96%B9/

に詳しいことが書いてあります。
一応計算方法を書いておくと、

必要メモリ量（byte） = ニューロンの数×Batch Size×2（data & grad）×4（byte）＋ パラメータ数×2（data & grad）×4（byte）

要約するとGPUのメモリ上にはモデルのパラメータ及び入力データが乗ります。
よって、メモリが大きいとよりパラメータが大きいモデルの学習、よりバッチサイズを大きく（つまり学習を速く）することができます。
タスクマネージャーのGPUにおける__専用GPUメモリ（VRAM）__の値であり、いわゆる__RAM__とは別物です。
また__共有GPUメモリ（VRAM）__は数桁遅く、使えないみたいです。

https://jp.mathworks.com/matlabcentral/answers/401342-trainnetwork-gpu

###cudaコア
cudaコアとはつまり学習で計算しているコアです。
多ければ多いほどいいです。

###専用コア
ディープラーニング専用のコアが搭載されていることがあります。

nvidia:tensor コア

https://www.nvidia.com/ja-jp/data-center/tensor-cores/

https://blogs.nvidia.co.jp/2019/06/11/intel-inference-nvidia-gpus/

![image.gif](https://images.nvidia.com/aem-dam/Solutions/Data-Center/tesla-t4/Turing-Tensor-Core_30fps_FINAL_736x414.gif)
apple:Neural Engine

https://www.apple.com/jp/mac/m1/

ディープラーニングの学習とはすなわち行列の掛け算なので、それに特化したコアが搭載されているようです。

速度的にはnvidia>apple>CPUのようです。

https://qiita.com/tomoyaeibu/items/46f2f3384a370df71d5e

amdのGPUでもディープラーニングはできるが、一般的ではなさそう。

https://qiita.com/kz_lil_fox/items/d1a18f58e9e5033e7e14




###選び方

nvidiaのGPUをメインに解説していきます。少し間違いなどあるかもしれないです。

大きく分けてnvidiaのGPUにはGeforce、Quadro、TESLAの3種類があります。

・Geforce：ゲーム用、低価格（数万円～）、ディープラーニングもできる

https://www.nvidia.com/ja-jp/geforce/graphics-cards/30-series/

・Quadro：3DやCADなどデザイン系、OprenGL、高い（数十万円）、メモリがとても大きい

https://www.nvidia.com/ja-jp/design-visualization/quadro/

・TESLA：ディープラーニングに特化、メモリがとても大きい、とても高い（100万円）

https://www.nvidia.com/ja-jp/data-center/graphics-cards-for-virtualization/


Qadoroはおそらくディープラーニングでは使いません。
企業や大学の研究で予算がべらぼうにある場合は、TESLAシリーズのGPUを使います。
そして一般向けがGeforceシリーズですが、幅が広いため説明します。

Geforceにはgtxシリーズとrtxシリーズがありますが、tensorコアを搭載し、レイトレーシングに対応しているのがrtxシリーズです。
一般的にrtxシリーズはgtxシリーズの後継機と考えて大丈夫です。

rtx2070sという名前のGPUがあったとき、
前半の20が世代を、後半の70が性能を表します。

世代は2018年に20、2020年に30が発売され、約2年おきに世代が新しくなるイメージです。
そして性能ですが、

60：安い、スペックが低い、FHD60fpsなら基本的にどのゲームも動く
70：コスパ最強、消費電力当たりのパフォーマンス最強
80：値段が高い、スペックはいい
90：めちゃくちゃ高い、その世代でできる最高スペック、メモリがめっちゃ多い

という感じです。
Tiやsuperの説明は省きますが、気になった人は自分で調べてみてください。

なお、世代が変わると性能が10-20ほどアップすると考えて大丈夫です。
つまり、rtx3060はrtx2080と同等かそれ以下ぐらいと考えてください。
![](https://chimolog.co/wp-content/uploads/2020/09/3070-fp32-perf.jpg)
画像はちもろぐさんから拝借させていただいています。
詳しくはこちら

https://chimolog.co/bto-gpu-rtx-30-series/



また、SLIといってGPUを2枚同時に使用するという方法もあります。
しかしゲームではSLIが対応していないうえ、2年後にもっといいものが発売されるとなるとどうかなと思います。

性能はこんな感じみたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/c9ceced3-3183-6f71-de94-7ef08b0bd55c.png)

https://www.pc-koubou.jp/magazine/34308

###GPUまとめ
一般人：GPUメモリと予算に合わせてRTX最新シリーズ
企業、研究者：予算次第で　RTX3090 or SLI or Tesra





##CPU
ディープラーニングにおいてはあまり重要ではありません。
学習中の主な仕事は、python自体を動かしたりするレベルで、普通の、つまり最近(第10世代以降)のi5レベルで十分そうです。
ただしデータセットの作成などでGPUを使わない場合（openCVで画像加工やその他もろもろ）はCPUがボトルネックになってきます。
intelなら第10世代以降のi7やamdのryzen3700xなどメニーコアを買っておくと損しないでしょう。

CPUは2018年あたりまでintelの独擅場で進化していなかったのですが、
amdがryzenシリーズを発表してから一気にメニーコアの時代になり、
今では（第10世代）i3でも4コア8スレッドとなっています。（以前のi7レベル）
ちなみ個人的には、最近(2020年)では高価格帯はryzen、低価格帯はintelがお勧めです。

さらにintelにはxeon、amdにはthreadripperというサーバー向けの超メニーコア（threadripper 3990xは64コア128スレッド！！）
もあります。
消費電力も大きく、GPUで学習するならいらないでしょう。
しかし某天才棋士の使用する将棋ソフトはGPUに対応していないため、3990xを使用しているみたいです。

https://pc.watch.impress.co.jp/docs/news/yajiuma/1278287.html

CPUクーラーは基本的に付属するものはうるさく、あまり冷えないですが、使用する分には問題ないです。
それが嫌だという人には、空冷（虎徹が有名）や簡易水冷を選んでもいいかもしれません。






##SSD/HDD
画像や動画のデータセットを自分で作る際などは容量が大きいほうがいいです。
また、データをopencvなどで加工して保存する際も、読み書きの速度が重要になってきます。
このサイトが具体的な数値が載っています。また、引用もさせてもらいました。

https://xn--pc-mh4aj6msdqgtc.com/column/crystaldiskmark.html

###用語
シーケンシャルアクセス：連続した領域に読み込み、あるいは書き込むこと。
例）動画や、画像をすべてつないだデータセットなどの保存、読み込み。
ランダムアクセス：ランダムな領域に読み込み、あるいは書き込むこと。
例）画像1枚1枚を個別で読み込んだり保存したりなど。

###特徴として

####HDD：容量当たりの値段が安いが、読み書きが遅く、特にランダムアクセスが絶望的
一般的にHDDは読み込みと書き込みを同時に行うととても遅くなります。
参考6TB：1万円
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/d7ff3c1a-88f6-14a6-b1d4-ba6d013abea4.png)


####sataSSD：値段は高いが、読み書きがHDDに比べてとても速くなっている。
特にランダムアクセスはHDDと比べて2桁速い
参考1TB：1万円
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/84717e54-3bd8-3e00-6e33-d6b4691b7301.png)


####NVMeSSD：値段がとても高く、特にシーケンシャルアクセスがSSDより数倍速い
M.2というのは形の規格で、M.2のsataSSDとM.2のNVMeSSDが存在する。
接続方式にさらにgen4などあるが詳しくはこちらを

https://www.dospara.co.jp/5info/cts_str_parts_nvme

参考1TB：1.2万円~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/a834ff03-90b1-c179-e902-1cd91ca155da.png)


###HDD/SSDまとめ
基本的には500GB~1TBのSSDにOSからpythonからすべて入れておけばいいでしょう。

大規模なデータセットを作る場合はデータ置き場としてHDD、
データセット作成時は読み込み先をSSDまたはHDDで書き込み先をできれば別のSSD、
プログラムの実行などはSSDでいいのではないでしょうか。

予算がある場合は大容量SSDを買っておけば十分です。





##メモリ
メモリはデータセットの読み込み時に問題となってくる場合があります。
大量の画像データセットを読み込む場合などはそれなりの大きさが必要かもしれません。
しかしバッチ処理によって必要な数だけ読み込むという方法もあるみたいなのであまり重要ではなさそう。

参考
8GB：windowsを快適に動かす最低限の量。学習データが乗り切るかわからない
16GB：ゲームも快適、普通のディープラーニングにも問題なし
32GB：余裕を持ちたい人、特殊なディープラーニング
それ以上：自分に合ったメモリを買ってね

ちなみに、メモリには速度があり、ゲームは速度が速いほど処理性のが上がるらしいが、ディープラーニングはどうかわからない。

また、メモリはデュアルチャンネルという技術があるので、同じ32GBといっても、32GBのメモリを1枚使うのと16GBのメモリを2枚使うのとでは、後者のほうが性能がよくなる。

https://www.pc-koubou.jp/faq/faq_detail.html?id=183

しかし、メモリ搭載数はマザーボードで決まってしまうので、
拡張性を考えると1枚のほうがいいのかもしれない。
しかし、マザーボードでは基本4枚メモリをさせるので、2枚指すのがお勧めかな。







##電源
スペックの高いGPUを使うと、結構消費電力が高くなります。
またGPUへの給電にピンを二つ使うこともあるので、対応したものを選ばなければいけません。
特にGPUを2枚使うSLIなどをするときは注意です。
また、電源は一般的に50%負荷時に一番効率が良くなります。

https://www.dospara.co.jp/5info/cts_str_power_calculation_main

こちらのサイトに電源について、そして計算機がありますので、参考にしてください。
一般的に、750Wほどを選んでおけばいいでしょう。


##マザーボード
まずCPUにあったものを買いましょう。
特にintelのCPUは大体2世代ごとにマザーボードの対応がなくなります。
amdは結構数世代使えます。

また、拡張性も大切です。
メモリは何枚指せるのか、
GPU2枚刺しに対応しているのか
sataポート、m.2スロットの数（要はSSD、HDDを何個接続できるか）

が重要になってくるでしょう。



##PCケース
マザーボードのサイズ、CPUクーラーの高さに合ったものを選びましょう。
ATXのマザーボードは小さいケースには入りません。
後は静穏性や拡張性（HDDが何個入れれるか）、エアーフロー、裏配線の有無、5インチベイの有無などで選びましょう。



##まとめ
ここまでパソコンのパーツの選び方を一通り解説しました。
パーツは数年で性能が上がりますので、パーツごとに買い替えていくことになると思います。

企業や研究室で使うような特殊な場合を除けば、
基本的にはゲーム用のパソコンを買えばディープラーニングもできるスペックになっています。