온라인 예측용 머신 유형 선택

AI Platform Prediction은 모델 버전에 전송된 온라인 예측 요청을 처리하기 위해 노드를 할당합니다. 모델 버전을 배포할 때 AI Platform 예측에서 이러한 노드에 사용하는 가상 머신 유형을 맞춤설정할 수 있습니다.

머신 유형은 다음과 같은 요소에 따라 구분됩니다.

컴퓨팅 리소스가 더 많은 머신 유형을 선택하면 더 짧은 지연 시간으로 예측을 수행하거나 동시에 더 많은 예측 요청을 처리할 수 있습니다.

사용 가능한 머신 유형

기본 머신 유형인 mls1-c1-m2는 일반적으로 온라인 예측에 사용할 수 있습니다. 베타로 제공되는 다른 머신 유형 중 하나를 사용하여 모델 버전을 배포할 수도 있습니다.

다음 표에서는 사용 가능한 머신 유형을 비교합니다.

이름 가용성 vCPU 메모리(GB) GPU 지원 ML 프레임워크 지원 최대 모델 크기
mls1-c1-m2(기본) 일반적으로 사용 가능 1 2 N TensorFlow, XGBoost, scikit-learn(커스텀 코드가 있는 파이프라인 포함), 커스텀 예측 루틴 500MB
mls1-c4-m2 베타 4 2 N TensorFlow, XGBoost, scikit-learn(커스텀 코드가 있는 파이프라인 포함), 커스텀 예측 루틴 500MB
n1-standard-2 베타 2 7.5 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-standard-4 베타 4 15 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-standard-8 베타 8 30 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-standard-16 베타 16 60 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-standard-32 베타 32 120 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-highmem-2 베타 2 13 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-highmem-4 베타 4 26 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-highmem-8 베타 8 52 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-highmem-16 베타 16 104 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-highmem-32 베타 32 208 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-highcpu-2 베타 2 1.8 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-highcpu-4 베타 4 3.6 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-highcpu-8 베타 8 7.2 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-highcpu-16 베타 16 14.4 Y TensorFlow, XGBoost, scikit-learn 2GB
n1-highcpu-32 베타 32 28.8 Y TensorFlow, XGBoost, scikit-learn 2GB

각 머신 유형의 가격 책정에 대해 알아보세요. Compute Engine 문서에서 Compute Engine(N1) 머신 유형의 세부 사양에 대해 자세히 알아보세요.

머신 유형 지정

모델 버전을 만들 때 머신 유형 선택을 지정할 수 있습니다. 머신 유형을 지정하지 않으면 모델 버전은 기본적으로 노드에 mls1-c1-m2를 사용합니다.

다음 안내에서는 모델 버전을 만들 때 머신 유형을 지정하는 방법을 설명합니다. mls1-c4-m2 머신 유형이 안내의 예시로 사용됩니다. 모델 버전을 만들기 위한 전체 프로세스에 대해 알아보려면 모델 배포 가이드를 참조하세요.

Cloud Console

버전 만들기 페이지에서 머신 유형 드롭다운 목록을 열고 AI Platform 머신 유형 > 쿼드 코어 CPU(베타)를 선택합니다.

gcloud

Cloud Storage에 모델 아티팩트를 업로드하고 모델 리소스를 만든 다음에는 gcloud 명령줄 도구의 베타 구성요소를 사용하여 mls1-c4-m2 머신 유형을 사용하는 모델 버전을 만들 수 있습니다.

gcloud beta ai-platform versions create version_name \
  --model model_name \
  --origin gs://model-directory-uri \
  --runtime-version 2.1 \
  --python-version 3.7 \
  --framework ml-framework-name \
  --machine-type mls1-c4-m2

Python

이 예시에서는 Python용 Google API 클라이언트 라이브러리를 사용합니다. 다음 코드 샘플을 실행하기 전에 인증을 설정해야 합니다.

