Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Ishita Takeshi

May 24, 2018
Tweet

More Decks by Ishita Takeshi

Other Decks in Programming

Transcript

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

    View Slide

  2. 石田 岳志 (@sonicair)
    東京高専 専攻科 2年 (B4)
    ● qiita.com/IshitaTakeshi
    ● 日経ソフトウエア
    2017年8月号
    ● 特許6306770
    日経ソフトウエア 2017年8月号 日経BP社

    View Slide

  3. やったこと
    PCANet (Chan et al. 2014) を実装した
    → CUDAでヒストグラム計算を書いた
    → CuPyにpull requestを送った
    → mergeしてもらった

    View Slide

  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.

    View Slide

  5. View Slide

  6. CUDAで書こう!

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. 評価
    GPU TITAN X (Pascal)
    CPU Intel Core i7-6700
    Binの数,サンプル数 を 24~216 の範囲で
    変化させて実行時間を調査

    View Slide

  21. View Slide

  22. 結果

    View Slide