다음을 통해 공유


Azure Databricks의 딥 러닝에 대한 모범 사례

이 문서에는 Azure Databricks에 대한 딥 러닝 팁과 다음과 같은 딥 러닝 워크로드를 최적화하도록 설계된 기본 제공 도구 및 라이브러리에 대한 정보가 포함되어 있습니다.

Databricks Mosaic AI는 TensorFlow, PyTorch, Keras와 같은 가장 일반적인 딥 러닝 라이브러리를 포함하는 Machine Learning용 Databricks Runtime을 사용하여 미리 빌드된 딥 러닝 인프라를 제공합니다. 또한 드라이버 및 지원 라이브러리를 포함하여 미리 구성된 기본 제공 GPU 지원도 있습니다.

또한 Databricks Runtime ML은 클러스터 생성 및 관리, 라이브러리 및 환경 관리, DatabricksGit 폴더를 사용한 코드 관리, Databricks 작업 및 API를 포함한 자동화 지원, 모델 개발 추적과 모델 배포 및 서비스 제공을 위한 통합 MLflow와 같은 Azure Databricks 작업 영역의 모든 기능을 포함합니다.

리소스 및 환경 관리

Azure Databricks를 사용하면 딥 러닝 환경을 사용자 지정하고 사용자 간에 환경을 일관되게 유지할 수 있습니다.

개발 환경 사용자 지정

Databricks 런타임을 사용하면 Notebook, 클러스터 및 작업 수준에서 개발 환경을 사용자 지정할 수 있습니다.

클러스터 정책 사용

클러스터 정책을 만들어 데이터 과학자에게 올바른 선택을 안내할 수 있습니다(예: 개발에 단일 노드 클러스터 사용, 대규모 작업에 자동 크기 조정 클러스터 사용).

딥 러닝 워크로드에 A100 GPU 고려

A100 GPU는 대규모 언어 모델 학습 및 튜닝, 자연어 처리, 개체 감지 및 분류, 권장 사항 엔진과 같은 많은 딥 러닝 작업에 효율적인 선택입니다.

  • Databricks는 모든 클라우드에서 A100 GPU를 지원합니다. 지원되는 GPU 유형의 전체 목록은 지원되는 인스턴스 유형을 참조하세요.
  • A100 GPU는 일반적으로 가용성이 제한됩니다. 클라우드 공급자에게 리소스 할당을 문의하거나 용량을 미리 예약하는 것이 좋습니다.

GPU 예약

분산형 딥 러닝 학습 및 유추를 위해 GPU를 최대화하려면 GPU 예약을 최적화합니다. GPU 예약을 참조하세요.

데이터 로드의 모범 사례

클라우드 데이터 스토리지는 일반적으로 I/O에 최적화되어 있지 않으므로 큰 데이터 세트가 필요한 딥 러닝 모델에는 문제가 될 수 있습니다. Databricks Runtime ML은 딥 러닝 애플리케이션에 대한 데이터 처리량을 최적화하기 위해 Delta LakeMosaic 스트리밍을 포함합니다.

Databricks는 데이터 스토리지에 Delta Lake 테이블을 사용할 것을 권장합니다. Delta Lake는 ETL을 간소화하고 데이터에 효율적으로 액세스할 수 있도록 합니다. 특히 이미지의 경우 Delta Lake는 학습 및 유추 모두에 대한 수집을 최적화하는 데 도움이 됩니다. 이미지 애플리케이션에 대한 참조 솔루션은 Delta Lake를 사용하여 이미지에 대해 ETL을 최적화하는 예제를 제공합니다.

Databricks는 특히 분산 워크로드를 포함하는 경우 PyTorch 또는 Mosaic Composer에서 데이터 로드를 위해 Mosaic 스트리밍을 권장합니다. 제공된 StreamingDatasetStreamingDataLoader API는 분산 환경에서 정확성 보장, 성능, 유연성 및 사용 편의성을 극대화하면서 대규모 데이터 세트에 대한 학습을 간소화하는 데 도움이 됩니다. 자세한 내용은 Mosaic 스트리밍을 사용하여 데이터 로드를 참조하세요.

