NumpyからCupyへ変えるのは難しい

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を使う意味がないので、当分は使用を見送る。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください