💻

【2023年度版】30万円の機械学習用の自作PCのパーツを説明する。

2023/07/08に公開
7

はじめに

2023 年 4 月に 30 万円を費やし、機械学習の勉強用に自作 PC を構築しました。3 ヶ月間使用した結果や得られた情報をまとめてお伝えします。これから機械学習用 PC を自作しようと考えている方の参考になる情報となれば幸いです。

購入の背景

2022 年には Stable Diffusion、2023 年には ChatGPT が登場し注目を集めています。私は、これらのモデルがどのような研究の成果を積み重ねて生まれたのかを理解したいと思っています。そのため、実際に PC 上でこれらのモデルを動かしながら学習を進めることを目指し、今回、自作 PC の購入を決意しました。

機械学習を実行するための環境として、Google Colab やクラウドが一般的に選ばれますが、これらのサービスは費用が高いです。例えば、Google Colab では月に 5000 円を支払うと、V100 を月に 93 時間しか使用することができません。また、データを保存するためには、月に 1300 円で 2TB の Google Drive を契約する必要もあります。一方、中古の 3090 は 9 万円で入手でき、HDD の 6TB も 1 万円で購入できます。これを考えると Google Colab の価格は非常に高いと感じます。さらに、Google Colab では mlflow や kubeflow といった機械学習ツールを使用することができないため、これらのツールを学習する機会を逃すことになります。

また、クラウドを利用する場合はさらに高額になります。私の自作 PC と同等のスペックを持つ AWS EC2 インスタンス g5.8xlarge を使用すると、月に 10 万円以上の費用がかかります。さらに、AWS S3 標準では 1TB あたり 2500 円/月も請求されるため、非常に高価になります。クラウドは高速なネットワーク接続やデータの信頼性、豊富なバックアップ機能などの特徴を持っているため、高額になるのは理解できますが、これらの機能は個人の学習目的ではほとんど必要ありません。そのため、自作 PC を使用すれば費用を抑えることができます。

また、自作 PC のパーツはゲーミング PC にも使用されるため、中古市場で頻繁に取引されており、不要になった場合には売ることもできます。これも費用の面で有利です。以上の理由から、私は自作 PC を購入することにしました。

パーツの選定

要件

購入前には以下の 5 つの要件を満たしたいと考えました。

  • 小型で静音かつ LED ライトがない
  • 大量のコンテナを実行できる
  • 大容量のデータを保存できる
  • 様々なモデルを実行できる

構成

上記の要件を満たすために、30 万円の予算で以下のパーツを選定しました。

No パーツ名 型番 金額(円)
1 CPU Intel Core i7 13700K BOX 58,531
2 マザーボード ASUS TUF GAMING Z790-PLUS WIFI 49,291
3 メモリ Crucial DDR5 32GBX2 枚 CT2K32G48C40U5 24,668
4 メモリ Crucial DDR5 32GBX2 枚 CT2K32G48C40U5 25,524
5 GPU MSI GeForce RTX 3090 GAMING X TRIO 24G (中古) 90,000
6 SSD Crucial M.2 1TB P3 CT1000P3SSD8JP 7,980
7 HDD WD Blue 6TB WD60EZAX 10,748
8 CPU クーラー Noctua NH-D15 14,201
9 電源 Fractal Design ION Gold 850W 14,445
10 PC ケース Fractal Design Define 7 Compact Black Solid 16,500
合計 - - 311,888

なるべく高性能なパーツを選択しましたが、いくつかのパーツについては別の選択肢を検討すべきだったと感じています。

各パーツの選定理由

CPU

Intel Core i7 13700K BOX

正直なところ、あまり考えずに選んでしまいました。以前の PC 構築時には i7 6700 を選んだのがちょうど良かったので、同じ感覚で再度 i7 を購入しました。ただし、13 世代の場合、i7 の 16 コア/24 スレッドはかなりオーバースペックで、i5 13600K の 14 コア/20 スレッドでも十分な性能だと思います。

