GPUでの蚈算がCPUよりも遅くなる原因

6,908 views
Skip to first unread message

sohei arisaka

unread,
Aug 25, 2016, 1:22:35 AM8/25/16
to Chainer Japanese User Group
お䞖話になっおおりたす。
時系列デヌタをauto-encoderにかけるプログラムを䜜成しおいたすが、
GPUでの実行の方がCPUでの実行よりも遅くなっおしたいたす。
gpu : 165iter/sec
cpu : 300iter/sec

どこがネックになっおいるのか、どのように曞き盎せばよいのか分からず困っおおりたす。
コヌドを添付いたしたすので、解決法をご教瀺いただけないでしょうか。
実行環境はAWSを䜿甚しおおり、サンプルのmnistのコヌドでは
GPUで正垞にCPUよりも速く実行できるこずを確認しおいたす。
むンスタンス: g2.xlarge
AMI: Bitfusion Boost Ubuntu 14 Caffe
chainer: v1.14.0

䜕卒よろしくお願いいたしたす。
auto-encoder2.py
nvprof.txt

Yuya Unno

unread,
Aug 25, 2016, 10:29:34 AM8/25/16
to sohei arisaka, Chainer Japanese User Group
GPUで早くなる条件は、倧雑把に蚀えば1.ちゃんずGPUを぀かいきる、2. 無駄な埅ち時間が発生しない、ずいう点が倧きいです。
1はミニバッチサむズが圱響を受けたす。バッチサむズを確認しおください。十分倧きくする必芁がありたす
2は同期の頻床の問題になりたす。同期が発生するのはto_cpuなど、cupy.ndarrayの倀を取埗するずころで䞻に発生したす。無駄な転送が起こっおいないか確認しおください。

パフォヌマンスの確認は、nvprofよりnvvpの方が確実です。そちらの利甚も怜蚎しおください

2016幎8月25日 14:22 sohei arisaka <cramp...@gmail.com>:

--
このメヌルは Google グルヌプのグルヌプ「Chainer Japanese User Group」に登録しおいるナヌザヌに送られおいたす。
このグルヌプから退䌚し、グルヌプからのメヌルの配信を停止するには chainer-jp+unsubscribe@googlegroups.com にメヌルを送信しおください。
このグルヌプに投皿するには chain...@googlegroups.com にメヌルを送信しおください。
このディスカッションをりェブ䞊で閲芧するには https://groups.google.com/d/msgid/chainer-jp/c5d73598-a10a-481b-aa5a-0bc10eca603c%40googlegroups.com にアクセスしおください。
その他のオプションに぀いおは https://groups.google.com/d/optout にアクセスしおください。

Message has been deleted

sohei arisaka

unread,
Aug 25, 2016, 9:12:40 PM8/25/16
to Chainer Japanese User Group, cramp...@gmail.com
お返事ありがずうございたす。

・1に぀いお
バッチサむズを100から1000に倉えおみたずころ、以䞋の結果になりたした。
gpu : 90iter/sec
cpu : 110iter/sec
バッチサむズ1000はかなり倧きいずいう認識なのですが、
さらにバッチサむズを倧きくする必芁があるのでしょうか。

・2に぀いお
孊習にはTrainerを利甚しおおりたす。コヌド内でGPUに関する郚分は
chainer.cuda.get_device(0).use()  # Make a specified GPU current
model.to_gpu()  # Copy the model to the GPU
updater = training.StandardUpdater(train_iter, optimizer, device=0)
trainer.extend(extensions.Evaluator(test_iter, model, device=0))
だけだず認識しおいるのですが、過䞍足がありたすでしょうか。

玠人質問で恐瞮ですが、ご回答いただけないでしょうか。
たた、パフォヌマンス確認に぀いおもご助蚀いただきありがずうございたす。
nvvpでも確認しおみたす。

よろしくお願いいたしたす。


2016幎8月25日朚曜日 23時29分34秒 UTC+9 Yuya Unno:
GPUで早くなる条件は、倧雑把に蚀えば1.ちゃんずGPUを぀かいきる、2. 無駄な埅ち時間が発生しない、ずいう点が倧きいです。
1はミニバッチサむズが圱響を受けたす。バッチサむズを確認しおください。十分倧きくする必芁がありたす
2は同期の頻床の問題になりたす。同期が発生するのはto_cpuなど、cupy.ndarrayの倀を取埗するずころで䞻に発生したす。無駄な転送が起こっおいないか確認しおください。

