엔드포인트에 모델 배포

모델을 온라인 예측을 제공하는 데 사용하려면 먼저 모델을 엔드포인트에 배포해야 합니다. 모델을 배포하면 지연 시간이 짧은 온라인 예측을 제공하기 위해 물리적 리소스가 연결됩니다.

이 페이지에서는 온라인 예측을 사용하여 엔드포인트에 모델을 배포하기 위해 따라야 하는 단계를 설명합니다.

시작하기 전에

엔드포인트에 모델을 배포하기 전에 예측을 위해 모델 아티팩트를 내보내고 해당 페이지의 모든 필수 요건을 충족하는지 확인하세요.

리소스 풀 만들기

ResourcePool 맞춤 리소스를 사용하면 모델의 동작을 세밀하게 제어할 수 있습니다. 다음과 같은 설정을 정의할 수 있습니다.

  • 자동 확장 구성입니다.
  • CPU 및 메모리 요구사항을 정의하는 머신 유형입니다.
  • GPU 리소스와 같은 가속기 옵션입니다.

머신 유형은 예측 클러스터를 생성하기 위해 전송하는 노드 풀 사양 요청에 필수적입니다.

배포된 모델의 리소스 풀에서 가속기 수와 유형에 따라 GPU 사용량이 결정됩니다. 머신 유형은 요청된 CPU 및 메모리 리소스만 지정합니다. 따라서 ResourcePool 사양에 GPU 가속기를 포함할 때 machineType 필드는 모델의 CPU 및 메모리 요구사항을 제어하고 acceleratorType 필드는 GPU를 제어합니다. 또한 acceleratorCount 필드는 GPU 슬라이스 수를 제어합니다.

다음 단계에 따라 ResourcePool 커스텀 리소스를 만듭니다.

  1. ResourcePool 커스텀 리소스를 정의하는 YAML 파일을 만듭니다. 다음 예에는 GPU 가속기가 있는 리소스 풀 (GPU 기반 모델)과 GPU 가속기가 없는 리소스 풀 (CPU 기반 모델)의 YAML 파일이 포함되어 있습니다.

    GPU 기반 모델

      apiVersion: prediction.aiplatform.gdc.goog/v1
      kind: ResourcePool
      metadata:
        name: RESOURCE_POOL_NAME
        namespace: PROJECT_NAMESPACE
      spec:
        resourcePoolID: RESOURCE_POOL_NAME
        enableContainerLogging: false
        dedicatedResources:
          machineSpec:
            # The system adds computing overhead to the nodes for mandatory components.
            # Choose a machineType value that allocates fewer CPU and memory resources
            # than those used by the nodes in the prediction cluster.
            machineType: a2-highgpu-1g-gdc
            acceleratorType: nvidia-a100-80gb
            # The accelerator count is a slice of the requested virtualized GPUs.
            # The value corresponds to one-seventh of 80 GB of GPUs for each count.
            acceleratorCount: 2
          autoscaling:
            minReplica: 2
            maxReplica: 10
    

    CPU 기반 모델

      apiVersion: prediction.aiplatform.gdc.goog/v1
      kind: ResourcePool
      metadata:
        name: RESOURCE_POOL_NAME
        namespace: PROJECT_NAMESPACE
      spec:
        resourcePoolID: RESOURCE_POOL_NAME
        enableContainerLogging: false
        dedicatedResources:
          machineSpec:
            # The system adds computing overhead to the nodes for mandatory components.
            # Choose a machineType value that allocates fewer CPU and memory resources
            # than those used by the nodes in the prediction cluster.
            machineType: n2-highcpu-8-gdc
          autoscaling:
            minReplica: 2
            maxReplica: 10
    

    다음을 바꿉니다.

    • RESOURCE_POOL_NAME: ResourcePool 정의 파일에 지정할 이름입니다.
    • PROJECT_NAMESPACE: 예측 클러스터와 연결된 프로젝트 네임스페이스의 이름입니다.

    리소스 요구사항과 예측 클러스터에서 사용할 수 있는 항목에 따라 dedicatedResources 필드의 값을 수정합니다.

  2. 예측 클러스터에 ResourcePool 정의 파일을 적용합니다.

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f RESOURCE_POOL_NAME.yaml
    

    다음을 바꿉니다.

    • PREDICTION_CLUSTER_KUBECONFIG: 예측 클러스터의 kubeconfig 파일 경로입니다.
    • RESOURCE_POOL_NAME: ResourcePool 정의 파일의 이름입니다.