딥 러닝 모델 학습에 대한 모범 사례

Databricks는 모든 모델 학습에 Machine Learning용 Databricks Runtime, MLflow 추적, 자동 로깅을 사용할 것을 권장합니다.

단일 노드 클러스터로 시작

단일 노드(드라이버 전용) GPU 클러스터는 일반적으로 딥 러닝 모델 개발에 사용하기에 가장 빠르고 비용 효율적입니다. GPU가 4개인 노드 1개는 GPU가 각각 1개인 4개의 작업자 노드를 포함하는 딥 러닝 학습에 비해 더 빠를 수 있습니다. 분산 학습으로 인해 네트워크 통신 오버헤드가 발생하기 때문입니다.

단일 노드 클러스터는 빠르고 반복적인 개발과 모델에 중소 규모의 데이터를 학습시키는 경우에 적합한 옵션입니다. 데이터 세트가 단일 컴퓨터에서 학습 속도를 늦출 정도로 큰 경우 다중 GPU 및 분산 컴퓨팅으로 이동하는 것이 좋습니다.

TensorBoard 및 클러스터 메트릭을 사용하여 학습 프로세스 모니터링

TensorBoard는 Databricks Runtime ML에 미리 설치됩니다. 이를 Notebook 또는 별도의 탭에서 사용할 수 있습니다. 자세한 내용은 TensorBoard를 참조하세요.

클러스터 메트릭은 모든 Databricks Runtime에서 사용할 수 있습니다. 이를 통해 네트워크, 프로세서 및 메모리 사용량을 검토하여 병목 상태를 검사할 수 있습니다. 자세한 내용은 클러스터 메트릭을 참조하세요.

딥 러닝에 대한 성능 최적화

Databricks에서 딥 러닝 성능 최적화 기법을 사용할 수 있으며 사용해야 합니다.

조기 중지

조기 중지는 유효성 검사 집합에서 계산된 메트릭의 값을 모니터링하고 메트릭 개선이 중지되면 학습을 중지합니다. 이 방법은 완료해야 할 많은 epoch를 추측하는 것보다 더 나은 방법입니다. 각 딥 러닝 라이브러리는 조기 중지를 위한 네이티브 API를 제공합니다. 예를 들어 TensorFlow/KerasPyTorch Lightning을 위한 EarlyStopping 콜백 API를 참조하세요. Notebook 예제는 TensorFlow Keras 예제 Notebook을 참조하세요.

일괄 처리 크기 조정

일괄 처리 크기 조정은 GPU 사용률을 최적화하는 데 도움이 됩니다. 일괄 처리 크기가 너무 작으면 계산에서 GPU 기능을 완전히 사용할 수 없습니다. 클러스터 메트릭을 사용하여 GPU 메트릭을 볼 수 있습니다.

학습 속도와 함께 일괄 처리 크기를 조정합니다. 일괄 처리 크기를 n만큼 늘리면 학습 속도를 sqrt(n)만큼 늘리는 것이 좋습니다. 수동으로 튜닝할 때 2 또는 0.5의 배율로 일괄 처리 크기를 변경해 보세요. 그런 다음, 수동으로 또는 Optuna와 같은 자동화된 도구를 통해 다양한 하이퍼 매개 변수를 테스트하여 성능을 최적화하기 위한 튜닝을 계속합니다.

이전 학습

이전 학습을 사용하면 이전에 학습된 모델로 시작하여 애플리케이션에 필요한 대로 수정합니다. 이전 학습은 새 모델을 학습시키고 조정하는 데 필요한 시간을 크게 줄일 수 있습니다. 자세한 내용 및 예제는 전이 학습을 위한 기능화를 참조하세요.

분산 학습으로 이동

Databricks Runtime ML은 단일 노드에서 분산 학습으로 쉽게 이동할 수 있게 해주는 TorchDistributor, DeepSpeed, Ray를 포함합니다.

TorchDistributor

TorchDistributor는 Spark 클러스터에서 PyTorch를 사용한 분산 학습을 용이하게 해주는 PySpark의 오픈 소스 모듈로, PyTorch 학습 작업을 Spark 작업으로 실행할 수 있습니다. TorchDistributor를 사용한 분산 학습을 참조하세요.

