Cloud TPU에서 HuggingFace GPT2 학습(TF 2.x)


Cloud TPU에 익숙하지 않은 경우 빠른 시작을 참조하여 TPU VM을 만드는 방법을 알아보는 것이 좋습니다.

이 튜토리얼에서는 Cloud TPU에서 HuggingFace GPT2 모델을 학습시키는 방법을 설명합니다.

목표

  • Cloud TPU 만들기
  • 종속 항목 설치
  • 학습 작업 실행

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

  • Compute Engine
  • Cloud TPU

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

시작하기 전에

이 튜토리얼을 시작하기 전에 Google Cloud 프로젝트가 올바르게 설정되었는지 확인하세요.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  6. 이 둘러보기에서는 비용이 청구될 수 있는 Google Cloud 구성요소를 사용합니다. 예상 비용은 Cloud TPU 가격 책정 페이지에서 확인하세요. 리소스 사용을 마쳤으면 불필요한 비용이 청구되지 않도록 생성한 리소스를 삭제하세요.

Cloud TPU로 HuggingFace GPT2 학습

  1. Cloud Shell 창을 엽니다.

    Cloud Shell 열기

  2. 프로젝트 ID의 환경 변수를 만듭니다.

    export PROJECT_ID=your-project-id
    
  3. Cloud TPU를 만들려는 위치의 Google Cloud 프로젝트를 사용하도록 Google Cloud CLI를 구성합니다.

    gcloud config set project ${PROJECT_ID}
    

    새 Cloud Shell VM에서 이 명령어를 처음 실행하면 Authorize Cloud Shell 페이지가 표시됩니다. 페이지 하단에 있는 Authorize를 클릭하여 gcloud에서 사용자 인증 정보로 Google Cloud API를 호출하도록 허용합니다.

  4. Cloud TPU 프로젝트의 서비스 계정을 만듭니다.

    서비스 계정은 Cloud TPU 서비스가 다른 Google Cloud 서비스에 액세스하도록 허용합니다.

    $ gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
    

    이 명령어는 다음 형식의 Cloud TPU 서비스 계정을 반환합니다.

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

Cloud TPU 만들기

  1. gcloud 명령어를 사용하여 Cloud TPU VM을 만듭니다. 다음 명령어는 v4-8 TPU를 만듭니다. --accelerator-type 플래그를 Podlice 유형으로 설정하여 TPU Podlice를 만들 수도 있습니다(예: v4-32).

    $ gcloud compute tpus tpu-vm create hf-gpt2 \
      --zone=us-central2-b \
      --accelerator-type=v4-8 \
      --version=tpu-vm-tf-2.16.1-pjrt
    

    명령어 플래그 설명

    zone
    Cloud TPU를 만들려는 영역입니다.
    accelerator-type
    가속기 유형은 만들려는 Cloud TPU의 버전과 크기를 지정합니다. 각 TPU 버전에서 지원되는 가속기 유형에 대한 자세한 내용은 TPU 버전을 참조하세요.
    version
    Cloud TPU 소프트웨어 버전입니다.
  2. 다음 ssh 명령어를 실행하여 Cloud TPU VM에 연결합니다.

    gcloud compute tpus tpu-vm ssh hf-gpt2 --zone=us-central2-b
    

종속 항목 설치

  1. HuggingFace Transformer 저장소를 클론합니다.

    (vm)$ cd /tmp
    (vm)$ git clone https://github.com/huggingface/transformers.git
    (vm)$ cd transformers
    
  2. 종속 항목을 설치합니다.

    (vm)$ pip install .
    (vm)$ pip install -r examples/tensorflow/_tests_requirements.txt
    (vm)$ cd /tmp/transformers/examples/tensorflow/language-modeling
    (vm)$ pip install -r requirements.txt
    
  3. 임시 디렉터리를 만듭니다.

    (vm)$ mkdir /tmp/gpt2-wikitext
    
  4. TPU를 만들 때 --version 매개변수를 -pjrt로 끝나는 버전으로 설정한 경우 다음 환경 변수를 설정하여 PJRT 런타임을 사용 설정합니다.

      (vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true
      (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
    

학습 스크립트 실행

(vm)$ python3 run_clm.py \
  --model_name_or_path distilgpt2 \
  --max_train_samples 1000 \
  --max_eval_samples 100 \
  --num_train_epochs 1 \
  --output_dir /tmp/gpt2-wikitext \
  --dataset_name wikitext \
  --dataset_config_name wikitext-103-raw-v1

명령어 플래그 설명

model_name_or_path
학습시킬 모델의 이름입니다.
max_train_samples
학습에 사용할 최대 샘플 수입니다.
max_eval_samples
평가에 사용할 최대 샘플 수입니다.
num_train_epochs
모델을 학습시키는 세대 수입니다.
output_dir
학습 스크립트의 출력 디렉터리입니다.
dataset_name
사용할 데이터 세트의 이름입니다.
dataset_config_name
데이터 세트 구성 이름입니다.

학습이 완료되면 다음과 유사한 메시지가 표시됩니다.

  125/125 [============================] - ETA: 0s - loss: 3.61762023-07-07 21:38:17.902850: W tensorflow/core/framework/dataset.cc:956] Input of GeneratorDatasetOp::Dataset will not be optimized because the dataset does not implement the AsGraphDefInternal() method needed to apply optimizations.
  125/125 [============================] - 763s 6s/step - loss: 3.6176 - val_loss: 3.4233
  Configuration saved in /tmp/gpt2-wikitext/config.json
  Configuration saved in /tmp/gpt2-wikitext/generation_config.json
  Model weights saved in /tmp/gpt2-wikitext/tf_model.h5
  D0707 21:38:45.640973681   12027 init.cc:191]                          grpc_shutdown starts clean-up now
  

삭제

  1. TPU VM 인스턴스에서 연결을 해제합니다.

    (vm)$ exit
    

    프롬프트가 username@projectname으로 바뀌면 Cloud Shell에 있는 것입니다.

  2. TPU 리소스를 삭제합니다.

    $ gcloud compute tpus tpu-vm delete hf-gpt2 \
    --zone=us-central2-b
    

다음 단계

다른 지원되는 참조 모델 중 하나를 사용해 보세요.