第 5 章 在断开连接的环境中提供模型的推测
使用断开连接的 OpenShift Container Platform 环境中部署的 Red Hat AI Inference Server,为来自集群持久性存储的语言模型提供服务。
先决条件
- 您已在堡垒主机上安装了可供断开连接的集群访问的镜像 registry。
- 您已将模型和 Red Hat AI Inference Server 镜像添加到镜像 registry 中。
- 您已在断开连接的集群中安装 Node Feature Discovery Operator 和 NVIDIA GPU Operator。
流程
在断开连接的集群中,使用网络文件系统(NFS)配置持久性存储,并在您配置的持久性存储中提供模型。
注意如需更多信息,请参阅使用 NFS 的持久性存储。
创建
Deployment自定义资源(CR)。例如,以下DeploymentCR 使用 AI Inference Server 在 CUDA 加速器上提供 Granite 模型。apiVersion: apps/v1 kind: Deployment metadata: name: granite namespace: rhaiis-namespace labels: app: granite spec: replicas: 0 selector: matchLabels: app: granite template: metadata: labels: app: granite spec: containers: - name: granite image: 'registry.redhat.io/rhaiis/vllm-cuda-rhel9@sha256:137ac606b87679c90658985ef1fc9a26a97bb11f622b988fe5125f33e6f35d78' imagePullPolicy: IfNotPresent command: - python - '-m' - vllm.entrypoints.openai.api_server args: - '--port=8000' - '--model=/mnt/models'1 - '--served-model-name=granite-3.1-2b-instruct-quantized.w8a8' - '--tensor-parallel-size=1' resources: limits: cpu: '10' nvidia.com/gpu: '1' requests: cpu: '2' memory: 6Gi nvidia.com/gpu: '1' volumeMounts: - name: cache-volume mountPath: /mnt/models - name: shm mountPath: /dev/shm2 volumes: - name: cache-volume persistentVolumeClaim: claimName: granite-31-w8a8 - name: shm emptyDir: medium: Memory sizeLimit: 2Gi restartPolicy: Always为模型推测创建
ServiceCR。例如:apiVersion: v1 kind: Service metadata: name: granite namespace: rhaiis-namespace spec: selector: app: granite ports: - protocol: TCP port: 80 targetPort: 8000可选。创建
RouteCR 以启用对模型的公共访问。例如:apiVersion: route.openshift.io/v1 kind: Route metadata: name: granite namespace: rhaiis-namespace spec: to: kind: Service name: granite port: targetPort: 80获取公开路由的 URL:
$ oc get route granite -n rhaiis-namespace -o jsonpath='{.spec.host}'输出示例
granite-rhaiis-namespace.apps.example.com运行以下命令来查询模型:
curl -X POST http://granite-rhaiis-namespace.apps.example.com/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "granite-3.1-2b-instruct-quantized.w8a8", "messages": [{"role": "user", "content": "What is AI?"}], "temperature": 0.1 }'