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 활성화를 참조하십시오.

프로세스

  1. 명령줄 터미널을 열고 클러스터 관리자로 OpenShift 클러스터에 로그인합니다.

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
  2. 기본적으로 OpenShift는 네트워크 트래픽 관리에 서비스 메시를 사용합니다. KServe 원시 배포 모드에 서비스 메시가 필요하지 않으므로 Red Hat OpenShift Service Mesh를 비활성화합니다.

    1. Red Hat OpenShift Service Mesh를 비활성화하려면 다음 명령을 입력합니다.

      $ oc edit dsci -n redhat-ods-operator
    2. YAML 편집기에서 다음과 같이 serviceMesh 구성 요소의 managementState 값을 Removed 로 변경합니다.

      spec:
        components:
          serviceMesh:
            managementState: Removed
    3. 변경 사항을 저장합니다.
  3. 프로젝트를 생성합니다.

    $ oc new-project <project_name> --description="<description>" --display-name="<display_name>"

    프로젝트 생성에 대한 자세한 내용은 프로젝트 작업을 참조하십시오.

  4. 데이터 과학 클러스터를 생성합니다.

    1. Red Hat OpenShift 웹 콘솔 관리자 보기에서 Operator 설치된 Operator를 클릭한 다음 Red Hat OpenShift AI Operator를 클릭합니다.
    2. Data Science Cluster 탭을 클릭합니다.
    3. Create DataScienceCluster 버튼을 클릭합니다.
    4. Configure via field에서 YAML 보기 라디오 버튼을 클릭합니다.
    5. YAML 편집기의 spec.components 섹션에서 다음과 같이 kserve 구성 요소를 구성합니다.

        kserve:
          defaultDeploymentMode: RawDeployment
          managementState: Managed
          serving:
            managementState: Removed
            name: knative-serving
    6. 생성을 클릭합니다.
  5. 보안 파일을 생성합니다.

    1. 명령줄 터미널에서 보안을 포함할 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' 을 추가합니다.

    2. 파일 이름 secret.yaml 을 사용하여 파일을 저장합니다.
    3. secret.yaml 파일을 적용합니다.

      $ oc apply -f secret.yaml -n <namespace>
  6. 서비스 계정을 생성합니다.

    1. 서비스 계정을 포함할 YAML 파일을 생성하고 다음 YAML 코드를 추가합니다.

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: models-bucket-sa
      secrets:
      - name: s3creds

      서비스 계정에 대한 자세한 내용은 서비스 계정 이해 및 생성을 참조하십시오.

    2. 파일 이름 serviceAccount.yaml 을 사용하여 파일을 저장합니다.
    3. serviceAccount.yaml 파일을 적용합니다.

      $ oc apply -f serviceAccount.yaml -n <namespace>
  7. 제공 런타임에 대한 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"
    1. 위의 OpenVINO 모델 서버 예제를 사용하는 경우 YAML 코드의 자리 표시자에 필요한 올바른 값을 삽입해야 합니다.
    2. 적절한 파일 이름으로 파일을 저장합니다.
    3. 서빙 런타임이 포함된 파일을 적용합니다.

      $ oc apply -f <serving run time file name> -n <namespace>
  8. 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: []
    1. YAML 코드에서 다음 값이 올바르게 설정되어 있는지 확인합니다.

      • serving.kserve.io/deploymentMode 에는 RawDeployment 값이 포함되어야 합니다.
      • modelFormat 에는 onnx 와 같은 모델 형식의 값이 포함되어야 합니다.
      • StorageUri에는 모델 s3 스토리지 디렉터리의 값(예: s3://<bucket_name>/<model_directory_path > )이 포함되어야 합니다.
      • 런타임에는 제공 런타임 이름(예: ovms-runtime )의 값이 포함되어야 합니다.
    2. 적절한 파일 이름으로 파일을 저장합니다.
    3. InferenceService CR을 포함하는 파일을 적용합니다.

      $ oc apply -f <InferenceService CR file name> -n <namespace>
  9. 모든 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
  10. 모든 Pod가 실행 중인지 확인한 후 서비스 포트를 로컬 머신으로 전달합니다.

    $ oc -n <namespace> port-forward pod/<pod-name> <local_port>:<remote_port>

    < namespace > , < pod-name > , < local_port > , < remote_ port>(이는 모델 서버 포트(예: 8888)를 배포에 적합한 값으로 교체해야 합니다.

검증

  • 선호하는 클라이언트 라이브러리 또는 도구를 사용하여 요청을 localhost 유추 URL로 보냅니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.