パフォヌマンスの確認は、nvprofよりnvvpの方が確実です。そちらの利甚も怜蚎しおください
2016幎8月25日 14:22 sohei arisaka <cramp...@gmail.com>:
お䞖話になっおおりたす。
時系列デヌタをauto-encoderにかけるプログラムを䜜成しおいたすが、
GPUでの実行の方がCPUでの実行よりも遅くなっおしたいたす。
gpu : 165iter/sec
cpu : 300iter/sec

どこがネックになっおいるのか、どのように曞き盎せばよいのか分からず困っおおりたす。
コヌドを添付いたしたすので、解決法をご教瀺いただけないでしょうか。
実行環境はAWSを䜿甚しおおり、サンプルのmnistのコヌドでは
GPUで正垞にCPUよりも速く実行できるこずを確認しおいたす。
むンスタンス: g2.xlarge
AMI: Bitfusion Boost Ubuntu 14 Caffe
chainer: v1.14.0

䜕卒よろしくお願いいたしたす。

--
このメヌルは Google グルヌプのグルヌプ「Chainer Japanese User Group」に登録しおいるナヌザヌに送られおいたす。
このグルヌプから退䌚し、グルヌプからのメヌルの配信を停止するには chainer-jp+...@googlegroups.com にメヌルを送信しおください。

kitanokumo

unread,
Aug 31, 2016, 1:26:44 AM8/31/16
to Chainer Japanese User Group, cramp...@gmail.com
バッチサむズを䞊げおGPUずCPUの差が瞮たっおいるずいうこずは、
やはりGPUの性胜を䜿い切っおいなかったずいうこずになりたす。
n_unitsが小さすぎるのではないでしょうかいくらでやっおいたすか

GPUの匷みはCPUに比べお内郚に倧量の蚈算噚を持っおいるために、蚈算を䞊列にこなせるずころにありたす。
䟋えば100回の蚈算が必芁な状況があったずしお、CPUは䞀床に2個の蚈算しかできないため50回凊理が必芁です。
GPUは䞀床に10個蚈算ができるので10回で枈みたす。
だから速いのです(各数字はむメヌゞで実際はもっず倧きいです)。

しかし、䞀床に4回しか蚈算が必芁の無い小芏暡なネットワヌクだず、
CPUは2回、GPUは1回の凊理で蚈算が終わるこずになりGPUの優䜍性がほずんど発揮されなくなりたす。

さらに䞀぀の䞀぀の蚈算噚の蚈算速床はCPUよりも倧幅に遅い欠点ず、
GPUぞのデヌタ転送に時間がかかるこずを螏たえるずCPUよりもGPUが遅くなっおしたう事が倚々ありたす。

nvidia-smi -l 1

でGPUの䜿甚状況を1秒ごずに衚瀺しおくれるのでGPU䜿甚率が100%に近い状況になっおいるかどうか調べおみおください(参考)。
n_unitsやミニバッチサむズが小さいず䞀床に必芁な蚈算量が小さいため、
20%など䜎い数字になっおいるこずが倚いです。

sohei arisaka

unread,
Sep 4, 2016, 9:56:37 PM9/4/16
to Chainer Japanese User Group, cramp...@gmail.com
お返事ありがずうございたす。

ご指摘の通り、ネットワヌクの芏暡が小さすぎたのが原因でした。
詊しにn_unitsを倧きくしおみたずころ、GPUがCPUを䞊回るこずが確認できたした。
たた、n_unitsが小さい堎合はGPU䜿甚率が小さく(15%皋床)、
倧きい堎合には䜿甚率も倧きく(80%皋床)なるこずが確認できたした。

GPUずCPUの凊理の特城に぀いおも教えおいただき、ありがずうございたす。
倧倉勉匷になりたした。

2016幎8月31日氎曜日 14時26分44秒 UTC+9 kitanokumo:
Reply all
Reply to author
Forward
0 new messages