Cloud Storage에 모델 아티팩트를 업로드하고 모델 리소스를 만든 후 모델의 projects.models.versions.create 메서드로 요청을 보내고 요청 본문에 machineType 필드를 지정합니다.

from googleapiclient import discovery

ml = discovery.build('ml', 'v1')
request_dict = {
    'name': 'version_name',
    'deploymentUri': 'gs://model-directory-uri',
    'runtimeVersion': '2.1',
    'pythonVersion': '3.7',
    'framework': 'ML_FRAMEWORK_NAME',
    'machineType': 'mls1-c4-m2'
}
request = ml.projects().models().versions().create(
    parent='projects/project-name/models/model_name',
    body=request_dict
)
response = request.execute()

온라인 예측에 GPU 사용

일부 구성의 경우 선택적으로 GPU를 추가하여 각 예측 노드를 가속화할 수 있습니다. GPU를 사용하려면 몇 가지 요구사항을 고려해야 합니다.

  • Compute Engine(N1) 머신 유형에서만 GPU를 사용할 수 있습니다. 기존(MLS1) 머신 유형은 GPU를 지원하지 않습니다.
  • TensorFlow 저장된 모델을 배포할 경우에만 GPU를 사용할 수 있습니다. scikit-learn 또는 XGBoost 모델에는 GPU를 사용할 수 없습니다.
  • 각 GPU 유형의 가용성은 모델에 사용하는 리전에 따라 다릅니다. 리전에서 사용할 수 있는 GPU 유형을 알아보세요.
  • 모델 버전에 한 가지 유형의 GPU만 사용할 수 있으며 사용 중인 머신 유형에 따라 추가할 수 있는 GPU 수에 제한이 있습니다. 다음 표에서는 이러한 제한사항을 설명합니다.

다음 표에서는 온라인 예측에 사용 가능한 GPU와 각 Compute Engine 머신 유형에 사용할 수 있는 각 GPU 유형의 수를 보여줍니다.

각 머신 유형에 유효한 GPU 수
머신 유형 NVIDIA Tesla K80 NVIDIA Tesla P4 NVIDIA Tesla P100 NVIDIA Tesla T4 NVIDIA Tesla V100
n1-standard-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-standard-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highmem-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highmem-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highcpu-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highcpu-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highcpu-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highcpu-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highcpu-32 4, 8 2, 4 2, 4 2, 4 4, 8

GPU는 선택사항이며 추가 비용이 발생합니다.

GPU 지정

모델 버전을 만들 때 GPU를 지정합니다. AI Platform 예측은 사용자가 각 예측 노드에 지정하는 GPU의 수와 유형을 할당합니다. GPU를 사용할 때 버전에 대한 예측 노드를 수동으로 확장해야 합니다. 나중에 실행되는 노드의 수를 변경할 수 있지만 현재 자동 확장은 GPU와 함께 사용할 수 없습니다.

다음 안내에서는 단일 예측 노드에 실행되는 모델 버전을 만들어서 온라인 예측에 GPU를 지정하는 방법을 보여줍니다. 이 노드는 하나의 NVIDIA Tesla T4 GPU와 n1-standard-4 머신 유형을 사용합니다.

이 예시에서는 TensorFlow 저장된 모델을 Cloud Storage에 업로드하고 GPU를 지원하는 리전에 모델 리소스를 생성했다고 가정합니다.

gcloud

gcloud 명령줄 도구의 베타 구성요소를 사용하여 버전을 만듭니다.

먼저 버전에 수동 확장을 구성하려면 YAML 구성 파일(일반적으로 config.yaml)을 만듭니다. AI Platform Prediction은 기본적으로 자동 확장을 사용하며 명령줄 플래그로 재정의할 수 없습니다. 다음 예시 구성 파일에서는 모델 버전이 단일 예측 노드를 사용하도록 지정합니다.

config.yaml

manualScaling:
  nodes: 1

