我正在尝试在Pytorch中实现高效的并发推理方法。
目前,我在我的GPU上启动了2个进程(我只有1个GPU,两个进程都在同一设备上)。每个进程加载我的Pytorch模型并执行推理步骤。
我的问题是,我的模型占用了相当多的内存空间。我在GPU上有12GB的内存,而模型本身就占用了大约3GB的内存(不包括数据)。这意味着,我的两个进程共占用了6GB的内存,仅用于模型。
我在这个答案中看到了IPC的提及,但据我理解,它意味着进程#2将从进程#1复制模型,因此最终仍会分配6GB的模型空间。
我还查阅了Pytorch文档,关于DataParallel和DistributedDataParallel,但似乎不可行。 这篇文章似乎是我想要的,但我找不到任何关于如何在Pytorch的推断模式下使用的代码示例。
目前,我在我的GPU上启动了2个进程(我只有1个GPU,两个进程都在同一设备上)。每个进程加载我的Pytorch模型并执行推理步骤。
我的问题是,我的模型占用了相当多的内存空间。我在GPU上有12GB的内存,而模型本身就占用了大约3GB的内存(不包括数据)。这意味着,我的两个进程共占用了6GB的内存,仅用于模型。
我在想是否有可能只加载一次模型,然后在两个不同的进程中使用该模型进行推断。我的目标是仅使用3GB的内存来消耗模型,但仍然具有2个进程。
我在这个答案中看到了IPC的提及,但据我理解,它意味着进程#2将从进程#1复制模型,因此最终仍会分配6GB的模型空间。
我还查阅了Pytorch文档,关于DataParallel和DistributedDataParallel,但似乎不可行。 这篇文章似乎是我想要的,但我找不到任何关于如何在Pytorch的推断模式下使用的代码示例。
我知道这可能很难作为训练的一部分来完成,但请注意我只是在谈论推理步骤(模型处于只读模式,不需要更新梯度)。在这种情况下,我不确定是否可能。
tensorflow
具有最佳并行数据预加载的本地支持,您可以查看它以获取示例),您可以获得大部分并发性的好处。同时使用单一模型即可。 - THNfork
成两个不同的进程,每个进程都充当服务器并开始侦听不同的套接字,那会怎么样呢?问题在于通过共享GPU内存,您必须同步这两个进程,以便它们不会同时使用(相同的)GPU内存。 - Raz Rotenberg