3.6. model-serving 런타임
model-serving 런타임을 사용하여 단일 모델 서비스 플랫폼에서 모델을 제공할 수 있습니다. model-serving 런타임 구성은 ServingRuntime 및 InferenceService CRD(사용자 정의 리소스 정의)에 의해 정의됩니다.
3.6.1. ServingRuntime
ServingRuntime CRD는 모델 배포 및 관리를 위한 환경인 제공 런타임을 생성합니다. 다양한 형식의 모델을 동적으로 로드 및 언로드하는 Pod용 템플릿을 생성하고 요청을 유추하기 위해 서비스 끝점도 노출합니다.
다음 YAML 구성은 KServe model-serving 런타임의 vLLM ServingRuntime 의 예입니다. 구성에는 다양한 플래그, 환경 변수 및 명령줄 인수가 포함됩니다.
apiVersion: serving.kserve.io/v1alpha1 kind: ServingRuntime metadata: annotations: opendatahub.io/recommended-accelerators: '["nvidia.com/gpu"]' 1 openshift.io/display-name: vLLM ServingRuntime for KServe 2 labels: opendatahub.io/dashboard: "true" name: vllm-runtime spec: annotations: prometheus.io/path: /metrics 3 prometheus.io/port: "8080" 4 containers : - args: - --port=8080 - --model=/mnt/models 5 - --served-model-name={{.Name}} 6 command: 7 - python - '-m' - vllm.entrypoints.openai.api_server env: - name: HF_HOME value: /tmp/hf_home image: 8 quay.io/modh/vllm@sha256:8a3dd8ad6e15fe7b8e5e471037519719d4d8ad3db9d69389f2beded36a6f5b21 name: kserve-container ports: - containerPort: 8080 protocol: TCP multiModel: false 9 supportedModelFormats: 10 - autoSelect: true name: vLLM
- 1
- 런타임과 함께 사용할 권장 가속기입니다.
- 2
- 제공 런타임이 표시되는 이름입니다.
- 3
- Prometheus에서 모니터링을 위한 지표를 스크랩하는 데 사용하는 끝점입니다.
- 4
- 모니터링을 위해 Prometheus에서 메트릭을 스크랩하는 데 사용하는 포트입니다.
- 5
- 모델 파일이 런타임 컨테이너에 저장되는 위치 경로입니다.
- 6
- 런타임 컨테이너 사양 내에서
{{.Name}}
템플릿 변수로 지정된 모델 이름을 런타임 환경에 전달합니다.{{.Name}}
변수는InferenceService
메타데이터 오브젝트의spec.predictor.name
필드에 매핑됩니다. - 7
- 런타임 컨테이너를 시작하는 entrypoint 명령입니다.
- 8
- 제공 런타임에서 사용하는 런타임 컨테이너 이미지입니다. 이 이미지는 사용된 가속기의 유형에 따라 다릅니다.
- 9
- 런타임이 단일 모델 제공에 사용되도록 지정합니다.
- 10
- 런타임에서 지원하는 모델 형식을 지정합니다.
3.6.2. InferenceService
InferenceService CRD는 유추 쿼리를 처리하고 모델에 전달한 다음 유추 출력을 반환하는 서버 또는 유추 서비스를 생성합니다.
유추 서비스는 다음 작업도 수행합니다.
- 모델의 위치와 형식을 지정합니다.
- 모델을 제공하는 데 사용되는 제공 런타임을 지정합니다.
- gRPC 또는 REST 유추에 대해 passthrough 경로를 활성화합니다.
- 배포된 모델에 대한 HTTP 또는 gRPC 끝점을 정의합니다.
다음 예제에서는 vLLM 런타임을 사용하여 granite 모델을 배포할 때 생성되는 InferenceService YAML 구성 파일을 보여줍니다.
apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: annotations: openshift.io/display-name: granite serving.knative.openshift.io/enablePassthrough: 'true' sidecar.istio.io/inject: 'true' sidecar.istio.io/rewriteAppHTTPProbers: 'true' name: granite labels: opendatahub.io/dashboard: 'true' spec: predictor: maxReplicas: 1 minReplicas: 1 model: modelFormat: name: vLLM name: '' resources: limits: cpu: '6' memory: 24Gi nvidia.com/gpu: '1' requests: cpu: '1' memory: 8Gi nvidia.com/gpu: '1' runtime: vLLM ServingRuntime for KServe storage: key: aws-connection-my-storage path: models/granite-7b-instruct/ tolerations: - effect: NoSchedule key: nvidia.com/gpu operator: Exists
추가 리소스