사전 빌드된 컨테이너의 Python 학습 애플리케이션 만들기

사전 빌드된 컨테이너로 커스텀 학습을 수행하려면 먼저 학습 애플리케이션이 포함된 Python 소스 배포를 만들고 이것을 Google Cloud 프로젝트에서 액세스할 수 있는 Cloud Storage 버킷에 업로드해야 합니다.

소스 배포 만들기의 대안

이 가이드에서는 수동으로 소스 배포를 만들고 이를 Cloud Storage에 업로드하는 방법을 설명합니다. 이 가이드를 따라하려면 먼저 몇 가지 경우에 편리할 수 있도록 다음과 같은 대체 워크플로를 고려하세요.

  • 로컬 컴퓨터에서 코드를 사용하여 학습시키고 수동 패키징 작업을 최대한 줄이려면 Google Cloud CLI의 자동 패키징 기능을 사용하는 것이 좋습니다. 이 기능을 사용하면 단일 명령어로 Docker 컨테이너 이미지를 빌드하여 Container Registry로 푸시하고 컨테이너 이미지를 기반으로 CustomJob 리소스를 만들 수 있습니다. 자세한 내용은 CustomJob 만들기 가이드를 참조하세요.

    자동 패키징을 사용하려면 로컬 컴퓨터에 Docker를 설치해야 합니다. 이 옵션을 사용하면 TrainingPipeline 또는 HyperparameterTuningJob 리소스가 아닌 CustomJob만 만들 수 있습니다. 커스텀 학습 리소스 간의 차이점에 대해 알아보세요.

  • 컨테이너 이미지를 추가로 맞춤설정하고 Vertex AI에서 실행하기 전에 컨테이너에서 코드를 로컬에서 실행하려면 gcloud CLI의 local-run 명령어를 사용하여 코드를 컨테이너화하고 로컬로 실행할 수 있습니다. 그런 후 Artifact Registry 또는 Container Registry에 이미지를 수동으로 푸시할 수 있습니다.

    local-run 명령어를 사용하려면 로컬 컴퓨터에 Docker를 설치해야 합니다.

  • 단일 Python 스크립트로 학습 코드를 작성할 수 있으면 Python용 Vertex AI SDKCustomTrainingJob 클래스를 사용하여 코드를 소스 배포로 자동으로 패키징하고 Cloud Storage에 업로드한 다음 커스텀 TrainingPipeline을 만듭니다.

    이 옵션을 사용하면 CustomJob 또는 HyperparameterTuningJob이 아닌 TrainingPipeline만 만들 수 있습니다. 커스텀 학습 리소스 간의 차이점에 대해 알아보세요.

  • 유연성을 극대화하려면 커스텀 컨테이너 이미지를 수동으로 만들고 이를 Artifact Registry 또는 Container Registry에 푸시할 수 있습니다.

이전 옵션 중 사용 사례에 맞는 옵션이 없거나 학습 애플리케이션을 소스 배포로 수동으로 패키징하려는 경우 이 가이드의 나머지 안내를 따르세요.

시작하기 전에

학습 애플리케이션을 클라우드에서 실행하기 전에 다음 단계를 완료하세요.

  1. Vertex AI의 사전 빌드된 학습용 컨테이너 중에서 사용 가능한 머신러닝(ML) 프레임워크를 사용하여 학습 애플리케이션을 개발합니다. 학습 애플리케이션이 학습 코드 요구사항을 충족하는지 확인합니다.

    학습 애플리케이션을 처음부터 작성하는 경우 이 문서의 다음 섹션에 설명된 애플리케이션 구조에 따라 코드를 구성하는 것이 좋습니다.

  2. Vertex AI를 사용할 동일한 Google Cloud 프로젝트에서 Cloud Storage 버킷을 만듭니다. 이 버킷에 학습 애플리케이션을 저장합니다. (다른 Google Cloud 버킷에서 버킷을 사용할 수 있지만 이 가이드의 범위를 벗어나는 추가 구성이 필요합니다.)

    최적의 성능을 위해 Cloud Storage 버킷이 Vertex AI를 사용할 위치에 있는지 확인하세요.

  3. 학습 애플리케이션이 사용하는 모든 Python 라이브러리에 대해, 커스텀 종속적인지 또는 PyPI 전반에서 자유롭게 이용 가능한지 등을 모두 파악합니다.

