Cloud Storage의 Connector for PyTorch는 Google에서 지원되는 오픈소스 제품이며, Cloud Storage가 PyTorch와 직접 통합될 수 있게 해줍니다.
개요
Connector for PyTorch는 학습을 위한 데이터 로드, 체크포인트 처리 및 모델 로드라는 두 가지 측면에서 이점을 제공합니다.
학습을 위한 데이터 로드의 경우 Connector for PyTorchㄴ는 다음과 같은 이점을 제공합니다.
- Connector for PyTorch에는 주로 1MB 미만의 파일로 구성된 데이터 세트에서 기본 PyTorch보다 최대 3배 빠르게 학습을 구성할 수 있는 최적화 기능이 포함되어 있습니다.
- Connector for 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 모두의 비동기식 체크포인트 저장 지원이 포함됩니다.
자세한 내용은 Connector for 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
: 복합 객체 다운로드를 사용하려는 경우
이러한 권한은 Connector for PyTorch가 스토리지 객체 사용자와 같은 IAM 역할을 사용해서 인증에 사용할 계정에 부여되어 있어야 합니다.
설치
Connector for PyTorch를 설치하려면 다음 명령어를 사용합니다.
pip install gcs-torch-dataflux
구성
다음 방법 중 하나를 사용해서 Connector for PyTorch 애플리케이션 기본 사용자 인증 정보를 사용하도록 인증을 제공해야 합니다.
- Compute Engine VM에서 Connector for 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 워크로드용으로 설계된 특정 최적화 기능이 포함되어 있습니다.
- 목록 작성 성능을 최적화하기 위해 Connector for PyTorch는 병렬 객체 나열 프로세스 간에 목록 작성 워크로드를 균등하게 분배하도록 개발된 고속 나열 알고리즘을 사용합니다.
- Connector for PyTorch는 작은 파일의 다운로드 성능을 최적화하기 위해 조합 작업을 사용해서 작은 객체 집합을 하나의 큰 객체로 연결합니다. 이러한 새로운 복합 객체는 소스 객체와 동일한 버킷에 저장되며 이름에
dataflux-composed-objects/
프리픽스가 포함됩니다. - 체크포인트 쓰기를 위한 멀티파트 업로드는 표준 체크포인트 업로드에 비해 최대 10배 뛰어난 성능을 제공합니다.
GitHub에서 다음에 대한 성능 데이터를 찾을 수 있습니다.
- Lightning 텍스트 기반 학습
- Lightning 이미지 학습
- 단일 노드 체크포인트 관리
- 다중 노드 체크포인트 관리
고려사항
다음은 워크로드별 기준에 따라 고려해야 합니다.
고속 나열 작업
Connector for PyTorch의 고속 나열 알고리즘에 따라 Connector for PyTorch는 일반적인 순차적 나열보다 많은 목록 작성 작업을 사용합니다. 목록 작업은 클래스 A 작업으로 청구됩니다.
복합 객체 사용
임시 복합 객체로 작업할 때 과도한 스토리지 요금과 조기 삭제 요금을 방지하기 위해서는 버킷에 다음 설정을 사용해야 합니다.
- 소프트 삭제 사용 중지
- 버킷 잠금 사용 중지
- 객체 버전 관리 사용 중지
- 버킷 및 객체 모두 스토리지 클래스로 Standard Storage 사용
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와 같은 도구를 활용하여 고도로 분산된 학습 모델을 사용합니다. 이러한 모델은 Connector for 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
오류와 함께 워크로드가 실패한 경우에는 합성 객체 사용을 중지하는 것이 가장 좋은 첫 번째 문제 해결 단계입니다. 이렇게 하면 대규모로 사용할 때 합성 작업으로 발생하는 QPS 부하를 줄일 수 있습니다.
메모리 소모
추론을 위한 최종 모델을 포함한 체크포인트 쓰기 및 로드는 업로드 및 다운로드 성능을 최적화하기 위해 메모리에 완전히 스테이징됩니다. 각 머신에는 이러한 성능 개선 이점을 활용할 수 있도록 메모리에 체크포인트를 스테이징할 수 있는 여유 RAM이 충분히 있어야 합니다.
지원 받기
공식 Google Cloud 지원 채널 중 하나를 사용해서 지원을 받고, 일반적인 질문을 제출하고, 새로운 기능을 요청할 수 있습니다. GitHub에서 문제를 제출하여 지원을 받을 수도 있습니다.