vllm使用相关错误

部署运行你感兴趣的模型镜像

错误提示

RuntimeError: The number of CUDA devices has changed since the first call to torch.cuda.device_count(). This is not allowed and may result in undefined behavior. Please check out https://github.com/vllm-project/vllm/issues/6056 to find the first call to torch.cuda.device_count() and defer it until the engine is up. Or you can set CUDA_VISIBLE_DEVICES to the GPUs you want to use.

解决方案

这个错误提示表明在程序运行过程中,torch.cuda.device_count() 的调用次数和返回的 CUDA 设备数量发生了变化。这种情况通常是由于环境配置或代码逻辑问题导致的。以下是一些解决方法:

1. 设置 CUDA_VISIBLE_DEVICES

通过设置 CUDA_VISIBLE_DEVICES 环境变量,可以限制程序可见的 GPU 设备。这可以确保 torch.cuda.device_count() 返回的设备数量在程序运行过程中保持不变。

在终端中设置
export CUDA_VISIBLE_DEVICES=0,1,2,3  # 根据你的实际情况设置
在 Python 代码中设置

你也可以在代码中设置 CUDA_VISIBLE_DEVICES

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3"  # 根据你的实际情况设置

2. 延迟调用 torch.cuda.device_count()

确保在 vLLM 引擎初始化之前不调用 torch.cuda.device_count()。你可以检查你的代码,确保在 vLLM 引擎初始化之前没有调用 torch.cuda.device_count()

检查代码

确保在 vLLM 引擎初始化之前没有调用 torch.cuda.device_count()。例如:

import torch
from vllm import LLM

# 确保在这之前没有调用 torch.cuda.device_count()
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3"  # 根据你的实际情况设置

# 初始化 vLLM 引擎
llm = LLM(model="your_model_name_or_path")

3. 检查依赖库的初始化

确保所有依赖库的初始化都在 vLLM 引擎初始化之后进行。例如,如果你使用了 transformers 库,确保在 vLLM 引擎初始化之后再加载模型。

4. 检查多进程或多线程问题

如果你的代码中有多个进程或线程,确保每个进程或线程都设置了 CUDA_VISIBLE_DEVICES,并且在初始化 vLLM 引擎之前没有调用 torch.cuda.device_count()

示例代码

以下是一个完整的示例,展示了如何设置 CUDA_VISIBLE_DEVICES 并延迟调用 torch.cuda.device_count()

import os
import torch
from vllm import LLM

# 设置可见的 GPU 设备
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3"  # 根据你的实际情况设置

# 确保在这之前没有调用 torch.cuda.device_count()
# 初始化 vLLM 引擎
model_name_or_path = "your_model_name_or_path"
llm = LLM(model=model_name_or_path)

# 现在可以安全地调用 torch.cuda.device_count()
num_devices = torch.cuda.device_count()
print(f"Number of CUDA devices: {num_devices}")

总结

  1. 设置 CUDA_VISIBLE_DEVICES:限制程序可见的 GPU 设备,确保 torch.cuda.device_count() 返回的设备数量在程序运行过程中保持不变。
  2. 延迟调用 torch.cuda.device_count():确保在 vLLM 引擎初始化之前不调用 torch.cuda.device_count()
  3. 检查依赖库的初始化:确保所有依赖库的初始化都在 vLLM 引擎初始化之后进行。
  4. 检查多进程或多线程问题:确保每个进程或线程都设置了 CUDA_VISIBLE_DEVICES,并且在初始化 vLLM 引擎之前没有调用 torch.cuda.device_count()

您可能感兴趣的与本文相关的镜像

PyTorch 2.9

PyTorch 2.9

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值