Cloud TPU v5e 학습

Cloud TPU v5e는 Google Cloud의 최신 세대 AI 가속기입니다. 포드당 칩 공간이 256개로 더 작은 v5e는 변환기, 텍스트-이미지, 컨볼루셔널 신경망(CNN) 학습, 미세 조정, 서빙에 높은 효용성을 제공하는 제품이 되도록 최적화되어 있습니다.

Cloud TPU v5e 개념, 시스템 아키텍처, 구성

Cloud TPU를 처음 사용하는 경우 TPU 문서 홈을 확인하세요.

일반적인 Cloud TPU 개념(예: 슬라이스, 호스트, 칩, TensorCore)과 Cloud TPU 시스템 아키텍처는 Cloud TPU 시스템 아키텍처 페이지에 설명되어 있습니다.

각 Cloud TPU 버전에는 학습 및 추론을 위한 특정 가속기 유형이 필요합니다. 이러한 가속기 유형은 v5e 구성 섹션에 설명되어 있습니다.

추론

추론은 학습된 모델을 사용하여 새 데이터에 대한 예측을 수행하는 프로세스입니다. 이는 서빙 프로세스에서 사용합니다.

슬라이스

슬라이스는 고속 칩 간 상호 연결(ICI)을 통해 연결된 동일한 포드 내에 모두 위치한 칩 컬렉션을 나타냅니다. v5e는 2D 슬라이스 형태를 갖습니다. 지원되는 슬라이스 형태는 v5e 구성 섹션의 표를 참조하세요.

칩 형태칩 토폴로지는 슬라이스 형태도 지칭합니다.

서빙

서빙은 예측 또는 결정을 내리는 데 사용할 수 있는 학습된 머신러닝 모델을 프로덕션 환경에 배포하는 프로세스입니다. 지연 시간 및 서비스 수준 가용성은 서빙에 중요합니다.

단일 호스트와 멀티 호스트 비교

호스트는 VM을 실행하는 물리적 컴퓨터(CPU)입니다. 호스트는 여러 VM을 한 번에 실행할 수 있습니다.

8개 미만의 칩을 사용하는 슬라이스는 최대 1개의 호스트를 사용합니다. 칩이 8개를 초과하는 슬라이스는 둘 이상의 호스트에 액세스하고 여러 호스트를 사용하여 분산 학습을 실행할 수 있습니다. 슬라이스 및 칩에 대한 자세한 내용은 TPU 시스템 아키텍처 페이지를 참조하세요.

v5e는 멀티 호스트 학습 및 멀티 호스트 추론을 지원합니다(SAX 사용).

TPU VM

Linux를 실행하며 기본 TPU에 액세스할 수 있는 가상 머신입니다. v5e TPU의 경우 각 TPU VM은 사용자가 지정한 가속기 유형에 따라 1개, 4개 또는 8개의 칩에 직접 액세스합니다. TPU VM은 작업자라고도 합니다.

작업자

TPU VM을 참조하세요.

시작하기

v5e TPU 하드웨어에 대한 자세한 내용은 시스템 아키텍처를 참조하세요.

용량 확보

AI 워크로드에 Cloud TPU v5e를 사용하려면 Cloud 영업팀에 문의하세요.

Google Cloud 프로젝트 준비

  1. Google 계정으로 로그인합니다. 아직 계정이 없다면 새 계정을 만듭니다.
  2. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
  3. 모든 Google Cloud 사용에 결제 설정이 필요하므로 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. gcloud alpha 구성요소를 설치합니다.

  5. 기존 gcloud alpha 구성요소를 재사용하는 TPU 사용자는 관련 명령어와 플래그가 지원되도록 업데이트를 수행하세요.

    gcloud components update
    
  6. Cloud Shell에서 다음 gcloud 명령어를 통해 TPU API를 사용 설정합니다. (Google Cloud 콘솔에서도 사용 설정할 수 있습니다.)

    gcloud services enable tpu.googleapis.com
    
  7. TPU 서비스 계정을 사용 설정합니다.

    서비스 계정은 Cloud TPU 서비스가 다른 Google Cloud 서비스에 액세스하도록 허용합니다. Google Cloud에서 권장하는 방식은 사용자 관리형 서비스 계정입니다. 다음 가이드를 따라 생성하고 역할을 부여합니다. 다음 역할이 필요합니다.

    • TPU 관리자
    • 스토리지 관리자: Cloud Storage에 액세스하는 데 필요합니다.
    • 로그 작성자: Logging API로 로그를 작성하는 데 필요합니다.
    • 모니터링 측정항목 작성자: Cloud Monitoring에 측정항목을 쓰는 데 필요합니다.
  8. 프로젝트 및 영역을 구성합니다.

    프로젝트 ID는 Cloud 콘솔에 표시된 프로젝트의 이름입니다.

    export PROJECT_ID=your-project-id
    export ZONE=us-west4-a
    
    gcloud compute tpus tpu-vm service-identity create --zone=${ZONE}
    
    gcloud auth login
    gcloud config set project ${PROJECT_ID}
    gcloud config set compute/zone ${ZONE}
    

Cloud TPU 환경 프로비저닝

권장사항은 queued-resource create 명령어를 사용하여 Cloud TPU v5es를 큐에 추가된 리소스로 프로비저닝하는 것입니다. 하지만 Create Node API(gcloud alpha compute tpus tpu-vm create)를 사용하여 Cloud TPU v5es를 프로비저닝할 수도 있습니다.

환경 변수 만들기

TPU 생성에 필요한 환경 변수를 설정합니다.

다음 목록의 변수(빨간색)를 학습 또는 추론 작업에 사용할 값으로 바꿉니다.

export PROJECT_ID=your_project_ID
export ACCELERATOR_TYPE=v5litepod-16
export ZONE=us-west4-a
export RUNTIME_VERSION=v2-alpha-tpuv5-lite
export SERVICE_ACCOUNT=your_service_account
export TPU_NAME=your_tpu_name
export QUEUED_RESOURCE_ID=your_queued_resource_id
export QUOTA_TYPE=quota_type
export VALID_UNTIL_DURATION=1d
변수 Description(설명)
PROJECT_ID Google Cloud 프로젝트 이름
ACCELERATOR_TYPE 지원되는 가속기 유형은 가속기 유형 섹션을 참조하세요.
ZONE 모든 용량은 us-west4-a에 있습니다.
RUNTIME_VERSION v2-alpha-tpuv5-lite를 사용합니다.
SERVICE_ACCOUNT Google Cloud 콘솔 -> IAM -> 서비스 계정에서 찾을 수 있는 서비스 계정의 주소입니다. 예: [email protected]
TPU_NAME 큐에 추가된 리소스 요청이 할당될 때 생성되는 TPU의 사용자 할당 텍스트 ID입니다.
QUEUED_RESOURCE_ID 큐에 추가된 리소스 요청의 사용자 할당 텍스트 ID입니다. 큐에 추가된 리소스에 대한 자세한 내용은 큐에 추가된 리소스 문서를 참조하세요.
QUOTA_TYPE reserved 또는 best-effort일 수 있습니다. 둘 다 지정되지 않으면 Quota_TYPE 기본값은 on-demand입니다. Cloud TPU에서 지원되는 다양한 할당량 유형에 대한 내용은 할당량을 참조하세요.
VALID_UNTIL_DURATION 요청의 유효 기간입니다. 서로 다른 유효한 기간에 대한 자세한 내용은 큐에 추가된 리소스를 참조하세요.

