Cloud Storage의 PyTorch용 커넥터는 Google에서 지원하는 오픈소스 제품으로, PyTorch와 Cloud Storage를 직접 통합할 수 있습니다.
개요
Connector for PyTorch는 학습의 데이터 로드와 체크포인트 및 모델 로드 모두에 이점을 제공합니다.
PyTorch용 커넥터는 학습 시 데이터를 로드할 때 다음과 같은 이점을 제공합니다.
- PyTorch용 커넥터에는 주로 1MB 미만의 파일로 구성된 데이터 세트에서 기본 PyTorch보다 최대 3배 빠른 학습을 실행하는 최적화가 포함되어 있습니다.
- PyTorch용 커넥터는 Cloud Storage 버킷에서 학습 데이터를 효율적으로 로드하는 데 사용할 수 있는 PyTorch의 데이터 세트 프리미티브를 구현합니다.
- 무작위 데이터 액세스 패턴의 경우 지도 스타일 데이터 세트를, 스트리밍 데이터 액세스 패턴의 경우 반복 가능한 스타일 데이터 세트를 지원합니다.
- 다운로드한 원시 데이터 바이트를 원하는 형식으로 변환하는 기능으로, PyTorch DataLoader가 NumPy 배열 또는 PyTorch 텐서를 유연하게 사용할 수 있습니다.
체크포인트 지정 및 모델 로드의 경우 Connector for PyTorch는 다음과 같은 이점을 제공합니다.
- 모델 체크포인트를 Cloud Storage 버킷에 편리하고 직접적으로 저장하고 버킷에서 모델 체크포인트를 로드하는 체크포인트 인터페이스입니다.
- Connector for PyTorch는 PyTorch Lightning의
CheckpointIO
구현인DatafluxLightningCheckpoint
를 사용하여 PyTorch Lightning 체크포인트를 지원합니다. - Connector for PyTorch는 PyTorch 분산 체크포인트와 함께 사용할 수 있는
StorageWriter
및StorageReader
구현을 제공합니다. Connector for PyTorch 데모 라이브러리에는 PyTorch Lightning FSDP 워크로드에서 이를 사용하는 예시 코드가 포함되어 있습니다. - 커넥터 체크포인트에는 Lightning 및 기본 PyTorch 모두에서 비동기 체크포인트 저장을 지원하는 기능이 포함됩니다.
자세한 내용은 PyTorch용 커넥터 GitHub 방문 페이지를 참고하세요.
프레임워크
Connector for PyTorch는 다음 프레임워크 버전에서 지원됩니다.
- Python 3.8 이상
- PyTorch Lightning 2.0 이상
- PyTorch 2.3.1 이상
시작하기
Connector for PyTorch를 사용하려면 다음이 필요합니다.
- 작업할 데이터가 포함된 Cloud Storage 버킷
- 버킷에 대한 추가 권장 설정은 복합 객체 사용량을 참고하세요.
- 버킷에 저장된 데이터를 작업하기 위한 다음 권한:
storage.objects.create
storage.objects.list
storage.objects.get
storage.objects.delete
: 컴포지션된 다운로드를 사용하려는 경우
이러한 권한은 PyTorch용 커넥터가 스토리지 객체 사용자와 같은 IAM 역할을 사용하여 인증에 사용할 계정에 부여해야 합니다.
설치
PyTorch용 커넥터를 설치하려면 다음 명령어를 사용합니다.
pip install gcs-torch-dataflux
구성
다음 방법 중 하나를 통해 PyTorch용 커넥터 애플리케이션 기본 사용자 인증 정보를 사용하려면 인증을 제공해야 합니다.
- Compute Engine VM에서 PyTorch용 커넥터를 실행하는 동안 애플리케이션 기본 사용자 인증 정보는 기본적으로 VM의 연결된 서비스 계정을 자동으로 사용합니다. 자세한 내용은 워크로드 인증 방법 선택하기를 참고하세요.
- 애플리케이션 기본 사용자 인증 정보는 수동으로 구성할 수도 있습니다. Google Cloud CLI를 사용하여 직접 로그인할 수 있습니다.
gcloud auth application-default login
예시
Connector for PyTorch를 사용하는 데 관한 전체 예시는 Connector for PyTorch GitHub 저장소의 데모 디렉터리에서 확인할 수 있습니다. 예를 들면 다음과 같습니다.
- 기본 시작 Jupyter 노트북 (Google Colab에서 호스팅)
- 엔드 투 엔드 이미지 세분화 학습 워크로드 둘러보기
- 엔드 투 엔드 예시 및 PyTorch Lightning 통합을 위한 노트북
성능
Connector for PyTorch에는 Cloud Storage에 대한 직접 API 호출보다 훨씬 우수한 성능을 제공할 수 있는 ML 워크로드용으로 설계된 특정 최적화가 있습니다.
- 목록 성능을 최적화하기 위해 PyTorch용 커넥터는 병렬화된 객체 목록 프로세스 간에 목록 워크로드의 균형을 맞추기 위해 개발된 빠른 목록 알고리즘을 활용합니다.
- PyTorch용 커넥터는 작은 파일의 다운로드 성능을 최적화하기 위해 조합 연산을 사용하여 더 작은 객체 집합을 하나의 더 큰 객체로 연결합니다. 이러한 새 복합 객체는 소스 객체와 동일한 버킷에 저장되며 이름에 접두사
dataflux-composed-objects/
가 있습니다. - 체크포인트 쓰기에 멀티파트 업로드를 사용하면 표준 체크포인트 업로드에 비해 최대 10배의 성능 향상을 얻을 수 있습니다.
GitHub에서 다음에 대한 실적 데이터를 확인할 수 있습니다.
- 번개 텍스트 기반 교육
- Lightning 이미지 학습
- 단일 노드 체크포인트
- 다중 노드 체크포인트
고려사항
다음 사항은 워크로드별로 고려해야 합니다.
빠른 목록 작업
Connector for PyTorch의 빠른 목록 알고리즘으로 인해 Connector for PyTorch는 일반 순차 목록보다 더 많은 목록 작업을 사용합니다. 목록 작업은 A 클래스 작업으로 청구됩니다.
복합 객체 사용
임시 복합 객체를 사용할 때 과도한 스토리지 요금과 조기 삭제 요금이 청구되지 않도록 하려면 버킷에서 다음 설정을 사용해야 합니다.
Connector for PyTorch에서 만든 복합 객체는 일반적으로 학습 루프가 끝날 때 자동으로 삭제되지만 드물게 삭제되지 않을 수도 있습니다. 객체가 버킷에서 삭제되도록 하려면 다음 명령어를 실행하면 됩니다.
gcloud storage rm gs://<my-bucket>/dataflux-composed-objects/ --recursive
구성하는 데이터 세트의 구성 부분에 disable_compose=True
또는 max_composite_object_size=0
를 포함하여 복합 객체 사용을 사용 중지할 수 있습니다. 하지만 이 동작을 사용 중지하면 특히 작은 파일로 작업할 때 학습 루프가 훨씬 더 오래 걸릴 수 있습니다.
복합 객체를 사용하면 Cloud Storage가 파일을 직접 다운로드하는 것보다 더 낮은 규모로 QPS 및 처리량 한도에 도달합니다. 복합 객체를 사용하지 않아도 프로젝트 QPS 또는 처리량 한도가 도달하는 높은 다중 노드 규모에서 실행할 때는 복합 객체 사용을 사용 중지해야 합니다.
429 오류 및 성능 저하
Connector for PyTorch를 사용하는 동안 429 오류가 발생하거나 예상보다 실행 속도가 느려질 수 있습니다. 이 문제가 발생하는 일반적인 이유는 다음과 같습니다.
- 많은 머신러닝 작업에서는 PyTorch Lightning 및 Ray와 같은 도구를 활용하는 고도로 분산된 학습 모델을 선택합니다. 이러한 모델은 PyTorch용 커넥터와 호환되지만 Cloud Storage의 비율 제한을 트리거하는 경우가 많습니다.
- '이 워크로드가 Cloud Storage에서 너무 많은 이그레스 대역폭을 사용하고 있습니다' 또는 '이 워크로드가 Cloud Storage 이그레스 대역폭 한도를 트리거했습니다'와 같은 메시지와 함께 표시되는 429 오류는 워크로드의 데이터 처리량 비율이 Google Cloud 프로젝트의 최대 용량을 초과하고 있음을 나타냅니다. 이 문제를 해결하려면 다음 단계를 따르세요.
- 프로젝트의 다른 워크로드가 과도한 대역폭을 사용하고 있지는 않은지 확인합니다.
- 할당량 증가 신청
- 구성 중인 데이터 세트의 구성 부분에서
list_retry_config
및download_retry_config
옵션을 조정하여 재시도 백오프를 조정하고 성능을 극대화합니다.
- QPS 한도는
TooManyRequests
를 나타내는 본문 메시지가 포함된 429 오류를 트리거할 수 있지만, 예상보다 느린 실행 시간으로 더 자주 나타납니다. QPS 병목 현상은 소량의 파일을 대량으로 처리할 때 더 자주 발생합니다. 버킷 QPS 제한은 시간 경과에 따라 자연스럽게 확장되므로 워밍업 기간을 허용하면 성능이 향상되는 경우가 많습니다. 타겟 버킷의 성능에 관한 자세한 내용을 보려면 Google Cloud 콘솔에서 버킷을 볼 때 관측 가능성 탭을 확인하세요. - 워크로드가 오류 메시지에
dataflux-composed-objects
키워드가 포함된TooManyRequests
오류와 함께 실패하는 경우 컴포지션된 객체 사용을 사용 중지하는 것이 가장 좋은 첫 번째 문제 해결 단계입니다. 이렇게 하면 대규모로 사용할 때 Compose 작업으로 인해 발생하는 QPS 부하를 줄일 수 있습니다.
메모리 소모
업로드 및 다운로드 성능을 최적화하기 위해 추론을 위한 최종 모델을 비롯한 체크포인트 쓰기 및 로드가 메모리에 완전히 스테이징됩니다. 각 머신에는 이러한 성능 개선사항을 활용할 수 있도록 메모리에 체크포인트를 스테이징할 만큼 충분한 여유 RAM이 있어야 합니다.
지원 받기
공식 Google Cloud 지원 채널 중 하나를 사용하여 지원을 받고, 일반적인 질문을 제출하고, 새로운 기능을 요청할 수 있습니다. GitHub에서 문제를 제출하여 지원을 받을 수도 있습니다.