【发布时间】:2020-05-21 00:34:51
【问题描述】:
我正在尝试在 Pytorch 中实现一种有效的并发推理方式。
现在,我在我的 GPU 上启动了 2 个进程(我只有 1 个 GPU,两个进程都在同一个设备上)。每个进程都会加载我的 Pytorch 模型并执行推理步骤。
我的问题是我的模型占用了相当多的内存空间。我在 GPU 上有 12Gb 的内存,而模型仅占用约 3Gb 的内存(没有数据)。这意味着,我的 2 个进程仅用于模型就占用了 6Gb 的内存。
现在我想知道是否可以只加载一次模型,并使用此模型对 2 个不同的进程进行推理。我想要的是模型只消耗 3Gb 的内存,但仍然有 2 个进程。
我遇到this answer 提到 IPC,但据我了解,这意味着进程 #2 将从进程 #1 复制模型,因此我最终仍会为模型分配 6Gb。
我还查看了 Pytorch 文档,关于 DataParallel 和 DistributedDataParallel,但似乎不可能。
This 似乎是我想要的,但我找不到任何关于如何在推理模式下使用 Pytorch 的代码示例。
我知道这可能很难为训练做这样的事情,但请注意,我只是在谈论推理步骤(模型处于只读模式,无需更新梯度)。有了这个假设,我不确定这是否可能。
【问题讨论】:
-
我不明白为什么您不能只使用相同的(只读)模型进行推理。您可以将不同的数据批次传递到同一个模型中,数据加载和推理可以并行进行。多个用户还可以通过更高级别的界面与模型交谈。导致您使用两个进程的瓶颈在哪里?
-
感谢您的评论@THN。我目前启动了我的 2 个进程,在每个进程中加载模型,然后进行推断。既然进程不能共享内存,你会怎么做?使用线程?
-
我会使用一个进程来加载一个模型并进行推理。这将适用于大多数目的。你到底想达到什么目标?
-
你可以通过在数据加载中进行并发(与模型运行过程分开,可以手动完成;@ 987654323@ 具有对最佳并行数据预加载的原生支持,您可以查看它作为示例)和处理(大批量自动)。
-
@THN 我不知道
you get most of the benefit of concurrency with a single model on a single process。我认为,如果内存允许,加载 2 个进程会更有效,因此它们可以并行运行。请发表答案!
标签: python gpu pytorch inference