선택적으로 구성 파일에 추가적인 버전 매개변수를 제공할 수 있지만 gcloud 도구에 제공하는 모든 명령줄 플래그는 파일의 매개변수보다 우선합니다.

그런 다음 gcloud 도구 및 구성 파일을 사용하여 모델 버전을 만듭니다. 이 예시에서 버전은 하나의 NVIDIA Tesla T4 GPU를 사용하는 하나의 n1-standard-4 예측 노드에서 실행됩니다. 이 예시에서는 us-central1 리전 엔드포인트를 사용합니다.

gcloud beta ai-platform versions create version_name \
  --model model_name \
  --origin gs://model-directory-uri \
  --runtime-version 2.1 \
  --python-version 3.7 \
  --framework tensorflow \
  --region us-central1 \
  --machine-type n1-standard-4 \
  --accelerator count=1,type=nvidia-tesla-t4 \
  --config config.yaml

가속기 이름은 소문자로, 단어 사이에 하이픈을 사용하여 지정됩니다.

Python

이 예시에서는 Python용 Google API 클라이언트 라이브러리를 사용합니다. 다음 코드 샘플을 실행하기 전에 인증을 설정해야 합니다.

이 예시에서는 us-central1 리전 엔드포인트를 사용합니다.

모델의 projects.models.versions.create 메서드로 요청을 보내고 요청 본문에 machineType, acceleratorConfig, manualScaling 필드를 지정합니다.

from google.api_core.client_options import ClientOptions
from googleapiclient import discovery

endpoint = 'https://us-central1-ml.googleapis.com'
client_options = ClientOptions(api_endpoint=endpoint)
ml = discovery.build('ml', 'v1', client_options=client_options)

request_dict = {
    'name': 'version_name',
    'deploymentUri': 'gs://model-directory-uri',
    'runtimeVersion': '2.1',
    'pythonVersion': '3.7',
    'framework': 'TENSORFLOW',
    'machineType': 'n1-standard-4',
    'acceleratorConfig': {
      'count': 1,
      'type': 'NVIDIA_TESLA_T4'
    },
    'manualScaling': {
      'nodes': 1
    }
}
request = ml.projects().models().versions().create(
    parent='projects/project-name/models/model_name',
    body=request_dict
)
response = request.execute()

가속기 이름은 대문자로, 단어 사이에 밑줄을 사용하여 지정됩니다.

머신 유형 간의 차이점

머신 유형은 다양한 양의 컴퓨팅 리소스를 제공하는 것 외에 특정 AI Platform 예측 기능의 지원 측면에서도 서로 다릅니다. 다음 표에서는 Compute Engine(N1) 머신 유형과 기존(MLS1) 머신 유형의 차이점에 대한 개요를 제공합니다.

Compute Engine(N1) 머신 유형 기존(MLS1) 머신 유형
리전 모든 리전 엔드포인트 리전 모든 글로벌 엔드포인트 리전
ML 아티팩트 유형
런타임 버전 1.11 이상 사용 가능한 모든 AI Platform 런타임 버전
최대 모델 크기 2GB 500MB
로깅 스트림 로깅 안 함 모든 로깅 유형
자동 확장 최소 노드 = 1 최소 노드 = 0
수동 확장 노드 수를 업데이트할 수 있음 모델 버전을 만든 후 노드 수를 업데이트할 수 없음
GPU 지원 Y(TensorFlow 만 해당) N
AI Explanations 지원 Y(TensorFlow 만 해당) N

다음 섹션에서는 머신 유형 간의 차이점에 대해 자세히 설명합니다.

사용 가능한 리전

Compute Engine(N1) 머신 유형은 리전 엔드포인트에 모델을 배포할 경우에 사용할 수 있습니다. 현재는 us-central1, europe-west4, asia-east1 리전 엔드포인트에서 사용할 수 있습니다.