애플리케이션 구조

사전 빌드된 컨테이너를 사용하여 커스텀 학습을 수행할 때 다음 요구사항에 따라 학습 코드를 지정해야 합니다.

  • 코드를 하나 이상의 Python 소스 배포로 제공합니다.

    Vertex AI API를 사용하여 커스텀 학습을 시작하는 경우 packageUris 필드에 이를 지정합니다.

  • 이러한 소스 배포 중 하나에 학습의 진입점 역할을 하는 모듈을 만듭니다.

    Vertex AI API를 사용하여 커스텀 학습을 시작하는 경우 pythonModule 필드에 이를 지정합니다.

이러한 요구사항만 충족한다면 원하는 방식으로 학습 애플리케이션을 구성할 수 있습니다. 그러나 다음 구조(Vertex A 샘플에서 자주 사용됨)로 코드를 구성하여 단일 Python 소스 배포를 빌드하는 것을 추천합니다.

  • setup.py 파일이 포함된 기본 프로젝트 디렉터리를 사용합니다. 이 파일의 내용에 대한 안내는 다음 섹션을 참조하세요.

  • 기본 프로젝트 디렉터리 내에 학습 코드의 기본 패키지로 사용할 trainer/라는 하위 디렉터리를 만듭니다.

  • trainer/ 내에서 학습 코드의 진입점 역할을 하는 task.py라는 모듈을 만듭니다.

  • trainer/task.py를 지원하려면 trainer/ 패키지에 원하는 추가 Python 모듈을 만들고 기본 프로젝트 디렉터리에 원하는 추가 코드로 추가 하위 디렉터리를 만듭니다.

  • 각 하위 디렉터리에 __init__.py 파일을 만들어 패키지로 만듭니다.

이 가이드의 나머지 부분에서는 코드가 이 구조에 따라 구성되어 있다고 가정하고 진행할 것입니다.

소스 배포 만들기

Python 소스 배포 빌드는 이 문서의 범위를 넘어서는 매우 광범위한 주제입니다. 따라서 이 섹션에서는 Setuptools를 사용하여 Vertex A에서 사용할 소스 배포를 빌드하는 방법에 대해서만 간략하게 설명합니다. 다른 라이브러리에서도 이와 같은 방법을 설명하고 있습니다.

  1. Setuptools에 소스 배포를 만드는 방법을 알려주는 setup.py 파일을 만듭니다. 기본 setup.py에는 다음이 포함됩니다.

    • setuptools.find_packagessetuptools.setup의 import 문

    • 최소한 다음과 같은 매개변수가 설정된 setuptools.setup에 대한 호출:

      • name를 소스 배포의 이름으로 설정.

      • version를 소스 배포의 이 빌드 버전 번호로 설정.

      • install_requires'docutils>=0.3'과 같은 버전 요구사항과 함께 애플리케이션에 필요한 종속 항목 목록으로 설정.

      • packagesfind_packages()로 설정. 이렇게 하면 __init__.py 파일을 포함하는 상위 디렉터리의 모든 하위 디렉터리를 패키지로 포함하도록 Setuptools에 지시하게 됩니다.

      • include_package_dataTrue로 설정.

    다음 예시에서는 학습 애플리케이션의 기본 setup.py 파일을 보여줍니다.

    from setuptools import find_packages
    from setuptools import setup
    
    setup(
        name='trainer',
        version='0.1',
        packages=find_packages(),
        include_package_data=True,
        description='My training application.'
    )
    
  2. dist/trainer-0.1.tar.gz 명령어를 실행하여 소스 배포를 만듭니다.

    python setup.py sdist --formats=gztar
    

Python 애플리케이션 종속 항목

종속 항목은 코드에서 import를 사용해 가져오는 패키지입니다. 애플리케이션에는 작업에 필요한 여러 종속 항목이 포함될 수 있습니다.

