Swivel 파이프라인 템플릿으로 임베딩 만들기

Submatrix 전체 벡터 임베딩 학습자(Swivel) 알고리즘으로 Vertex AI Pipelines를 사용하여 임베딩 모델을 학습시킬 수 있습니다.

Swivel은 항목 동시 어커런스 행렬에서 항목 임베딩을 생성하는 방식입니다. 구매주문서와 같은 구조화된 데이터의 경우 임베딩을 생성하려는 모든 제품에 대해 제품 A와 제품 B가 모두 포함된 구매주문서 수를 집계하여 항목의 동시 어커런스 행렬을 계산할 수 있습니다.

다음 튜토리얼에서는 Swivel 파이프라인 템플릿을 사용하여 고유 텍스트 또는 구조화된 데이터에서 임베딩을 생성하는 방법을 보여줍니다. 수행 단계는 다음과 같습니다.

  1. 설정: API 사용 설정, 권한 부여, 입력 데이터 준비
  2. 매개변수 구성: Swivel 작업에 적합한 매개변수 값 설정
  3. Vertex AI Pipelines에서 학습: Swivel 파이프라인 템플릿을 사용하여 Vertex AI Pipelines에서 Swivel 작업 생성

시작하기 전에

  1. Vertex AI Pipelines용 Google Cloud 프로젝트를 설정합니다.

  2. Dataflow API 서비스를 사용 설정합니다.

  3. 세분화된 권한으로 서비스 계정을 구성합니다.

    • 서비스 계정을 지정하지 않으면 파이프라인 실행에 기본적으로 프로젝트 편집자 역할이 있는 Compute Engine 기본 서비스 계정이 사용됩니다.
    • 고유 서비스 계정을 만드는 방법은 세분화된 권한으로 서비스 계정 구성을 참조하고 서비스 계정에 다음 역할을 부여합니다.
      • roles/aiplatform.user
      • roles/iam.serviceAccountUser
      • roles/dataflow.developer
      • roles/compute.viewer
      • roles/storage.objectAdmin

입력 데이터

Swivel 파이프라인 템플릿을 사용하여 텍스트 코퍼스의 단어 또는 구조화된 데이터 세트의 항목에 대한 임베딩을 생성할 수 있습니다. Swivel 파이프라인 템플릿은 입력 데이터 파일이 다음 형식이어야 합니다.

  • 각 행은 동시 어커런스 컨텍스트를 나타냅니다. 예를 들어 문장 내 단어, 장바구니에 포함된 제품 집합, 재생목록 내의 노래 집합, 사용자 세션에서 방문한 URL 집합이 있습니다.

  • 각 행의 항목은 공백으로 구분됩니다. 따라서 항목 이름에는 공백이 없어야 합니다.

입력 데이터 유형

입력에는 텍스트항목의 두 가지 유형이 있습니다. 입력 사양이 입력 데이터 처리 방법에 영향을 주기 때문에 사용 사례에 올바르게 지정하는 것이 중요합니다.

  1. 텍스트 입력에는 대문자와 구두점이 필요하므로 Swivel은 텍스트를 소문자로 변환하고 구두점을 삭제합니다. 이렇게 하면 Swivel에서 'apple', 'Apple', 'APPLE!'과 같은 토큰이 동일한 토큰으로 취급되므로 임베딩이 동일합니다.

  2. 항목 입력은 공백으로 구분되며 각 토큰은 항목 ID가 됩니다. 또한 장바구니 등에 포함된 항목 그룹은 기본적으로 순서가 지정되지 않으므로 항목 입력에는 순서가 중요하지 않습니다. 즉, 항목 입력의 각 행은 배열이 아닌 집합으로 취급됩니다. 따라서 Swivel은 행의 각 항목을 서로 동등하게 취급합니다.

샘플 데이터

다음 샘플 데이터를 테스트용으로 Cloud Storage 버킷에 복사합니다.

  • wikipedia: Wikimedia 덤프에서 단어 임베딩을 학습하는 데 사용할 수 있는 텍스트 코퍼스 데이터 세트입니다. 이 데이터 세트에는 텍스트 입력 유형이 사용됩니다.

이 데이터를 복사하려면 다음 명령어를 실행합니다.

