디자인 패턴이란?
문제를 해결하는 방법을 패턴화해서 표현
반복적으로 발생하는 문제를 어떻게 해결할 지에 대한 솔루션
개발할 때 구조화된 패턴을 뜻
머신러닝 개발 특수성
기존 소프트웨어 개발은 Code로만 이루어져 있음
크게 4가지 패턴
Serving 패턴
Training 패턴
QA 패턴
Operation 패턴
Serving 패턴이란?
머신러닝 모델을 production 환경에서 어떻게 사용할 것인가?
앞서 배운 Online Serving, Batch Serving도 Serving 패턴 중 하나
Usecase
Architecture
FastAPI, Flask 등으로 단일 REST 인터페이스 생성
요청 시 전처리도 같이 포함
간단하게 생성할 수 있는 구조
단점
Usecase
예측 결과에 따라 로직이 달라지는 경우 사용
Architecture
예측이 끝날 때까지 프로세스를 block
REST API는 대부분 Synchronous 패턴
장점
단점
Usecase
예측과 진행 프로세스의 의존성이 없는 경우 사용
예측 요청을 하고 응답을 바로 받을 필요가 없는 경우
예측을 요청하는 클라이언트와 응답을 반환하는 목적지가 분리된 경우
Architecture
클라이언트와 예측 서버 사이에 메세지 시스템(Queue) 추가
특정 메세지에 Request 데이터를 메세지 Queue에 저장 (Push)
특정 서버는 메세지 Queue의 데이터를 가져와 예측 (Pull)

단점
Usecase
예측 결과를 실시간으로 얻을 필요가 없는 경우
대량 데이터에 대한 예측을 하는 경우
예측 실행이 시간대별, 월별, 일별로 스케줄링해도 괜찮은 경우
Architecture
Airflow 등으로 batch 작업을 스케줄링에 맞게 trigger
Input, output 데이터는 데이터 웨어하우스 등에 저장

API 서버를 개발하지 않아도 되는 단순함
스케줄링을 위한 서버 필요
Usecase
전처리와 예측을 분리하고 싶은 경우
전처리와 예측에서 사용하는 언어가 다른 경우
리소스를 분리해 효율성을 향상
Architecture
전처리 서버와 예측 서버를 분리
Request 할 경우 맨 처음에 전처리 서버로 가서 전처리하고, 그 후 예측 서버로 request

