Python 클라이언트 라이브러리 사용


이 튜토리얼에서는 Python용 Google API 클라이언트 라이브러리를 사용하여 Python 애플리케이션에서 AI Platform Training REST API를 호출하는 방법을 설명합니다. 이 문서의 나머지 부분에 있는 코드 스니펫 및 예에서는 이 Python 클라이언트 라이브러리를 사용합니다.

이 가이드에서는 Google Cloud 프로젝트에 모델을 만들게 됩니다. 이 작업은 간단한 예시에 포함되는 단순한 태스크입니다.

목표

이 가이드는 Python 클라이언트 라이브러리에 익숙해지도록 고안된 기본 가이드입니다. 이 실습을 마치면 다음을 할 수 있습니다.

  • AI Platform Training 서비스를 Python 방식으로 표현합니다.
  • 이 표현을 사용하여 프로젝트에 모델을 만들면 다른 모델 및 작업 관리 API를 호출하는 방법을 이해할 수 있습니다.

비용

이 가이드에 포함된 작업에는 비용이 청구되지 않습니다. 자세한 내용은 가격 책정 페이지를 참조하세요.

시작하기 전에

GCP 프로젝트 설정

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  9. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

인증 설정

인증을 설정하려면 서비스 계정 키를 만들고 서비스 계정 키의 파일 경로에 해당하는 환경 변수를 설정해야 합니다.

  1. 서비스 계정을 만듭니다.

    1. Google Cloud Console에서 서비스 계정 만들기 페이지로 이동합니다.

      서비스 계정 만들기로 이동

    2. 서비스 계정 이름 필드에 이름을 입력합니다.
    3. 선택사항: 서비스 계정 설명 필드에 설명을 입력합니다.
    4. 만들기를 클릭합니다.
    5. 역할 선택 필드를 클릭합니다. 모든 역할에서 AI Platform > AI Platform 관리자를 선택합니다.
    6. 다른 역할 추가를 클릭합니다.
    7. 역할 선택 필드를 클릭합니다. 모든 역할에서 스토리지 > 스토리지 객체 관리자를 선택합니다.

    8. 완료를 클릭하여 서비스 계정을 만듭니다.

      브라우저 창을 닫지 마세요. 다음 단계에서 사용합니다.

  2. 다음과 같이 인증을 위한 서비스 계정 키를 만듭니다.

    1. Google Cloud Console에서 만든 서비스 계정의 이메일 주소를 클릭합니다.
    2. 를 클릭합니다.
    3. 키 추가를 클릭한 후 새 키 만들기를 클릭합니다.
    4. 만들기를 클릭합니다. JSON 키 파일이 컴퓨터에 다운로드됩니다.
    5. 닫기를 클릭합니다.
  3. 환경 변수 GOOGLE_APPLICATION_CREDENTIALS를 서비스 계정 키가 포함된 JSON 파일의 파일 경로로 설정합니다. 이 변수는 현재 셸 세션에만 적용되므로 새 세션을 연 경우 변수를 다시 설정합니다.

Python 개발 환경 설정

아래 옵션 중 하나를 선택하여 macOS에서 로컬로 환경을 설정하거나 Cloud Shell에서 원격 환경으로 설정합니다.

macOS 사용자는 아래의 MACOS 탭을 사용하여 환경을 설정하는 것이 좋습니다. CLOUD SHELL 탭에 표시된 Cloud Shell은 macOS, Linux, Windows에서 사용할 수 있습니다. Cloud Shell을 이용하면 AI Platform Training을 빠르게 사용해 볼 수 있지만 지속적인 개발 작업에는 적합하지 않습니다.

macOS

  1. Python 설치 확인
    Python이 설치되어 있는지 확인하고 필요하면 설치합니다.

    python -V
  2. pip 설치 확인
    pip는 현재 버전의 Python에 포함되어 있는 Python의 패키지 관리자입니다. pip --version을 실행하여 pip가 이미 설치되어 있는지 확인합니다. 설치되어 있지 않으면 pip 설치 방법을 참조하세요.

    다음 명령어를 사용하여 pip를 업그레이드할 수 있습니다.

    pip install -U pip

    자세한 내용은 pip 문서를 참조하세요.

  3. virtualenv 설치
    virtualenv는 격리된 Python 환경을 만드는 도구입니다. virtualenv --version을 실행하여 virtualenv가 이미 설치되어 있는지 확인합니다. 설치되어 있지 않으면 virtualenv를 설치합니다.

    pip install --user --upgrade virtualenv

    이 가이드용으로 격리된 개발 환경을 만들려면 virtualenv에서 새 가상 환경을 만듭니다. 예를 들어 다음 명령어는 aip-env라는 환경을 활성화합니다.

    virtualenv aip-env
    source aip-env/bin/activate
  4. 이 가이드에서는 나머지 명령어를 가상 환경 내에서 실행합니다.

    virtualenv 사용에 대한 자세한 내용을 알아보세요. virtualenv를 종료하려면 deactivate를 실행합니다.