確かに CPU のコア数が多いほどベンチマークの結果が良くなる傾向がありますが、実際の使用時にはそれをフルに活かせるわけではありません。例えば、ffmpeg で動画をエンコードする場合、処理性能は 8 スレッドほどで頭打ちになります。また、numpy を使用して計算する場合も、8 スレッドほどが最もパフォーマンスが良いです。そのため、1 プロセスあたりの 8 スレッドが並列計算の限界と考え、Core/Thread 数を見積もってパーツ選定をするのが良いと思います。

CPU の性能において、Core/Thread 数以外で重要な要素はクロック数と L2/L3 キャッシュの大きさです。クロック数は同じ世代の CPU ではほぼ同じですので、最新世代から L2/L3 キャッシュができるだけ大きなものを選ぶと良いです。i5 13600K は他の i5 と比べて L2 キャッシュが大きいため、おすすめの CPU となります。また、実際の機械学習実行時に確認したことですが、画像の複雑なデータ拡張を行っても CPU がボトルネックになりにくいです。そのため、i3 を選択してグラフィックスカードに予算を割くのも良い選択肢だと思います。。

なお、私は初期の Ryzen が不安定だったという理由で AMD を避けていますので、Ryzen は候補に含めていません。

マザーボード

ASUS TUF GAMING Z790-PLUS WIFI

サイズは ATX を選択しました。Mini-ITX では、ほとんどの製品がメモリスロットが 2 つしかないため、最大で 64GB までしかメモリを搭載できません。また、多くの Mini-ITX ケースでは 3.5 インチ HDD を取り付けることができないため、データの保管場所を別途考慮する必要があります。これらの点から、Mini-ITX は適していないと判断し、ATX を選択しました。

サイズ以外の要素については、あまり深く考えずに選定しました。i7 の K 付きだから Z790 が適していると思い、また DDR5 にしたかったため、その条件で人気のあるこの製品を選びました。製品としては問題なく安定して動作しているため、満足しています。特に WiFi の感度については非常に満足しており、ルーターからある程度離れた場所に設置しているにもかかわらず、切断することなく安定的に接続できているため、大変便利です。ただし、GPU に合わせてマザーボードも MSI にするべきだったかもしれないとは思っています。

また、機械学習の性能においては、CPU の性能がボトルネックになりにくいため、オーバークロックは行っていません。そのため、Z790 は不要となっています。H770 の ATX マザーボードを購入すれば良かったと感じています。

メモリ

Crucial DDR5 32GBX2 枚 CT2K32G48C40U5 X 2 セット

メモリは合計で 128GB としました。最初は 32GB×2 の 64GB 構成で購入しましたが、空いているスロットが気になったため、追加でメモリを購入しました。ただし、余剰なメモリはストレージのキャッシュ用途に使用される[1]ため、多く搭載しても損はないと考えています。機械学習の用途では、メモリは学習データのキャッシュに活用できるため、最低 64GB を搭載すると良いと思います。

また、Crucial を選んだ理由は、数年前に Micron の工場を見学させていただいた経験があり、それに対する感謝の気持ちから購入しています。なお、メモリのヒートシンクは装飾品であり、性能への影響はほとんどないとされています。ただし、ヒートシンク付きのメモリはメモリの基盤やチップを保護する役割を果たすため、頻繁に分解する場合にはおすすめです。

GPU

MSI GeForce RTX 3090 GAMING X TRIO 24G (中古)

機械学習 PC において、最も重要な要素はグラフィックスカードのメモリの大きさです。なぜなら、大きなモデルやバッチサイズを処理するためには十分なメモリが必要だからです。HuggingFace からモデルをダウンロードした場合、動作しない場合の一つの原因はメモリ不足だと考えられます。モデルを量子化するなどの方法でサイズを小さくすることもできますが、そうするくらいなら最初から大容量のメモリを搭載したグラフィックスカードを購入した方が良いと思います。また、Transformer モデルではバッチサイズを増やすと精度が向上するという報告[2]がありますし、他のモデルでもバッチサイズを増やすことで学習の安定性が向上するという報告[3]もあります。これらのことを考慮すると、大容量のメモリを持つグラフィックスカードが機械学習にとって最適です。2023 年時点で一般家庭で利用可能な最大のメモリサイズを持つ GPU は、24GB のメモリを持つ 4090 と 3090 です。4090 は 25 万円するため、半額以下で入手できる 3090 を選択しました。