또한 Compute Engine(N1) 머신 유형의 GPU 가용성은 리전마다 다릅니다.

기존(MLS1) 머신 유형은 많은 리전의 글로벌 엔드포인트에서 사용할 수 있습니다. 리전 엔드포인트에서는 기존(MLS1) 머신 유형을 사용할 수 없습니다.

일괄 예측 지원

mls1-c1-m2 머신 유형을 사용하는 모델 버전은 일괄 예측을 지원합니다. 다른 머신 유형을 사용하는 모델 버전은 일괄 예측을 지원하지 않습니다.

ML 프레임워크 지원

Compute Engine(N1) 머신 유형 중 하나를 사용하는 경우 다음 두 가지를 제외하고 예측 모델 내보내기 가이드에 설명된 모든 모델 아티팩트를 사용하여 모델 버전을 만들 수 있습니다.

기존(MLS1) 머신 유형의 경우, AI Platform Prediction에서 지원하는 모든 유형의 모델 아티팩트를 사용할 수 있으며 커스텀 코드가 있는 scikit-learn 파이프라인이나 커스텀 예측 루틴이 포함됩니다.

런타임 버전 지원

Compute Engine(N1) 머신 유형을 사용하는 경우 모델 버전에 런타임 버전 1.11 이상을 사용해야 합니다.

기존(MLS1) 머신 유형을 사용하는 경우 사용 가능한 아무 AI Platform 런타임 버전이나 사용할 수 있습니다.

최대 모델 크기

기존(MLS1) 머신 유형을 사용하는 경우 모델 버전을 만들 때 제공하는 모델 아티팩트의 총 파일 크기가 500MB 미만이어야 합니다. Compute Engine(N1) 머신 유형을 사용하는 경우 총 파일 크기는 최대 2GB입니다.

예측 로깅

Compute Engine(N1) 머신 유형은 예측 노드의 stderrstdout 스트림의 스트림 로깅을 지원하지 않습니다.

기존(MLS1) 머신 유형은 모든 유형의 온라인 예측 로깅을 지원합니다.

예측 노드 확장

Compute Engine(N1) 머신 유형을 사용하는지 또는 기존(MLS1) 머신 유형을 사용하는지에 따라 예측 노드의 자동 확장 및 수동 확장 모두 다른 제약이 적용됩니다.

자동 확장

자동 확장과 Compute Engine(N1) 머신 유형을 함께 사용하는 경우 모델 버전에 항상 하나 이상의 노드가 실행되어야 합니다. 즉, 버전의 autoScaling.minNodes 필드 기본값은 1이며 1보다 작을 수 없습니다.

머신러닝 모델에 필요한 것보다 많은 vCPU 또는 RAM을 할당하면 자동 확장이 제대로 작동하지 않을 수 있습니다. 이로 인해 모델 성능에 문제가 발생할 수 있습니다. 과다한 컴퓨팅 리소스를 제공하지 않도록 모델에 다른 머신 유형을 사용하여 실험해보세요.

모델 버전에 GPU를 사용하는 경우 자동 확장을 사용할 수 없습니다. 수동 확장을 사용해야 합니다.

기존(MLS1) 머신 유형을 사용하는 경우 트래픽을 수신하지 않을 때 모델 버전은 0개 노드로 축소될 수 있습니다. (autoScaling.minNodes는 0으로 설정할 수 있으며 기본적으로 0으로 설정됩니다.)

수동 확장

Compute Engine(N1) 머신 유형을 수동 확장과 함께 사용하는 경우 projects.models.versions.patch API 메서드를 사용하여 언제든지 실행 중인 예측 노드의 수를 업데이트할 수 있습니다.

기존(MLS1) 머신 유형을 수동 확장과 함께 사용하는 경우 모델 버전을 만든 후 예측 노드 수를 업데이트할 수 없습니다. 노드 수를 변경하려면 노드를 삭제하고 새 노드를 만들어야 합니다.