Cloud TPU에 익숙하지 않은 경우 빠른 시작을 참조하여 TPU VM을 만드는 방법을 알아보는 것이 좋습니다.
이 튜토리얼에서는 Cloud TPU에서 HuggingFace GPT2 모델을 학습시키는 방법을 설명합니다.
목표
- Cloud TPU 만들기
- 종속 항목 설치
- 학습 작업 실행
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
- Compute Engine
- Cloud TPU
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
시작하기 전에
이 튜토리얼을 시작하기 전에 Google Cloud 프로젝트가 올바르게 설정되었는지 확인하세요.
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
이 둘러보기에서는 비용이 청구될 수 있는 Google Cloud 구성요소를 사용합니다. 예상 비용은 Cloud TPU 가격 책정 페이지에서 확인하세요. 리소스 사용을 마쳤으면 불필요한 비용이 청구되지 않도록 생성한 리소스를 삭제하세요.
Cloud TPU로 HuggingFace GPT2 학습
Cloud Shell 창을 엽니다.
프로젝트 ID의 환경 변수를 만듭니다.
export PROJECT_ID=your-project-id
Cloud TPU를 만들려는 위치의 Google Cloud 프로젝트를 사용하도록 Google Cloud CLI를 구성합니다.
gcloud config set project ${PROJECT_ID}
새 Cloud Shell VM에서 이 명령어를 처음 실행하면
Authorize Cloud Shell
페이지가 표시됩니다. 페이지 하단에 있는Authorize
를 클릭하여gcloud
에서 사용자 인증 정보로 Google Cloud API를 호출하도록 허용합니다.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 만들기
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
다음
ssh
명령어를 실행하여 Cloud TPU VM에 연결합니다.gcloud compute tpus tpu-vm ssh hf-gpt2 --zone=us-central2-b
종속 항목 설치
HuggingFace Transformer 저장소를 클론합니다.
(vm)$ cd /tmp (vm)$ git clone https://github.com/huggingface/transformers.git (vm)$ cd transformers
종속 항목을 설치합니다.
(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
임시 디렉터리를 만듭니다.
(vm)$ mkdir /tmp/gpt2-wikitext
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
삭제
TPU VM 인스턴스에서 연결을 해제합니다.
(vm)$ exit
프롬프트가
username@projectname
으로 바뀌면 Cloud Shell에 있는 것입니다.TPU 리소스를 삭제합니다.
$ gcloud compute tpus tpu-vm delete hf-gpt2 \ --zone=us-central2-b
다음 단계
다른 지원되는 참조 모델 중 하나를 사용해 보세요.