第 3 章 使用 AI Inference Server 提供和推断
使用红帽 AI Inference Server 提供大型语言模型和推测。
先决条件
- 已安装 Podman 或 Docker
您可以使用 NVIDIA 或 AMD GPU 访问 Linux 服务器,并以具有 root 权限的用户身份登录
对于 NVIDIA GPU:
- 安装 NVIDIA 驱动程序
- 安装 NVIDIA Container Toolkit
- 如果您的系统有多个使用 NVswitch 的 NVIDIA GPU,则必须具有启动 Fabric Manager 的 root 访问权限
对于 AMD GPU:
- 安装 ROCm 软件
-
您可以访问
registry.redhat.io
并已登录 - 您有一个 Hugging Face 帐户,并生成了一个 Hugging Face 令牌
-
您可以访问
注意AMD GPU 仅支持 FP8 (W8A8)和 GGUF 量化方案。如需更多信息,请参阅 支持的硬件。
流程
使用下表,识别您的基础架构的正确镜像。
Expand GPU AI Inference Server 镜像 NVIDIA CUDA (T4, A100, L4, L40S, H100, H200)
registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.0.0
AMD ROCm (MI210, MI300X)
registry.redhat.io/rhaiis/vllm-rocm-rhel9:3.0.0
在服务器主机上打开一个终端,并登录到
registry.redhat.io
:podman login registry.redhat.io
$ podman login registry.redhat.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的 GPU 拉取相关镜像:
podman pull registry.redhat.io/rhaiis/vllm-<gpu_type>-rhel9:3.0.0
$ podman pull registry.redhat.io/rhaiis/vllm-<gpu_type>-rhel9:3.0.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的系统启用了 SELinux,请将 SELinux 配置为允许设备访问:
sudo setsebool -P container_use_devices 1
$ sudo setsebool -P container_use_devices 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建卷并将其挂载到容器中。调整容器权限,以便容器可以使用它。
mkdir -p rhaiis-cache
$ mkdir -p rhaiis-cache
Copy to Clipboard Copied! Toggle word wrap Toggle overflow chmod g+rwX rhaiis-cache
$ chmod g+rwX rhaiis-cache
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建或附加
HF_TOKEN
Hugging Face 令牌到private.env
文件。提供private.env
文件。echo "export HF_TOKEN=<your_HF_token>" > private.env
$ echo "export HF_TOKEN=<your_HF_token>" > private.env
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source private.env
$ source private.env
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 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/
$ ls /proc/driver/nvidia-nvswitch/devices/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
0000:0c:09.0 0000:0c:0a.0 0000:0c:0b.0 0000:0c:0c.0 0000:0c:0d.0 0000:0c:0e.0
0000:0c:09.0 0000:0c:0a.0 0000:0c:0b.0 0000:0c:0c.0 0000:0c:0d.0 0000:0c:0e.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl start nvidia-fabricmanager
$ systemctl start nvidia-fabricmanager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要只有在使用多个 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
$ podman run --rm -it \ --security-opt=label=disable \ --device nvidia.com/gpu=all \ nvcr.io/nvidia/cuda:12.4.1-base-ubi9 \ nvidia-smi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动容器。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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 的数量匹配。
对于 AMD ROCm 加速器:
使用
amd-smi static -a
验证容器是否可以访问主机系统 GPU:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 您必须属于 AMD 系统上的视频和呈现组才能使用 GPU。要访问 GPU,您必须将
--group-add=keep-groups
补充组选项传给容器。
启动容器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在终端中的单独标签页中,使用 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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow