提问人:Mandias 提问时间:3/15/2022 最后编辑:talonmiesMandias 更新时间:3/15/2022 访问量:2993
Pytorch 显示/处理 CUDA 警告的来源,以便释放和张量释放
Pytorch show source of/handle CUDA warnings for deallocation and tensor release
问:
我正在使用 Pytorch、CUDA 和 torch.multiprocessing (torch.mp) 运行一些并行工作器,并根据需要通过 torch.mp 队列、管道和shared_memory传递信息。一切似乎都正常,但我偶尔会收到来自 CUDA 的释放警告。在程序退出过程中,还会出现“在释放张量之前进程终止”警告:
[W CudaIPCTypes.cpp:92] Producer process tried to deallocate over 1000 memory blocks
referred by consumer processes. Deallocation might be significantly slowed down. We
assume it will never going to be the case, but if it is, please file but to
https://github.com/pytorch/pytorch
[W CudaIPCTypes.cpp:15] Producer process has been terminated before all shared CUDA
tensors released. See Note [Sharing CUDA tensors]
我已采取措施让每个进程都有机会正常关闭,但警告仍然存在。我在文档中读到,当使用 CUDA 时,通过队列提供的信息必须保留在生产者进程中,直到它不再存在于消费者身上。由于数据是来回传递的,因此每个进程都可以被视为生产者和消费者。我是否需要跟踪将要共享的所有内容,并在退出过程中手动删除使用者副本?
上述警告完全没有上下文,尽管添加了各种 print 语句来帮助调试,但仍然不清楚是代码的哪一部分导致了它们。有没有办法让警告更清楚地指出导致问题的原因?
此外,我尝试根据此堆栈溢出问题实现warn_with_traceback,但它不会影响警告消息,即使添加到每个工作进程中也是如此。
import traceback
import warnings
import sys
def warn_with_traceback(message, category, filename, lineno, file=None, line=None):
log = file if hasattr(file,'write') else sys.stderr
traceback.print_stack(file=log)
log.write(warnings.formatwarning(message, category, filename, lineno, line))
warnings.showwarning = warn_with_traceback
答: 暂无答案
评论