Dataflow ML 정보

예측 및 추론 파이프라인학습용 데이터 준비에 Dataflow ML의 확장 데이터 처리 기능을 사용할 수 있습니다.

Dataflow ML 워크플로 다이어그램

그림 1. 전체 Dataflow ML 워크플로.

요구사항 및 제한사항

  • Dataflow ML은 일괄 및 스트리밍 파이프라인을 지원합니다.
  • RunInference API는 Apache Beam 2.40.0 이상 버전에서 지원됩니다.
  • MLTransform API는 Apache Beam 2.53.0 이상 버전에서 지원됩니다.
  • 모델 핸들러는 PyTorch, scikit-learn, TensorFlow, ONNX, TensorRT에 사용할 수 있습니다. 지원되지 않는 프레임워크의 경우 커스텀 모델 핸들러를 사용할 수 있습니다.

학습용 데이터 준비

예측 및 추론 파이프라인

Dataflow ML은 Dataflow의 강력한 기능을 Apache Beam의 RunInference API와 결합합니다. 개발자는 RunInference API를 사용하여 모델의 특성과 속성을 정의하고 이 구성을 RunInference 변환에 전달합니다. 이 기능을 사용하면 모델의 구현 세부정보를 몰라도 사용자가 Dataflow 파이프라인에서 모델을 실행할 수 있습니다. TensorFlow, PyTorch 등 데이터에 가장 적합한 프레임워크를 선택할 수 있습니다.

파이프라인에서 여러 모델 실행

RunInference 변환을 사용하여 Dataflow 파이프라인에 여러 추론 모델을 추가합니다. 코드 세부정보를 포함한 자세한 내용은 Apache Beam 문서의 멀티 모델 파이프라인을 참조하세요.

교차 언어 파이프라인 빌드

Java 파이프라인에 RunInference를 사용하려면 교차 언어 Python 변환을 만듭니다. 파이프라인이 변환을 호출하여 전처리, 후처리, 추론을 수행합니다.

자세한 안내 및 샘플 파이프라인은 Java SDK에서 RunInference 사용을 참조하세요.

Dataflow에서 GPU 사용

가속기를 사용해야 하는 일괄 또는 스트리밍 파이프라인의 경우 NVIDIA GPU 기기에서 Dataflow 파이프라인을 실행할 수 있습니다. 자세한 내용은 GPU로 Dataflow 파이프라인 실행을 참조하세요.

Dataflow ML 문제 해결

이 섹션에서는 Dataflow ML을 사용할 때 유용할 수 있는 문제 해결 전략과 링크를 제공합니다.

스택은 각 텐서 크기가 같을 것으로 예상함

RunInference API를 사용할 때 크기가 다른 이미지, 또는 길이가 다른 단어 임베딩을 제공하면 다음 오류가 발생할 수 있습니다.

File "/beam/sdks/python/apache_beam/ml/inference/pytorch_inference.py", line 232, in run_inference batched_tensors = torch.stack(key_to_tensor_list[key]) RuntimeError: stack expects each tensor to be equal size, but got [12] at entry 0 and [10] at entry 1 [while running 'PyTorchRunInference/ParDo(_RunInferenceDoFn)']

이 오류는 RunInference API가 크기가 다른 텐서 요소를 일괄 처리할 수 없기 때문에 발생합니다. 해결 방법은 Apache Beam 문서의 텐서 요소를 일괄 처리할 수 없음을 참조하세요.

대규모 모델에서 메모리 부족 오류 방지

중형 또는 대형 ML 모델을 로드하면 머신의 메모리가 부족할 수 있습니다. Dataflow는 ML 모델을 로드할 때 메모리 부족 (OOM) 오류를 방지하는 데 도움이 되는 도구를 제공합니다. 다음 표를 사용하여 시나리오에 적합한 접근 방식을 결정하세요.

시나리오 솔루션
모델이 메모리에 들어갈 만큼 작습니다. 추가 구성 없이 RunInference 변환을 사용합니다. RunInference 변환은 스레드 간에 모델을 공유합니다. 머신에 CPU 코어당 모델 하나를 맞출 수 있다면 파이프라인에서 기본 구성을 사용할 수 있습니다.
서로 다르게 학습된 여러 모델이 동일한 작업을 실행하고 있습니다. 모델별 키를 사용합니다. 자세한 내용은 서로 다르게 학습된 모델 여러 개로 ML 추론 실행을 참고하세요.
하나의 모델이 메모리에 로드되고 모든 프로세스가 이 모델을 공유합니다.

large_model 매개변수를 사용합니다. 자세한 내용은 서로 다르게 학습된 모델 여러 개로 ML 추론 실행을 참고하세요.

맞춤 모델 핸들러를 빌드하는 경우 large_model 매개변수를 사용하는 대신 share_model_across_processes 매개변수를 재정의합니다.

머신에 로드되는 모델의 정확한 수를 구성해야 합니다.

로드되는 모델 수를 정확하게 제어하려면 model_copies 매개변수를 사용하세요.

커스텀 모델 핸들러를 빌드하는 경우 model_copies 매개변수를 재정의합니다.

Dataflow의 메모리 관리에 관한 자세한 내용은 Dataflow의 메모리 부족 오류 문제 해결을 참고하세요.

다음 단계