この製品は 3 連ファンの LED も光る大型のグラフィックスカードです。Linux で運用しているため、ドライバーが対応していないのか LED やファンの制御ができません。そのため、常に光りっぱなしで回っている状態で使用しています。ただし、中古品を手頃な価格で手に入れ、数ヶ月間安定して稼働しているため、全体的には満足しています。

SSD

Crucial M.2 1TB P3 CT1000P3SSD8JP

これは価格コムでの売れ筋ランキングを見て、適当に選んでしまった商品です。後悔している点として、せめて 2000 円高いP5 Plus CT1000P5PSSD8JPを選べば良かったと考えています。これらの SSD の間には Gen3 と Gen4 の違いがあり、転送速度に倍近い差があるため、最新のマザーボードを使用する際には 2000 円追加費用を払ってでも速い SSD を選ぶべきだったと思っています。また、SSD 比較ブログ[4]によれば、2023 年現在は WD が最も優れた性能を持つことが示されています。そのため、容量単価が最も高い WD 製の SSD を選択することをおすすめします。

また、購入後に調べたことですが、SSD には 1 つのセルに書き込むビット数によってグレードがあり、書き込むビット数が増えるほど価格は安くなる代わりに性能や耐久性が低下するようです。一般消費者がよく購入するのは、3bit/cell の TLC または 4bit/cell の QLC の SSD です。先述の Crucial の SSD はどちらも QLC です。ただし、性能や耐久性が低い QLC でも、未使用のセルをキャッシュとして利用することで性能向上の努力[5]が行われているようです。したがって、容量がいっぱいになるまで使用しなければ性能の差はほとんどないと考えています。そのため、私は OS のみを SSD に保存し、ホームディレクトリは HDD にして使用しています。

また、メモリやディスクを利用してシングル GPU で大きなモデルを動かす技術[6]が存在します。この技術では、SSD の読み書き速度が性能に大きな影響を与えるため、本格的に普及し始めたら高速な SSD に買い替えたいと考えています。

HDD

WD Blue 6TB WD60EZAX

この HDD をホームディレクトリとして使用しています。機械学習の場合、データやモデルの断片が大量のストレージを使用することになりますが、それらを別のストレージに指定して出力する設定をするのは手間がかかるため、最初から大容量のストレージをホームディレクトリに利用しています。この HDD は WD の 2023 年の新製品であり、CMR 方式であり、キャッシュも 256MB と十分な容量を持っているため、選択しました。

また、個人が機械学習の学習用に扱うデータ量としては、Wikipedia が数十 GB[7]、ImageNet が数百 GB[8]、BERT や GPT-2 が数百 MB[9][10]程度であることを考えると、1TB ではすぐに容量が不足しますが、10TB までのデータ量をすぐには使わないと思われます。そのため、データやモデルの断片を保存するためには HDD を選択することが良いでしょう。

CPU クーラー

Noctua NH-D15

CPU クーラーには空冷と簡易水冷の 2 種類があります。簡易水冷の製品には一般的に LED が付いていますが、Linux では LED の制御ソフトウェアを実行することができません。また、ファンがケースの縁に取り付けられる、空冷より音を発生させる傾向にあります。一方、空冷の場合は静かに運用することができます。さらに、機械学習の場合、CPU の性能をフルに活用することはほとんどないため、空冷で冷却に心配はありません。以上の理由から、空冷を選択することが良いと考えます。

前回、自作 PC を作った際に Noctua のクーラーを選んだことがあり、非常に良い製品だったため、同じ Noctua の製品を選びました。高価なだけあって、製品自体の品質は優れています。実際に使用してみると、CPU を冷却するだけでなく、グラフィックカードから発生する熱を排気口へ押し出すためにも活用されている印象を受けます。