Cloud Shell

  1. Google Cloud 콘솔을 엽니다.

    Google Cloud 콘솔

  2. 콘솔 창의 상단에서 Google Cloud Shell 활성화 버튼을 클릭합니다.

    Google Cloud Shell 활성화

    콘솔 하단의 새로운 프레임에 Cloud Shell 세션이 열리고 명령줄 프롬프트가 표시됩니다. 셸 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

    Cloud Shell 세션

    Cloud Shell 세션을 사용할 수 있습니다.

  3. 선택한 프로젝트를 사용하려면 gcloud 명령줄 도구를 구성합니다.

    gcloud config set project [selected-project-id]

    [selected-project-id]는 프로젝트 ID입니다. (괄호 생략)

Python용 Google API 클라이언트 라이브러리를 설치합니다.

Python용 Google API 클라이언트 라이브러리를 설치합니다.

이 가이드는 Python 클라이언트 라이브러리에 익숙해지도록 고안된 기본 가이드입니다. 이 실습을 마치면 다음을 할 수 있습니다.

  • AI Platform Training 서비스를 Python 방식으로 표현합니다.
  • 이 표현을 사용하여 프로젝트에 모델을 만들면 다른 모델 및 작업 관리 API를 호출하는 방법을 이해할 수 있습니다.
이 가이드에 포함된 작업에는 비용이 청구되지 않습니다. 자세한 내용은 가격 책정 페이지를 참조하세요.

필수 모듈 가져오기

Python용 Google API 클라이언트 라이브러리를 사용하여 코드에서 AI Platform Training REST API를 호출하려면 해당 패키지와 OAuth2 패키지를 가져와야 합니다. 이 가이드 및 대부분의 표준 AI Platform Training 사용 사례에서는 다음과 같은 일부 모듈만 가져오면 됩니다.

사용 가능한 다른 모듈에 대해 알아보려면 해당 패키지에 대한 문서를 참조하세요.

즐겨찾는 편집기를 사용하여 새 Python 파일을 만들고 다음 행을 추가합니다.

from oauth2client.client import GoogleCredentials
from googleapiclient import discovery
from googleapiclient import errors

API의 Python 표현 빌드

REST API의 Python 표현을 가져옵니다. 호출하는 메서드가 build인 이유는 API 클라이언트 라이브러리에서 사용자가 호출할 때 존재하는 서비스에 동적 연결을 설정하기 위해 서비스 검색을 사용하기 때문입니다. 다음과 같이 ml 서비스를 캡슐화하는 객체를 호출하세요.

ml = discovery.build('ml','v1')

매개변수 및 요청 본문 구성

서비스를 호출하려면 REST API로 전달되는 매개변수와 요청 본문을 만들어야 합니다. 매개변수는 호출을 표현하는 메서드에 일반 Python 매개변수로 전달합니다. 본문은 HTTP 요청으로 직접 API를 호출하는 경우와 마찬가지로 JSON 리소스입니다.

새 브라우저 탭 projects.models.create에서 모델 생성을 위한 REST API를 살펴봅니다.

  • 경로 매개변수 parent가 프로젝트를 식별하는 요청 URI의 일부인지 확인합니다. HTTP POST 요청을 직접 수행하는 경우 다음 URI를 사용합니다.

    https://ml.googleapis.com/v1/projects/YOUR_PROJECT_ID/models
    

    API 클라이언트 라이브러리를 사용하는 경우 URI의 변수 부분은 API 호출에 대한 문자열 유형 매개변수로 표현됩니다. 이 부분은 'projects/<var>YOUR_PROJECT_ID</var>'로 설정합니다. 변수에 프로젝트를 저장하여 API를 더 명확하게 호출합니다.

    project_id = 'projects/{}'.format('YOUR_PROJECT_ID')
    
  • 요청 본문은 모델 정보를 나타내는 JSON 리소스입니다. 모델 리소스 정의에서 입력에 사용할 두 값, 즉 이름설명(선택사항)을 확인할 수 있습니다. JSON 대신 Python 사전을 전달하면 API 클라이언트 라이브러리가 필요한 변환을 수행합니다.

    Python 사전을 만듭니다.

    request_dict = {'name': 'your-model-name',
                   'description': 'This is a machine learning model entry.'}
    

