depp learningを使ってFXの予測をする研究を始めて3年たちました。
そこで専用開発機を準備する場合に、重要だと感じた点をまとめてみます。
開発専用機の構成
- OS Ubuntu 20.04 LTS Server
- CPU intel i3 10100(4コア8スレッド)
- memory 8GB -> 32GB
- disk 64GB(SSD) -> 2TB(HD)
- GPU 2060Super -> 2060Super x2 -> 3090
- case T600 -> Define7XL
OS
最初はWindows10を使っていましたが、
- Windows Serverでないのでリソースを多めに消費すること
- リモート接続がGUIなので、メインPCの画面を占有して邪魔なこと
- そもそも接続はtelnetで十分と感じていたこと
- 途中からソフトウェア環境をDockerに移行したこと
からUbuntu Serverにしました。
※)注意
開発機でデータを取得しそれがMT5の場合には、Windows一択になります。
pythonのMetatrader5パッケージはwindows版のみです
結論:好みでどうぞ
CPU
最初は「メインはGPUなのでCPUなんて何でもよい」と考えており、そこそこで安めの”i3-10100”にしました。
しかしこの考え方は間違いでした。
deep learningでFX研究をするためには、(おそらく)自分でデータを準備する必要があります。
学習データをどう作るか?は非常に大事なテーマなのですが、まずOHLCだけで済ませることはありません。
非常に大きなデータを加工して作成するのは結構な時間がかかります。
試行錯誤を繰り返している場合、この時間がストレスに感じることがあります。
最終的にメインPC(5600X+32GB)でデータを作成しコピーすることにしました。
結論:最低限よりもそこそこの性能は欲しい
memory
データがかなり大きくなります。
少し大きめにとると学習データの配列だけGB単位になります。
加えて研究を進めていくとモデルも大きくなっていきます。
最初8GBで進めていましたが「妙に遅いな」と思って調べてみると、学習途中にswapが大量発生していました。(SSDなのに・・・)
結論:多いほど良い
disk
最初学習データが乗ればよいと考えていましたが、間違いでした。
その人のスタイルによりますが、途中にログを大量に残したり、複数パターンを実行するために学習結果をたくさん残したりする場合には、大きいほうが良いです。
結論:適度な大きは必要
GPU
deep learningで一番重要なパーツです。
1)個人的に一番重要なのはメモリ容量です。
メモリが足りない場合には、モデルの大きさとバッチサイズに制限が発生してしまいます。
バッチサイズが小さくなると反比例して学習時間が伸びてしまいます。
場合によってはモデルを小さくしたり、学習データの項目を減らしたり、timestepを小さくする必要もでてきますが、これは本意ではなく避けるべきです。
そのため、メモリ容量は大きいほうが良いです。
2)最初2060super1枚で始めましたが、すぐにメモリ不足を感じ増設することにしました。
「100パワーの高GPU1枚より、60パワーを2枚の方が効率的であろう!」と考えて2枚運用を選びました。(追加費用が少なかったのでw)
2枚運用の場合のメリット
- バッチサイズを2倍にできる(学習時間が短縮)
- (実質)メモリが2倍になる
デメリット
- 熱対策が大変
メリットは大きいのですが、それ以上にデメリットの対策が大変なのです。
これは2枚運用の場合の熱推移例です。
熱対策のため、サイドフアンを増やしたり1枚を縦刺しにした時のデータです。
グラフを見てわかるように、GPUの上段と下段で10℃以上差があります。
これではサーマルスロットリングにより上段GPUの性能が抑えられてしまいます。
2枚運用として多いのは”並列実行(データパラレル)”でしょう。
この場合は2枚のGPUが都度同期をとる必要があるので、早い下段GPUが遅い上段GPUに引っ張られてしまい全体として遅くなります。
60+60=120にならず、90にしかならないこともあるわけです。
水冷化などはかなりハードルが高く、また追加コストが発生しまてしまいます。
それならば・・・と、結局3090x1枚に落ち着きました。
メモリも32GBになり実行中のout of memoryもなくなりました。
※)データパラレルではなくoptunaの並列実行等であれば、影響は小さくなります。
結論:GPUメモリは多い方がよい。
2枚運用は大変
ケース
正直あまりこだわる必要はないと考えます。
GPUの縦差しに惹かれてかなり大きなDefineXL7にしましたが、効果ありませんでした。
本気で2枚運用を考えるなら、水冷かワークステーション用のマザーボードを考えた方がよいです。(slot数が多いので設置間隔を広げることが可能)
いっそマイニングのリグのように、裸フレームにGPUを並べた方がよいかもしれません(笑)
結論:好みでどうぞ
ゼロから始める人は
最初から開発専用機を用意しない方がよいです。
今あるPCを流用するか、google colaboratoryを使用するのがよいでしょう。
shimizuも最初はcolabを利用していました。
colabはTPUを使える点も大きな魅力です。
今colbを使っていない理由は以下の通りです。
- 最大12時間で接続が切れてしまう
- 一度切れたらすぐに再接続できず、かなりの時間またされてしまう
- 開発機を構築する時期には、colab pro(有償だが最大24時間)日本版はなかった
- 現在のスタイルが24~48時間の連続稼働を繰り返すことが多い
「まずdeep learningを始めてみたい」人にはcolabが最適です。
colabで不足を感じるようになった時に、専用機を考えるとよいでしょう。