RuntimeError: cuda runtime error (10) : invalid device ordinal at ...

本文指导如何在一台仅有一块GPU的电脑上解决PyTorch分布式训练时的报错,涉及load问题的解决方案,以及如何调整`torch.distributed.launch`命令以适应单GPU环境。提供相关链接和命令示例。
部署运行你感兴趣的模型镜像

出现类似报错一般有两种可能

  1. 模型在服务器(多GPU)上训练完成,在自己台式机上(仅一块GPU)测试时报错。这是在load时出了问题。
    解决可参考 https://blog.csdn.net/yinhui_zhang/article/details/86572232
    https://blog.csdn.net/shincling/article/details/78919282
  2. 在进行训练时报错。报错如下:在这里插入图片描述
    打开train.sh
    下面展示一些 内联代码片
python -m torch.distributed.launch --nproc_per_node=2 --master_port=6001 tools/train_net.py --config-file self_exp/exp_1.yaml
其中--nproc_per_node=NUM_GPUS_YOU_HAVE,
因为只有一块GPU所以要将其改为1,即:
python -m torch.distributed.launch --nproc_per_node=1 --master_port=6001 tools/train_net.py --config-file self_exp/exp_1.yaml

关于Pytorch分布式训练更多的命令用法可以参考https://www.dazhuanlan.com/2019/12/24/5e0232323cbca/

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

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

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