ResourcePool 커스텀 리소스를 만들면 Kubernetes API와 웹훅 서비스가 YAML 파일을 검증하고 성공 또는 실패를 보고합니다. 예측 연산자는 엔드포인트에 모델을 배포할 때 리소스 풀에서 리소스를 프로비저닝하고 예약합니다.

엔드포인트에 모델 배포하기

리소스 풀이 있는 경우 엔드포인트 1개에 모델을 2개 이상 배포할 수 있고 2개 이상의 엔드포인트에 모델 1개를 배포할 수 있습니다. 지원되는 컨테이너를 타겟팅하는 예측 모델을 배포합니다. 엔드포인트가 이미 있는지 여부에 따라 다음 두 가지 방법 중 하나를 선택합니다.

새 엔드포인트에 모델 배포

예측 모델을 새 엔드포인트에 배포하려면 다음 단계를 따르세요.

  1. DeployedModel 커스텀 리소스를 정의하는 YAML 파일을 만듭니다.

    TensorFlow

    다음 YAML 파일은 TensorFlow 모델의 샘플 구성을 보여줍니다.

    apiVersion: prediction.aiplatform.gdc.goog/v1
    kind: DeployedModel
    metadata:
      name: DEPLOYED_MODEL_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      # The endpoint path structure is endpoints/<endpoint-id>
      endpointPath: endpoints/PREDICTION_ENDPOINT
      modelSpec:
        # The artifactLocation field must be the s3 path to the folder that
        # contains the various model versions.
        # For example, s3://my-prediction-bucket/tensorflow
        artifactLocation: s3://PATH_TO_MODEL
        # The value in the id field must be unique to each model.
        id: img-detection-model
        modelDisplayName: my_img_detection_model
        # The model resource name structure is models/<model-id>/<model-version-id>
        modelResourceName: models/img-detection-model/1
        # The model version ID must match the name of the first folder in
        # the artifactLocation bucket, inside the 'tensorflow' folder.
        # For example, if the bucket path is
        # s3://my-prediction-bucket/tensorflow/1/,
        # then the value for the model version ID is "1".
        modelVersionID: "1"
        modelContainerSpec:
          args:
          - --model_config_file=/models/models.config
          - --rest_api_port=8080
          - --port=8500
          - --file_system_poll_wait_seconds=30
          - --model_config_file_poll_wait_seconds=30
          command:
          - /bin/tensorflow_model_server
          # The image URI field must contain one of the following values:
          # For CPU-based models: gcr.io/aiml/prediction/containers/tf2-cpu.2-14:latest
          # For GPU-based models: gcr.io/aiml/prediction/containers/tf2-gpu.2-14:latest
          imageURI: gcr.io/aiml/prediction/containers/tf2-gpu.2-14:latest
          ports:
          - 8080
          grpcPorts:
          - 8500
      resourcePoolRef:
        kind: ResourcePool
        name: RESOURCE_POOL_NAME
        namespace: PROJECT_NAMESPACE
    

    다음을 바꿉니다.

    • DEPLOYED_MODEL_NAME: DeployedModel 정의 파일에 지정할 이름입니다.
    • PROJECT_NAMESPACE: 예측 클러스터와 연결된 프로젝트 네임스페이스의 이름입니다.
    • PREDICTION_ENDPOINT: 새 엔드포인트에 지정할 이름입니다(예: my-img-prediction-endpoint).
    • PATH_TO_MODEL: 스토리지 버킷의 모델 경로입니다.
    • RESOURCE_POOL_NAME: 모델을 호스팅하기 위해 리소스 풀을 만들 때 ResourcePool 정의 파일에 지정한 이름입니다.

    예측 모델에 따라 나머지 필드의 값을 수정합니다.

    PyTorch

    다음 YAML 파일은 PyTorch 모델의 샘플 구성을 보여줍니다.

    apiVersion: prediction.aiplatform.gdc.goog/v1
    kind: DeployedModel
    metadata:
      name: DEPLOYED_MODEL_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      endpointPath: PREDICTION_ENDPOINT
      endpointInfo:
        id: PREDICTION_ENDPOINT
      modelSpec:
        # The artifactLocation field must be the s3 path to the folder that
        # contains the various model versions.
        # For example, s3://my-prediction-bucket/pytorch
        artifactLocation: s3://PATH_TO_MODEL
        # The value in the id field must be unique to each model.
        id: "pytorch"
        modelDisplayName: my-pytorch-model
        # The model resource name structure is models/<model-id>/<model-version-id>
        modelResourceName: models/pytorch/1
        modelVersionID: "1"
        modelContainerSpec:
          # The image URI field must contain one of the following values:
          # For CPU-based models: gcr.io/aiml/prediction/containers/pytorch-cpu.2-4:latest
          # For GPU-based models: gcr.io/aiml/prediction/containers/pytorch-gpu.2-4:latest
          imageURI: gcr.io/aiml/prediction/containers/pytorch-cpu.2-4:latest
          ports:
          - 8080
          grpcPorts:
          - 7070
      sharesResourcePool: false
      resourcePoolRef:
        kind: ResourcePool
        name: RESOURCE_POOL_NAME
        namespace: PROJECT_NAMESPACE
    

    다음을 바꿉니다.

    • DEPLOYED_MODEL_NAME: DeployedModel 정의 파일에 지정할 이름입니다.
    • PROJECT_NAMESPACE: 예측 클러스터와 연결된 프로젝트 네임스페이스의 이름입니다.
    • PREDICTION_ENDPOINT: 새 엔드포인트에 지정할 이름입니다(예: my-img-prediction-endpoint).
    • PATH_TO_MODEL: 스토리지 버킷의 모델 경로입니다.
    • RESOURCE_POOL_NAME: 모델을 호스팅하기 위해 리소스 풀을 만들 때 ResourcePool 정의 파일에 지정한 이름입니다.

    예측 모델에 따라 나머지 필드의 값을 수정합니다.

  2. 예측 클러스터에 DeployedModel 정의 파일을 적용합니다.

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
    

    다음을 바꿉니다.

    • PREDICTION_CLUSTER_KUBECONFIG: 예측 클러스터의 kubeconfig 파일 경로입니다.
    • DEPLOYED_MODEL_NAME: DeployedModel 정의 파일의 이름입니다.

    DeployedModel 커스텀 리소스를 만들면 Kubernetes API와 웹훅 서비스가 YAML 파일을 검증하고 성공 또는 실패를 보고합니다. 예측 연산자는 DeployedModel 커스텀 리소스를 조정하고 예측 클러스터에서 제공합니다.

  3. Endpoint 커스텀 리소스를 정의하는 YAML 파일을 만듭니다.

    다음 YAML 파일은 샘플 구성을 보여줍니다.

    apiVersion: aiplatform.gdc.goog/v1
    kind: Endpoint
    metadata:
      name: ENDPOINT_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      createDns: true
      id: PREDICTION_ENDPOINT
      destinations:
        - serviceRef:
            kind: DeployedModel
            name: DEPLOYED_MODEL_NAME
            namespace: PROJECT_NAMESPACE
          trafficPercentage: 50
          grpcPort: 8501
          httpPort: 8081
        - serviceRef:
            kind: DeployedModel
            name: DEPLOYED_MODEL_NAME_2
            namespace: PROJECT_NAMESPACE
          trafficPercentage: 50
          grpcPort: 8501
          httpPort: 8081
    

    다음을 바꿉니다.

    • ENDPOINT_NAME: Endpoint 정의 파일에 지정할 이름입니다.
    • PROJECT_NAMESPACE: 예측 클러스터와 연결된 프로젝트 네임스페이스의 이름입니다.
    • PREDICTION_ENDPOINT: 새 엔드포인트의 이름입니다. 이 이름은 DeployedModel 정의 파일에 정의되어 있습니다.
    • DEPLOYED_MODEL_NAME: DeployedModel 정의 파일에 지정한 이름입니다.

    serviceRef 대상은 하나 이상 있을 수 있습니다. 두 번째 serviceRef 객체가 있는 경우 destinations 필드의 YAML 파일에 추가하고 DEPLOYED_MODEL_NAME_2를 만든 두 번째 DeployedModel 정의 파일에 지정한 이름으로 바꿉니다. 배포하는 모델의 수에 따라 필요에 따라 serviceRef 객체를 추가하거나 삭제합니다.

    이 엔드포인트의 모델 간에 트래픽을 분할하는 방법에 따라 trafficPercentage 필드를 설정합니다. 엔드포인트 구성에 따라 나머지 필드의 값을 수정합니다.

  4. 예측 클러스터에 Endpoint 정의 파일을 적용합니다.

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
    

    ENDPOINT_NAMEEndpoint 정의 파일의 이름으로 바꿉니다.

