第3章 OpenShift Container Platform の AI Inference Server を使用した推論サービング modelcar イメージ
シークレット、永続ストレージ、および Red Hat AI Inference Server を使用して modelcar コンテナーイメージを推論するデプロイメントカスタムリソース (CR) を設定して、OpenShift Container Platform を使用して modelcar コンテナーに言語モデルをデプロイします。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-admin権限を持つユーザーとしてログインしている。 - 基盤となる AI アクセラレーターハードウェアに NFD と必要な GPU Operator がインストールされている。
- 言語モデル用の modelcar コンテナーイメージを作成し、コンテナーイメージレジストリーにプッシュした。
手順
クラスターがコンテナーレジストリーから Red Hat AI Inference Server イメージをダウンロードできるように、Docker シークレットを作成します。たとえば、ローカルの
~/.docker/config.jsonファイルの内容を含むSecretCR を作成するには、次のコマンドを実行します。oc create secret generic docker-secret --from-file=.dockercfg=$HOME/.docker/config.json --type=kubernetes.io/dockercfg -n rhaiis-namespacePersistentVolumeClaim(PVC) カスタムリソース (CR) を作成し、クラスターに適用します。次のPVCCR の例では、デフォルトの IBM VPC ブロック永続ボリュームを使用します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: model-cache namespace: rhaiis-namespace spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: ibmc-vpc-block-10iops-tier注記要件を満たすようにクラスターストレージを設定することは、この手順の範囲外です。詳細は、永続ストレージの設定 を参照してください。
modelcar イメージをプルし、Red Hat AI Inference Server コンテナーをデプロイする
Deploymentカスタムリソース (CR) を作成します。AI Inference Server を使用して modelcar イメージをサービングする次のDeploymentCR 例を参照してください。apiVersion: apps/v1 kind: Deployment metadata: name: rhaiis-oci-deploy namespace: rhaiis-namespace labels: app: granite spec: replicas: 0 selector: matchLabels: app: rhaiis-oci-deploy template: metadata: labels: app: rhaiis-oci-deploy spec: imagePullSecrets: - name: docker-secret volumes: - name: model-volume persistentVolumeClaim: claimName: model-cache1 - name: shm emptyDir: medium: Memory sizeLimit: "2Gi" - name: oci-auth secret: secretName: docker-secret items: - key: .dockercfg path: config.json initContainers:2 - name: fetch-model image: ghcr.io/oras-project/oras:v1.2.0 command: ["/bin/sh","-c"] args: - | set -e # Only pull if /model is empty if [ -z "$(ls -A /model)" ]; then echo "Pulling model…" # Update with the modelcar container image registry URL oras pull <YOUR_MODELCAR_REGISTRY_URL> \ --output /model \ else echo "Model already present, skipping pull" fi volumeMounts: - name: model-volume mountPath: /model - name: oci-auth mountPath: /auth readOnly: true containers: - name: granite image: 'registry.redhat.io/rhaiis/vllm-cuda-rhel9@sha256:a6645a8e8d7928dce59542c362caf11eca94bb1b427390e78f0f8a87912041cd' imagePullPolicy: IfNotPresent env: - name: VLLM_SERVER_DEV_MODE value: '1' command: - python - '-m' - vllm.entrypoints.openai.api_server args: - '--port=8000' - '--model=/model' - '--served-model-name=ibm-granite/granite-3.1-2b-instruct'3 - '--tensor-parallel-size=1' resources: limits: cpu: '10' nvidia.com/gpu: '1' memory: 16Gi requests: cpu: '2' memory: 6Gi nvidia.com/gpu: '1' volumeMounts: - name: model-volume mountPath: /model - name: shm mountPath: /dev/shm4 restartPolicy: Always- 1
spec.template.spec.volumes.persistentVolumeClaim.claimNameは、作成したPVCの名前と一致する必要があります。- 2
- このサンプルデプロイメントでは、メインのアプリケーションコンテナーの前に実行され、必要な modelcar イメージをダウンロードする単純な
initContainers設定を使用します。たとえば、以前のデプロイメントからモデルディレクトリーがすでに設定されている場合は、モデルプルのステップはスキップされます。 - 3
- デプロイするモデルに合わせて
--served-model-nameの値を更新します。 - 4
- NVIDIA Collective Communications Library (NCCL) では、
/dev/shmボリュームマウントが必要です。/dev/shmボリュームマウントが設定されていない場合、Tensor 並列 vLLM デプロイメントは失敗します。
デプロイメントのレプリカ数を必要な数まで増やします。たとえば、以下のコマンドを実行します。
oc scale deployment granite -n rhaiis-namespace --replicas=1オプション: デプロイメントを監視し、成功したことを確認します。
$ oc get deployment -n rhaiis-namespace --watch出力例
NAME READY UP-TO-DATE AVAILABLE AGE rhaiis-oci-deploy 0/1 1 0 2s rhaiis-oci-deploy 1/1 1 1 14sモデル推論用の
ServiceCR を作成します。以下に例を示します。apiVersion: v1 kind: Service metadata: name: rhaiis-oci-deploy namespace: rhaiis-namespace spec: selector: app: rhaiis-oci-deploy ports: - name: http port: 80 targetPort: 8000オプション: モデルへのパブリックアクセスを有効にするには、
RouteCR を作成します。以下に例を示します。apiVersion: route.openshift.io/v1 kind: Route metadata: name: rhaiis-oci-deploy namespace: rhaiis-namespace spec: to: kind: Service name: rhaiis-oci-deploy port: targetPort: http公開されたルートの URL を取得します。以下のコマンドを実行します。
$ oc get route granite -n rhaiis-namespace -o jsonpath='{.spec.host}'出力例
rhaiis-oci-deploy-rhaiis-namespace.apps.example.com
検証
モデルをクエリーして、デプロイメントが成功したことを確認します。以下のコマンドを実行します。
curl -v -k http://rhaiis-oci-deploy-rhaiis-namespace.apps.modelsibm.ibmmodel.rh-ods.com/v1/chat/completions -H "Content-Type: application/json" -d '{
"model":"ibm-granite/granite-3.1-2b-instruct",
"messages":[{"role":"user","content":"Hello?"}],
"temperature":0.1
}'| jq
出力例
{
"id": "chatcmpl-07b177360eaa40a3b311c24a8e3c7f43",
"object": "chat.completion",
"created": 1755189746,
"model": "ibm-granite/granite-3.1-2b-instruct",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"reasoning_content": null,
"content": "Hello! How can I assist you today?",
"tool_calls": []
},
"logprobs": null,
"finish_reason": "stop",
"stop_reason": null
}
],
"usage": {
"prompt_tokens": 61,
"total_tokens": 71,
"completion_tokens": 10,
"prompt_tokens_details": null
},
"prompt_logprobs": null,
"kv_transfer_params": null
}