我们正在尝试通过将GPU引入节点来提高Spark Job处理性能。但是在使用GPU启用Spark3之后,我们看到了spark作业性能的下降趋势,这是由于启用GPU时创建的spark执行器数量有限。
即仅使用CPU核心(没有GPU),我们能够创建数百个执行器,因为我们已经有数百个CPU核心。
启用GPU后,我们只能创建6个执行器,因为我们只有6个GPU硬件。
那么,有没有办法用一个GPU来运行多个执行器呢
我们正在尝试通过将GPU引入节点来提高Spark Job处理性能。但是在使用GPU启用Spark3之后,我们看到了spark作业性能的下降趋势,这是由于启用GPU时创建的spark执行器数量有限。
即仅使用CPU核心(没有GPU),我们能够创建数百个执行器,因为我们已经有数百个CPU核心。
启用GPU后,我们只能创建6个执行器,因为我们只有6个GPU硬件。
那么,有没有办法用一个GPU来运行多个执行器呢
1条答案
按热度按时间t98cgbkg1#
如果您使用Spark资源调度来将执行器分配给GPU,我不相信有一种方法可以在Spark调度中将多个执行器分配给同一个GPU。资源量配置是一个整数,因此无法指定分配给每个执行器的GPU的分数。
如果您绕过Spark的GPU调度功能,并通过其他机制将执行器分配给GPU,那么可能有一种方法可以让执行器共享GPU。然而,这取决于正在使用GPU的执行器内的软件,以及该软件是否可以被配置为不假设它可以使用整个GPU。它可能需要人为地使用更少的GPU内存来为其他执行器腾出空间,这可能会导致软件执行不佳或遇到内存不足错误。在共享GPU的进程之间还存在进程上下文切换开销,这可能影响相对于独占地使用其自己的GPU的每个进程的性能。