9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PyTorch で CUDA をサブプロセスで動かす

Posted at

AIを複数プロセスで動かしたいことってあると思います。これまで、PyTorchを使って認識処理をサブプロセスで動かしたいなと思ったことがありましたが、以下のエラーが発生してあきらめていました。以下はCUDAを使う場合に発生します。

"Cannot re-initialize CUDA in forked subprocess. To use CUDA with "
RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method

原因

ちゃんとググってみると、以下の記事を見つけました。
https://stackoverflow.com/questions/48822463/how-to-use-pytorch-multiprocessing

内部の詳しいことは分からなかったのですが、要するに multiprocessing でサブプロセスを作成する時に fork システムコールで子プロセスを立ち上げると CUDA が対応できないらしいです。エラーメッセージに書かれている通りですね。。。

解決策

サブプロセスの生成方法を fork から spawn に変更すればよい。
また、multiprocessing の代わりに torch.multiprocessing を使う。

以下をサブプロセス生成前に記述する。

import torch.multiprocessing as multiprocessing
if multiprocessing.get_start_method() == 'fork':
    multiprocessing.set_start_method('spawn', force=True)
    print("{} setup done".format(multiprocessing.get_start_method()))
9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?