Optuna

Optuna는 기계 학습을 위한 적응형 하이퍼 매개 변수 튜닝을 제공합니다.

유추에 대한 모범 사례

이 섹션에는 Azure Databricks에서 유추에 모델을 사용하는 방법에 대한 일반적인 팁이 포함되어 있습니다.

  • 비용을 최소화하려면 CPU와 유추 최적화 GPU(예: NC T4_v3 시리즈)를 모두 고려합니다. 최선의 선택은 모델 크기, 데이터 차원 및 기타 변수에 따라 달라지기 때문에 명확한 권장 사항은 없습니다.

  • 배포 및 모델 제공을 간소화하려면 MLflow를 사용합니다. MLflow는 사용자 지정 전처리 및 후처리 논리를 포함하여 모든 딥 러닝 모델을 로그할 수 있습니다. Unity 카탈로그의 모델 또는 작업 영역 모델 레지스트리에 등록된 모델은 일괄 처리, 스트리밍 또는 온라인 유추를 위해 배포할 수 있습니다.

온라인 서비스 제공

대기 시간이 짧은 서비스 제공을 위한 가장 좋은 옵션은 REST API 뒤에서 온라인 서비스를 제공하는 것입니다. Databricks는 온라인 유추를 위한 모델 서비스를 제공합니다. 모델 서비스는 AI 모델을 배포, 관리 및 쿼리하는 통합 인터페이스를 제공하며 다음 서비스를 지원합니다.

  • 사용자 지정 모델. MLflow 형식으로 패키지된 Python 모델입니다. 예를 들어 scikit-learn, XGBoost, PyTorch 및 Hugging Face 변환기 모델이 있습니다.
  • 파운데이션 모델 API에서 사용할 수 있는 최첨단 오픈 모델 이러한 모델은 최적화된 유추를 지원하는 큐레이팅된 파운데이션 모델 아키텍처입니다. 예를 들어, Llama-2-70B-chat, BGE-Large, Mistral-7B와 같은 기본 모델은 토큰당 종량제 가격 책정에 즉시 사용할 수 있습니다. 성능 보장 및 미세 조정된 모델 변형이 필요한 워크로드의 경우 프로비전된 처리량을 사용하여 배포할 수 있습니다.
  • 외부 모델. Databricks 외부에서 호스트되는 모델입니다. 예를 들어 OpenAI의 GPT-4, Anthropic의 Claude 등과 같은 생성형 AI 모델이 있습니다. 이러한 모델을 제공하는 엔드포인트는 중앙에서 제어할 수 있으며 고객은 속도 제한 및 액세스 제어를 설정할 수 있습니다.

또는 MLflow가 온라인 유추를 위한 다양한 관리형 서비스에 배포하기 위한 API와 사용자 지정 서비스 제공 솔루션을 위한 Docker 컨테이너를 만들기 위한 API를 제공합니다.

온라인 유추를 위한 기타 일반적인 관리되는 서비스는 다음과 같습니다.

일괄 처리 및 스트리밍 유추

일괄 처리 및 스트리밍 채점은 높은 처리량, 저렴한 비용의 채점을 지원하며 대기 시간이 분 단위로 짧습니다. 자세한 내용은 모델 유추에 MLflow 사용을 참조하세요.

  • 유추를 위해 데이터에 두 번 이상 액세스해야 하는 경우 유추 작업을 실행하기 전에 데이터를 Delta Lake 테이블로 ETL 하는 전처리 작업을 만드는 것이 좋습니다. 이러한 방식으로 데이터를 수집하고 준비하는 데 드는 비용이 데이터의 여러 읽기에 분산됩니다. 또한 전처리와 유추를 분리하면 각 작업에 대해 서로 다른 하드웨어를 선택하여 비용과 성능을 최적화할 수 있습니다. 예를 들어 ETL에는 CPU를 사용하고 유추에는 GPU를 사용할 수 있습니다.
  • Spark Pandas UDF를 사용하여 클러스터에서 일괄 처리 및 스트리밍 유추를 스케일링합니다.