CuPyはNumPy と高い互換性を持つと言われているが、完全互換ではない。
その為、NumPyを使ったプログラムをCuPy に変えるのは難しい。
後のために挫折した経緯をメモしておく。
1.背景
”ニューラルネットワーク自作入門”に記載されているMNISTデータを利用した
画像認識プログラムをNumPyからCuPy へ変えて処理時間の比較を試みた。
2.問題点
NumPyと互換性のないCuPy関数がありエラーとなる。主な問題は2つある。
2.1 asfarray関数
(1)下図のようにcupy.asfarrayを呼んでもエラーになる。
cupyのAPI Referenceにはcupy.asfarrayが定義されいるのに何故エラーになるか分からない。
(2)暫定対策としてnumpyで計算してcupyに変換してみた。(下図の上側枠内)
解消されたが、下図の下側枠内2つのようにscipy.special.expiでエラーになる。
2.2 scipy.special.expit関数
(1)cupyにはcupyx.scipy.special.expitがあるので下図のように変更した。
(2)しかし、下図枠内のようにエラーになる。
cupyのAPI Referenceにはcupyx.scipy.special.expitが定義されいるのに何故エラーになるか分からない。
(3)仕方がないのでsigmoid関数を自作して呼んだらエラーが解消された。
3.numpyと暫定対策版cupyの処理時間比較
(1)numpy
訓練に314秒、テストに1.4秒である。
(2)暫定対策版cupy
訓練に284秒(30秒しか早くない)、テストに7秒(5.6秒遅い)である。
認識精度はほぼ同じ。
<個人的な感想>
numpyと互換になるはずのcupy関数が普通に呼べないのは問題である。
暫定版でnumpyを使ってcupyに変換したので余分の処理時間がかかっていると思われ、
その為にテスト時間が遅いと推測される。
これではcupyを使う意味がないので、当分は使用を見送る。