Driverless AI 모델을 생산에 배포하기

기본적으로, 각각의 완료된 Driverless AI 실험(명시적으로 비활성화되거나 상세 설정을 수정하여 사용할 수 없는 경우 제외)은 Python, C++, Java, R에서 채점을 위하여 최소 한 개의 scoring pipeline 을 생성합니다.

이 문서에는 생산 목적으로 Driverless AI MOJO(Python/R 래퍼를 포함하는 Java 및 C++) 및 Python Scoring Pipeline을 배포하기 위한 여러 배포 옵션 및 예제가 나열되어 있습니다. deployment template documentationhere 에서 액세스할 수 있습니다. 자세한 맞춤형 요구 사항은 support@h2o.ai 에 문의하십시오.

Java 런타임 배포 옵션이 있는 MOJO

다음은 Java 런타임으로 Driverless AI MOJO를 배포하기 위한 몇 가지 옵션입니다. 다이어그램의 링크는 코드 예제 및 템플릿으로 연결됩니다.

Driverless AI MOJO Java Runtime Deployment Options

Driverless AI MOJO Java 런타임 배포 옵션

Java MOJO Scoring Pipeline은 Driverless AI GUI 내에서 배포될 수도 있습니다. 자세한 정보는 Deployment options from within Driverless AI GUI 를 참조하십시오.

C++ 런타임 배포 옵션이 있는 MOJO

여기에 C++ 런타임으로 Driverless AI Mojo를 배포하기 위한 몇 개의 예시 시나리오 및 플랫폼이 나열되어 있습니다. MOJO C++ 런타임은 R/Python 터미널에서 직접 실행할 수도 있습니다. 자세한 정보는 Driverless AI MOJO Scoring Pipeline - Python 및 R 래퍼를 사용한 C++ 런타임 을 참조하십시오.

Driverless AI MOJO C++ Runtime Deployment Options

Driverless AI MOJO C++ 런타임 배포 옵션

독립 실행형 Python Scoring Pipeline 배포 옵션

Driverless AI Python Scoring Pipeline Deployment Options

Driverless AI Python Scoring Pipeline 배포 옵션

Driverless AI GUI 내에서 이용 가능한 배포

다음 배포는 Driverless AI GUI에서 이용이 가능합니다. MOJO Java 런타임 배포만 Driverless AI 내에서 지원됩니다.

기존의 모든 MOJO Scoring Pipeline 배포는 상단 메뉴에서 이용이 가능한 배포 개요 페이지에서 사용할 수 있습니다. 해당 페이지에는 모든 활성 배포 및 각각의 엔드 포인트에 액세스하기 위해 필요한 정보가 나열됩니다. 또한 더 이상 필요하지 않은 배포를 중지할 수도 있습니다.

Deployments Overview Page

Amazon Lambda 배포

Driverless AI는 학습된 MOJO Scoring Pipeline을 AWS Lambda Function, 즉 Amazon Cloud에서 실행되고 실제 사용량에 따라 요금이 부과되는 서버 없는 scorer로 배포힐 수 있습니다.

추가 리소스

AWS Lambda Scorer에 대한 다양한 배포 템플릿을 확인하려면 dai-deployment-templates 리포지터리의 aws-lambda-scorer 폴더를 참조하십시오.

Driverless AI 전제 조건

  • Driverless AI MOJO Scoring Pipeline: MOJO Scoring Pipeline을 AWS Lambda 함수로 배포하기 위해서는 완료된 실험 페이지에서 Build MOJO Scoring Pipeline 옵션을 선택하여 MOJO 파이프라인 아카이브를 먼저 생성해야 합니다. MOJO Scoring Pipeline 빌드 방법에 대한 정보는 MOJO Scoring Pipeline 섹션을 참조하십시오.

  • 현재 Driverless AI 라이선스. AWS Lambdas에 대한 Driverless AI 배포 파이프라인은 라이선스 키를 환경 변수로 명시적으로 설정합니다. Driverless AI의 라이선스가 만료되면 MOJO를 사용할 수 없습니다. 만료된 라이선스가 있는 경우 AWS의 각 MOJO에 대해 수동으로 업데이트하거나 스크립트를 사용하여 배포 지역에 대하여 모든 MOJO를 업데이트할 수 있습니다. 자세한 내용은 AWS Lambda에서 Driverless AI 라이선스 업데이트 을 참조하십시오.