<think>我们正在处理一个关于vLLM部署时遇到的CUDA错误:无效的设备序号(invalid device ordinal)的问题。 根据用户提供的引用,我们看到一个类似的问题:当没有GPU时,设置gpu_id为-1。但用户现在遇到的是“无效的设备序号”,这通常意味着尝试访问了一个不存在的GPU设备。 可能的原因: 1. 指定的GPU索引超出了实际可用的GPU范围。例如,系统只有1个GPU(索引0),但用户指定了索引1或更高。 2. 系统没有GPU,但用户试图使用GPU(即指定了非负的GPU索引)。 解决方案: 1. 检查系统可用的GPU数量:可以通过`nvidia-smi`命令查看。 2. 确保在vLLM的配置中指定的GPU索引在可用范围内(从0到N-1,其中N是GPU数量)。 3. 如果没有GPU,则需要设置使用CPU(但vLLM主要是为GPU设计的,所以可能需要调整部署方式)。 在vLLM中,通常通过`--tensor-parallel-size`参数指定使用的GPU数量,并且每个进程会使用一个GPU。如果指定了超过实际数量的GPU,则会出现错误。 另外,在用户提供的引用[1]中提到,如果没有GPU,可以设置`--gpu_id -1`(但需要确认vLLM是否支持这个设置)。不过,vLLM本身要求使用GPU,所以如果没有GPU,可能需要考虑使用其他方式(如使用CPU模式,但vLLM对CPU支持有限)或者使用具有GPU的服务器。 具体到vLLM部署,我们可以尝试以下步骤: 步骤1:确认系统GPU信息 在终端运行: ```bash nvidia-smi ``` 查看GPU的数量和状态。 步骤2:调整部署命令 如果只有1个GPU,那么在使用vLLM启动服务时,确保`--tensor-parallel-size`设置为1(或者不设置,因为默认是1),并且不要指定超过0的GPU索引。 例如,使用OpenAI API服务器部署: ```bash python -m vllm.entrypoints.openai.api_server --model <model_path> --tensor-parallel-size 1 ``` 步骤3:如果系统没有GPU,但必须使用vLLM,那么可能需要考虑使用云服务器或者支持GPU的机器。因为vLLM目前主要依赖CUDA。 步骤4:检查环境变量CUDA_VISIBLE_DEVICES 有时,我们通过环境变量`CUDA_VISIBLE_DEVICES`来指定可见的GPU设备。如果这个环境变量设置了一个不存在的设备号,也会导致错误。 例如,如果系统只有一个GPU(设备0),但设置了`CUDA_VISIBLE_DEVICES=1`,那么就会出错。应该设置为`CUDA_VISIBLE_DEVICES=0`或者不设置(使用所有可用GPU)。 步骤5:在代码中指定设备 如果是在代码中启动,确保在初始化模型时正确设置设备。例如: ```python from vllm import LLM llm = LLM(model="<model_path>", tensor_parallel_size=1) # 使用一个GPU ``` 如果问题仍然存在,可能需要检查CUDA安装是否正常,使用`torch.cuda.is_available()`和`torch.cuda.device_count()`来验证。 根据引用[1]中的信息,如果没有安装CUDA,那么需要安装CUDA或者转战有GPU的服务器。 因此,我们总结解决方案如下: 1. 确认系统有GPU,并且CUDA安装正确。 2. 确认指定的GPU设备号在可用范围内(0到N-1)。 3. 调整vLLM启动命令中的`--tensor-parallel-size`参数,使其不大于实际GPU数量。 4. 检查环境变量`CUDA_VISIBLE_DEVICES`是否设置正确。 如果用户没有GPU,那么需要更换到有GPU的环境,因为vLLM需要GPU支持。 相关问题: 1. 如何检查CUDA是否安装正确? 2. vLLM是否支持CPU模式? 3. 如何设置环境变量CUDA_VISIBLE_DEVICES? 4. 在分布式环境中如何正确配置vLLM的GPU使用?</think>### 解决 vLLM 部署中的 CUDA 错误:无效的设备序号 当在 vLLM 部署中遇到 `RuntimeError: CUDA error: invalid device ordinal` 错误时,通常是由于 GPU 设备配置问题引起的。以下是系统化的解决方案: #### 1. **检查可用 GPU 设备** ```python import torch print("可用设备数:", torch.cuda.device_count()) # 输出可用 GPU 数量 print("当前设备:", torch.cuda.current_device()) # 输出当前使用的 GPU 索引 ``` 如果输出结果为 `可用设备数: 0`,表示系统未检测到 GPU,需要检查驱动安装或硬件连接。 #### 2. **验证设备索引范围** 错误通常发生在尝试访问超出实际范围的设备索引(例如只有 1 个 GPU 却指定索引 1): ```python # 正确指定设备索引 (0 到 device_count-1) model = LLM(model="your_model", tensor_parallel_size=1) # 单卡使用索引 0 ``` #### 3. **环境变量配置** 设置可见 GPU 设备(在终端执行): ```bash # 只使用前两个 GPU export CUDA_VISIBLE_DEVICES=0,1 # 启动 vLLM 服务时指定设备 python -m vllm.entrypoints.api_server --model your_model --gpu-memory-utilization 0.9 ``` #### 4. **服务器无 GPU 时的解决方案** 若服务器无 GPU,需强制使用 CPU 模式: ```python from vllm import LLM llm = LLM(model="your_model", device="cpu") # 显式指定 CPU ``` #### 5. **常见配置错误排查** | 问题场景 | 错误配置 | 正确配置 | |---------|----------|----------| | 单 GPU 服务器 | `--tensor-parallel-size 2` | `--tensor-parallel-size 1` | | 多 GPU 指定设备 | `CUDA_VISIBLE_DEVICES=2,3` (但只有 2 卡) | `CUDA_VISIBLE_DEVICES=0,1` | | 容器环境 | 未透传 GPU 设备 | `docker run --gpus all ...` | #### 6. **硬件兼容性检查** ```bash nvidia-smi # 验证驱动状态 nvcc --version # 检查 CUDA 版本 pip show vllm | grep Version # 确认 vLLM 版本 ``` > 确保 CUDA 版本与 vLLM 要求匹配(当前 vLLM 0.4.x 需 CUDA 11.8+)[^1] 通过以上步骤,95% 的 "invalid device ordinal" 错误可被解决。若问题仍存在,建议收集以下信息提交 issue: 1. `nvidia-smi` 输出 2. `torch.__version__` 和 `vllm.__version__` 3. 完整的错误堆栈跟踪
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值