個人深層学習用PCに第3世代Ryzen CPUを考えてみる

2019年06月19日に作成
タグ: はてな

深層学習が一般にブームになり始めた2015年末頃は、intel core i7 6700kなどが主流で、4coreが最大だったと思います。その時代に買ったPC(けちったので i5 6600)のGPUは更新してたのですが、最近は計算時にCPUが100%になることが多くなってきたので、そろそろCPUの交換の時期かと思っています。

最近、5月末から6月初旬にかけて、AMDは第3世代Ryzenデスクトップ用CPU Ryzen 9 3950X(16core,2019年9月発売予定)や Ryzen 3900X(12core, 2019年7月7日発売予定)を発表しました。

前々から気になっていたRyzenですが、ゲーム用にはいいけど、コア性能がいまいちで計算用にはintelほうがいいみたいな噂もあって、手は出してませんでした。とはいえ、最大16コアまで増えたこともあり、一度、いろいろ調べてみました。

調べた感じでは、下図のように、Ryzen 7 2700X « Core i9 9900K « Ryzen9 3950X  でそれぞれ2倍くらいのfloat32の乗算能力がありそう??っていう感じでした。

※ハードウェアは詳しくなく、間違っていることが多いかもしれません。

imgae

Coreが2倍増えたら2倍演算能力が上がるっていうのは普通だと思いますが、coreあたりの演算能力はよくわからないポイントだと思います。

ここで出てくるのがAVXとかSIMDとかの単語になるのですが、いくつか記事を見る限り、intelは元々SIMD演算ユニットは256bit幅だったようで、AMDは今回128bit⇒256bit幅に変更してAVX256に対応したらしいのです。128bit演算器だと32bitのfloat乗算は1回に4乗算(128bit/32bit)できますが、256bitだと8乗算(256bit/32bit)できることになるようです。この演算器の自体も1コアあたり2個あるので、256bit幅だと8×2個で16乗算できるようなり、今回のRyzenはコアあたりのfloat乗算能力が2倍になったらしいのです。

今回、Ryzenのコア当たりの演算能力は2倍となってintelのcoreシリーズに並び、さらにcore i9 9900Kの8コアの2倍の16コアをのせてきたので、一気にintelの2倍の演算能力になったという感じです。

ちなみに、今回乗算のみを考えてますが、行列計算ではFMAという積和演算(掛け算と足し算を同時に演算)が重要で、256bitFMA演算器1個当たり、float32 を 8(256bit/32bit) × 2(積と和)/cycleの計算ができるようです。

Ryzen 3950Xだと

3.5(GHzベース) × 16(core) × 2(演算器) × 8(256bit/32bit) × 2(積と和) = 1.79 TFlops

となり、計算上今のGPUの10TFlops程度に対して、大きく桁違いではなかったりします。(ほんとう?)

さて、ここで2点疑問でてきます。一つ目はソフト側とか対応してないとかで、結局Ryzenが遅いってことはない?もう一つ目は巨人intelが、すぐなにか新しいものを出すのでは?という疑問です。

一つ目ですが、pythonで深層学習のCPU側の処理を考えたとき、前処理ではnumpyを使うことが多いですし、Chainerでもnumpyを使っています。numpyの行列演算を実際に担うところは別のC++数値計算用のライブラリを使っているようで、インストールよって違うものが入るようです。

  • anaconda インストール ⇒ Intel MKL
  • pip インストール ⇒ OpenBLAS

AnacondaのNumPyとpipによるNumPyの速度の違い

この数値計算ライブラリ(MKLやOpenBLAS)側が行列計算を各コアに割り振って、最適なAVX命令を使うみたいなことをやっているようなので、こちらがコア数や命令セットに対応しているかが重要になってくるはずです。

命令セットが完全互換性があればOpenBLASでそのまま早く動く可能性もありますし、そうでなければ、OpenBLASなどが対応するまで時間がかかるかもしれません。ただ、実際の早く動くかはやってみないとわからないところであります。

二つ目のintelがすぐ新しいものを出すかということですが、最近intelは10世代目(ice lake)のモバイル用CPUを6月から出荷すると発表しました。しかし、デスクトップ用についてはまったく出荷時期やスペックが不明な状態です。

インテルは現状、9世代目の14nm++プロセスに対し、10世代目の10nmプロセスがなかなかうまくいかず、生産予定が今まで何回も延期してやっとモバイル向けだけ出荷のめどが立ったという状態のようです。また、10nmの生産が遅れたことで、14nm++の生産能力が足りなくなって、去年の秋よりintel CPUが品薄になっていました。

そんな状況なので、インテルにとって出せるならすぐ出したいところですが、うまくいかないのでデスクトップCPUの情報が発表されないと推測されます。仮に年末に発売されたとしても、少量となって高騰する可能性が高いです。

また、ice lakeのデスクトップCPUがどうなるかですが、一つ目はコア数を増やす方向で、もう一つは演算ユニット幅を増やす方向が考えられます。ice lakeではAVX512対応になるらしく、演算ユニット幅が256bit⇒512bitとなりそうです。しかし、演算器が増えると1コアあたりの面積も増えるので、コア数を増やすのは厳しくなるはずです。また、ソフト側もAVX 512命令に対応する必要があります。

さて、16coreのRyzen 9 3950Xは749ドルとおそらく9万円程度になるはずで、コアが倍に増えた分、値段も倍に程度になっています。12coreのRyzen 9 3900Xは499ドルとおそらく6万円程度で比較的リーズナブルではあります。使ってみないとわからない部分が多いですが、個人的には一度Ryzenを試してみるものいいかと思ってます。

※2019年8月10日追記

結局、第3世代Ryzen発売当初に品薄で買えない状況もあって、8coreのi7 9700Fを買ってパソコンのCPU更新しました。なんとも微妙なCPUかと思いますが、前の4core i5に比べて遅くなる要素はないという安全をとった感じです。実際早くはなりましたが、今取り組んでる深層学習の実験では、2割ぐらい早くなったかなというところでした。待機の消費電力もあまり変わらなかったのでまあ満足です。もし、第3世代Ryzenを試した記事を期待していた方、今回お役に立てませんでした。