요청 만들기

Python 클라이언트 라이브러리를 사용한 API 호출은 요청 만들기, 이 요청으로 호출하기 순의 두 단계로 이루어집니다.

요청 만들기

이전에 만든 빌드된 클라이언트 객체(코드 스니펫을 정확히 따른 경우 ml이라고 함)를 API 계층 구조의 루트로 사용하고 사용할 API를 지정합니다. API 경로의 각 컬렉션은 컬렉션과 컬렉션의 메서드 목록을 반환하는 함수처럼 작동합니다. 예를 들어 모든 AI Platform Training API의 루트가 projects이므로 호출이 ml.projects()로 시작됩니다.

다음 코드를 사용하여 요청을 작성합니다.

request = ml.projects().models().create(parent=project_id, body=request_dict)

요청 전송

마지막 단계에서 작성한 요청은 서비스에 요청을 전송하기 위해 호출하는 execute 메서드를 노출합니다.

response = request.execute()

일반적으로 개발자는 다음 단계를 마지막 단계와 결합합니다.

response = ml.projects().models().create(parent=project_id,
                                         body=request_dict).execute()

간단한 오류 처리

인터넷을 통해 API를 호출하면 다양한 유형의 문제가 발생할 수 있습니다. 따라서 일반적인 오류를 처리하는 것이 좋습니다. 가장 간단하게 오류를 처리하는 방법은 요청을 try 블록에 넣고 가능성 있는 오류를 찾아내는 것입니다. 서비스에서 발생할 수 있는 대부분의 오류는 HttpError 클래스에 캡슐화되는 HTTP 오류입니다. 이러한 오류를 해결하려면 googleapiclient 패키지에서 errors 모듈을 사용합니다.

try 블록으로 request.execute() 호출을 래핑합니다. 또한 호출이 성공한 경우에만 응답을 인쇄하도록 print 문도 블록에 넣습니다.

try:
    response = request.execute()
    print(response)

해결 블록을 추가하여 HTTP 오류를 처리합니다. HttpError._get_reason()을 사용하여 응답에서 이유 텍스트 필드를 가져올 수 있습니다.

except errors.HttpError, err:
    # Something went wrong, print out some information.
    print('There was an error creating the model. Check the details:')
    print(err._get_reason())

물론 간단한 print 문이 사용 중인 애플리케이션에 적합한 방법이 아닐 수도 있습니다.

하나로 결합

전체 예는 다음과 같습니다.

from googleapiclient import discovery
from googleapiclient import errors

# Store your full project ID in a variable in the format the API needs.
project_id = 'projects/{}'.format('YOUR_PROJECT_ID')

# Build a representation of the Cloud ML API.
ml = discovery.build('ml', 'v1')

# Create a dictionary with the fields from the request body.
request_dict = {'name': 'your_model_name',
               'description': 'your_model_description'}

# Create a request to call projects.models.create.
request = ml.projects().models().create(
              parent=project_id, body=request_dict)

# Make the call.
try:
    response = request.execute()
    print(response)
except errors.HttpError, err:
    # Something went wrong, print out some information.
    print('There was an error creating the model. Check the details:')
    print(err._get_reason())

다른 메서드로 일반화

여기에서 학습한 절차를 사용하여 다른 REST API를 호출할 수 있습니다. 일부 API에는 모델을 만드는 것보다 훨씬 복잡한 JSON 리소스가 필요하지만 원칙은 동일합니다.

  1. googleapiclient.discoverygoogleapiclient.errors를 가져옵니다.

  2. 검색 모듈을 사용하여 API의 Python 표현을 빌드합니다.

  3. API 표현을 연속 중첩 객체로 사용하여 원하는 API로 이동하고 요청을 만듭니다. 예를 들면 다음과 같습니다.

    request = ml.projects().models().versions().delete(
        name='projects/myproject/models/mymodel/versions/myversion')
    
  4. request.execute()를 호출하여 요청을 전송하고 애플리케이션에 적합한 방식으로 예외를 처리합니다.

  5. 응답 본문이 있는 경우에는 응답 본문을 Python 사전처럼 취급하여 API 참조에 지정된 JSON 객체를 가져올 수 있습니다. 많은 응답 객체에는 일부 상황에서만 나타나는 필드가 있습니다. 키 오류가 발생하지 않도록 항상 확인해야 합니다.

    response = request.execute()
    
    some_value = response.get('some_key') or 'default_value'
    

다음 단계