CUDA文档没有具体说明多少CUDA进程可以共享一个GPU。例如,如果我由同一用户启动多个CUDA程序,而系统中只安装了一块GPU卡,会有什么效果?它能保证执行的正确性吗?在这种情况下,GPU如何调度任务?
发布于 2015-07-27 09:14:49
来自独立主机进程的CUDA活动通常会创建独立的CUDA contexts,每个进程一个。因此,从不同主机进程启动的CUDA活动将在同一设备上的不同CUDA环境中进行。
单独上下文中的CUDA活动将被序列化。GPU将从一个进程执行活动,当该活动空闲时,它可以并将上下文切换到另一个上下文,以完成从另一个进程启动的CUDA活动。未指定详细的上下文间调度行为。(在单个GPU上运行多个上下文通常也不能违反基本GPU限制,例如设备分配的内存可用性。)注意,上下文间切换/调度行为是未指定的,并且还可以根据机器设置而变化。随意观察或微观基准测试可能表明,在较新的设备上,来自不同进程的内核可以并发运行(在MPS之外),但这是不正确的。Newer machine setups may have a time-sliced rather than round-robin behavior,但这并没有改变这样一个事实,即在任何给定的时刻,只有一个上下文中的代码可以运行。
这种情况(来自独立主机进程的GPU活动的序列化)的“例外”是CUDA多进程服务器。简而言之,MPS充当一个“漏斗”,收集来自多个主机进程的CUDA活动,并运行该活动,就像它来自单个主机进程一样。主要的好处是避免了serialization of kernels which might otherwise be able to run concurrently。典型的用例将是启动多个MPI等级,所有这些等级都打算使用单个GPU资源。
请注意,上述描述适用于处于“默认”compute mode中的GPU。处于“独占进程”或“独占线程”计算模式的GPU将拒绝在单个设备上创建多个进程/上下文的任何尝试。在这些模式之一中,其他进程尝试使用已在使用的设备将导致CUDA API报告失败。在某些情况下,可以使用nvidia-smi utility修改计算模式。
发布于 2020-05-23 07:48:51
我在这个话题上是个新手。但是我发现在一个GPU上模拟多个GPU是可能的。“为多个GPU进行开发将允许模型随额外的资源进行扩展。如果在使用单个GPU的系统上进行开发,我们可以使用虚拟设备模拟多个GPU。这可以在不需要额外资源的情况下轻松测试多GPU设置。”
来源:https://www.tensorflow.org/guide/gpu#allowing_gpu_memory_growth
也许使用这种技术,我们可以在其中一个虚拟GPU上运行每个模型(至少用于推理)。
https://stackoverflow.com/questions/31643570
复制相似问题