问题

在安装red hat ai Inference Server(红帽的vLLM) 时,采用了红帽原始官方命令,但是有下面的错误,如何处理:

[root@rhel-9 work]# cat 3.shell

podman run --rm -it \

--device nvidia.com/gpu=all \

--security-opt=label=disable \

--shm-size=4g -p 8000:8000 \

--userns=keep-id:uid=1001 \

--env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \

--env "HF_HUB_OFFLINE=0" \

-v /rhaiis-cache:/opt/app-root/src/.cache:Z \

registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.3.0 \

--model RedHatAI/Llama-3.2-1B-Instruct-FP8 \

--tensor-parallel-size 2

[root@rhel-9 work]# ls

1.shell 2.shell 3.shell private.env

[root@rhel-9 work]# source 3.shell

/opt/app-root/lib64/python3.12/site-packages/torch/cuda/__init__.py:827: UserWarning: Can't initialize NVML

warnings.warn("Can't initialize NVML")

/opt/app-root/lib64/python3.12/site-packages/torch/cuda/__init__.py:827: UserWarning: Can't initialize NVML

warnings.warn("Can't initialize NVML")

INFO 03-03 08:08:47 [importing.py:44] Triton is installed but 0 active driver(s) found (expected 1). Disabling Triton to prevent runtime errors.

INFO 03-03 08:08:47 [importing.py:68] Triton not installed or not compatible; certain GPU-related functions will not be available.

/opt/app-root/lib64/python3.12/site-packages/torch/cuda/__init__.py:827: UserWarning: Can't initialize NVML

warnings.warn("Can't initialize NVML")

W0303 08:08:47.981000 1 lib/python3.12/site-packages/torch/utils/cpp_extension.py:117] No CUDA runtime is found, using CUDA_HOME='/usr/local/cuda'

Traceback (most recent call last):

File "<frozen runpy>", line 198, in _run_module_as_main

File "<frozen runpy>", line 88, in _run_code

File "/opt/app-root/lib64/python3.12/site-packages/vllm/entrypoints/openai/api_server.py", line 1460, in <module>

parser = make_arg_parser(parser)

^^^^^^^^^^^^^^^^^^^^^^^

File "/opt/app-root/lib64/python3.12/site-packages/vllm/entrypoints/openai/cli_args.py", line 278, in make_arg_parser

parser = AsyncEngineArgs.add_cli_args(parser)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/opt/app-root/lib64/python3.12/site-packages/vllm/engine/arg_utils.py", line 2000, in add_cli_args

parser = EngineArgs.add_cli_args(parser)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/opt/app-root/lib64/python3.12/site-packages/vllm/engine/arg_utils.py", line 1114, in add_cli_args

vllm_kwargs = get_kwargs(VllmConfig)

^^^^^^^^^^^^^^^^^^^^^^

File "/opt/app-root/lib64/python3.12/site-packages/vllm/engine/arg_utils.py", line 349, in get_kwargs

return copy.deepcopy(_compute_kwargs(cls))

^^^^^^^^^^^^^^^^^^^^

File "/opt/app-root/lib64/python3.12/site-packages/vllm/engine/arg_utils.py", line 259, in _compute_kwargs

default = default.default_factory()

^^^^^^^^^^^^^^^^^^^^^^^^^

File "/opt/app-root/lib64/python3.12/site-packages/pydantic/_internal/_dataclasses.py", line 121, in __init__

s.__pydantic_validator__.validate_python(ArgsKwargs(args, kwargs), self_instance=s)

File "/opt/app-root/lib64/python3.12/site-packages/vllm/config/device.py", line 58, in __post_init__

raise RuntimeError(

RuntimeError: Failed to infer device type, please set the environment variable `VLLM_LOGGING_LEVEL=DEBUG` to turn on verbose logging to help debug the issue.

[root@rhel-9 work]# nvidia-smi

Tue Mar 3 16:11:04 2026

+-----------------------------------------------------------------------------------------+

| NVIDIA-SMI 590.48.01 Driver Version: 590.48.01 CUDA Version: 13.1 |

+-----------------------------------------+------------------------+----------------------+

| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |

| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |

| | | MIG M. |

|=========================================+========================+======================|

| 0 Tesla T4 Off | 00000000:00:0D.0 Off | 0 |

| N/A 30C P8 13W / 70W | 4MiB / 15360MiB | 0% Default |

| | | N/A |

+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+

| Processes: |

| GPU GI CI PID Type Process name GPU Memory |

| ID ID Usage |

|=========================================================================================|

| No running processes found |

+-----------------------------------------------------------------------------------------+

[root@rhel-9 work]#

解答

您在运行 Red Hat AI Inference Server 容器时遇到 GPU 访问失败的问题,错误主要指向 NVML 初始化失败,导致 vLLM 无法推断设备类型。尽管宿主机 nvidia-smi 显示正常,但容器内无法访问 GPU。以下是排查和解决方法:

1. 验证宿主机 NVIDIA 容器工具包

确保已安装并正确配置 nvidia-container-toolkit

bash

# 检查是否安装
rpm -qa | grep nvidia-container-toolkit

# 查看 Podman 是否识别 NVIDIA 运行时
podman info | grep -A5 nvidia

若未安装,请参考红帽官方文档安装(通常需要启用 rhel-9-for-x86_64-appstream-rpms 和 epel 仓库)。


2. 测试容器内 GPU 访问

使用简单的 CUDA 镜像验证 GPU 是否能在容器内正常工作:

bash

podman run --rm -it \
  --device nvidia.com/gpu=all \
  --security-opt=label=disable \
  nvidia/cuda:12.0-base nvidia-smi
  • 如果该命令成功输出 GPU 信息,说明容器工具包配置正确,问题可能出在您的特定命令上。

  • 如果失败(例如提示权限错误或找不到设备),请继续以下步骤。


3. 调整 Podman 运行参数

您的原始命令使用了 --userns=keep-id:uid=1001,这可能限制了容器内用户访问 GPU 设备的权限。尝试以下修改:

方案 A:移除用户命名空间(推荐)

bash

podman run --rm -it \
  --device nvidia.com/gpu=all \
  --security-opt=label=disable \
  --shm-size=4g -p 8000:8000 \
  --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
  --env "HF_HUB_OFFLINE=0" \
  -v /rhaiis-cache:/opt/app-root/src/.cache:Z \
  registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.3.0 \
  --model RedHatAI/Llama-3.2-1B-Instruct-FP8 \
  --tensor-parallel-size 2

移除 --userns 后,容器将以默认用户(通常是镜像内指定的非 root 用户)运行,但该用户可能仍有权限访问 GPU(需依赖宿主机组权限)。

方案 B:添加必要的组权限

如果仍需保留用户命名空间,可以显式添加 GPU 所需的辅助组:

bash

--group-add=video --group-add=render

这些组通常拥有访问 GPU 设备的权限。结合原命令:

bash

podman run --rm -it \
  --device nvidia.com/gpu=all \
  --security-opt=label=disable \
  --shm-size=4g -p 8000:8000 \
  --userns=keep-id:uid=1001 \
  --group-add=video --group-add=render \
  --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
  --env "HF_HUB_OFFLINE=0" \
  -v /rhaiis-cache:/opt/app-root/src/.cache:Z \
  registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.3.0 \
  --model RedHatAI/Llama-3.2-1B-Instruct-FP8 \
  --tensor-parallel-size 2

4. 检查 SELinux 和挂载选项

您已使用 --security-opt=label=disable 禁用 SELinux 隔离,这通常足够。如果仍有问题,可以尝试临时挂载 NVIDIA 驱动库:

bash

-v /usr/lib64/nvidia:/usr/lib64/nvidia:ro

但红帽镜像通常已包含所需库,此步骤可选。


5. 启用调试日志

根据错误提示,添加 VLLM_LOGGING_LEVEL=DEBUG 环境变量以获取更详细的错误信息:

bash

--env VLLM_LOGGING_LEVEL=DEBUG

在调试输出中,重点关注 torch.cuda.is_available() 的返回值和 NVML 初始化的具体错误。


6. 确认 GPU 数量与并行设置

您的命令中使用了 --tensor-parallel-size 2,但宿主机只有 1 T4 GPU。这会导致 vLLM 初始化失败,因为它试图将模型分布到两个 GPU 上。请根据实际 GPU 数量调整:

  • 若只有 1 张 GPU,移除该参数(默认值为 1):

    bash

    --tensor-parallel-size 1

    或直接省略。


完整调试命令示例

综合以上建议,您可以尝试以下命令进行调试:

bash

podman run --rm -it \
  --device nvidia.com/gpu=all \
  --security-opt=label=disable \
  --shm-size=4g -p 8000:8000 \
  --group-add=video --group-add=render \
  --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
  --env "HF_HUB_OFFLINE=0" \
  --env VLLM_LOGGING_LEVEL=DEBUG \
  -v /rhaiis-cache:/opt/app-root/src/.cache:Z \
  registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.3.0 \
  --model RedHatAI/Llama-3.2-1B-Instruct-FP8 \
  --tensor-parallel-size 1

如果问题依然存在,请将调试输出附上,以便进一步分析。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