你好。
我目前正在使用vllm库和dataparallel进行我的项目开发。
直到版本0.2.6,它仍然可以明确指定每个worker的特定GPU,这对于优化资源分配非常有用,尤其是在不使用Tensor并行性的情况下。
下面的代码片段说明了如何实现这种配置:
def child_process(rank):
os.environ["LOCAL_RANK"] = str(rank)
from vllm import LLM
从0.2.6版本开始,这种功能似乎不再受支持。
这个特性对于实现更高的吞吐量至关重要,特别是在处理较小的模型时(例如,在A100 80G GPU上运行一个2B参数模型)。
谢谢!
5条答案
按热度按时间nbnkbykc1#
我相信PyTorch内部使用的环境变量是
CUDA_VISIBILE_DEVICES
,这是否能达到相同的效果?f4t66c6m2#
哦,我忘了添加一个细节。
CUDA_VISIBLE_DEVICES
通常可以正常工作,但是如果某些库初始化了 torch(例如import torch
或import transformers
),那么它将无法正常工作。实际上,上述代码片段应该修改为:yc0p9oo03#
有趣的是,您是在说一旦导入
torch
,就会分配cuda设备吗?icnyk63a4#
是的,更准确地说,进行一些GPU操作会产生效果。
以下是重现的最小脚本:
案例A(运行良好)
输出A(预期)
案例B(不起作用)
输出B(未预期)
以上是我使用
LOCAL RANK
的解决方案在第二个案例中也有效,但仅适用于vllm<=0.2.6
gab6jxml5#
我也遇到过这个限制,希望在同一个脚本中运行多个模型,但它们位于不同的GPU上。理想情况下,应该有一种方法可以为每个
LLM(...)
初始化指定模型所在的GPU。设置CUDA_VISIBILE_DEVICES
对于单个模型来说非常有效(可以在导入 torch 之前通过设置os.environ["CUDA_VISIBLE_DEVICES"]
来实现编程方式)但对于同一进程中的多个模型不起作用。这里有一些关于修复的讨论,但需要将其实施到发布版本中。