電源

Fractal Design ION Gold 850W

こちらの製品はあまり考えずに購入しました。同じメーカーのケースならケーブルが届かないといった問題は起こらないだろうと考え、Fractal Design の中で最も大容量のものを選びました。結果的に問題は起こらなかったので満足しております。

PC ケース

Fractal Design Define 7 Compact Black Solid

Noctua NH-D15 が収まる小型でよく売れているケースを選んだ結果、このケースになりました。CPU クーラーやグラフィックカードが大きいため、内部は詰まっていてコンパクトな PC となりました。ケース自体の品質は非常に優れており、全体的に満足のいく製品だと思います。ただし、フロントのケースファンは付属しているものが 1 つしかないため、追加するかどうかはまだ検討中です。

おわりに

結果的にコスト的には最適化されていない PC となりましたが、快適に機械学習ができてますので、満足はしております。もし今の自分がコスト最適化を考えて構成を見直す場合、以下のパーツは変更すると思います。

  • CPU: Intel Core i5 13600K
  • メモリ: DDR4 32GB × 4 枚
  • マザーボード: H670

これらの変更によって 3 万円はコストが減らせると思います。

色々書きましたが、機械学習 PC において最も重要な要素はグラボのメモリの大きさです。他の要素はあくまで副次的なものと言えます。以上の内容が誰かの参考になれば幸いです。

関連記事

https://zenn.dev/derbuihan/articles/cb6b7a84dd6dc0

https://zenn.dev/derbuihan/articles/a1e636d29e1b51

https://zenn.dev/derbuihan/articles/c1d6379dfe198d

脚注
  1. https://qiita.com/kunihirotanaka/items/70d43d48757aea79de2d ↩︎

  2. https://arxiv.org/abs/1804.00247 ↩︎

  3. https://arxiv.org/abs/1711.00489 ↩︎

  4. https://chimolog.co/ ↩︎

  5. https://qiita.com/ken-yossy/items/b784f5d96e56fc516fb5 ↩︎

  6. https://github.com/FMInference/FlexGen ↩︎

  7. https://www.tensorflow.org/datasets/catalog/wiki40b ↩︎

  8. https://www.tensorflow.org/datasets/catalog/imagenet2012 ↩︎

  9. https://huggingface.co/bert-base-uncased ↩︎

  10. https://huggingface.co/gpt2 ↩︎

Discussion

イヌイヌ

画面出力はcpuの内蔵gpuに任せて、外部gpuは計算のみに集中させた方が外部gpuの処理能力はあがるのでしょうか?私はうっかり内蔵gpuがないモデルのcpuを購入してしまいました。

PONTAPONTA

私はディスプレイは接続してないですね。Ubuntu ServerをインストールしてVSCodeのRemote SSH機能を使ってリモートから使ってる感じです。ただ私の経験上、Ubuntu Desktopでディスプレイに出力しながら機械学習したとしても、そこまでパフォーマンスに影響なかったと思います。なのでF付きでも問題ないかと。

イヌイヌ

返信ありがとうございます。
記事中の関連記事リンクを参考に勉強させていただきます。

イヌイヌ

度々済みません、その後他の方の記事を参考にwsl上でnvidia-dockerを動かしてテスト用分析モデルの動作確認までしたのですが、他の方の記事で、CUDAはwindowsよりもlinuxで早く動くのでwsl上で動かした方がいいが、wslよりもそもそもホストOS自体がUbuntuの方がさらに動作が早いという説明を見ました。(速度が20%以上違うようでした)
貴殿の場合は、HDDにWindowsをインストールしないでUbuntuserverのみをインストールした状態で運用されているのでしょうか?
折角部品をこだわって選んでもOS次第で速度が大幅に変わるなら、運用条件を突き詰めてみたいなと思っています。
何かご存知であれば、教えて下さい。

PONTAPONTA

WSL2上のUbuntuで機械学習したことないのでわからないですね。

イヌイヌ

そうでしたか。色々とご助言頂き有難うございました。