CPU <-> GPU でのメモリ転送 私は Cupy を深層学習以外の目的に使っていますが、その主なボトルネックになるのは、CPU <-> GPU 間のメモリの転送です。 GPUメモリはだいたい 4GB とか 8GB とかしかないので、学習データの全てをGPUに置けないことが多くなります。 そのため、メインメモリに置いてあるデータを毎回読みだしてGPUメモリに転送して、それを使ってトレーニングするということになります。 ただし、メインメモリからGPUメモリにデータを転送するには結構時間がかかってしまうので、小さなネットワークだと訓練時間よりもデータ転送に時間がかかってしまって、CPUで計算したほうが速いなんてこともよくあります。 非同期処理を行うことでそれを解決できることがあるかもしれません。 つまり、あるミニバッチを用いてモデルを訓練している間に、次のミニバッチをGPUに転送しておくこ
![Cupy を用いた 非同期メモリ転送 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/984a9e06d8b3936fe5f9ff8fa62bf7833fed52d2/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9Q3VweSUyMCVFMyU4MiU5MiVFNyU5NCVBOCVFMyU4MSU4NCVFMyU4MSU5RiUyMCVFOSU5RCU5RSVFNSU5MCU4QyVFNiU5QyU5RiVFMyU4MyVBMSVFMyU4MyVBMiVFMyU4MyVBQSVFOCVCQiVBMiVFOSU4MCU4MSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YTY1ODZmMmQ2ODY1MzY4MTI2ZmYwZWExYjZhY2M1NTc%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwZnVqaWlzb3VwJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz02YWVkNWUwYjViZDg4MWM5YWUwNmM2YTFiNDFhYTk3OA%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3Daf925e0895563920d04d90f0182a7f47)