Pathways는 대규모 멀티태스크 희소 활성화 머신러닝 시스템을 만들 수 있도록 설계된 시스템입니다. 처리 요구사항에 따라 다양한 양의 컴퓨팅을 동적으로 할당할 수 있는 기능을 통해 수천 또는 수만 개의 가속기를 사용할 수 있습니다.
Pathways는 단일 JAX 클라이언트가 여러 대규모 TPU 슬라이스에서 워크로드를 조정할 수 있도록 지원하여 대규모 머신러닝 계산을 간소화합니다. TPU 칩 수천 개에 걸쳐 있을 수 있습니다.
Pathways는 Google에서 Gemini와 같은 대규모 모델을 학습시키는 데 내부적으로 사용됩니다. Pathways on Cloud는 Google Cloud 고객에게 동일한 이점을 제공합니다.
시작하기 전에
다음 사항이 필요합니다.
이 문서에서는 일괄, 실시간, 대화형 워크로드에 Google Kubernetes Engine (GKE)에서 Pathways 관리형 TPU를 사용하는 방법을 간략하게 설명합니다. Google Kubernetes Engine의 단일 및 멀티슬라이스 TPU를 포함하여 GKE에서 TPU를 사용하는 데 이미 TPU를 사용하는 데 익숙하고, 멀티슬라이스 TPU에 대한 일반적인 경험이 있다고 가정합니다.
단일 컨트롤러 및 멀티 컨트롤러
기본적으로 여러 기기에서 계산을 관리하고 조정하는 두 가지 방법이 있습니다.
기능 |
단일 컨트롤러 (Pathways) |
멀티 컨트롤러 (JAX 기본값) |
제어 |
단일 제어 지점: 단일 클라이언트 프로그램이 중앙 컨트롤러 역할을 합니다. |
분산 제어: 여러 프로세스가 참여하며 각 프로세스에는 자체 Python 인터프리터 인스턴스가 있습니다. |
보기 |
통합 뷰: 클라이언트는 모든 기기를 단일 통합 시스템으로 봅니다. |
현지화된 뷰: 각 Python 프로세스는 연결된 기기만 봅니다. |
프로그래밍 |
간소화된 프로그래밍: 사용자는 단일 클라이언트와 상호작용하여 시스템이 로컬 가속기가 많은 단일 대형 머신처럼 보이게 합니다. |
SPMD: 주로 SPMD 패러다임을 사용하며 모든 기기에서 동일한 프로그램을 실행해야 합니다. |
유연성 |
비대칭 파이프라인 병렬 처리 및 계산 희소성을 비롯하여 SPMD를 넘어선 더 복잡한 계산 패턴을 지원합니다. |
특히 여러 TPU 슬라이스에서 리소스 관리가 덜 유연할 수 있습니다. |
Pathways 구성요소
다음 섹션에서는 Pathways 아키텍처의 주요 구성요소를 간략하게 설명합니다.
Pathways 리소스 관리자
Pathways 시스템의 중앙 컨트롤 플레인입니다. 모든 가속기 리소스를 관리하고 사용자 작업에 대한 가속기 할당을 조정하는 역할을 합니다. 작업자의 상태를 모니터링하고 작업 예약, 일시중지, 재개를 처리합니다. 오류 및 시스템 상태에 대한 단일 연락처 역할을 합니다. 이 구성요소에는 CPU 리소스만 필요합니다.
Pathways 클라이언트
Pathways 시스템의 진입점 역할을 하는 임시 프레임워크 런타임 (IFRT)의 구현입니다. 프로그램에서 상위 수준 작업 (HLO)을 수신합니다. Pathways 클라이언트는 Pathways 리소스 관리자와 조정하여 사용자 코드를 기반으로 실행할 컴파일된 프로그램을 배치할 위치를 결정합니다. 특정 JAX 클라이언트에 시스템의 통합 뷰를 제공합니다. 이 구성요소에는 CPU 리소스만 필요합니다.
Pathways 작업자
가속기 머신 (TPU VM)에서 실행되는 프로세스입니다. IFRT 프록시 서버에서 프로그램의 컴파일된 실행 파일을 수신하고 TPU에서 계산을 실행합니다. Pathways 작업자는 IFRT 프록시 서버를 통해 데이터를 프로그램으로 다시 전송합니다. 이 구성요소에는 가속기 리소스가 필요합니다.
IFRT 프록시 클라이언트
사용자 코드를 기본 런타임과 분리하고 코드 이식성과 투명성을 개선하는 임시 프레임워크 런타임 (IFRT) API의 OSS 구현입니다. JAX는 이 구현을 기본 멀티 컨트롤러 런타임의 대안으로 사용합니다. IFRT 프록시 클라이언트는 프로그램과 Pathways 구성요소 간의 통신 브리지 역할을 합니다. IFRT 프록시 서버에 요청을 보내고 결과를 수신합니다. IFRT API의 OSS 구현입니다. 이 구성요소에는 CPU 리소스만 필요합니다.
IFRT 프록시 서버
이 gRPC 서버는 IFRT 프록시 클라이언트로부터 요청을 수신하여 실제 작업 배포를 처리하는 Pathways 클라이언트로 전달합니다. 이 구성요소에는 CPU 리소스만 필요합니다.
사이드카 서버
이 gRPC 서버는 가속기 VM에서 Pathways 작업자와 함께 배치되어 가속기 VM에서 사용자 지정 Python 코드를 직접 실행하여 컨트롤러에서 가속기로의 데이터 전송 지연 시간을 줄입니다. 사이드카 서버는 gRPC 전송의 커스텀 버전 관리 프로토콜을 통해 Pathways 작업자와 상호작용합니다.
PathwaysJob API
PathwaysJob API는 ML 학습 및 일괄 추론
워크로드를 배포하는 데 사용하는 OSS
Kubernetes 기본 API입니다. PathwaysJob의 컨트롤러는 JobSet API를 활용하여 모든 Pathways 구성요소의 수명 주기와 조정을 관리합니다. 이 커스텀 리소스 정의 (CRD)는 일반적인 시나리오에서 개별 포드 사양을 직접 관리할 필요성을 추상화하여 Pathways 워크로드를 정의할 수 있는 상위 수준 인터페이스를 제공합니다. 모든 매개변수
와 그 의미에 관한 포괄적인 목록은 GitHub의 PathwaysJob API 문서를 참고하세요.
apiVersion: pathways-job.pathways.domain/v1 kind: PathwaysJob metadata: name: pathways-USER spec: maxRestarts: MAX_RESTARTS pathwaysVersion: jax-JAX_VERSION workers: - type: $(TPU_MACHINE_TYPE) topology: $(TOPOLOGY) numSlices: $(WORKLOAD_NODEPOOL_COUNT) maxSliceRestarts: # Optional customComponents: # This section is completely optional - componentType: proxy_server image: CUSTOM_PROXY_SERVER customFlags: - --flag_name_1=value_1 customEnv: - name: key_1 value: value_1 - componentType: pathways_server image: CUSTOM_PATHWAYS_SERVER customFlags: - --flag_name_1=value_1 customEnv: - name: key_1 value: value_1 - componentType: worker image: CUSTOM_WORKER customFlags: - --flag_name_1=value_1 customEnv: - name: key_1 value: value_1 - componentType: colocated_python_sidecar image: CUSTOM_SIDECAR_IMAGE customFlags: - --flag_name_1=value_1 customEnv: - name: key_1 value: value_1 pathwaysDir: "gs://BUCKET_NAME" # Pre-create this bucket. controller: deploymentMode: default # Default mode deploys pathways cpu resources (resource # manager and proxy server) on a dedicated CPU node, recommended for training elasticSlices: ELASTIC_SLICES template: spec: containers: - name: main image: python:3.11 command: - bash - -c - | pip install pathwaysutils python3 -c 'import pathwaysutils; import jax; pathwaysutils.initialize(); print(jax.devices())'
다음 표에서는 PathwaysJob API의 설정을 설명합니다.
| 속성 | 설명 |
|---|---|
apiVersion |
PathwaysJob 커스텀 리소스 정의 (CRD)의 API 버전을 지정합니다.pathways-job.pathways.domain/v1 |
kind |
Kubernetes 객체를 PathwaysJob으로 식별합니다. |
metadata.name |
Kubernetes의 PathwaysJob 객체 이름으로, 일반적으로 pathways- |
spec |
PathwaysJob의 원하는 상태와 구성을 정의합니다. |
spec.maxRestarts |
오류가 발생할 경우 시스템에서 PathwaysJob을 자동으로 다시 시작할 수 있는 최대 횟수입니다. |
spec.pathwaysVersion |
(선택사항) 이 작업의 Pathways 환경 내에서 사용할 JAX 프레임워크의 원하는 버전을 지정합니다 (예: jax-0.5.3). |
spec.workers |
일반적으로 TPU 리소스를 활용하는 PathwaysJob의 작업자 풀 구성을 정의하는 배열입니다. |
spec.workers[].type |
작업자 노드에 사용할 TPU 머신 유형입니다 (예: $TPU_MACHINE_TYPE은 ct6e-standard-4t일 수 있음). |
spec.workers[].topology |
작업자에게 할당된 TPU 슬라이스의 토폴로지입니다 (예: $TOPOLOGY는 2x2, 4x4, 2x2x2일 수 있음). |
spec.workers[].numSlices |
작업자 풀에 프로비저닝할 TPU 슬라이스 수입니다 (예: $WORKLOAD_NODEPOOL_COUNT는 2일 수 있음). |
spec.workers[].maxSliceRestarts |
(선택사항) 슬라이스 내의 개별 작업자가 실패할 경우 다시 시작할 수 있는 최대 횟수입니다. |
spec.customComponents |
(선택사항) 기본 작업과 함께 커스텀 구성요소 (예: 프록시 서버, Pathways 서버 또는 추가 작업자)를 정의하고 배포할 수 있는 배열입니다. |
spec.customComponents[].componentType |
정의되는 커스텀 구성요소의 유형을 지정합니다 (예: proxy_server, pathways_server, worker, colocated_python_sidecar). |
spec.customComponents[].image |
이 커스텀 구성요소의 컨테이너에 사용할 Docker 이미지입니다. |
spec.customComponents[].customFlags |
컨테이너가 시작될 때 컨테이너에 전달되는 커스텀 명령줄 플래그 배열입니다. |
spec.customComponents[].customEnv |
컨테이너 내에서 설정할 커스텀 환경 변수 배열입니다. 각 요소에는 이름과 값이 있습니다. |
spec.pathwaysDir |
컴파일 아티팩트 및 기타 임시 데이터를 저장하는 데 PathwaysJob에서 사용하는 Cloud Storage 버킷입니다.
이 버킷은 워크로드를 실행하기 전에 만들어야 합니다. |
spec.controller |
전반적인 작업 실행을 관리하는 Pathways 컨트롤러 구성 설정입니다. |
spec.controller.deploymentMode |
Pathways 컨트롤러의 CPU 리소스 (Pathways 리소스 관리자 및 프록시 서버)가 배포되는 방식을 지정합니다. 기본 모드는 전용 CPU 노드에 배포하고 colocate_head_with_workers는 TPU 작업자와 함께 배포합니다. |
spec.controller.elasticSlices |
(선택사항) 작업 실행 중에 비정상으로 간주되기 전에 사용할 수 없게 될 수 있는 최대 TPU 슬라이스 수입니다. |
spec.controller.template |
(선택사항) 사용자 작업의 포드 템플릿을 정의합니다. 일괄 워크로드에는 필요하지만 대화형 워크로드에는 필요하지 않습니다. |
spec.controller.template.spec |
사용자 작업의 포드 사양입니다. |
spec.controller.template.spec.containers |
사용자 작업 내에서 실행될 컨테이너를 정의하는 배열입니다. |
spec.controller.template.spec.containers[].name |
사용자 작업 내 컨테이너의 이름입니다 (이 샘플에서는 main). |
spec.controller.template.spec.containers[].image |
기본 컨테이너의 컨테이너에 사용할 Docker 이미지입니다 (이 샘플에서는 python:3.11). |
spec.controller.template.spec.containers[].command |
기본 컨테이너가 시작될 때 실행할 명령어입니다. 이 샘플에서는 `pathwaysutils`를 설치하고 Pathways를 초기화하며 JAX 기기를 출력합니다. |
GKE의 Pathways 구성요소
이 섹션에서는 Pathways 구성요소를 컨테이너 및 포드와 같은 Google Kubernetes Engine 구성요소에 매핑합니다.
다음 위치에서 Pathways 컨테이너 이미지를 찾을 수 있습니다.
컨테이너 유형 |
위치 |
IFRT 프록시 서버 |
|
Pathways 리소스 관리자/작업자 |
|
Pathways 리소스 관리자
GKE 클러스터를 만든 후 다음 containerSpec을 사용하여 Pathways 리소스 관리자를 배포할 수 있습니다.
- name: pathways-rm image: us-docker.pkg.dev/cloud-tpu-v2-images/pathways/server:latest imagePullPolicy: Always env: - name: HOST_ADDRESS valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/coordinator']" - name: TPU_SKIP_MDS_QUERY value: "true" args: - --server_port=29001 - --node_type=resource_manager - --instance_count=WORKLOAD_NODEPOOL_COUNT - --instance_type=SLICE_TOPOLOGY - --gcs_scratch_location=gs://BUCKET_NAME
인수 설명:
--server_port: Pathways 리소스 관리자는 이 포트를 사용하여 다른 Pathways 구성요소와 통신합니다.--node_type: 노드 유형입니다. Pathways 리소스 관리자의 경우 'resource_manager'로 설정해야 하며 다른 컨테이너에는 필요하지 않습니다.--instance_count: TPU 슬라이스 수입니다.--instance_type: 슬라이스의 TPU 유형 및 토폴로지입니다.tpu{TPU type}:{TPU topology}형식(예:tpuv5e:4x4)입니다.--gcs_scratch_location: 임시 파일에 사용되는 Cloud Storage 버킷입니다.
IFRT 프록시 서버
다음 containerSpec을 사용하여 IFRT 프록시 서버를 배포할 수 있습니다.
- name: pathways-proxy image: us-docker.pkg.dev/cloud-tpu-v2-images/pathways/proxy_server:latest imagePullPolicy: Always env: - name: PATHWAYS_HEAD valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/coordinator']" args: - --resource_manager_address=$(PATHWAYS_HEAD):29001 - --server_port=29000 - --gcs_scratch_location=gs://BUCKET_NAME ports: - containerPort: 29000
인수 설명:
--resource_manager_address: 프록시 서버가 Pathways 리소스 관리자와 통신하는 데 사용하는 호스트 이름과 포트입니다. 포트는 Pathways 리소스 관리자 컨테이너에 사용되는--server_port값과 동일해야 합니다.--server_port: IFRT 프록시 서버는 이 포트를 사용하여 IFRT 프록시 클라이언트와 통신합니다.--gcs_scratch_location: 임시 파일에 사용되는 Cloud Storage 버킷입니다.
Pathways 작업자
다음 containerSpec을 사용하여 Pathways 작업자를 배포할 수 있습니다.
- name: worker image: us-docker.pkg.dev/cloud-tpu-v2-images/pathways/server:latest imagePullPolicy: Always env: - name: PATHWAYS_HEAD valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/coordinator']" - name: MEGASCALE_NUM_SLICES valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/replicatedjob-replicas']" - name: MEGASCALE_SLICE_ID valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/job-index']" - name: MEGASCALE_COORDINATOR_ADDRESS value: "$(PATHWAYS_HEAD)" args: - --server_port=29001 - --resource_manager_address=$(PATHWAYS_HEAD):29001 - --gcs_scratch_location=gs://BUCKET_NAME ports: - containerPort: 29001 resources: limits: google.com/tpu: "4"
인수 설명:
--resource_manager_address: TPU 작업자가 Pathways 리소스 관리자와 통신하는 데 사용하는 호스트 이름과 포트입니다. 포트는 Pathways 리소스 관리자 컨테이너에 사용되는--server_port값과 동일해야 합니다.--server_port: 작업자는 이 포트를 사용하여 프록시 서버 및 Pathways 리소스 관리자와 통신합니다.--gcs_scratch_location: 임시 파일에 사용되는 Cloud Storage 버킷입니다.
Pathways 리소스 관리자, IFRT 프록시 서버, Pathways 작업자는 모두 다른 포트를 가질 수 있지만 이 예에서는 Pathways 리소스 관리자와 Pathways 작업자가 동일한 포트를 공유합니다.
다음 단계
- Pathways로 GKE 클러스터 만들기
- Pathways로 일괄 워크로드 실행
- Pathways를 사용하여 멀티 호스트 추론 실행
- Pathways로 대화형 워크로드 실행
- Pathways를 사용한 복원력 있는 학습
- JAX 워크로드를 Pathways로 포팅
- 클라우드에서 Pathways 문제 해결