커스텀 학습 작업의 각 복제본에 대해, 여러 일반적인 Python 종속 항목이 설치된 컨테이너에서 코드가 실행됩니다. 학습에 사용할 사전 빌드된 컨테이너에 포함된 종속 항목을 확인하고 아직 설치되지 않은 모든 종속 항목을 기록하세요. 사전 빌드된 컨테이너에 아직 설치되지 않은 종속 항목에 대해서는 다음 단계만 완료하면 됩니다.

추가해야 하는 종속 항목에는 다음 2가지 유형이 있습니다.

  • PyPI에서 사용 가능한 공통 배포 패키지인 표준 종속 항목
  • 사용자가 직접 개발한 패키지나 조직 내부의 패키지 같은 커스텀 종속 항목

아래 섹션에서는 각 유형별 절차를 설명합니다.

표준(PyPI) 종속 항목

애플리케이션의 표준 종속 항목을 setup.py 스크립트의 일부로 지정할 수 있습니다. Vertex AI는 pip를 사용하여 작업용으로 할당된 복제본에 학습 애플리케이션을 설치합니다. pip install 명령어는 구성된 종속 항목을 찾아 설치합니다.

다음 예시에서는 이전 섹션과 유사한 setup.py를 보여줍니다. 하지만 이 setup.py는 Vertex AI가 학습 애플리케이션을 설치할 때 some_PyPI_package를 설치하도록 알립니다.

from setuptools import find_packages
from setuptools import setup

REQUIRED_PACKAGES = ['some_PyPI_package>=1.0']

setup(
    name='trainer',
    version='0.1',
    install_requires=REQUIRED_PACKAGES,
    packages=find_packages(),
    include_package_data=True,
    description='My training application.'
)

커스텀 종속 항목

작업 구성에 경로를 포함해 애플리케이션의 커스텀 종속 항목을 지정할 수 있습니다. 각 종속 항목의 소스 배포 URI가 필요합니다. 커스텀 종속 항목은 Cloud Storage 위치에 있어야 합니다. Vertex AI는 pip install을 사용하여 커스텀 종속 항목을 설치하므로, setup.py 스크립트 내에 자체 표준 종속 항목을 가질 수 있습니다.

포함되는 각 URI는 tarball(.tar.gz) 또는 wheel(.whl)로 형식이 지정된 소스 배포 경로입니다. Vertex AI는 학습 작업용으로 할당된 각 복제본에 pip install을 사용하여 각 종속 항목을 설치합니다.

Vertex AI API를 사용하여 커스텀 학습을 시작하는 경우 packageUris 필드의 학습 애플리케이션과 함께 이러한 종속 항목에 대한 Cloud Storage URI를 지정합니다.

Python 모듈

애플리케이션에는 여러 모듈(Python 파일)이 포함될 수 있습니다. 사용자는 애플리케이션 진입점이 포함된 모듈을 파악해야 합니다. 학습 서비스는 사용자가 로컬에서 실행할 때와 마찬가지로 Python을 호출하여 모듈을 실행합니다.

예를 들어 이전 섹션의 구조 권장사항을 따르는 경우 기본 모듈은 task.py입니다. 이는 trainer라는 가져오기 패키지(__init__.py 파일이 있는 디렉터리)에 있으므로 이 모듈의 정규화된 이름은 trainer.task입니다. Vertex AI API를 사용하여 커스텀 학습을 시작하는 경우 moduleName 필드trainer.task로 설정합니다.

모듈에 대한 자세한 내용은 Python 패키지 가이드를 참조하세요.

Cloud Storage에 소스 배포 업로드

gsutil 도구를 사용하여 소스 배포 및 모든 커스텀 종속 항목을 Cloud Storage 버킷에 업로드할 수 있습니다. 예를 들면 다음과 같습니다.

gsutil cp dist/trainer-0.1.tar.gz CLOUD_STORAGE_DIRECTORY

Google Cloud 프로젝트에서 액세스할 수 있는 버킷에서 Cloud Storage 디렉터리의 URI(gs://로 시작해서 /로 끝남)로 CLOUD_STORAGE_DIRECTORY를 바꿉니다.

소스 배포를 Cloud Storage에 업로드하는 다른 방법에 대해 알아보려면 Cloud Storage 문서의 객체 업로드를 읽어보세요.

다음 단계