AWS 전제 조건

사용 계획

REST API를 통해 AWS Lambda에 액세스할 때, API 키가 작동하도록 하려면 대상 AWS 리전에서 사용량 계획을 활성화해야 합니다. 자세한 내용은 https://aws.amazon.com/blogs/aws/new-usage-plans-for-amazon-api-gateway/ 를 참조하십시오.

액세스 허가

Driverless AI Lambda 배포가 성공하려면 다음 AWS 액세스 권한이 역할에 제공되어야 합니다.

  • AWSLambdaFullAccess

  • IAMFullAccess

  • AmazonAPIGatewayAdministrator

AWS permissions

다음과 같이 JSON 정책 정의를 사용하여 Lambda 및 S3 권한을 제한하기 위하여 정책을 추가로 제거할 수 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "iam:GetPolicyVersion",
                "iam:DeletePolicy",
                "iam:CreateRole",
                "iam:AttachRolePolicy",
                "iam:ListInstanceProfilesForRole",
                "iam:PassRole",
                "iam:DetachRolePolicy",
                "iam:ListAttachedRolePolicies",
                "iam:GetRole",
                "iam:GetPolicy",
                "iam:DeleteRole",
                "iam:CreatePolicy",
                "iam:ListPolicyVersions"
            ],
            "Resource": [
                "arn:aws:iam::*:role/h2oai*",
                "arn:aws:iam::*:policy/h2oai*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "apigateway:*",
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "lambda:ListFunctions",
                "lambda:InvokeFunction",
                "lambda:GetFunction",
                "lambda:UpdateFunctionConfiguration",
                "lambda:DeleteFunctionConcurrency",
                "lambda:RemovePermission",
                "lambda:UpdateFunctionCode",
                "lambda:AddPermission",
                "lambda:ListVersionsByFunction",
                "lambda:GetFunctionConfiguration",
                "lambda:DeleteFunction",
                "lambda:PutFunctionConcurrency",
                "lambda:GetPolicy"
            ],
            "Resource": "arn:aws:lambda:*:*:function:h2oai*"
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::h2oai*/*",
                "arn:aws:s3:::h2oai*"
            ]
        }
    ]
}

Amazon Lambda 에 배포

MOJO 파이프라인 아카이브가 준비되면, Driverless AI가 완료된 실험 페이지에 Deploy (Local & Cloud) 옵션을 제공합니다.

Notes: 이 버튼은 MOJO Scoring Pipeline이 구축된 후에만 ​​사용이 가능합니다.

Deploy Model from Experiment Overview

이 옵션은 AWS 계정 자격 증명(또는 Driverless AI 구성 파일 또는 환경 변수에 제공된 자격 증명 사용), AWS 리전 및 원하는 배포 이름 (사용되는 Driverless AI 사용자 및 AWS 계정별로 고유해야 함)을 설정하기 위해 새로운 대화 상자를 엽니다. .

AWS Lambda Deployment Dialog

Amazon Lambda 배포 매개변수:

  • Deployment Name: 배포의 고유한 이름입니다. Driverless AI는 기본적으로 실험 이름 및 배포 유형에 따라 이름을 제공합니다. 이것은 Driverless AI 사용자 및 사용된 AWS 계정별로 달라야 합니다.

  • Region: MOJO Scoring Pipeline을 배포할 AWS 리전입니다. 요청 지연 시간의 최소화를 위해 엔드 포인트를 호출하는 클라이언트 코드 및 지리적으로 가까운 리전을 선택하는 것이 좋습니다(AWS Regions and Availability Zones 참조).

  • Use AWS environment variables: 활성화 시, AWS 자격 증명은 Driverless AI 구성 파일(deployment_aws_access_key_iddeployment_aws_secret_access_key 기록 참조) 또는 환경 변수(DRIVERLESS_AI_DEPLOYMENT_AWS_ACCESS_KEY_IDDRIVERLESS_AI_DEPLOYMENT_AWS_SECRET_ACCESS_KEY)에서 가져옵니다. 이것은 일반적으로 Driverless AI 설치 관리자에 의해 입력됩니다.

  • AWS Access Key IDAWS Secret Access Key: AWS 계정에 액세스하기 위한 자격 증명. 이 비밀 쌍은 AWS 사용자 및 계정을 식별하며 AWS 계정 콘솔에서 획득할 수 있습니다.

Lambda 배포 테스트

배포에 성공하면 새로운 엔드 포인트(URL 및 API 키)에 액세스하는 데 필요한 모든 정보가 인쇄되고 배포 행을 클릭하면 Deployments Overview Page 에서 동일한 정보를 사용할 수 있습니다.

Deployments Overview Page

실제 스코어링 엔드 포인트는 /score 경로에 위치합니다. 또한 DDoS 및 기타 악의적인 활동을 방지하기 위해 그에 따른 AWS lambda는 API 키, 즉 x-api-key HTTP 헤더를 사용하여 요청의 일부로 전달되어야 하는 암호로 보호됩니다.

해당 요청은 다음 속성을 포함한 JSON 객체입니다.

  • fields: 학습 데이터 열에 해당하는 입력 열 이름 목록.

  • rows: 대상 값을 예측할 셀 값의 목록이 되는 행 목록.

  • 선택적 includeFieldsInOutput: 출력에 포함되어야 하는 입력 열 목록.

입력에 2개의 열을 제공하고 출력에 하나의 열 복사를 요청하는 예시 요청은 다음과 같습니다.

{
  "fields": [
    "age", "salary"
  ],
  "includeFieldsInOutput": [
    "salary"
  ],
  "rows": [
    [
      "48.0", "15000.0"
    ],
    [
      "35.0", "35000.0"
    ],
    [
      "18.0", "22000.0"
    ]
  ]
}

요청이 test.json```이라는 이름의 파일에 로컬로 저장되어 있다고 가정할 경우, 다음과 같이 ``curl 유틸리티를 사용하여 엔드 포인트에 대한 요청 전송이 가능합니다.

URL={place the endpoint URL here}
API_KEY={place the endpoint API key here}
curl \
  -d @test.json \
  -X POST \
  -H "x-api-key: ${API_KEY}" \
  ${URL}/score

해당 응답은 선택적으로 복사된 입력값 및 예측이 있는 행 목록을 포함하는 단일 속성 score 를 포함한 JSON 객체입니다.

두 개의 클래스 대상 필드를 포함한 상단의 예제에서 결과는 다음 스니펫과 비슷합니다. 물론 특정 값은 스코어링 파이프라인에 따라 다릅니다.

{
  "score": [
    [
      "48.0",
      "0.6240277982943945",
      "0.045458571508101536",
    ],
    [
      "35.0",
      "0.7209441819603676",
      "0.06299909138586585",
    ],
    [
      "18.0",
      "0.7209441819603676",
      "0.06299909138586585",
    ]
  ]
}

AWS 배포 문제

AWS Lambda 배포마다 새로운 S3 버킷을 생성합니다. 버킷 이름은 AWS S3 전체에 걸쳐서 고유해야 하고, 한 명의 사용자가 최대 100개의 버킷을 생성할 수 있습니다. 따라서 deployment_aws_bucket_name 구성 옵션을 사용하여 배포에 사용되는 버킷 이름을 설정하는 것을 권장합니다.

REST 서버 배포

본 섹션에서는 학습된 MOJO Scoring Pipeline을 로컬 REST(Representational State Transfer) 서버로 배포하는 방법에 관해 설명합니다.

Note: 나머지 Server 배포 제한에 대한 정보는 나머지 Server 배포 제한 를 참조하십시오.

추가 리소스

REST 서버 배포는 모델 메타데이터, 파일/CSV 스코어링 등과 같은 API 엔드 포인트를 지원합니다. API의 프로그래밍 및 수동 검사 모두에 SpringFox를 사용합니다. dai-deployment-templates 리포지터리의 local-rest-scorer 폴더를 참조하여 Local REST Scorer에 대한 다양한 배포 템플릿을 확인하십시오.

전제 조건

  • Driverless AI MOJO Scoring Pipeline: MOJO Scoring Pipeline을 Local REST Scorer로 배포하기 위해서는 완료된 실험 페이지에서 Build MOJO Scoring Pipeline 옵션을 선택하여 MOJO 파이프라인 아카이브를 먼저 생성해야 합니다. MOJO Scoring Pipeline 빌드 방법에 대한 정보는 MOJO Scoring Pipeline 섹션을 참조하십시오.

  • 방화벽 또는 가상 사설 cloud(VPC) 사용 시, REST 서버에서 사용하는 포트가 반드시 노출되어야 합니다.

  • REST scorer의 실행에 충분한 메모리 및 CPU가 있는지 확인하십시오. 일반적으로 필요한 메모리 양에 관한 충분한 추정치는 pipeline.mojo 파일 크기의 12배입니다. 예를 들어 100MB pipeline.mojo 파일에는 약 1,200MB의 RAM이 필요합니다( Note: Driverless AI에서 시스템에 관한 자세한 정보를 손쉽게 확인하려면 화면 상단의 Resources 를 클릭한 후, System Info 를 클릭하십시오).

  • Docker 컨테이너에서 Driverless AI 실행 시, Driverless AI Docker 컨테이너 내에서 REST 서비스 배포를 위해 Docker의 포트를 노출시켜야 합니다. 예를 들어, 다음은 18094에서 호스트 포트로 들어오는 요청에 대해 포트 8094를 수신하는 Driverless AI Docker 컨테이너를 노출시킵니다.

 docker run \
   -d \
   --pid=host \
   --init \
   --rm \
   --shm-size=256m \
   -u `id -u`:`id -g` \
   -p 12181:12345 \
   -p 18094:8094 \
   -v `pwd`/data:/data \
   -v `pwd`/log:/log \
   -v `pwd`/license:/license \
   -v `pwd`/tmp:/tmp \
   h2oai/<dai-image-name>:1.10.1-cuda11.2.2.xx

REST 서버에 배포

MOJO 파이프라인 아카이브가 준비되면, Driverless AI가 완료된 실험 페이지에 Deploy (Local & Cloud) 옵션을 제공합니다.

Notes:

  • 이 버튼은 MOJO Scoring Pipeline이 구축된 후에만 ​​사용이 가능합니다.

  • 해당 버튼은 PPC64LE 환경에서는 사용할 수 없습니다.

Deploy Model from Experiment Overview

이 옵션으로는 REST 서버 배포 이름, 포트 번호 및 최대 힙 크기(선택 사항)의 설정을 위한 새로운 대화 상자를 열 수 있습니다.

Rest Server Deployment Dialog
  1. 배치된 REST scorer의 추적에 도움이 되도록 REST scorer의 이름을 지정하십시오.

  2. REST scorer가 실행될 포트 번호를 제공하십시오. 예를 들어, 포트 번호 8081이 선택되면 scorer는 http://my-ip-address:8081/models 에서 사용할 수 있습니다.

  3. REST Scorer를 실행하는 JVM(Java Virtual Machine)의 최대 힙 크기를 선택적으로 지정합니다. 이를 통해, REST scorer가 시스템의 메모리를 지나치게 사용하지 못하게 제한을 걸 수 있습니다. REST scorer가 Driverless AI와 같은 머신에서 실행되기 때문에, 그러한 지정은 REST Scorer에 할당되는 메모리 양을 제한하는 데 도움이 될 수 있습니다. 해당 옵션은 REST scorer가 사용할 수 있는 메모리 양을 제한하지만 할당된 메모리가 scorer의 실행에 충분하지 않은 경우에도 오류가 발생합니다(필요한 메모리의 양은 대부분 MOJO의 크기에 따라 달라집니다. 자세한 내용은 Prerequisites 을 참조하십시오).

REST 서버 배포 테스트

REST Deployment Endpoint Info

실제 스코어링 엔드 포인트는 /score 경로에 위치합니다.

해당 요청은 다음 속성을 포함한 JSON 객체입니다.

  • fields: 학습 데이터 열에 해당하는 입력 열 이름 목록.

  • rows: 대상 값을 예측할 셀 값의 목록이 되는 행 목록.

  • 선택적 includeFieldsInOutput: 출력에 포함되어야 하는 입력 열 목록.

입력에 2개의 열을 제공하고 출력에 하나의 열 복사를 요청하는 예시 요청은 다음과 같습니다.

{
  "fields": [
    "age", "salary"
  ],
  "includeFieldsInOutput": [
    "salary"
  ],
  "rows": [
    [
      "48.0", "15000.0"
    ],
    [
      "35.0", "35000.0"
    ],
    [
      "18.0", "22000.0"
    ]
  ]
}

요청이 test.json```이라는 이름의 파일에 로컬로 저장되어 있다고 가정할 경우, 다음과 같이 ``curl 유틸리티를 사용하여 엔드 포인트에 대한 요청 전송이 가능합니다.

URL={place the endpoint URL here}
curl \
  -X POST \
  -d {"fields": ['age', 'salary', 'education'], "rows": [1, 2, 3], "includeFieldsInOutput": ["education"]}\
  -H "Content-Type: application/json" \
  ${URL}/score

해당 응답은 선택적으로 복사된 입력값 및 예측이 있는 행 목록을 포함하는 단일 속성 score 를 포함한 JSON 객체입니다.

두 개의 클래스 대상 필드를 포함한 상단의 예제에서 결과는 다음 스니펫과 비슷합니다. 물론 특정 값은 스코어링 파이프라인에 따라 다릅니다.

{
  "score": [
    [
      "48.0",
      "0.6240277982943945",
      "0.045458571508101536",
    ],
    [
      "35.0",
      "0.7209441819603676",
      "0.06299909138586585",
    ],
    [
      "18.0",
      "0.7209441819603676",
      "0.06299909138586585",
    ]
  ]
}

나머지 Server 배포 제한

  • Local 나머지 Server 배포는 배포를 위한 MOJO의 동작 특성의 결정에 유용합니다. 하지만 나머지 Server 배포를 생산 레벨 스코어링 서비스로 사용하는 것을 권장하지 않습니다. 나머지 Server 배포는 Driverless AI의 코어와 동일한 머신에서 실행되기 때문에 다른 모든 Driverless AI 프로세스와 시스템 리소스를 공유해야 합니다. 따라서 컴퓨팅 리소스 경쟁 때문에 나머지 Server가 실패하는 예상하지 못한 시나리오가 발생할 수도 있습니다.

또한 REST scorer 및 MOJO 스코어링을 위한 메모리 및 CPU 리소스 요건이 일반적으로 학습 요건보다 작기 때문에 MOJO를 더 작은 인스턴스/머신에 배포하는 것이 일반적으로 훨씬 더 비용 측면에서 효율적입니다. 템플릿은 https://github.com/h2oai/dai-deployment-templates 리포지터리에서 쉽게 찾고 빌드할 수 있습니다.

  • Driverless AI를 다시 시작하는 경우 나머지 Server가 종료됩니다.