CUDAでヒストグラム計算を書いてcupyにmergeしてもらった

 CUDAでヒストグラム計算を書いてcupyにmergeしてもらった

3b0c61a8c3ab34031ed452d54f965671?s=128

Ishita Takeshi

May 24, 2018
Tweet

Transcript

  1. CUDAでヒストグラム計算を書いて cupyにmergeしてもらった

  2. 石田 岳志 (@sonicair) 東京高専 専攻科 2年 (B4) • qiita.com/IshitaTakeshi •

    日経ソフトウエア 2017年8月号 • 特許6306770 日経ソフトウエア 2017年8月号 日経BP社
  3. やったこと PCANet (Chan et al. 2014) を実装した → CUDAでヒストグラム計算を書いた →

    CuPyにpull requestを送った → mergeしてもらった
  4. 動機:PCANetの実装 • フィルタの重みをPCAで計算できるCNN • (論文によると) PCAなので学習が速い Chan, Tsung-Han, et al.

    "PCANet: A simple deep learning baseline for image classification?." IEEE Transactions on Image Processing 24.12 (2015): 5017-5032.
  5. None
  6. CUDAで書こう!

  7. Poolingが重い → CUDAで書こう! cupy.ElementwiseKernel • 並列処理をCUDAで直接書ける

  8. 戦略: 並列化してそれぞれ二分探索 2 0 1 2 3 4 5 6

    -0.5 0.5 1.5 2.5 3.5 4.5 5.5
  9. 戦略: 並列化してそれぞれ二分探索 -0.5 = bins[0] <= 2 <= bins[6] =

    5.5 0 1 2 3 4 5 6 -0.5 0.5 1.5 2.5 3.5 4.5 5.5
  10. 戦略: 並列化してそれぞれ二分探索 0 1 2 3 4 5 6 -0.5

    0.5 1.5 2.5 3.5 4.5 5.5 3 = (0 + 6) / 2 bins[3] = 2.5
  11. 戦略: 並列化してそれぞれ二分探索 3 = (0 + 6) / 2 bins[3]

    = 2.5 >= 2 0 1 2 3 4 5 6 -0.5 0.5 1.5 2.5 3.5 4.5 5.5
  12. 戦略: 並列化してそれぞれ二分探索 1 = (0 + 3) / 2 bins[1]

    = 0.5 0 1 2 3 4 5 6 -0.5 0.5 1.5 2.5 3.5 4.5 5.5
  13. 戦略: 並列化してそれぞれ二分探索 1 = (0 + 3) / 2 bins[1]

    = 0.5 <= 2 0 1 2 3 4 5 6 -0.5 0.5 1.5 2.5 3.5 4.5 5.5
  14. 戦略: 並列化してそれぞれ二分探索 2 = (1 + 3) / 2 bins[2]

    = 1.5 0 1 2 3 4 5 6 -0.5 0.5 1.5 2.5 3.5 4.5 5.5
  15. 戦略: 並列化してそれぞれ二分探索 2 = (1 + 3) / 2 bins[2]

    = 1.5 <= 2 0 1 2 3 4 5 6 -0.5 0.5 1.5 2.5 3.5 4.5 5.5
  16. 戦略: 並列化してそれぞれ二分探索 0 1 2 3 4 5 6 -0.5

    0.5 1.5 2.5 3.5 4.5 5.5 2 -> 2
  17. https://github.com/cupy/cupy/pull/298

  18. https://github.com/cupy/cupy/pull/298

  19. PFNの方々にご協力いただきました  @unnonouno さん  @okuta さん  ありがとうございました

  20. 評価 GPU TITAN X (Pascal) CPU Intel Core i7-6700 Binの数,サンプル数

    を 24~216 の範囲で 変化させて実行時間を調査
  21. None
  22. 結果