3.10. KServe 원시 배포 모드를 사용하여 단일 노드 OpenShift에 모델 배포
단일 노드 OpenShift에서 KServe 원시 배포 모드를 사용하여 머신 러닝 모델을 배포할 수 있습니다. 원시 배포 모드는 Knative보다 여러 볼륨을 마운트하는 기능과 같은 몇 가지 이점을 제공합니다.
단일 노드 OpenShift에서 KServe 원시 배포 모드를 사용하여 머신 러닝 모델을 배포하는 것은 제한된 가용성 기능입니다. 제한된 가용성은 Red Hat AI Business Unit의 특정 승인에서만 해당 기능에 대한 지원을 설치하고 받을 수 있음을 의미합니다. 이러한 승인이 없으면 해당 기능은 지원되지 않습니다.
사전 요구 사항
- Red Hat OpenShift AI에 로그인했습니다.
- OpenShift 클러스터에 대한 클러스터 관리자 권한이 있습니다.
- CPU가 4개 이상이고 메모리가 16GB인 노드가 있는 OpenShift 클러스터를 생성했습니다.
- RHOAI(Red Hat OpenShift AI) Operator를 설치했습니다.
- OpenShift CLI(명령줄 인터페이스)를 설치했습니다. OpenShift CLI(명령줄 인터페이스) 설치에 대한 자세한 내용은 OpenShift CLI 시작하기를 참조하십시오.
- KServe를 설치했습니다.
- S3 호환 오브젝트 스토리지에 액세스할 수 있습니다.
- 배포하려는 모델의 경우 S3 호환 오브젝트 스토리지 버킷의 관련 폴더 경로를 알고 있습니다.
- Cakeygent-TGIS 런타임을 사용하려면 모델을 Cafindt 형식으로 변환했습니다. 예를 들어 caovnt-tgis-serving 리포지토리의 cakeyt 형식으로의 Hugging faces Hub 모델 변환을 참조하십시오.
- 모델 서버에서 GPU(그래픽 처리 장치)를 사용하려는 경우 OpenShift AI에서 GPU 지원을 활성화했습니다. NVIDIA GPU 활성화를 참조하십시오.
- vLLM 런타임을 사용하려면 OpenShift AI에서 GPU 지원을 활성화하고 클러스터에 Node Feature Discovery Operator를 설치 및 구성했습니다. 자세한 내용은 Node Feature Discovery Operator 설치 및 NVIDIA GPU 활성화를 참조하십시오.
프로세스
명령줄 터미널을 열고 클러스터 관리자로 OpenShift 클러스터에 로그인합니다.
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>
기본적으로 OpenShift는 네트워크 트래픽 관리에 서비스 메시를 사용합니다. KServe 원시 배포 모드에 서비스 메시가 필요하지 않으므로 Red Hat OpenShift Service Mesh를 비활성화합니다.
Red Hat OpenShift Service Mesh를 비활성화하려면 다음 명령을 입력합니다.
$ oc edit dsci -n redhat-ods-operator
YAML 편집기에서 다음과 같이
serviceMesh
구성 요소의managementState
값을Removed
로 변경합니다.spec: components: serviceMesh: managementState: Removed
- 변경 사항을 저장합니다.
프로젝트를 생성합니다.
$ oc new-project <project_name> --description="<description>" --display-name="<display_name>"
프로젝트 생성에 대한 자세한 내용은 프로젝트 작업을 참조하십시오.
데이터 과학 클러스터를 생성합니다.
-
Red Hat OpenShift 웹 콘솔 관리자 보기에서 Operator
설치된 Operator를 클릭한 다음 Red Hat OpenShift AI Operator를 클릭합니다. - Data Science Cluster 탭을 클릭합니다.
- Create DataScienceCluster 버튼을 클릭합니다.
- Configure via field에서 YAML 보기 라디오 버튼을 클릭합니다.
YAML 편집기의
spec.components
섹션에서 다음과 같이kserve
구성 요소를 구성합니다.kserve: defaultDeploymentMode: RawDeployment managementState: Managed serving: managementState: Removed name: knative-serving
- 생성을 클릭합니다.
-
Red Hat OpenShift 웹 콘솔 관리자 보기에서 Operator
보안 파일을 생성합니다.
명령줄 터미널에서 보안을 포함할 YAML 파일을 생성하고 다음 YAML 코드를 추가합니다.
apiVersion: v1 kind: Secret metadata: annotations: serving.kserve.io/s3-endpoint: <AWS_ENDPOINT> serving.kserve.io/s3-usehttps: "1" serving.kserve.io/s3-region: <AWS_REGION> serving.kserve.io/s3-useanoncredential: "false" name: <Secret-name> stringData: AWS_ACCESS_KEY_ID: "<AWS_ACCESS_KEY_ID>" AWS_SECRET_ACCESS_KEY: "<AWS_SECRET_ACCESS_KEY>"
중요연결이 끊긴 배포에 머신 학습 모델을 배포하는 경우
metadata.annotations
섹션에serving.kserve.io/s3-verifyssl: '0'
을 추가합니다.- 파일 이름 secret.yaml 을 사용하여 파일을 저장합니다.
secret.yaml 파일을 적용합니다.
$ oc apply -f secret.yaml -n <namespace>
서비스 계정을 생성합니다.
서비스 계정을 포함할 YAML 파일을 생성하고 다음 YAML 코드를 추가합니다.
apiVersion: v1 kind: ServiceAccount metadata: name: models-bucket-sa secrets: - name: s3creds
서비스 계정에 대한 자세한 내용은 서비스 계정 이해 및 생성을 참조하십시오.
- 파일 이름 serviceAccount.yaml 을 사용하여 파일을 저장합니다.
serviceAccount.yaml 파일을 적용합니다.
$ oc apply -f serviceAccount.yaml -n <namespace>
제공 런타임에 대한 YAML 파일을 만들어 모델 예측을 제공할 컨테이너 이미지를 정의합니다. 다음은 OpenVino Model Server를 사용하는 예입니다.
apiVersion: serving.kserve.io/v1alpha1 kind: ServingRuntime metadata: name: ovms-runtime spec: annotations: prometheus.io/path: /metrics prometheus.io/port: "8888" containers: - args: - --model_name={{.Name}} - --port=8001 - --rest_port=8888 - --model_path=/mnt/models - --file_system_poll_wait_seconds=0 - --grpc_bind_address=0.0.0.0 - --rest_bind_address=0.0.0.0 - --target_device=AUTO - --metrics_enable image: quay.io/modh/openvino_model_server@sha256:6c7795279f9075bebfcd9aecbb4a4ce4177eec41fb3f3e1f1079ce6309b7ae45 name: kserve-container ports: - containerPort: 8888 protocol: TCP multiModel: false protocolVersions: - v2 - grpc-v2 supportedModelFormats: - autoSelect: true name: openvino_ir version: opset13 - name: onnx version: "1" - autoSelect: true name: tensorflow version: "1" - autoSelect: true name: tensorflow version: "2" - autoSelect: true name: paddle version: "2" - autoSelect: true name: pytorch version: "2"
- 위의 OpenVINO 모델 서버 예제를 사용하는 경우 YAML 코드의 자리 표시자에 필요한 올바른 값을 삽입해야 합니다.
- 적절한 파일 이름으로 파일을 저장합니다.
서빙 런타임이 포함된 파일을 적용합니다.
$ oc apply -f <serving run time file name> -n <namespace>
InferenceService CR(사용자 정의 리소스)을 생성합니다. InferenceService CR을 포함할 YAML 파일을 생성합니다. 이전에 사용된 OpenVINO 모델 서버 예제를 사용하여 해당 YAML 코드는 다음과 같습니다.
apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: annotations: serving.knative.openshift.io/enablePassthrough: "true" sidecar.istio.io/inject: "true" sidecar.istio.io/rewriteAppHTTPProbers: "true" serving.kserve.io/deploymentMode: RawDeployment name: <InferenceService-Name> spec: predictor: scaleMetric: minReplicas: 1 scaleTarget: canaryTrafficPercent: serviceAccountName: <serviceAccountName> model: env: [] volumeMounts: [] modelFormat: name: onnx runtime: ovms-runtime storageUri: s3://<bucket_name>/<model_directory_path> resources: requests: memory: 5Gi volumes: []
YAML 코드에서 다음 값이 올바르게 설정되어 있는지 확인합니다.
-
serving.kserve.io/deploymentMode
에는RawDeployment
값이 포함되어야 합니다. -
modelFormat
에는onnx
와 같은 모델 형식의 값이 포함되어야 합니다. -
StorageUri에는 모델 s3 스토리지
디렉터리의 값(예:s3://<bucket_name>/<model_directory_path
> )이 포함되어야 합니다. -
런타임에는 제공
런타임
이름(예:ovms-runtime
)의 값이 포함되어야 합니다.
-
- 적절한 파일 이름으로 파일을 저장합니다.
InferenceService CR을 포함하는 파일을 적용합니다.
$ oc apply -f <InferenceService CR file name> -n <namespace>
모든 Pod가 클러스터에서 실행 중인지 확인합니다.
$ oc get pods -n <namespace>
출력 예:
NAME READY STATUS RESTARTS AGE <isvc_name>-predictor-xxxxx-2mr5l 1/1 Running 2 165m console-698d866b78-m87pm 1/1 Running 2 165m
모든 Pod가 실행 중인지 확인한 후 서비스 포트를 로컬 머신으로 전달합니다.
$ oc -n <namespace> port-forward pod/<pod-name> <local_port>:<remote_port>
<
namespace
> , <pod-name
> , <local_port
> , <remote_
port>(이는 모델 서버 포트(예:8888
)를 배포에 적합한 값으로 교체해야 합니다.
검증
-
선호하는 클라이언트 라이브러리 또는 도구를 사용하여 요청을
localhost
유추 URL로 보냅니다.