머신러닝(ML) 파이프라인을 구축할 때 많은 전문가들은 전체 파이프라인을 단일 DAG(Directed Acyclic Graph)로 설계할지, 아니면 여러개로 분할할지 결정해야 합니다. 이 선택은 ML 파이프라인의 복잡성, 유지보수성, 확장성에 따라 달라질 수 있으며, 각각의 접근 방식은 장단점을 가지고 있습니다. 이 글에서는 두 가지 방법에 대한 고려 사항을 자세히 살펴보겠습니다.
DAG에서 태스크 분리
- 태스크의 독립성:각 태스크는 가능한 한 서로 독립적이어야 하며, 이는 예를 들어 데이터 전처리, 모델 학습, 결과 평가 등의 단계를 분리함으로써 달성할 수 있습니다. 태스크가 서로 강하게 의존적이라면, 하나의 태스크에서 발생하는 문제가 다른 태스크에 영향을 미칠 수 있습니다. 독립적인 태스크 구조는 오류 격리와 문제 해결을 용이하게 합니다.
- 복잡성 관리: 너무 많은 태스크로 분리하면 DAG의 복잡성이 증가하므로, 중요한 기능별로 태스크를 그룹화하여 복잡성을 관리하는 것이 좋습니다. 반대로, 너무 적게 분리하면 각 태스크 내의 복잡성이 증가할 수 있습니다. 적절한 균형을 찾는 것이 중요합니다.
- 재사용성: 재사용 가능한 태스크를 만드는 것은 효율적인 파이프라인 구축에 중요합니다. 일반적인 처리 작업은 재사용 가능하도록 디자인하여 여러 DAG에서 사용할 수 있어야 합니다.
- 실행 시간: 각 태스크의 실행 시간도 고려해야 합니다. 너무 많은 시간이 소요되는 태스크는 분리하여 각 단계의 진행 상황을 좀 더 세밀하게 관리할 수 있도록 하는 것이 좋습니다.
단일 DAG의 장단점
장점
- 단순성 및 관리 용이성: 단일 DAG는 그 구조가 단순하며, 이는 워크플로우의 이해와 수정이 용이함을 의미합니다. 하나의 파이프라인에서 모든 작업의 흐름을 볼 수 있으므로, 작업 간의 종속성 및 흐름을 한눈에 파악하고 관리할 수 있습니다.
- 일관된 실행 환경: 모든 작업이 동일한 환경에서 실행되므로, 환경 설정의 일관성이 보장됩니다. 이는 작업 간의 충돌을 방지하고, 실행 시 예측 가능한 결과를 얻는 데 도움이 됩니다.
- 자원 활용의 최적화: 단일 DAG에서는 작업 간 자원 분배와 스케줄링을 보다 효율적으로 관리할 수 있습니다. 이는 특히 자원이 제한적인 환경에서 큰 장점으로 작용합니다.
단점
- 복잡한 작업의 한계: 모든 작업을 단일 DAG 안에 포함시킬 경우, 작업의 수가 많아지면 DAG의 복잡성이 증가합니다. 이는 파이프라인의 이해와 유지 보수를 어렵게 만들며, 장기적으로는 관리의 효율성을 떨어뜨릴 수 있습니다.
- 유연성 부족: 다양한 유형의 작업을 하나의 DAG에 넣으면, 각각에 최적화된 설정을 적용하기 어려우며, 예를 들어 일부 작업에는 고성능 컴퓨팅 자원이 필요할 수 있지만, 이를 단일 DAG에서 관리하는 것은 복잡할 수 있습니다. 예를 들어, 일부 작업에는 특정 환경이나 자원이 필요할 수 있으나, 단일 DAG 구조에서는 이러한 요구 사항을 반영하기 어려울 수 있습니다.
- 오류의 전파: 단일 DAG 내에서 오류가 발생하면, 이 오류가 전체 파이프라인에 영향을 줄 수 있습니다. 작은 오류 하나가 전체 워크플로우의 중단을 초래할 수 있는 리스크가 있습니다.
복합 DAG의 장단점
장점
- 유연성 및 확장성: 복합 DAG 구조는 여러 개의 작은 DAG로 구성되어, 각각을 독립적으로 관리하고 최적화할 수 있습니다. 이는 특정 작업에 특화된 설정을 적용하거나, 새로운 작업을 기존 시스템에 쉽게 통합할 수 있게 합니다.
- 오류 격리: 각 DAG가 독립적으로 작동하므로, 한 DAG에서 발생한 문제가 다른 DAG에 미치는 영향이 최소화됩니다. 이는 전체 시스템의 안정성과 신뢰성을 높이는 데 기여합니다.
- 특화된 최적화 가능: 복합 DAG를 사용하면, 각 DAG를 특정 작업이나 요구 사항에 맞게 최적화할 수 있습니다. 이는 전체 파이프라인의 효율성과 성능을 높일 수 있습니다.
단점
- 관리의 복잡성: 여러 개의 DAG를 동시에 관리해야 하는 경우, 이를 효과적으로 조정하기 위한 중앙 관리 시스템이 필요할 수 있습니다. 이는 시스템 관리자에게 추가적인 부담을 주며, 관리 오류의 가능성을 높일 수 있습니다.
- 자원 분배의 어려움: 복수의 DAG가 각각 다른 자원을 요구할 경우, 전체 시스템에서의 자원 분배와 우선순위 결정이 복잡해질 수 있습니다. 이는 특히 자원이 제한적인 경우 더 큰 문제가 될 수 있습니다.
- 종속성 관리의 어려움: 여러 DAG 사이의 종속성을 효과적으로 관리하는 것은 어려울 수도 있습니다. 잘못된 종속성 설정은 데이터 불일치나 워크플로우 실패를 초래할 수 있습니다.
단일 DAG와 복합 DAG 선택을 위한 권장 사항
- 파이프라인 복잡성: 간단한 ML 파이프라인의 경우 단일 DAG가 충분할 수 있습니다. 더 복잡한 파이프라인이나 명확한 단계가 있는 경우에는 여러 DAG로 분할하는 것이 좋을 수 있습니다.
- 의존성 구조: 작업들이 명확하고 간단한 의존성 구조를 가지고 있다면 단일 DAG가 적합할 수 있습니다. 반면, 작업들이 복잡한 의존성을 가지거나 독립적으로 실행되어야 한다면 여러 DAG가 유리할 수 있습니다.
- 장기적 유지보수: 파이프라인의 장기적인 유지보수를 고려하십시오. 단일 DAG가 너무 복잡해지면 시간이 지남에 따라 관리가 더 어려워질 수 있습니다.
- 유연성: ML 파이프라인이 발전함에 따라 접근 방식을 조정하는 것에 열려 있어야 합니다. 처음에는 단일 DAG로 시작하고 필요에 따라 나중에 여러 DAG로 리팩토링할 수 있습니다.
결론적으로, ML 파이프라인에서 단일 DAG와 복합 DAG를 선택하는 것은 프로젝트의 특정 요구 사항과 특성에 따라 달라집니다. 파이프라인의 복잡성, 유지보수성, 확장성에 따라 다른 dag를 선택 할 수 있습니다.