모델 내보내기

이 페이지에서는 AutoML Tables를 사용해 커스텀 모델을 Cloud Storage로 내보내고 서버에 이 모델을 다운로드한 다음 Docker를 사용해 예측에 모델을 사용할 수 있도록 합니다.

내보낸 모델은 고급 벡터 확장(AVX) 명령 집합을 지원하는 x86 아키텍처 CPU에서만 실행할 수 있습니다.

소개

모델을 내보내의 단계는 다음과 같습니다.

  1. 모델 내보내기
  2. 모델 서버 실행
  3. 예측 요청

시작하기 전에

이 작업을 완료하려면 먼저 다음 작업을 완료해야 합니다.

  • 시작하기 전에의 설명대로 프로젝트를 설정합니다.
  • 다운로드할 모델을 학습시킵니다.
  • 내보낸 모델을 실행하는 데 사용할 서버에 Google Cloud CLI를 설치하고 초기화합니다.
  • Docker를 서버에 설치합니다.
  • AutoML Tables 모델 서버 Docker 이미지를 가져옵니다.

    sudo docker pull gcr.io/cloud-automl-tables-public/model_server
    

모델 내보내기

2019년 8월 23일 이전에 생성된 모델은 내보낼 수 없습니다.

콘솔

  1. Google Cloud Console의 AutoML Tables 페이지로 이동합니다.

    AutoML Tables 페이지로 이동

  2. 왼쪽 탐색창에서 모델 탭을 선택합니다.

  3. 내보낼 모델의 추가 작업 메뉴에서 모델 내보내기를 클릭합니다.

    내보내기 모델이 포함된 추가 작업 메뉴

  4. 원하는 위치에서 Cloud Storage 폴더를 선택하거나 만듭니다.

    버킷은 버킷 요구사항을 충족해야 합니다.

    모델은 최상위 수준 버킷으로 내보낼 수 없습니다. 1개 이상의 폴더 수준을 사용해야 합니다.

  5. 내보내기를 클릭합니다.

    모델 내보내기 창

    다음 섹션에서는 내보낸 모델을 서버로 다운로드합니다.

REST

모델을 Cloud Storage로 내보내려면 models.export 메서드를 사용합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • endpoint: 전역 위치인 경우 automl.googleapis.com, EU 리전인 경우 eu-automl.googleapis.com입니다.
  • project-id: Google Cloud 프로젝트 ID입니다.
  • location: 리소스의 위치로 전역인 경우 us-central1, 유럽 연합인 경우 eu입니다.
  • model-id: 배포할 모델의 ID입니다. 예를 들면 TBL543입니다.
  • gcs-destination : Cloud Storage의 대상 폴더입니다. 예를 들면 gs://export-bucket/exports입니다.

    모델은 최상위 수준 버킷으로 내보낼 수 없습니다. 1개 이상의 폴더 수준을 사용해야 합니다.

HTTP 메서드 및 URL:

POST https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:export

JSON 요청 본문:

{
  "outputConfig": {
    "modelFormat": "tf_saved_model",
    "gcsDestination": {
      "outputUriPrefix": "gcs-destination"
    }
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-id" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:export"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-id" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:export" | Select-Object -Expand Content

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "name": "projects/292381/locations/us-central1/operations/TBL543",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2019-12-30T18:23:47.728373Z",
    "updateTime": "2019-12-30T18:23:47.728373Z",
    "worksOn": [
      "projects/292381/locations/us-central1/models/TBL543"
    ],
    "exportModelDetails": {
      "outputInfo": {
        "gcsOutputDirectory": "gs://export-bucket/exports/model-export/tbl/tf_saved_model-automl_integration_test_model-2019-12-30T18:23:47.461Z/"
      }
    },
    "state": "RUNNING"
  }
}

모델 내보내기는 장기 실행 작업입니다. 작업 상태를 폴링하거나 작업이 반환될 때까지 기다립니다. 자세히 알아보기

모델 서버 실행

이 작업에서는 Cloud Storage에서 내보낸 모델을 다운로드하고 모델이 예측 요청을 수신할 수 있도록 Docker 컨테이너를 시작합니다.

모델은 Docker 컨테이너 내에서 실행되어야 합니다.