TPU 리소스 만들기

gcloud alpha compute tpus queued-resources create ${QUEUED_RESOURCE_ID} \
   --node-id=${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --accelerator-type=${ACCELERATOR_TYPE} \
   --runtime-version=${RUNTIME_VERSION} \
   --valid-until-duration=${VALID_UNTIL_DURATION} \
   --service-account=${SERVICE_ACCOUNT} \
   --${QUOTA_TYPE}

큐에 추가된 리소스가 성공적으로 생성되면 response 필드 내 상태가 WAITING_FOR_RESOURCES 또는 FAILED입니다. 큐에 추가된 리소스가 WAITING_FOR_RESOURCES 상태이면 큐에 추가된 리소스가 사전 검증을 통과했으며 용량 대기 중인 것입니다. 용량을 사용할 수 있게 되면 요청이 PROVISIONING으로 전환됩니다. WAITING_FOR_RESOURCES 상태라고 해서 할당량이 할당된다고 보장할 수는 없으며 WAITING_FOR_RESOURCES 상태에서 ACTIVE 상태로 변경되는 데 시간이 걸릴 수 있습니다. 큐에 추가된 리소스가 FAILED 상태이면 실패 이유가 출력에 표시됩니다. --valid-until-duration에 요청이 입력되지 않으면 요청이 만료되고 상태는 'FAILED'가 됩니다.

큐에 추가된 리소스가 ACTIVE 상태가 되면 SSH를 사용하여 TPU VM에 액세스할 수 있습니다.

[list](/tpu/docs/managing-tpus-tpu-vm) 또는 [describe](/tpu/docs/managing-tpus-tpu-vm) 명령어를 사용하여 큐에 추가된 리소스의 상태를 쿼리합니다.

gcloud compute tpus queued-resources describe ${QUEUED_RESOURCE_ID} \
   --project=${PROJECT_ID} \
   --zone=${ZONE}

상태는 큐에 추가된 리소스의 상태를 나타냅니다. 상태는 다음과 같이 정의됩니다.

상태 Description(설명)
WAITING_FOR_RESOURCES 큐에 추가된 리소스 create 명령어가 수신되었으며 용량을 사용할 수 있게 되는 즉시 프로비저닝을 시작합니다.
PROVISIONING TPU 슬라이스를 프로비저닝하는 중입니다.
ACTIVE 모든 TPU가 프로비저닝되었으며 이제 사용할 수 있습니다. 시작 스크립트가 제공되면 큐에 추가된 리소스 상태가 ACTIVE로 전환될 때 모든 TPU에서 실행이 시작됩니다.
FAILED 슬라이스를 프로비저닝할 수 없습니다.
SUSPENDING 슬라이스 하나 이상을 삭제하고 있습니다.
SUSPENDED 모든 기본 슬라이스가 삭제되지만 큐에 추가된 리소스는 명시적으로 삭제될 때까지 그대로 유지됩니다. 현재 큐에 추가된 사용 중지된 리소스는 재개할 수 없으므로 삭제해야 합니다.
DELETING 큐에 추가된 리소스가 삭제되는 중입니다.

SSH를 사용하여 TPU VM에 연결

다음 섹션에서는 TPU 슬라이스의 각 TPU VM에 바이너리를 설치하고 코드를 실행하는 방법을 설명합니다. 이 컨텍스트에서 TPU VM은 작업자라고도 합니다.

VM 유형 섹션을 참조하여 슬라이스가 갖는 VM 수를 결정하세요.

바이너리를 설치하거나 코드를 실행하려면 tpu-vm ssh 명령어를 사용하여 TPU VM에 연결합니다.

gcloud compute tpus tpu-vm ssh ${TPU_NAME}

SSH를 사용하여 특정 TPU VM에 액세스하려면 0부터 시작하는 색인을 따르는 --worker 플래그를 사용합니다.

gcloud compute tpus tpu-vm ssh ${TPU_NAME} --worker=1

칩이 8개를 초과하는 슬라이스 형태이면 슬라이스 하나에 VM이 여러 개 있습니다. 이 경우 --worker=all 플래그를 사용하여 각 TPU VM에 별도로 연결하지 않고도 모든 TPU VM에서 설치를 실행합니다. 예를 들면 다음과 같습니다.

gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker=all \
   --command='pip install "jax[tpu]==0.4.16" -f http://storage.googleapis.com/jax-releases/libtpu_releases.html'

관리

TPU VM을 관리하는 데 사용할 수 있는 모든 명령어는 TPU 관리에 설명되어 있습니다.

프레임워크 설정

이 섹션에서는 TPU v5e에서 JAX 또는 PyTorch를 사용하는 커스텀 모델 학습을 우한 일반적인 설정 프로세스를 설명합니다. TensorFlow 지원은 tpu-vm-tf-2.15.0-pjrttpu-vm-tf-2.15.0-pod-pjrt TPU 런타임 버전에서 제공됩니다.

추론 설정 안내는 v5e 추론 소개를 참조하세요.

JAX 설정

칩이 8개를 초과하는 슬라이스 형태이면 슬라이스 하나에 VM이 여러 개 있습니다. 이 경우 SSH를 사용하여 각각 개별적으로 로그인하지 않고 한 번에 모든 TPU VM에서 설치를 실행하려면 --worker=all 플래그를 사용해야 합니다.

gcloud compute tpus tpu-vm ssh ${TPU_NAME}  \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker=all \
   --command='pip install "jax[tpu]==0.4.16" -f http://storage.googleapis.com/jax-releases/libtpu_releases.html'

다음 명령어를 실행하여 기기 수를 확인할 수 있습니다(여기에 표시된 출력은 v5litepod-16 슬라이스로 생성됨). 이 코드는 JAX에서 Cloud TPU TensorCore를 표시하고 기본 작업을 실행할 수 있는지 확인하여 모든 것이 올바르게 설치되었는지 테스트합니다.

gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker=all \
   --command='python3 -c "import jax; print(jax.device_count()); print(jax.local_device_count())"'

출력은 다음과 비슷하게 표시됩니다.

SSH: Attempting to connect to worker 0...
SSH: Attempting to connect to worker 1...
SSH: Attempting to connect to worker 2...
SSH: Attempting to connect to worker 3...
16
4
16
4
16
4
16
4

jax.device\_count()에서는 지정된 슬라이스의 칩 총개수를 보여줍니다. jax.local\_device\_count()에서는 이 슬라이스에서 단일 VM이 액세스할 수 있는 칩 수를 나타냅니다.

# Check the number of chips in the given slice by summing the count of chips
# from all VMs through the
# jax.local_device_count() API call.
gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker=all \
   --command='python3 -c "import jax; xs=jax.numpy.ones(jax.local_device_count()); print(jax.pmap(lambda x: jax.lax.psum(x, \"i\"), axis_name=\"i\")(xs))"'

출력은 다음과 비슷하게 표시됩니다.

SSH: Attempting to connect to worker 0...
SSH: Attempting to connect to worker 1...
SSH: Attempting to connect to worker 2...
SSH: Attempting to connect to worker 3...
[16. 16. 16. 16.]
[16. 16. 16. 16.]
[16. 16. 16. 16.]
[16. 16. 16. 16.]

이 문서의 JAX 튜토리얼을 통해 JAX를 사용한 v5e 학습을 시작합니다.

PyTorch 설정

v5e는 PJRT 런타임만 지원하며 PyTorch 2.1 이상에서는 모든 TPU 버전의 기본 런타임으로 PJRT를 사용합니다.

이 섹션에서는 모든 작업자에 대해 명령어를 사용하여 PyTorch/XLA와 함께 v5e에서 PJRT 사용을 시작하는 방법을 설명합니다.

종속 항목 설치

gcloud compute tpus tpu-vm ssh ${TPU_NAME}  \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker=all \
   --command='
      sudo apt-get update -y
      sudo apt-get install libomp5 -y
      pip3 install mkl mkl-include
      pip3 install tf-nightly tb-nightly tbp-nightly
      pip3 install numpy
      sudo apt-get install libopenblas-dev -y
      pip3 install torch~=2.1.0 torchvision torch_xla[tpu]~=2.1.0 -f http://storage.googleapis.com/libtpu-releases/index.html
      pip3 install torch_xla[tpu] -f http://storage.googleapis.com/libtpu-releases/index.html'

torch/torch_xla/torchvision에 wheel을 설치하지 못했으며 pkg_resources.extern.packaging.requirements.InvalidRequirement: Expected end or semicolon (after name and no valid version specifier) torch==nightly+20230222와 같은 오류가 표시되면 다음 명령어를 사용하여 버전을 다운그레이드하세요.

pip3 install setuptools==62.1.0

PJRT를 사용하여 스크립트 실행:

unset LD_PRELOAD

다음은 Python 스크립트를 사용하여 v5e VM에서 계산을 수행하는 예시입니다.

gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker all \
   --command='
      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/.local/lib/
      export PJRT_DEVICE=TPU_C_API
      export PT_XLA_DEBUG=0
      export USE_TORCH=ON
      unset LD_PRELOAD
      export TPU_LIBRARY_PATH=$HOME/.local/lib/python3.10/site-packages/libtpu/libtpu.so
      python3 -c "import torch; import torch_xla; import torch_xla.core.xla_model as xm; print(xm.xla_device()); dev = xm.xla_device(); t1 = torch.randn(3,3,device=dev); t2 = torch.randn(3,3,device=dev); print(t1 + t2)"'

그러면 다음과 비슷한 출력이 생성됩니다.

SSH: Attempting to connect to worker 0...
SSH: Attempting to connect to worker 1...
xla:0
tensor([[ 1.8611, -0.3114, -2.4208],
[-1.0731, 0.3422, 3.1445],
[ 0.5743, 0.2379, 1.1105]], device='xla:0')
xla:0
tensor([[ 1.8611, -0.3114, -2.4208],
[-1.0731, 0.3422, 3.1445],
[ 0.5743, 0.2379, 1.1105]], device='xla:0')

이 문서의 PyTorch 튜토리얼을 통해 PyTorch를 사용한 v5e 학습을 시작합니다.

세션이 끝나면 TPU와 큐에 추가된 리소스를 삭제합니다. 큐에 추가된 리소스를 삭제하려면 슬라이스를 삭제한 후 큐에 추가된 2단계의 리소스를 삭제합니다.

gcloud compute tpus tpu-vm delete ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet

gcloud compute tpus queued-resources delete ${QUEUED_RESOURCE_ID} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet

이 두 단계를 사용하여 FAILED 상태의 큐에 추가된 리소스 요청을 삭제할 수도 있습니다.

모니터링 및 프로파일링

Cloud TPU v5e는 이전 세대의 Cloud TPU와 동일한 메서드를 사용하여 모니터링 및 프로파일링을 지원합니다. Cloud TPU 도구로 모델 프로파일링을 읽고 프로파일링에 대해 알아보고 Cloud TPU VM 모니터링을 읽고 모니터링에 대해 자세히 알아보세요.

JAX/FLAX 예시

v5e에서 ImageNet 학습

이 튜토리얼에서는 가짜 입력 데이터를 사용하여 v5e에서 ImageNet을 학습시키는 방법을 설명합니다. 실제 데이터를 사용하려면 GitHub의 리드미 파일을 참조하세요.

설정

  1. 환경 변수를 만듭니다.

    export PROJECT_ID=your_project_ID
    export ACCELERATOR_TYPE=v5litepod-16
    export ZONE=us-west4-a
    export RUNTIME_VERSION=v2-alpha-tpuv5-lite
    export SERVICE_ACCOUNT=your_service_account
    export TPU_NAME=your_tpu_name
    export QUEUED_RESOURCE_ID=your_queued_resource_id
    export QUOTA_TYPE=quota_type
    export VALID_UNTIL_DURATION=1d
    
  2. TPU 리소스를 만듭니다.

    gcloud alpha compute tpus queued-resources create ${QUEUED_RESOURCE_ID} \
       --node-id=${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --accelerator-type=${ACCELERATOR_TYPE} \
       --runtime-version=${RUNTIME_VERSION} \
       --valid-until-duration=${VALID_UNTIL_DURATION} \
       --service-account=${SERVICE_ACCOUNT} \
       --${QUOTA_TYPE}
    

    큐에 추가된 리소스가 ACTIVE 상태가 되면 TPU VM에 SSH를 통해 연결할 수 있습니다.

    gcloud compute tpus queued-resources describe ${QUEUED_RESOURCE_ID}  \
       --project=${PROJECT_ID} \
       --zone=${ZONE}
    

    QueuedResource가 ACTIVE 상태이면 출력이 다음과 비슷하게 표시됩니다.

     state: ACTIVE
    
  3. 최신 버전의 JAX 및 jaxlib를 설치합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='pip install "jax[tpu]==0.4.16" -f http://storage.googleapis.com/jax-releases/libtpu_releases.html'
    
  4. ImageNet 모델을 클론하고 해당 요구사항을 설치합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='git clone http://github.com/google/flax.git && cd flax/examples/imagenet && pip install -r requirements.txt && pip install flax==0.7.4'
    
  5. 가짜 데이터를 생성하기 위해 모델은 데이터 세트의 측정기준에 대한 정보가 필요합니다. 이는 ImageNet 데이터 세트의 메타데이터에서 수집할 수 있습니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} --project=${PROJECT_ID} --zone=${ZONE} --worker=all --command='mkdir -p $HOME/flax/.tfds/metadata/imagenet2012/5.1.0 && curl http://raw.githubusercontent.com/tensorflow/datasets/v4.4.0/tensorflow_datasets/testing/metadata/imagenet2012/5.1.0/dataset_info.json --output $HOME/flax/.tfds/metadata/imagenet2012/5.1.0/dataset_info.json'
    

모델 학습

이전 단계가 모두 완료되면 모델을 훈련할 수 있습니다.

gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker=all \
   --command='cd flax/examples/imagenet && JAX_PLATFORMS=tpu python3 imagenet_fake_data_benchmark.py'

TPU 및 큐에 추가된 리소스 삭제

세션이 끝나면 TPU와 큐에 추가된 리소스를 삭제합니다.

gcloud compute tpus tpu-vm delete ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet
gcloud compute tpus queued-resources delete ${QUEUED_RESOURCE_ID} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet

Hugging Face FLAX 모델

FLAX에 구현된 Hugging Face 모델은 Cloud TPU v5e에서 바로 사용할 수 있습니다. 이 섹션에서는 인기 모델을 실행하기 위한 안내를 제공합니다.

Imagenette에서 ViT 학습

이 튜토리얼에서는 Cloud TPU v5e에서 Fast AI imagenette 데이터 세트를 사용하여 HuggingFace에서 Vision Transformer(ViT) 모델을 학습시키는 방법을 보여줍니다.

ViT 모델은 컨볼루셔널 네트워크 보다 뛰어난 결과로 ImageNet에서 Transformer 인코더를 성공적으로 학습시킨 첫 번째 모델입니다. 자세한 내용은 다음 리소스를 참조하세요.

설정

  1. 환경 변수를 만듭니다.

    export PROJECT_ID=your_project_ID
    export ACCELERATOR_TYPE=v5litepod-16
    export ZONE=us-west4-a
    export RUNTIME_VERSION=v2-alpha-tpuv5-lite
    export SERVICE_ACCOUNT=your_service_account
    export TPU_NAME=your_tpu_name
    export QUEUED_RESOURCE_ID=your_queued_resource_id
    export QUOTA_TYPE=quota_type
    export VALID_UNTIL_DURATION=1d
    
  2. TPU 리소스를 만듭니다.

    gcloud alpha compute tpus queued-resources create ${QUEUED_RESOURCE_ID} \
       --node-id=${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --accelerator-type=${ACCELERATOR_TYPE} \
       --runtime-version=${RUNTIME_VERSION} \
       --valid-until-duration=${VALID_UNTIL_DURATION} \
       --service-account=${SERVICE_ACCOUNT} \
       --${QUOTA_TYPE}
    

    큐에 추가된 리소스가 ACTIVE 상태가 되면 TPU VM에 SSH를 통해 연결할 수 있습니다.

    gcloud compute tpus queued-resources describe ${QUEUED_RESOURCE_ID}  \
       --project=${PROJECT_ID} \
       --zone=${ZONE}
    

    큐에 추가된 리소스가 ACTIVE 상태이면 출력이 다음과 비슷하게 표시됩니다.

     state: ACTIVE
    
  3. JAX 및 해당 라이브러리를 설치합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='pip install "jax[tpu]==0.4.16" -f http://storage.googleapis.com/jax-releases/libtpu_releases.html'
    
  4. 다음과 같이 Hugging Face 저장소를 다운로드하고 요구사항을 설치합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='git clone http://github.com/huggingface/transformers.git && cd transformers && pip install . && pip install -r examples/flax/_tests_requirements.txt && pip install --upgrade huggingface-hub urllib3 zipp && pip install tensorflow==2.16.1 && pip install -r examples/flax/vision/requirements.txt'
    
  5. Imagenette 데이터 세트를 다운로드합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='cd transformers && wget http://s3.amaz888onaws.com.fqhub.com/fast-ai-imageclas/imagenette2.tgz && tar -xvzf imagenette2.tgz'
    

모델 학습

4GB의 사전 매핑된 버퍼로 모델을 학습시킵니다.

gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker=all \
   --command='cd transformers && JAX_PLATFORMS=tpu python3 examples/flax/vision/run_image_classification.py --train_dir "imagenette2/train" --validation_dir "imagenette2/val" --output_dir "./vit-imagenette" --learning_rate 1e-3 --preprocessing_num_workers 32 --per_device_train_batch_size 8 --per_device_eval_batch_size 8 --model_name_or_path google/vit-base-patch16-224-in21k --num_train_epochs 3'

TPU 및 큐에 추가된 리소스 삭제

세션이 끝나면 TPU와 큐에 추가된 리소스를 삭제하세요.

gcloud compute tpus tpu-vm delete ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet

gcloud compute tpus queued-resources delete ${QUEUED_RESOURCE_ID} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet

ViT 벤치마킹 결과

학습 스크립트는 v5litepod-4, v5litepod-16, v5litepod-64에서 실행되었습니다. 다음 표에서는 다양한 가속기 유형의 처리량을 보여줍니다.

가속기 유형 v5litepod-4 v5litepod-16 v5litepod-64
세대 3 3 3
전역 배치 크기 32 128 512
처리량(예시/초) 263.40 429.34 470.71

Pokémon에서 확산 학습

이 튜토리얼에서는 Cloud TPU v5e에서 Pokémon 데이터 세트를 사용하여 HuggingFace에서 안정적인 확산 모델을 학습시키는 방법을 보여줍니다.

안정적인 확산 모델은 모든 텍스트 입력에서 실사 이미지를 생성하는 잠재 텍스트 이미지 변환 모델입니다. 자세한 내용은 다음 리소스를 참조하세요.

설정

  1. 환경 변수를 만듭니다.

    export PROJECT_ID=your_project_ID
    export ACCELERATOR_TYPE=v5litepod-16
    export ZONE=us-west4-a
    export RUNTIME_VERSION=v2-alpha-tpuv5-lite
    export SERVICE_ACCOUNT=your_service_account
    export TPU_NAME=your_tpu_name
    export QUEUED_RESOURCE_ID=queued_resource_id
    export QUOTA_TYPE=quota_type
    export VALID_UNTIL_DURATION=1d
    
  2. TPU 리소스를 만듭니다.

    gcloud alpha compute tpus queued-resources create ${QUEUED_RESOURCE_ID} \
       --node-id=${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --accelerator-type=${ACCELERATOR_TYPE} \
       --runtime-version=${RUNTIME_VERSION} \
       --valid-until-duration=${VALID_UNTIL_DURATION} \
       --service-account=${SERVICE_ACCOUNT} \
       --${QUOTA_TYPE}
    

    큐에 추가된 리소스가 ACTIVE 상태가 되면 TPU VM에 SSH를 통해 연결할 수 있습니다.

    gcloud compute tpus queued-resources describe ${QUEUED_RESOURCE_ID}  \
       --project=${PROJECT_ID} \
       --zone=${ZONE}
    

    큐에 추가된 리소스가 ACTIVE 상태이면 출력이 다음과 비슷하게 표시됩니다.

     state: ACTIVE
    
  3. JAX 및 해당 라이브러리를 설치합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='pip install "jax[tpu]==0.4.16" -f http://storage.googleapis.com/jax-releases/libtpu_releases.html'
    
  4. HuggingFace 저장소를 다운로드하고 요구사항을 설치합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='git clone http://github.com/RissyRan/diffusers.git && cd diffusers && pip install . && pip install tensorflow==2.16.1 clu && pip install -U -r examples/text_to_image/requirements_flax.txt'
    

모델 학습

4GB의 사전 매핑된 버퍼를 사용하여 모델을 학습시킵니다.

gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker=all \
   --command='cd diffusers/examples/text_to_image && JAX_PLATFORMS=tpu,cpu python3 train_text_to_image_flax.py --pretrained_model_name_or_path=duongna/stable-diffusion-v1-4-flax --dataset_name=lambdalabs/pokemon-blip-captions --resolution=128 --center_crop --random_flip --train_batch_size=4 --mixed_precision=fp16 --max_train_steps=1500 --learning_rate=1e-05 --max_grad_norm=1 --output_dir=sd-pokemon-model'

TPU 및 큐에 추가된 리소스 삭제

세션이 끝나면 TPU와 큐에 추가된 리소스를 삭제합니다.

gcloud compute tpus tpu-vm delete ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet

gcloud compute tpus queued-resources delete ${QUEUED_RESOURCE_ID} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet

확산 벤치마킹 결과

학습 스크립트는 v5litepod-4, v5litepod-16, v5litepod-64에서 실행되었습니다. 다음 표에서는 처리량을 보여줍니다.

가속기 유형 v5litepod-4 v5litepod-16 v5litepod-64
학습 단계 1500 1500 1500
전역 배치 크기 32 64 128
처리량(예시/초) 36.53 43.71 49.36

OSCAR 데이터 세트에서 GPT2 학습

이 튜토리얼에서는 Cloud TPU v5e에서 OSCAR 데이터 세트를 사용하여 HuggingFace에서 GPT2 모델을 학습시키는 방법을 보여줍니다.

GPT2는 원시 텍스트에서 수동 라벨링 없이 사전 학습된 변환기 모델입니다. 문장에서 다음 단어를 예측하도록 학습되었습니다. 자세한 내용은 다음 리소스를 참조하세요.

설정

  1. 환경 변수를 만듭니다.

    export PROJECT_ID=your_project_ID
    export ACCELERATOR_TYPE=v5litepod-16
    export ZONE=us-west4-a
    export RUNTIME_VERSION=v2-alpha-tpuv5-lite
    export SERVICE_ACCOUNT=your_service_account
    export TPU_NAME=your_tpu_name
    export QUEUED_RESOURCE_ID=queued_resource_id
    export QUOTA_TYPE=quota_type
    export VALID_UNTIL_DURATION=1d
    
  2. TPU 리소스를 만듭니다.

    gcloud alpha compute tpus queued-resources create ${QUEUED_RESOURCE_ID} \
       --node-id=${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --accelerator-type=${ACCELERATOR_TYPE} \
       --runtime-version=${RUNTIME_VERSION} \
       --valid-until-duration=${VALID_UNTIL_DURATION} \
       --service-account=${SERVICE_ACCOUNT} \
       --${QUOTA_TYPE}
    

    큐에 추가된 리소스가 ACTIVE 상태가 되면 TPU VM에 SSH를 통해 연결할 수 있습니다.

    gcloud compute tpus queued-resources describe ${QUEUED_RESOURCE_ID} \
       --project=${PROJECT_ID} \
       --zone=${ZONE}
    

    큐에 추가된 리소스가 ACTIVE 상태이면 출력이 다음과 비슷하게 표시됩니다.

     state: ACTIVE
    
  3. JAX 및 해당 라이브러리를 설치합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='pip install "jax[tpu]==0.4.16" -f http://storage.googleapis.com/jax-releases/libtpu_releases.html'
    
  4. HuggingFace 저장소를 다운로드하고 요구사항을 설치합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='git clone http://github.com/huggingface/transformers.git && cd transformers && pip install . && pip install -r examples/flax/_tests_requirements.txt && pip install --upgrade huggingface-hub urllib3 zipp && pip install tensorflow && pip install -r examples/flax/language-modeling/requirements.txt'
    
  5. 모델 학습을 위한 구성을 다운로드합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='cd transformers/examples/flax/language-modeling && gsutil cp -r gs://cloud-tpu-tpuvm-artifacts/v5litepod-preview/jax/gpt .'
    

모델 학습

4GB의 사전 매핑된 버퍼로 모델을 학습시킵니다.

gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker=all \
   --command='cd transformers/examples/flax/language-modeling && TPU_PREMAPPED_BUFFER_SIZE=4294967296 JAX_PLATFORMS=tpu python3 run_clm_flax.py --output_dir=./gpt --model_type=gpt2 --config_name=./gpt --tokenizer_name=./gpt --dataset_name=oscar --dataset_config_name=unshuffled_deduplicated_no --do_train --do_eval --block_size=512 --per_device_train_batch_size=4 --per_device_eval_batch_size=4 --learning_rate=5e-3 --warmup_steps=1000 --adam_beta1=0.9 --adam_beta2=0.98 --weight_decay=0.01 --overwrite_output_dir --num_train_epochs=3 --logging_steps=500 --eval_steps=2500'

TPU 및 큐에 추가된 리소스 삭제

세션이 끝나면 TPU와 큐에 추가된 리소스를 삭제하세요.

gcloud compute tpus tpu-vm delete ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet

gcloud compute tpus queued-resources delete ${QUEUED_RESOURCE_ID} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet

GPT2 벤치마킹 결과

학습 스크립트는 v5litepod-4, v5litepod-16, v5litepod-64에서 실행되었습니다. 다음 표에서는 처리량을 보여줍니다.

v5litepod-4 v5litepod-16 v5litepod-64
세대 3 3 3
전역 배치 크기 64 64 64
처리량(예시/초) 74.60 72.97 72.62

PyTorch/XLA

PJRT 런타임을 사용하여 ResNet 학습

PyTorch/XLA는 XRT에서 PjRt로 PyTorch 2.0 이상에서 마이그레이션됩니다. 다음은 PyTorch/XLA 학습 워크로드용 v5e 설정을 위한 업데이트된 안내입니다.

설정
  1. 환경 변수를 만듭니다.

    export PROJECT_ID=your_project_ID
    export ACCELERATOR_TYPE=v5litepod-16
    export ZONE=us-west4-a
    export RUNTIME_VERSION=v2-alpha-tpuv5-lite
    export SERVICE_ACCOUNT=your_service_account
    export TPU_NAME=tpu-name
    export QUEUED_RESOURCE_ID=queued_resource_id
    export QUOTA_TYPE=quota_type
    export VALID_UNTIL_DURATION=1d
    
  2. TPU 리소스를 만듭니다.

    gcloud alpha compute tpus queued-resources create ${QUEUED_RESOURCE_ID} \
       --node-id=${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --accelerator-type=${ACCELERATOR_TYPE} \
       --runtime-version=${RUNTIME_VERSION} \
       --valid-until-duration=${VALID_UNTIL_DURATION} \
       --service-account=${SERVICE_ACCOUNT} \
       --{QUOTA_TYPE}
    

    QueuedResource가 ACTIVE 상태가 되면 TPU VM에 SSH를 통해 연결할 수 있습니다.

    gcloud compute tpus queued-resources describe ${QUEUED_RESOURCE_ID} \
       --project=${PROJECT_ID} \
       --zone=${ZONE}
    

    큐에 추가된 리소스가 ACTIVE 상태이면 출력이 다음과 비슷하게 표시됩니다.

     state: ACTIVE
    
  3. Torch/XLA 관련 종속 항목 설치

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='
          sudo apt-get update -y
          sudo apt-get install libomp5 -y
          pip3 install mkl mkl-include
          pip3 install tf-nightly tb-nightly tbp-nightly
          pip3 install numpy
          sudo apt-get install libopenblas-dev -y
          pip3 install torch~=2.1.0 torchvision torch_xla[tpu]~=2.1.0 -f http://storage.googleapis.com/libtpu-releases/index.html
          pip3 install torch_xla[tpu] -f http://storage.googleapis.com/libtpu-releases/index.html'
    
ResNet 모델 학습
gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker=all \
   --command='
      date
      export PJRT_DEVICE=TPU_C_API
      export PT_XLA_DEBUG=0
      export USE_TORCH=ON
      export XLA_USE_BF16=1
      export LIBTPU_INIT_ARGS=--xla_jf_auto_cross_replica_sharding
      export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
      export TPU_LIBRARY_PATH=$HOME/.local/lib/python3.10/site-packages/libtpu/libtpu.so
      git clone http://github.com/pytorch/xla.git
      cd xla/
      git reset --hard caf5168785c081cd7eb60b49fe4fffeb894c39d9
      python3 test/test_train_mp_imagenet.py --model=resnet50  --fake_data --num_epochs=1 —num_workers=16  --log_steps=300 --batch_size=64 --profile'

TPU 및 큐에 추가된 리소스 삭제

세션이 끝나면 TPU와 큐에 추가된 리소스를 삭제하세요.

gcloud compute tpus tpu-vm delete ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet

gcloud compute tpus queued-resources delete ${QUEUED_RESOURCE_ID} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet
벤치마크 결과

다음 표는 벤치마크 처리량을 보여줍니다.

가속기 유형 처리량(예시/초)
v5litepod-4 4240ex/s
v5litepod-16 10,810ex/s
v5litepod-64 46,154ex/s

v5e에서 GPT2 학습

이 튜토리얼에서는 wikitext 데이터 세트를 사용하여 PyTorch/XLA에서 HuggingFace 저장소를 사용하여 v5e에서 GPT2를 실행하는 방법을 다룹니다.

설정

  1. 환경 변수를 만듭니다.

    export PROJECT_ID=your_project_ID
    export ACCELERATOR_TYPE=v5litepod-16
    export ZONE=us-west4-a
    export RUNTIME_VERSION=v2-alpha-tpuv5-lite
    export SERVICE_ACCOUNT=your_service_account
    export TPU_NAME=your_tpu_name
    export QUEUED_RESOURCE_ID=queued_resource_id
    export QUOTA_TYPE=quota_type
    export VALID_UNTIL_DURATION=1d
    
  2. TPU 리소스를 만듭니다.

    gcloud alpha compute tpus queued-resources create ${QUEUED_RESOURCE_ID} \
       --node-id=${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --accelerator-type=${ACCELERATOR_TYPE} \
       --runtime-version=${RUNTIME_VERSION} \
       --valid-until-duration=${VALID_UNTIL_DURATION} \
       --service-account=${SERVICE_ACCOUNT} \
       --${QUOTA_TYPE}
    

    QueuedResource가 ACTIVE 상태가 되면 TPU VM에 SSH를 통해 연결할 수 있습니다.

    gcloud compute tpus queued-resources describe ${QUEUED_RESOURCE_ID} \
       --project=${PROJECT_ID} \
       --zone=${ZONE}
    

    큐에 추가된 리소스가 ACTIVE 상태이면 출력이 다음과 비슷하게 표시됩니다.

    state: ACTIVE
    
  3. torch/xla 종속 항목을 설치합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='
          sudo apt-get -y update
          sudo apt install -y libopenblas-base
          pip3 install torchvision
          pip3 uninstall -y torch
          pip3 install torch~=2.1.0 torchvision torch_xla[tpu]~=2.1.0 -f http://storage.googleapis.com/libtpu-releases/index.html
          pip3 install torch_xla[tpu] -f http://storage.googleapis.com/libtpu-releases/index.html'
    
  4. HuggingFace 저장소를 다운로드하고 요구사항을 설치합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='
          git clone http://github.com/pytorch/xla.git
          pip install --upgrade accelerate
          git clone http://github.com/huggingface/transformers.git
          cd transformers
          git checkout ebdb185befaa821304d461ed6aa20a17e4dc3aa2
          pip install .
          git log -1
          pip install datasets evaluate scikit-learn
          '
    
  5. 선행 학습된 모델의 구성을 다운로드합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command='
          gsutil cp -r gs://cloud-tpu-tpuvm-artifacts/config/xl-ml-test/pytorch/gpt2/my_config_2.json transformers/examples/pytorch/language-modeling/
          gsutil cp gs://cloud-tpu-tpuvm-artifacts/config/xl-ml-test/pytorch/gpt2/fsdp_config.json transformers/examples/pytorch/language-modeling/'
    

모델 학습

16의 배치 크기를 사용하여 2B 모델을 학습시킵니다.

gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker=all \
   --command='
      export PJRT_DEVICE=TPU_C_API
      cd transformers/
      export LD_LIBRARY_PATH=/usr/local/lib/
      export PT_XLA_DEBUG=0
      export USE_TORCH=ON
      python3 examples/pytorch/xla_spawn.py \
         --num_cores=4 \
         examples/pytorch/language-modeling/run_clm.py \
         --num_train_epochs=3 \
         --dataset_name=wikitext \
         --dataset_config_name=wikitext-2-raw-v1 \
         --per_device_train_batch_size=16 \
         --per_device_eval_batch_size=16 \
         --do_train \
         --do_eval \
         --logging_dir=./tensorboard-metrics \
         --cache_dir=./cache_dir \
         --output_dir=/tmp/test-clm \
         --overwrite_output_dir \
         --cache_dir=/tmp \
         --config_name=examples/pytorch/language-modeling/my_config_2.json \
         --tokenizer_name=gpt2 \
         --block_size=1024 \
         --optim=adafactor \
         --adafactor=true \
         --save_strategy=no \
         --logging_strategy=no \
         --fsdp=full_shard \
         --fsdp_config=examples/pytorch/language-modeling/fsdp_config.json'

TPU 및 큐에 추가된 리소스 삭제

세션이 끝나면 TPU와 큐에 추가된 리소스를 삭제하세요.

gcloud compute tpus tpu-vm delete ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet

gcloud compute tpus queued-resources delete ${QUEUED_RESOURCE_ID} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --quiet

벤치마크 결과

학습 스크립트는 v5litepod-4, v5litepod-16, v5litepod-64에서 실행되었습니다. 다음 표에서는 다양한 가속기 유형의 벤치마크 처리량을 보여줍니다.

v5litepod-4 v5litepod-16 v5litepod-64
세대 3 3 3
config 600M 2B 16B
전역 배치 크기 64 128 256
처리량(예시/초) 66 77 31

v5e에서 ViT 학습

이 튜토리얼에서는 cifar10 데이터 세트에서 PyTorch/XLA의 HuggingFace 저장소를 사용하여 v5e에서 VIT를 실행하는 방법을 설명합니다.

설정

  1. 환경 변수를 만듭니다.

    export PROJECT_ID=your_project_ID
    export ACCELERATOR_TYPE=v5litepod-16
    export ZONE=us-west4-a
    export RUNTIME_VERSION=v2-alpha-tpuv5-lite
    export SERVICE_ACCOUNT=your_service_account
    export TPU_NAME=tpu-name
    export QUEUED_RESOURCE_ID=queued_resource_id
    export QUOTA_TYPE=quota_type
    export VALID_UNTIL_DURATION=1d
    
  2. TPU 리소스를 만듭니다.

    gcloud alpha compute tpus queued-resources create ${QUEUED_RESOURCE_ID} \
       --node-id=${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --accelerator-type=${ACCELERATOR_TYPE} \
       --runtime-version=${RUNTIME_VERSION} \
       --valid-until-duration=${VALID_UNTIL_DURATION} \
       --service-account=${SERVICE_ACCOUNT} \
       --${QUOTA_TYPE}
    

    QueuedResource가 ACTIVE 상태가 되면 TPU VM에 SSH를 통해 연결할 수 있습니다.

     gcloud compute tpus queued-resources describe ${QUEUED_RESOURCE_ID} \
       --project=${PROJECT_ID} \
       --zone=${ZONE}
    

    큐에 추가된 리소스가 ACTIVE 상태이면 출력이 다음과 비슷하게 표시됩니다.

     state: ACTIVE
    
  3. torch/xla 종속 항목을 설치합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all
       --command='
          sudo apt-get update -y
          sudo apt-get install libomp5 -y
          pip3 install mkl mkl-include
          pip3 install tf-nightly tb-nightly tbp-nightly
          pip3 install numpy
          sudo apt-get install libopenblas-dev -y
          pip3 install torch~=2.1.0 torchvision torch_xla[tpu]~=2.1.0 -f http://storage.googleapis.com/libtpu-releases/index.html
          pip3 install torch_xla[tpu] -f http://storage.googleapis.com/libtpu-releases/index.html'
    
  4. HuggingFace 저장소를 다운로드하고 요구사항을 설치합니다.

       gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --worker=all \
       --command="
          git clone http://github.com/suexu1025/transformers.git vittransformers; \
          cd vittransformers; \
          pip3 install .; \
          pip3 install datasets; \
          wget http://github.com/pytorch/xla/blob/master/scripts/capture_profile.py"
    

모델 학습

gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
   --project=${PROJECT_ID} \
   --zone=${ZONE} \
   --worker=all \
   --command='
      export PJRT_DEVICE=TPU_C_API
      export PT_XLA_DEBUG=0
      export USE_TORCH=ON
      export TF_CPP_MIN_LOG_LEVEL=0
      export XLA_USE_BF16=1
      export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
      export TPU_LIBRARY_PATH=$HOME/.local/lib/python3.10/site-packages/libtpu/libtpu.so
      cd vittransformers
      python3 -u examples/pytorch/xla_spawn.py --num_cores 4 examples/pytorch/image-pretraining/run_mae.py --dataset_name=cifar10 \
      --remove_unused_columns=False \
      --label_names=pixel_values \
      --mask_ratio=0.75 \
      --norm_pix_loss=True \
      --do_train=true \
      --do_eval=true \
      --base_learning_rate=1.5e-4 \
      --lr_scheduler_type=cosine \
      --weight_decay=0.05 \
      --num_train_epochs=3 \
      --warmup_ratio=0.05 \
      --per_device_train_batch_size=8 \
      --per_device_eval_batch_size=8 \
      --logging_strategy=steps \
      --logging_steps=30 \
      --evaluation_strategy=epoch \
      --save_strategy=epoch \
      --load_best_model_at_end=True \
      --save_total_limit=3 \
      --seed=1337 \
      --output_dir=MAE \
      --overwrite_output_dir=true \
      --logging_dir=./tensorboard-metrics \
      --tpu_metrics_debug=true'

TPU 및 큐에 추가된 리소스 삭제

세션이 끝나면 TPU와 큐에 추가된 리소스를 삭제하세요.

gcloud compute tpus tpu-vm delete ${TPU_NAME}
   --project=${PROJECT_ID}
   --zone=${ZONE}
   --quiet

gcloud compute tpus queued-resources delete ${QUEUED_RESOURCE_ID}
   --project=${PROJECT_ID}
   --zone=${ZONE}
   --quiet

벤치마크 결과

다음 표에는 다양한 가속기 유형의 벤치마크 처리량이 나와 있습니다.

v5litepod-4 v5litepod-16 v5litepod-64
세대 3 3 3
전역 배치 크기 32 128 512
처리량(예시/초) 201 657 2,844

TensorFlow 2.x

단일 호스트 v5e에서 Resnet 학습

이 튜토리얼에서는 가짜 데이터 세트를 사용하여 v5litepod-4 또는 v5litepod-8에서 ImageNet을 학습시키는 방법을 설명합니다. 다른 데이터 세트를 사용하려면 데이터 세트 준비를 참조하세요.

설정

  1. 환경 변수를 만듭니다.

    export PROJECT_ID=your-project-ID
    export ACCELERATOR_TYPE=v5litepod-4
    export ZONE=us-east1-c
    export RUNTIME_VERSION=tpu-vm-tf-2.15.0-pjrt
    export TPU_NAME=your-tpu-name
    export QUEUED_RESOURCE_ID=your-queued-resource-id
    export QUOTA_TYPE=quota-type
    

    ACCELERATOR_TYPEv5litepod-4 또는 v5litepod-8일 수 있습니다. /

  2. TPU 리소스를 만듭니다.

    gcloud alpha compute tpus queued-resources create ${QUEUED_RESOURCE_ID} \
       --node-id=${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --accelerator-type=${ACCELERATOR_TYPE} \
       --runtime-version=${RUNTIME_VERSION} \
       --${QUOTA_TYPE}
    

    큐에 추가된 리소스가 ACTIVE 상태가 되면 TPU VM에 SSH를 통해 연결할 수 있습니다. 큐에 추가된 리소스 상태를 확인하려면 다음 명령어를 사용하세요.

    gcloud compute tpus queued-resources describe ${QUEUED_RESOURCE_ID} \
       --project=${PROJECT_ID} \
       --zone=${ZONE}
    
  3. SSH를 사용하여 TPU에 연결합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME}  \
       --project=${PROJECT_ID} \
       --zone=${ZONE}
    
  4. 몇 가지 환경 변수를 설정합니다.

    export MODELS_REPO=/usr/share/tpu/models
    export PYTHONPATH="${MODELS_REPO}:${PYTHONPATH}"
    export MODEL_DIR=gcp-directory-to-store-model
    export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet
    export NEXT_PLUGGABLE_DEVICE_USE_C_API=true
    export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
    
  5. 모델 저장소 디렉터리로 변경하고 요구사항을 설치합니다.

    cd ${MODELS_REPO} && git checkout r2.15.0
    pip install -r official/requirements.txt
    

모델 학습

학습 스크립트를 실행합니다.

python3 official/vision/train.py \
   --tpu=local \
   --experiment=resnet_imagenet \
   --mode=train_and_eval \
   --config_file=official/vision/configs/experiments/image_classification/imagenet_resnet50_tpu.yaml \
   --model_dir=${MODEL_DIR} \
   --params_override="runtime.distribution_strategy=tpu,task.train_data.input_path=${DATA_DIR}/train*,task.validation_data.input_path=${DATA_DIR}/validation*,task.train_data.global_batch_size=2048,task.validation_data.global_batch_size=2048,trainer.train_steps=100"

TPU 및 큐에 추가된 리소스 삭제

  1. TPU를 삭제합니다.

    gcloud compute tpus tpu-vm delete ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --quiet
    
  2. 큐에 추가된 리소스 요청을 삭제합니다.

    gcloud compute tpus queued-resources delete ${QUEUED_RESOURCE_ID} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --quiet
    

멀티 호스트 v5e에서 Resnet 학습

이 튜토리얼에서는 가짜 데이터 세트를 사용하여 v5litepod-16 이상에서 ImageNet을 학습시키는 방법을 설명합니다. 다른 데이터 세트를 사용하려면 데이터 세트 준비를 참조하세요.

  1. 환경 변수를 만듭니다.

    export PROJECT_ID=your_project_ID
    export ACCELERATOR_TYPE=v5litepod-16
    export ZONE=us-east1-c
    export RUNTIME_VERSION=tpu-vm-tf-2.15.0-pod-pjrt
    export TPU_NAME=your_tpu_name
    export QUEUED_RESOURCE_ID=your-queued-resource-id
    export QUOTA_TYPE=quota-type
    

    ACCELERATOR_TYPEv5litepod-16 이상일 수 있습니다.

  2. TPU 리소스를 만듭니다.

    gcloud alpha compute tpus queued-resources create ${QUEUED_RESOURCE_ID} \
       --node-id=${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --accelerator-type=${ACCELERATOR_TYPE} \
       --runtime-version=${RUNTIME_VERSION} \
       --${QUOTA_TYPE}
    

    큐에 추가된 리소스가 ACTIVE 상태가 되면 TPU VM에 SSH를 통해 연결할 수 있습니다. 큐에 추가된 리소스 상태를 확인하려면 다음 명령어를 사용하세요.

    gcloud compute tpus queued-resources describe ${QUEUED_RESOURCE_ID} \
       --project=${PROJECT_ID} \
       --zone=${ZONE}
    
  3. SSH를 사용하여 TPU(작업자 0)에 연결합니다.

    gcloud compute tpus tpu-vm ssh ${TPU_NAME}  \
       --project=${PROJECT_ID} \
       --zone=${ZONE}
    
  4. 몇 가지 환경 변수를 설정합니다.

    export MODELS_REPO=/usr/share/tpu/models
    export PYTHONPATH="${MODELS_REPO}:${PYTHONPATH}"
    export MODEL_DIR=gcp-directory-to-store-model
    export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet
    export TPU_LOAD_LIBRARY=0
    export TPU_NAME=your_tpu_name
    
  5. 모델 저장소 디렉터리로 변경하고 요구사항을 설치합니다.

     cd $MODELS_REPO && git checkout r2.15.0
     pip install -r official/requirements.txt
    

모델 학습

학습 스크립트를 실행합니다.

python3 official/vision/train.py \
   --tpu=${TPU_NAME} \
   --experiment=resnet_imagenet \
   --mode=train_and_eval \
   --model_dir=${MODEL_DIR} \
   --params_override="runtime.distribution_strategy=tpu,task.train_data.input_path=${DATA_DIR}/train*, task.validation_data.input_path=${DATA_DIR}/validation*"

TPU 및 큐에 추가된 리소스 삭제

  1. TPU를 삭제합니다.

    gcloud compute tpus tpu-vm delete ${TPU_NAME} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --quiet
    
  2. 큐에 추가된 리소스 요청을 삭제합니다.

    gcloud compute tpus queued-resources delete ${QUEUED_RESOURCE_ID} \
       --project=${PROJECT_ID} \
       --zone=${ZONE} \
       --quiet