예측 모델의 엔드포인트 URL 경로를 가져오려면 다음 명령어를 실행합니다.

kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'

다음을 바꿉니다.

  • PREDICTION_CLUSTER_KUBECONFIG: 예측 클러스터의 kubeconfig 파일 경로입니다.
  • PREDICTION_ENDPOINT: 새 엔드포인트의 이름입니다.
  • PROJECT_NAMESPACE: 예측 프로젝트 네임스페이스의 이름입니다.

기존 엔드포인트에 모델 배포

이전에 새 엔드포인트에 다른 모델을 배포한 경우에만 기존 엔드포인트에 모델을 배포할 수 있습니다. 엔드포인트를 만들려면 이 이전 단계가 필요합니다.

기존 엔드포인트에 예측 모델을 배포하려면 다음 단계를 따르세요.

  1. DeployedModel 커스텀 리소스를 정의하는 YAML 파일을 만듭니다.

    다음 YAML 파일은 샘플 구성을 보여줍니다.

    apiVersion: prediction.aiplatform.gdc.goog/v1
    kind: DeployedModel
    metadata:
      name: DEPLOYED_MODEL_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      # The endpoint path structure is endpoints/<endpoint-id>
      endpointPath: endpoints/PREDICTION_ENDPOINT
      modelSpec:
        # The artifactLocation field must be the s3 path to the folder that
        # contains the various model versions.
        # For example, s3://my-prediction-bucket/tensorflow
        artifactLocation: s3://PATH_TO_MODEL
        # The value in the id field must be unique to each model.
        id: img-detection-model-v2
        modelDisplayName: my_img_detection_model
        # The model resource name structure is models/<model-id>/<model-version-id>
        modelResourceName: models/img-detection-model/2
        # The model version ID must match the name of the first folder in
        # the artifactLocation bucket,
        # inside the 'tensorflow' folder.
        # For example, if the bucket path is
        # s3://my-prediction-bucket/tensorflow/2/,
        # then the value for the model version ID is "2".
        modelVersionID: "2"
        modelContainerSpec:
          args:
          - --model_config_file=/models/models.config
          - --rest_api_port=8080
          - --port=8500
          - --file_system_poll_wait_seconds=30
          - --model_config_file_poll_wait_seconds=30
          command:
          - /bin/tensorflow_model_server
          # The image URI field must contain one of the following values:
          # For CPU-based models: gcr.io/aiml/prediction/containers/tf2-cpu.2-6:latest
          # For GPU-based models: gcr.io/aiml/prediction/containers/tf2-gpu.2-6:latest
          imageURI: gcr.io/aiml/prediction/containers/tf2-gpu.2-6:latest
          ports:
          - 8080
          grpcPorts:
          - 8500
      resourcePoolRef:
        kind: ResourcePool
        name: RESOURCE_POOL_NAME
        namespace: PROJECT_NAMESPACE
    

    다음을 바꿉니다.

    • DEPLOYED_MODEL_NAME: DeployedModel 정의 파일에 지정할 이름입니다.
    • PROJECT_NAMESPACE: 예측 클러스터와 연결된 프로젝트 네임스페이스의 이름입니다.
    • PREDICTION_ENDPOINT: 기존 엔드포인트의 이름입니다(예: my-img-prediction-endpoint).
    • PATH_TO_MODEL: 스토리지 버킷의 모델 경로입니다.
    • RESOURCE_POOL_NAME: 모델을 호스팅하기 위해 리소스 풀을 만들 때 ResourcePool 정의 파일에 지정한 이름입니다.

    예측 모델에 따라 나머지 필드의 값을 수정합니다.

  2. 예측 클러스터에 DeployedModel 정의 파일을 적용합니다.

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
    

    다음을 바꿉니다.

    • PREDICTION_CLUSTER_KUBECONFIG: 예측 클러스터의 kubeconfig 파일 경로입니다.
    • DEPLOYED_MODEL_NAME: DeployedModel 정의 파일의 이름입니다.

    DeployedModel 커스텀 리소스를 만들면 Kubernetes API와 웹훅 서비스가 YAML 파일을 검증하고 성공 또는 실패를 보고합니다. 예측 연산자는 DeployedModel 커스텀 리소스를 조정하고 예측 클러스터에서 제공합니다.

  3. 기존 Endpoint 커스텀 리소스의 세부정보를 표시합니다.

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG describe -f ENDPOINT_NAME.yaml
    

    ENDPOINT_NAMEEndpoint 정의 파일의 이름으로 바꿉니다.

  4. destinations 필드에 새 serviceRef 객체를 추가하여 Endpoint 커스텀 리소스 정의의 YAML 파일을 업데이트합니다. 새 객체에 새로 만든 DeployedModel 커스텀 리소스를 기반으로 적절한 서비스 이름을 포함합니다.

    다음 YAML 파일은 샘플 구성을 보여줍니다.

    apiVersion: aiplatform.gdc.goog/v1
    kind: Endpoint
    metadata:
      name: ENDPOINT_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      createDns: true
      id: PREDICTION_ENDPOINT
      destinations:
        - serviceRef:
            kind: DeployedModel
            name: DEPLOYED_MODEL_NAME
            namespace: PROJECT_NAMESPACE
          trafficPercentage: 40
          grpcPort: 8501
          httpPort: 8081
        - serviceRef:
            kind: DeployedModel
            name: DEPLOYED_MODEL_NAME_2
            namespace: PROJECT_NAMESPACE
          trafficPercentage: 50
          grpcPort: 8501
          httpPort: 8081
        - serviceRef:
            kind: DeployedModel
            name: DEPLOYED_MODEL_NAME_3
            namespace: PROJECT_NAMESPACE
          trafficPercentage: 10
          grpcPort: 8501
          httpPort: 8081
    

    다음을 바꿉니다.

    • ENDPOINT_NAME: 기존 Endpoint 정의 파일의 이름입니다.
    • PROJECT_NAMESPACE: 예측 클러스터와 연결된 프로젝트 네임스페이스의 이름입니다.
    • PREDICTION_ENDPOINT: 기존 엔드포인트의 이름입니다. DeployedModel 정의 파일에서 이 이름을 참조했습니다.
    • DEPLOYED_MODEL_NAME: 이전에 생성된 DeployedModel 정의 파일의 이름입니다.
    • DEPLOYED_MODEL_NAME_2: 새로 만든 DeployedModel 정의 파일에 지정한 이름입니다.

    serviceRef 대상은 하나 이상 있을 수 있습니다. 세 번째 serviceRef 객체가 있는 경우 destinations 필드의 YAML 파일에 추가하고 DEPLOYED_MODEL_NAME_3를 만든 세 번째 DeployedModel 정의 파일에 지정한 이름으로 바꿉니다. 배포하는 모델의 수에 따라 필요에 따라 serviceRef 객체를 추가하거나 삭제합니다.

    이 엔드포인트의 모델 간에 트래픽을 분할하는 방식에 따라 trafficPercentage 필드를 설정합니다. 엔드포인트 구성에 따라 나머지 필드의 값을 수정합니다.

  5. 예측 클러스터에 Endpoint 정의 파일을 적용합니다.

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
    

    ENDPOINT_NAMEEndpoint 정의 파일의 이름으로 바꿉니다.

예측 모델의 엔드포인트 URL 경로를 가져오려면 다음 명령어를 실행합니다.

kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'

다음을 바꿉니다.

  • PREDICTION_CLUSTER_KUBECONFIG: 예측 클러스터의 kubeconfig 파일 경로입니다.
  • PREDICTION_ENDPOINT: 엔드포인트의 이름
  • PROJECT_NAMESPACE: 예측 프로젝트 네임스페이스의 이름입니다.