スイッチングハブを買い替えた
新しく組んだPCのspeedtestが100Mbpsくらいで頭打ちになっていたのでもしやと思ったら、使っているスイッチングハブが100BASE-Tだった。普段はNASNEなどで利用しているハブだったので速度低下に気付かなかった。1000BASE-Tのものに買い替えて無事速度が出て満足。
ところでスイッチングハブの説明文に「10/100/1000Mbps」とあり、これは回線速度ととしては1000Mbpsが全部包含するのに何故わざわざ書くのかと思ったが、規格の表現として10Mbpsでも100Mbpsでも1000Mbpsでも対応しているという意味らしい。おそらくコンテクストがあると思うので無粋かもしれないが、本来の通信速度の意味と混同してしまうので、だったら10/100/1000BASE-T のように書いてほしい気がする。
GPU/CUDAとPyTorch周りの様々なバージョンを理解する
前置き
GPUを利用したディープラーニングの環境構築において、GPUのドライバやCUDAの諸々の設定は初学者が誰しも嵌る最初の難関と言える。私自身これまではネットの情報をあれこれ試して上手く行けばOKで済ませていたが、この辺で今一度正しく理解しておきたい。そこでこの記事を通して、GPU/CUDAとPyTorchの環境構築で遭遇する様々なバージョンの識別とその意味を理解することを目的とする。なお、細かなインストール方法やエラー対応などは本記事では扱わない。また、グラフィックボード/グラフィックカードと呼ぶべきところをGPUと表現している点もご容赦いただきたい。
[注意] この記事はGPU/CUDA素人が書いているので、細かな用語や名称の間違いが多分に含まれていると思われる。間違っていたらごめんなさい。また、事例として紹介しているバージョン番号は当然ながら時が経つにつれ古くなるので注意。
GPU/CUDA
Compute Capability
7.5
や8.6
、sm_*
と表記されるもの。これは使用するGPUのアーキテクチャに応じてサポートされる機能が決まっており、それを表すバージョン番号がCompute Capabilityである。ハードウェアのGPUにはそれぞれこの番号が付いていて、変わることはない。例えば、RTX 3090とRTX 4090では以下のようになっている。
GPU | Architecture Name | Compute Capability | SM Variation |
---|---|---|---|
GeForce RTX 3090 | Ampere | 8.6 | sm_86 |
GeForce RTX 4090 | Ada Lovelace | 8.9 | sm_89 |
現行GPUのCompute Capability対応表は、以下から確認できる。
CUDA
10.2
や11.8
などと表記されるもの。これはCUDAのバージョンを表す。バージョンごとにサポートするGPUの種類、すなわちCompute Capability (CC) の範囲が決まっている。
CUDA Version | min. CC | max. CC |
---|---|---|
CUDA 10.2 | 3.0 | 7.5 |
CUDA 11.8 | 3.5 | 11.8 |
現在インストールしているCUDAのバージョンは、nvcc
コマンドや/usr/local/cuda/version.{json, txt}
などから確認できる。
$ /usr/local/cuda/bin/nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation Built on Wed_Sep_21_10:33:58_PDT_2022 Cuda compilation tools, release 11.8, V11.8.89 Build cuda_11.8.r11.8/compiler.31833905_0
$ cat /usr/local/cuda/version.json
なお、CUDAの中には大きく分けてCUDA ToolkitとNVIDIA Driverが存在し、そのNVIDIA Driverの中にGPU Kernel Mode DriverとCUDA User-Mode Driverの2つが存在する。後者が次に説明するNVIDIA Driverのこと。
CUDA Compatibility :: NVIDIA Data Center GPU Driver Documentation より
NVIDIA Driver
470.57.02
や515.43.04
、もしくはR470
やR515
などと表記されるもの。これはNVIDIA Driverのバージョンを表す。先頭の数字を取ってリリース単位を意味するR515, R510, R470と表記されることもある。
Ubuntuの場合、以下のようにしてGPUに応じたDriverのバージョン一覧および推奨バージョンを取得できる。
$ sudo ubuntu-drivers devices [...] vendor : NVIDIA Corporation model : GA102 [GeForce RTX 3090] driver : nvidia-driver-470 - third-party non-free driver : nvidia-driver-515-server - distro non-free driver : nvidia-driver-515-open - distro non-free driver : nvidia-driver-520-open - distro non-free recommended driver : nvidia-driver-520 - third-party non-free driver : nvidia-driver-515 - third-party non-free driver : nvidia-driver-510-server - distro non-free driver : nvidia-driver-510 - third-party non-free driver : nvidia-driver-470-server - distro non-free driver : xserver-xorg-video-nouveau - distro free builtin
PyTorch
1.10
や1.12+cu116
などと表記されるもの。これはPyTorchのバージョンを表し、対応するCUDAのバージョンを末尾に付与する場合がある。
PyTorchをGPUで動かすにはCUDAやドライバのバージョンをあわせる必要があり、PyTorch公式ページのInstallationの「Compute Platform」の箇所で必要なCUDAのバージョンから選択できる。単純にpip install torch
のみを実行すると、2022/10現在ではCUDA 10.2対応のものがインストールされる。そのため、そもそも利用するGPU自体のCompute CapabilityがCUDA 10.2では対応できない場合には、CUDAをダウングレードしただけでは動かないということが起こり得るので注意が必要となる。
使用するGPUのCompute Capabilityを確認し、次に正しいバージョンのCUDA Toolkitを入れ、そしてそれに対応するPyTorchを入れよう。
インストールしたPyTorchが対応する各種バージョンを確認する方法は、以下の通り。
CUDA 11.6対応版の場合
In [1]: import torch In [2]: torch.__version__ Out[2]: '1.12.1+cu116' In [3]: torch.version.cuda Out[3]: '11.6' In [4]: torch.cuda.get_arch_list() Out[4]: ['sm_37', 'sm_50', 'sm_60', 'sm_70', 'sm_75', 'sm_80', 'sm_86'] In [5]: torch.cuda.get_device_capability() Out[5]: (8, 6)
CUDA 10.2対応版の場合
In [1]: import torch In [2]: torch.__version__ Out[2]: '1.12.1+cu102' In [3]: torch.version.cuda Out[3]: '10.2' In [4]: torch.cuda.get_arch_list() Out[4]: ['sm_37', 'sm_50', 'sm_60', 'sm_70'] In [5]: torch.cuda.get_device_capability() /home/yag_ays/xxx/.venv/lib/python3.9/site-packages/torch/cuda/__init__.py:146: UserWarning: NVIDIA GeForce RTX 3090 with CUDA capability sm_86 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70. If you want to use the NVIDIA GeForce RTX 3090 GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/ warnings.warn(incompatible_device_warn.format(device_name, capability, " ".join(arch_list), device_name)) Out[5]: (8, 6)
ここではtorch.cuda.get_device_capability()
を実行するとWarningが表示されているが、これは実行環境においてGPUのCompute CapabilityとインストールされているPyTorchのバージョンが合わないというもの。もちろんこのままGPUを使ったディープラーニングのコードを実行してもエラーになるだけなので、PyTorchを再インストールする必要がある。
参考
- CUDA GPUs - Compute Capability | NVIDIA Developer
- 現行世代と前世代の GeForce シリーズのグラフィックス カードの比較 - NVIDIA
- Programming Guide :: CUDA Toolkit Documentation
- CUDA Toolkit Archive | NVIDIA Developer
- CUDA - Wikipedia
- Matching CUDA arch and CUDA gencode for various NVIDIA architectures - Arnon Shimoni
- CUDA Compatibility :: NVIDIA Data Center GPU Driver Documentation
- PyTorchでGPU情報を確認(使用可能か、デバイス数など) | note.nkmk.me
- How to get the CUDA version? - Stack Overflow
ディープラーニング開発用のそこそこハイエンドな自作PCを作った
最近個人プロジェクトでディープラーニングを使った開発をしており、今まではGPUを利用する際はColabやGCPのGPUインスタンスを利用していたが、以下のような理由により少々窮屈になってきた。
- Colab Pro/Pro
- これまでのセッションが維持される限りの使い放題から、マシンスペック等に応じたユニット数の積算で月単位の利用可能が変わるクレジット制になった
- デフォルトのPythonのバージョンが3.7と明らかに古く、手元での開発を古い方に寄せるのが面倒で、かつColab側をセッションごとにバージョンアップするのが大変
- Google Driveをマウントした開発が可能ではあるものの、頻繁に更新するコードの管理に向いておらず、Colabから呼び出すときに意図したデータを読みこんでいるか常に不安になる
- GCP
そこで、気兼ねなく使えるディープラーニング開発用の自作PCを自作することにした。正直なところ自分が満足するスペックのPCを作る際の金銭的な支出はかなり大きく、クラウドなら何十,何百時間分に相当するだろうかと考えて頭を悩ませたものの、モノとして残るという心理的な安心感(?)や、プロジェクトの進捗の無さを紛らわすために何か手を動かしたいという現実逃避から、そういった決断をするに至った。
スペック選定
どんなPCを作ろうかと考えたときに、ディープラーニングの学習に耐えうるスペックというのはあらかた目星がついていたので、それまで利用していたGCPインスタンスのスペックを比較対象としつつ、以下のようなことを考えた。
- CPU
- ある程度普通のもので良い。コア数が多いと嬉しいかなくらい
- GPU
- メモリ
- 32GBだと結構厳しいときがあるので、64GBは欲しい
- その他
BTOや既製品も考えたが、妥協できない点とできる点が通常のゲーマーとはかけ離れていてカスタマイズに不安があること、なるべくはやく手に入れてたいということで、自作を選択。
一番検討が必要なGPUは、GPUメモリを基準に考えるとGeForce RTX 30シリーズの中では3090および3090Ti以外は選択肢に乗せられず、自ずと選択肢が絞られてしまった。4090のスペックの高さには心を惹かれてしまったが、入手性や金額を差し置いてあの物理的な大きさに圧倒されて候補から除外。他にはNVIDIA RTX Aシリーズも検討したが、入手の容易さや値段、リセールバリュー等を踏まえてこちらも候補から除外。
自作をする上で参考にした情報
私は自作PCは完全に初心者で、しかもmacOS以外の物理PCなんて15年ぶりくらいということで、構想時点では必要な知識が足りていなかった。おおよその部品の機能やスペックの情報は理解できるが、物理的な配線や製品の規格は苦手だった。事前準備としてメーカーやパーツ選び、組み上げ方などの学習は、基本的にYouTubeを活用した。一昔前なら書店で雑誌を買ってきて読み込むということをしていただろうと考えると、動画で情報が溢れていて便利な世の中だと思う。
- 自作PC動画編集用20万!神コスパ750FPS ゲーミングPC+組立て手順付2022年最新版!初心者向け予算別AMD Ryzen,Adobe,Premiere,Photoshop,Blender - YouTube
- 【自作PC】Palit RTX 3080 Tiで組むコスパ+ほぼ最強ゲーミングPC 4K120fpsでAPEXとFortniteが遊べる 5800X 使用 - YouTube
- PC内のケーブルの配線方法【4K】きずなあかり実況 - YouTube
各パーツの価格は基本的にAmazonやオンラインPCショップの情報を纏めて最安値を狙おうとはしたものの、経験の少ない自作初心者が複雑なことをして落とし穴にハマることを避けたく、また短期間で組み上げたいという理由から、秋葉原の物理店舗の数件を比較して安めのところでまとめて購入することにした。
購入したもの
主要なパーツ名と金額は以下の通り。キーボードとマウスは家にあったものを流用した。
name | type | Price |
---|---|---|
Fractal Design Define 7 Compact Black | ケース | ¥11,591 |
MSI B550 GAMING PLUS | マザーボード | ¥21,780 |
AMD Ryzen 9 5900X | CPU | ¥64,800 |
Palit NVIDIA GeForce RTX3090 | GPU | ¥173,800 |
Crucial DDR4 3200MHz 32GB x 2 | メモリ | ¥27,030 |
Western Digital SN770 1TB | SSD | ¥11,080 |
Antec NeoECO 850W PLATINUM | 電源 | ¥18,000 |
NZXT KRAKEN X63 | CPUクーラー | ¥19,800 |
その他グリスや細かいものを含めて、全体で35万円程度となった。まあまあな値段だと思いつつ、1世代前のハイエンドな構成が比較的安価で組めたので上出来ではないかと思う。
ちなみに、ケース以外のパーツは秋葉原に行って1回で全部購入したが、両手にはちきれんばかりの手提げを持って帰るのが本当に大変だったので、一部オンラインで買うか車を利用したほうが良かったかもしれない。
組み上げ
組み上げた結果はこんな感じ。仮組みもせず一発本番だったが特に失敗もなく、5,6時間程度で組み上げることができた。マザーボードにファンやケース部品の配線をするところで手こずったのは事前に予想していた通り。マザーボードをケースに付けた状態でケーブル取り回しのためにコネクタを何度か抜き差ししたが、作業しづらい狭さと暗さの状態での作業はピン折れしそうで危なかったなと後々思った。
おわりに
今回は、ディープラーニングの開発をするための自作PCを素人の自分が構築した流れを紹介した。実際にGPUで学習を回すまでのソフトウェアの準備もなかなか大変ではあったが、それはまた別の投稿で紹介したい。だいぶ楽になったとはいえ、人類はいつになったらCUDAのインストールに頭を悩ませなければいけないのか……。
いよいよこれで逃げられなくなってきたので、サンクコスト化しないように頑張ってディープラーニングを向き合いたいところ。
買ってよかったもの、そうでもないもの 2021
今年買ってよかったもの、またはそうでもないものを書き出してみます。
買ってよかったもの
AfterShokz Aeropex
今流行の骨伝導イヤホン。最初は敬遠していたがいざ試してみるとかなり使い心地が良い。左右をつなぐケーブル部分が固くて、首元にかかったりしないので良い。主に犬の散歩時にPodcastやラジオを聞いたりしている。
不満点があるとすると、メガネを掛けてマスクを付けている状態でこれをつけるとメガネがずれたりマスクが引っかかったりと、耳回りが渋滞してあまり心地よくはない。
FlexiSpot 電動式昇降デスク
とうとう昇降デスクを導入してしまった。天板も足もFlexiSpotで購入。めちゃくちゃ重いので組み立てや設置が大変だったが、一旦置いてしまえばあとは動かしたりしないので問題なし。最初の家は上げたり下げたりしていたが、最近はもっぱら上げっぱなし。デスク前で立って仕事をするか、ソファで座って仕事をするかのどちらかになっている。
デスクライト BenQ ScreenBar
ディスプレイの上に置く型のデスクライト。角度が調整されていてディスプレイに光が当たらないので、デスクライトを付けた状態でも何の問題もなくディスプレイで作業できるのがとてもよい。自動調光もできてUSBで給電できてしかも場所も取らないので非常に便利。
防災グッズ
家族や犬がいることもあって、最低限の災害対策はしておいたほうが良いと思って一通り揃えた。飲料や食事系は野外に置けるコンテナを買ってその中に収納している。電池やラジオ等のグッズは玄関の靴入れの一角に置いてある。
ライトは以下のものを買ったが、光の照らし方も調節できて電池1個で動くので良さそう。まだ実践で使ったことはなく、これからも無いことを祈る。
エレコム クリーニングクロス
これまで無印の使い捨て型のメガネ拭きを使っていたが、クロスに乗り換えた。拭き心地も良くて良い。
YouTube Premium
広告の無い世界は最高。これのせいでYouTubeを見すぎている感は否めない。
そうでもなかったもの
マグネットケーブル ケーブルクリップ
昇降デスクの配線整理のために購入したもの。ケーブルに付ける磁石の部分があんまり良くなくて、USB-Cの太いケーブルが入らなかったり、逆に普通のケーブルはスカスカでスライドしてずれてしまって、あんまりケーブル管理に役立たなかった。Ankerのケーブルホルダーの方が良いかもしれない(未確認)。
BeatsX ワイヤレスイヤホン
Amazonでセールになっていたので購入したものの、AirPodsのような左右分離に慣れているとケーブルが左右のイヤホンに繋がっているのが邪魔でしょうがなくなってしまい、結局手放してしまった。
MYNUS iPhone 12 ケース
MYNUSのiPhoneケースのサンドグレー。ケース下部のLightningコネクタ部分のディスプレイ側に切れ目が入っていて、ここに衣服などが引っかかることがあり、最終的にはここの部分が曲がってケースが壊れてしまった。手触りや色はものすごく気に入っていたこともあり、とても残念だった。