장점
Usecase
여러 모델이 순차적으로 연결되는 경우
A 모델 결과를 B 모델 Input으로 사용하는 경우
예측끼리 의존 관계가 있는 경우
Architecture
각각 모델을 별도 서버로 배포
동기적으로 순서대로 예측하고, 예측 결과를 다른 모델에 또 request
단점
Usecase
하나의 Request에 여러 모델을 병렬로 실행하고 싶은 경우
보통 마지막에 예측 결과 통합
e.g., 마스크 분류 모델에서 연령대 예측 모델 + 마스크 분류 모델 + 성별 예측 모델로 나눠 구성
Architecture
Usecase
Request 할 때 데이터를 저장하고, 예측 결과도 별도로 저장해야 하는 경우
예측 결과가 자주 변경되지 않는 경우
입력 데이터를 캐시로 활용할 수 있는 경우
Architecture
Request가 올 경우 해당 데이터로 예측한 결과가 있는지 캐시에서 검색 (Redis 활용)
만약 예측 결과가 있다면 해당 데이터 바로 return, 없다면 모델에서 예측
오래된 예측이 있다면 주기적으로 삭제하는 로직이 필요
장점
※ Anti 패턴: 좋지 않은 패턴
1) Online Bigsize 패턴
실시간 대응이 필요한 온라인 서비스에 예측이 오래 걸리는 모델 사용하는 경우
모델 경량화 작업이 필요
실시간이 아닌 배치로 변경하는 것도 가능한지 검토
중간에 캐시 서버를 추가하고, 전처리 분리하는 것도 bigsize 탈피하는 방법
2) All-in-one 패턴
하나의 서버에 여러 예측 모델을 띄우는 경우
라이브러리 선택 제한 존재
장애가 발생할 경우 로그 확인이 어려움
Training 패턴이란?
학습 파이프라인 구성을 위한 패턴
자주 학습하는가?, 학습 component 다양한 단계를 재사용하는가?를 고려
Usecase
Architecture
Batch Serving 패턴처럼 스케줄링 서버 필요
학습 과정에서 데이터 전처리, 평가 과정 모두 필요
저장한 모델 파일을 사용할 수 있도록 저장하는 작업 필요
단점
Usecase
학습 파이프라인 단계를 분리해 각각 선택하고 재사용할 수 있도록 만드는 경우
각 작업을 별도로 컨트롤하고 싶은 경우
Architecture
Batch Training 응용 버전
각 작업을 개별 리소스로 분할 (서버, 컨테이너 등) → 전처리 서버는 메모리 크게, 서빙 서버는 GPU 사용 등
시간이 많이 걸리는 작업은 자주 실행, 다른 작업은 적게 실행
이전 작업 실행 결과가 후속 작업의 input
처리 완료된 데이터를 데이터 웨어하우스에 중간 저장
장점
장애 분리
컨테이너 재사용 가능
workflow 기반 작업
단점
1) Training code in Serving 패턴
학습, 실험, 평가에 사용해야 하는 코드가 Serving 코드에 들어간 경우
학습, 실험, 평가를 위한 환경과 Serving을 같이 처리하는 경우
Research 단계와 production 단계에서 필요한 코드와 로직은 다름
2) Too many pipes 패턴
학습 파이프라인이 너무 다양하고 복잡한 경우
데이터 소스가 너무 많아서 각각 가져오는 방법이 다양하고, 추상화되어 있지 않은 경우
QA 패턴이란?
예측 서버와 모델 성능 평가를 위한 패턴
모델이 처음 된다면 배포 끝이지만, 기존 모델이 있고 신규 모델이 있다면 모델 비교해야 함
Production 환경에 영향이 없도록 테스트하는 패턴과 바로 영향이 가는 패턴이 존재
Usecase
새로운 예측 모델이 Production 환경에서 잘 동작하는지 확인하고 싶은 경우
새로운 예측 서버가 Production 환경의 부하를 견디는지 확인하고 싶은 경우
Architecture
예측 모델, 서버를 Production 환경에 배포하기 전에 사용
Request가 들어온 경우 기존 모델과 새로운 모델에게 모두 전달되고,
Response는 기존 모델 서버에만 전달됨 (새로운 모델 결과는 별도 저장만 함)
모델이 잘 예측하는지 동시에 2개의 모델을 실행해서 파악할 수 있음
새로운 모델이 문제가 생기면 AB Test에서 제거하고 다시 개선
Risk가 적음 (현재 모델은 그대로 운영하기 때문)
장점
단점
Usecase
새로운 모델이 Production 환경에 잘 동작하는지 확인하고 싶은 경우
새로운 예측 서버가 Production 환경의 부하를 견디는지 확인하고 싶은 경우
온라인으로 여러 예측 모델을 측정하고 싶은 경우
Architecture
Shadow AB Test 패턴과 큰 방식은 동일
Request가 들어오면 지정된 비율 (e.g., 1:1)로 트래픽을 나눠 절반은 기존 모델, 절반은 신규 모델에 예측
보통은 새로운 모델에 10% 정도 들어가게 조정
장점
Production 환경에서 새로운 모델 예측 결과, 속도 확인 가능
여러 모델 예측 결과를 수집해 분석 가능
단점
새로운 모델이 바로 비즈니스에 노출되므로 부정적 비즈니스 영향 발생 가능
새로운 예측 서버에 대한 비용 발생
1) Offline Only 패턴
머신러닝 모델이 Online Test 하지 않고, Offline Test data로만 진행되는 경우
머신러닝 모델의 비즈니스 가치를 입증하기 어려움
Production 환경에도 꼭 사용하는 시기가 필요
Operation 패턴이란?
머신러닝 시스템의 설정, 로깅, 모니터링 등 운영을 위한 패턴
모델 이미지를 함께 Docker Image로 만들 것인지, 로그를 어떻게 저장할 지, 저장된 로그로 모니터링 할 것인지 등을 고려
Usecase
서비스 환경과 모델을 통합해서 관리하고 싶은 경우
Docker Image 안에 모델이 저장되어 있는 경우
Architecture
Docker Image로 모델 코드와 모델 파일 등을 저장해서 사용
Production 환경에선 이 이미지를 Pull해서 사용
장점
단점
Usecase
Docker 이미지와 모델 파일을 분리하고 싶은 경우
서버 이미지는 공통으로 사용하되, 모델은 여러개 사용하는 경우
Architecture
개발 코드는 Docker Image로 Build
모델 파일은 Object Storage 등에 업로드하고 프로세스 시작할 때 모델 파일 다운
분리를 통해 서버 이미지 경량화할 수 있는 패턴
장점
모델과 서버 이미지 구분
서버 이미지 재사용 가능, 서버 이미지 경량화
단점
모델 파일을 가지고 와야하기 때문에 서비스 시작이 더 오래걸릴 수 있음
서버 이미지, 모델 관리를 해야 함
Usecase
서비스 개선을 위해 예측, 지연 시간 (latency) 로그를 사용하려고 할 경우
Data validation, 예측 결과 등을 확인하고 싶은 경우
Architecture
프로세스에서 로그를 저장하지 않고, 메세지 시스템으로 넘겨서 프로세스가 저장에 신경쓰는 시간을 줄임
장애 등을 파악할 수 있도록 로그도 기록하고 모니터링도 할 수 있도록 대비해야 함
단점
Usecase
상황에 따라(특정 조건) 예측해야 하는 대상이 다양한 경우
룰 베이스 방식으로 상황에 따라 모델 선택하는 경우
Architecture
장점
단점
1) No Logging 패턴
※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※