gsutil cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/wikipedia/* BUCKET_NAME/wikipedia

BUCKET_NAME을 관리하는 Cloud Storage 버킷의 이름으로 바꿉니다.

  • movielens_25m: 영화의 임베딩을 만드는 데 사용할 수 있는 영화 평점 데이터 세트입니다. 이 데이터 세트는 각 행에 동일한 사용자의 평가가 동일한 영화가 포함되도록 처리됩니다. 디렉터리에는 영화 ID를 이름에 매핑하는 movies.csv도 포함됩니다. 이 데이터 세트는 항목 입력 유형을 사용합니다.

이 데이터를 복사하려면 다음 명령어를 실행합니다.

gsutil cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/movielens_25m/data* BUCKET_NAME/movielesn_25m

BUCKET_NAME을 관리하는 Cloud Storage 버킷의 이름으로 바꿉니다.

Vertex AI Pipelines를 사용하여 Swivel 작업 생성

파이프라인을 실행하려면 Google Cloud Console을 사용합니다.

  1. 다음 사전 컴파일된 파이프라인 템플릿 및 구성 스크립트를 로컬로 다운로드합니다.

  2. 다음 swivel_template_configuration.sh 스크립트를 사용하여 템플릿을 구성합니다.

    ./swivel_template_configuration.sh \
        -pipeline_suffix YOUR_PIPELINE_SUFFIX \
        -project_id PROJECT_ID \
        -machine_type n1-standard-16 \
        -accelerator_count 2 \
        -accelerator_type NVIDIA_TESLA_V100 \
        -pipeline_root BUCKET_NAME \
        -region YOUR_REGION \
        -network_name YOUR_NETWORK_NAME
    

    다음은 매개변수 목록입니다.

    • pipeline_suffix: 파이프라인 이름의 서픽스(소문자 및 하이픈이 허용됨)입니다.
    • machine_type: 예를 들면 n1-standard-16입니다. 자세한 내용은 커스텀 학습용 컴퓨팅 리소스 구성을 참조하세요.
    • accelerator_count: 각 머신의 GPU 수입니다.
    • accelerator_type: 예를 들면 NVIDIA_TESLA_P100, NVIDIA_TESLA_V100입니다. 자세한 내용은 GPU를 참조하세요.
    • pipeline_root: Cloud Storage 버킷 이름입니다. gs:// 프리픽스는 포함되지 않습니다.
    • region: 선택사항. 기본값은 us-central1입니다.
    • network_name: 선택사항. 서브네트워크입니다.

    swivel_template_configuration.sh 스크립트는 구성을 사용하는 사전 컴파일된 파이프라인 템플릿을 생성합니다.

    비공개 IP 주소를 사용하지 않는 경우 VPC 네트워크를 설정할 필요가 없으면 Swivel 작업을 제출하기 전에 swivel_pipeline.json에서 다음 줄을 삭제합니다.

    • --subnetwork=regions/%REGION%/subnetworks/%NETWORK_NAME%
    • --no_use_public_ips
    • network: projects/%PROJECT_NUMBER%/global/networks/%NETWORK_NAME%\
  3. Cloud Console에서 swivel_pipeline.json을 사용하여 파이프라인을 만듭니다.

    다음 표에는 Swivel 작업에서 사용하는 Cloud Console에서 설정해야 하는 런타임 매개변수가 나와 있습니다.

    매개변수 데이터 유형 설명 필수
    embedding_dim 정수 학습시킬 임베딩의 차원입니다. 아니요 - 기본값은 100입니다.
    input_base 문자열 입력 데이터가 저장되는 Cloud Storage 경로입니다.
    input_type 문자열 입력 데이터의 유형입니다. 유형은 'text'(Wikipedia 샘플) 또는 'items'(MovieLens 샘플)일 수 있습니다.
    max_vocab_size 정수 임베딩을 생성할 최대 어휘 크기입니다. 아니요 - 기본값은 409600입니다.
    num_epochs 정수 학습의 에포크 수입니다. 아니요 - 기본값은 20입니다.
    • items 입력 유형의 경우 입력 데이터의 각 행이 공백으로 구분된 항목 ID여야 합니다. 각 행은 공백으로 구분되어 토큰화됩니다.
    • text 입력 유형의 경우 입력 데이터의 각 행이 문장과 동일한 것으로 간주됩니다. 각 행은 소문자로 바뀌고 공백으로 구분되어 토큰화됩니다.
    • Wikipedia 샘플의 경우 input_type = textinput_base = {SOURCE_DATA}/wikipedia를 사용합니다.
    • MovieLens 샘플에는 input_type = itemsinput_base = {SOURCE_DATA}/movielens_25m을 사용합니다.

학습된 임베딩 모델 사용

파이프라인 실행이 성공적으로 완료되면 학습된 TensorFlow SavedModel이 Cloud Storage 디렉터리로 내보내집니다.

{BUCKET_NAME}/pipeline_root/{PROJECT_NUMBER}/swivel-{TIMESTAMP}/EmbTrainerComponent_-{SOME_NUMBER}/model/model/

Cloud Console의 Vertex ML Metadata 섹션에서 이 경로를 찾을 수 있습니다.

튜토리얼

Vertex AI에서 Swivel 파이프라인 템플릿을 학습시키는 방법을 보려면, 학습된 임베딩을 탐색하고, 온라인 제공을 위해 임베딩 모델을 배포하고, Colab에서 예시 노트북을 실행합니다.

다음 단계