第 4 章 使用 NVIDIA CUDA AI Accelerators 使用 Podman 提供和推断
使用 Podman 和在 NVIDIA CUDA AI 加速器上运行的 Red Hat AI Inference Server 提供大型语言模型。
先决条件
- 已安装 Podman 或 Docker。
- 您以具有 sudo 访问权限的用户身份登录。
-
您可以访问
registry.redhat.io并已登录。 - 您有一个 Hugging Face 帐户,并生成了一个 Hugging Face 访问令牌。
您可以访问安装了数据中心 grade NVIDIA AI 加速器的 Linux 服务器。
对于 NVIDIA GPU:
- 安装 NVIDIA 驱动程序
- 安装 NVIDIA Container Toolkit
- 如果您的系统有多个使用 NVSwitch 的 NVIDIA GPU,则必须具有启动 Fabric Manager 的 root 访问权限
有关加速器支持的 vLLM 量化方案的更多信息,请参阅 支持的硬件。
流程
在服务器主机上打开一个终端,并登录到
registry.redhat.io:$ podman login registry.redhat.io运行以下命令拉取相关的 NVIDIA CUDA 镜像:
$ podman pull registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.2.5如果您的系统启用了 SELinux,请将 SELinux 配置为允许设备访问:
$ sudo setsebool -P container_use_devices 1创建卷并将其挂载到容器中。调整容器权限,以便容器可以使用它。
$ mkdir -p rhaiis-cache$ chmod g+rwX rhaiis-cache创建或附加
HF_TOKENHugging Face 令牌到private.env文件。提供private.env文件。$ echo "export HF_TOKEN=<your_HF_token>" > private.env$ source private.env启动 AI Inference Server 容器镜像。
对于 NVIDIA CUDA 加速器,如果主机系统有多个 GPU 并使用 NVSwitch,则启动 NVIDIA Fabric Manager。要检测您的系统是否使用 NVSwitch,请首先检查
/proc/driver/nvidia-nvswitch/devices/中是否存在文件,然后启动 NVIDIA Fabric Manager。启动 NVIDIA Fabric Manager 需要 root 特权。$ ls /proc/driver/nvidia-nvswitch/devices/输出示例
0000:0c:09.0 0000:0c:0a.0 0000:0c:0b.0 0000:0c:0c.0 0000:0c:0d.0 0000:0c:0e.0$ systemctl start nvidia-fabricmanager重要只有在具有多个 GPU 的系统上需要使用 NVSwitch 的系统才需要 NVIDIA Fabric Manager。如需更多信息,请参阅 NVIDIA 服务器架构。
运行以下命令,检查 Red Hat AI Inference Server 容器是否可以访问主机上的 NVIDIA GPU:
$ podman run --rm -it \ --security-opt=label=disable \ --device nvidia.com/gpu=all \ nvcr.io/nvidia/cuda:12.4.1-base-ubi9 \ nvidia-smi输出示例
+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 570.124.06 Driver Version: 570.124.06 CUDA Version: 12.8 | |-----------------------------------------+------------------------+----------------------+ | 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 NVIDIA A100-SXM4-80GB Off | 00000000:08:01.0 Off | 0 | | N/A 32C P0 64W / 400W | 1MiB / 81920MiB | 0% Default | | | | Disabled | +-----------------------------------------+------------------------+----------------------+ | 1 NVIDIA A100-SXM4-80GB Off | 00000000:08:02.0 Off | 0 | | N/A 29C P0 63W / 400W | 1MiB / 81920MiB | 0% Default | | | | Disabled | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+启动容器。
$ podman run --rm -it \ --device nvidia.com/gpu=all \ --security-opt=label=disable \1 --shm-size=4g -p 8000:8000 \2 --userns=keep-id:uid=1001 \3 --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \4 --env "HF_HUB_OFFLINE=0" \ -v ./rhaiis-cache:/opt/app-root/src/.cache:Z \5 registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.2.5 \ --model RedHatAI/Llama-3.2-1B-Instruct-FP8 \ --tensor-parallel-size 26 - 1
- 启用 SELinux 的系统需要。
--security-opt=label=disable防止 SELinux 重新标记卷挂载中的文件。如果您选择不使用此参数,您的容器可能无法成功运行。 - 2
- 如果您在共享内存时遇到问题,请将
-shm-size增加到8GB。 - 3
- 将主机 UID 映射到容器中 vLLM 进程的有效 UID。您也可以 pass--
user=0,但这比 the-userns选项不太安全。set--user=0在容器内以 root 身份运行 vLLM。 - 4
- 使用 Hugging Face API 访问令牌设置和导出
HF_TOKEN - 5
- 启用 SELinux 的系统需要。在 Debian 或 Ubuntu 操作系统上,或者在不使用 SELinux 的情况下使用 Docker 时,
:Z后缀不可用。 - 6
- 在多个 GPU 上运行 AI Inference Server 容器时,set
-tensor-parallel-size与 GPU 的数量匹配。
在终端中的单独标签页中,使用 API 向模型发出请求。
curl -X POST -H "Content-Type: application/json" -d '{ "prompt": "What is the capital of France?", "max_tokens": 50 }' http://<your_server_ip>:8000/v1/completions | jq输出示例
{ "id": "cmpl-b84aeda1d5a4485c9cb9ed4a13072fca", "object": "text_completion", "created": 1746555421, "model": "RedHatAI/Llama-3.2-1B-Instruct-FP8", "choices": [ { "index": 0, "text": " Paris.\nThe capital of France is Paris.", "logprobs": null, "finish_reason": "stop", "stop_reason": null, "prompt_logprobs": null } ], "usage": { "prompt_tokens": 8, "total_tokens": 18, "completion_tokens": 10, "prompt_tokens_details": null } }