모델 서버를 실행하려면 다음 안내를 따르세요.

  1. 모델을 실행할 머신에서 내보낸 모델을 저장할 디렉터리로 변경합니다.

  2. 내보낸 모델을 다운로드합니다.

    gsutil cp -r gcs-destination/* .

    여기서 gcs-destination은 Cloud Storage에서 내보낸 모델의 위치 경로입니다. 예:

    gsutil cp -r gs://export-us-central1/models/* .
    

    모델이 다음 경로 아래의 현재 디렉터리에 복사됩니다.

    ./model-export/tbl/tf_saved_model-<model-name>-<export-timestamp>

  3. 타임스탬프가 포함된 디렉터리의 이름을 변경합니다.

    mv model-export/tbl/tf_saved_model-<model-name>-<export-timestamp> model-export/tbl/<new-dir-name>
    

    타임스탬프 형식은 Docker의 디렉터리를 무효 처리합니다.

  4. 위에서 생성한 디렉터리 이름을 사용하여 Docker 컨테이너를 시작합니다.

    docker run -v `pwd`/model-export/tbl/new_folder_name:/models/default/0000001 -p 8080:8080 -it gcr.io/cloud-automl-tables-public/model_server
    

Ctrl-C을 사용하여 언제든지 모델 서버를 중지할 수 있습니다.

모델 서버 Docker 컨테이너 업데이트

모델을 내보낼 때 모델 서버 Docker 컨테이너를 다운로드하므로 모델 서버를 명시적으로 업데이트하여 업데이트 및 버그 수정을 적용해야 합니다. 다음 명령어를 사용하여 모델 서버를 주기적으로 업데이트해야 합니다.

    docker pull gcr.io/cloud-automl-tables-public/model_server

내보낸 모델에서 예측 가져오기

AutoML Tables 이미지 컨테이너의 모델 서버는 예측 요청을 처리하고 예측 결과를 반환합니다.

내보내기 모델에서는 일괄 예측을 사용할 수 없습니다.

예측 데이터 형식

예측 요청에 대한 데이터(payload 필드)를 다음 JSON 형식으로 제공합니다.

{ "instances": [ { "column_name_1": value, "column_name_2": value, … } , … ] }

필요한 JSON 데이터 유형은 열의 AutoML Tables 데이터 유형에 따라 다릅니다. 자세한 내용은 행 객체 형식을 참조하세요.

다음 예시에서는 범주형 열, 숫자 열, 구조체의 3개 열이 포함된 요청을 보여줍니다. 요청에는 2개의 행이 포함됩니다.

{
  "instances": [
    {
      "categorical_col": "mouse",
      "num_array_col": [
        1,
        2,
        3
      ],
      "struct_col": {
        "foo": "piano",
        "bar": "2019-05-17T23:56:09.05Z"
      }
    },
    {
      "categorical_col": "dog",
      "num_array_col": [
        5,
        6,
        7
      ],
      "struct_col": {
        "foo": "guitar",
        "bar": "2019-06-17T23:56:09.05Z"
      }
    }
  ]
}

예측 요청 실행하기

  1. 요청 데이터를 텍스트 파일(예: tmp/request.json)에 배치합니다.

    미니 배치 크기라고도 하는 예측 요청의 데이터 행 수는 예측 지연 시간 및 처리량에 영향을 줍니다. 미니 배치 크기가 클수록 지연 시간이 길어지고 처리량이 높습니다. 지연 시간을 줄이려면 미니 배치 크기를 줄이고, 처리량을 높이려면 미니 배치 크기를 늘립니다. 가장 일반적으로 사용되는 미니 배치 크기는 1, 32, 64, 128, 256, 512, 1024입니다.

  2. 예측을 요청합니다.

    curl -X POST --data @/tmp/request.json http://localhost:8080/predict
    

예측 결과 형식

결과의 형식은 모델의 유형에 따라 다릅니다.

분류 모델 결과

분류 모델(이진 및 멀티클래스)의 예측 결과는 타겟 열의 각 예상 값에 대한 확률 점수를 반환합니다. 점수 사용 방식을 결정해야 합니다. 예를 들어 제공된 점수에서 이진 분류를 가져오려면 임계값을 식별해야 합니다. 'A'와 'B'라는 2개의 클래스가 있을 때 'A' 점수가 선택한 임계값보다 크다면 예시를 'A'로 분류하고, 그 외의 경우에는 'B'로 분류해야 합니다. 클래스의 균형이 맞지 않으면 임계값이 100% 또는 0%에 접근하게 됩니다.

분류 모델의 결과 페이로드는 다음 예시와 유사하게 나타납니다.

{
  "predictions": [
    {
      "scores": [
        0.539999994635582,
        0.2599999845027924,
        0.2000000208627896
      ],
      "classes": [
        "apple",
        "orange",
        "grape"
      ]
    },
    {
      "scores": [
        0.23999999463558197,
        0.35999998450279236,
        0.40000002086278963
      ],
      "classes": [
        "apple",
        "orange",
        "grape"
      ]
    }
  ]
}

회귀 모델 결과

예측 값은 예측 요청의 유효한 행별로 반환됩니다. 내보낸 모델에 대한 예측 간격은 반환되지 않습니다.

회귀 모델의 결과 페이로드는 다음 예시와 유사하게 나타납니다.

{
  "predictions": [
    3982.3662109375,
    3982.3662109375
  ]
}