[부스트캠프 AI-Tech] 20주차 Day 3

LKM·2022년 7월 25일
0

✏️학습 정리


4-3. 머신러닝 디자인 패턴

  • 디자인 패턴

    • 문제를 해결하는 방법을 패턴화해서 표현
    • 반복적으로 발생하는 문제를 어떻게 해결할지에 대한 솔루션
    • Anti 패턴: 좋지 않은 패턴
  • 머신러닝 디자인 패턴

    • 일반적인 개발 디자인 패턴에도 포함할 수 있지만, 머신러닝의 특수성으로 별도의 디자인 패턴이 생김
      • 머신러닝 개발의 특수성: Data, Model, Code
      • 소프트웨어 개발: Code
    • 4가지 패턴
      • Serving 패턴: 모델을 Production 환경에 서빙하는 패턴
      • Training 패턴: 모델을 학습하는 패턴
      • QA 패턴: 모델의 성능을 Production 환경에서 평가하기 위한 패턴
      • Operation 패턴: 모델을 운영하기 위한 패턴
  • Serving 패턴

    • Web Single 패턴

      • 가장 간단한 아키텍처
      • 예측 서버를 빠르게 출시하고 싶은 경우
    • Synchronous 패턴

      • 예측의 결과에 따라 로직이 달라지는 경우
      • 예측 결과가 강아지 → 강아지 이미지, 고양이 → 고양이 이미지
    • Asynchronous 패턴

      • 예측과 진행 프로세스의 의존성이 없는 경우
      • 비동기로 실행, 예측 요청을 하고 응답을 바로 받을 필요가 없는 경우
    • Batch 패턴

      • 예측 결과를 실시간으로 얻을 필요가 없는 경우
      • 대량의 데이터에 대한 예측을 하는 경우
    • Preprocess - Prediction 패턴

      • 전처리와 예측을 분리하고 싶은 경우
      • 전처리와 예측에서 사용하는 언어가 다른 경우
    • Microservice Vertical 패턴

      • 여러 모델이 순차적으로 연결되는 경우
      • 예측끼리 의존 관계가 있는 경우
    • Microservice Horizontal 패턴

      • 하나의 Request에 여러 모델을 병렬로 실행하고 싶은 경우
      • 보통 이런 경우 마지막에 예측 결과를 통합함
    • Prediction Cache 패턴

      • Request할 때 데이터를 저장하고, 예측 결과도 별도로 저장해야 하는 경우
      • 입력 데이터를 캐시로 활용할 수 있는 경우
      • 예측 결과가 자주 변경되지 않는 경우
    • Anti 패턴

      • Online Bigsize 패턴
        • 실시간 대응이 필요한 온라인 서비스에 예측에 오래 걸리는 모델을 사용하는 경우
      • All-in-one 패턴
        • 하나의 서버에 여러 예측 모델을 띄우는 경우
        • 라이브러리 선택 제한이 존재
  • Training 패턴

    • Batch Training 패턴

      • 주기적으로 학습해야 하는 경우
    • Pipeline Training 패턴

      • 학습 파이프라인 단계를 분리해 각각을 선택하고 재사용할 수 있도록 만드는 경우
    • Anti 패턴

      • Training code in Serving 패턴

        • 학습, 실험, 평가에 사용해야 하는 코드가 서빙 코드에 들어간 경우
        • 학습, 실험, 평가를 위한 환경과 서빙을 같이 처리하는 경우
      • Too many pipes 패턴

        • 학습 파이프라인이 너무 다양하고 복잡한 경우
        • 데이터 소스가 너무 많아서 각각 가져오는 방법이 다양하고, 추상화되어 있지 않은 경우
  • QA 패턴

    • Shadow AB Test 패턴

      • 새로운 예측 모델이 Production 환경에서 잘 동작하는지 확인하고 싶은 경우
      • 새로운 예측 서버가 Production 환경의 부하를 견디는지 확인하고 싶은 경우
    • Online AB Test 패턴

      • 새로운 모델이 Production 환경에서 잘 동작하는지 확인하고 싶은 경우
      • 새로운 서버가 Production 환경의 부하를 견딜 수 있는지 확인하고 싶은 경우
    • Anti 패턴

      • Offline Only 패턴
        • 머신러닝 모델이 Online Test를 하지 않고, Offline Test Data로만 진행되는 경우
  • Operation 패턴

    • 머신러닝 시스템의 설정, 로깅, 모니터링 등 운영을 위한 패턴

    • Model in Image 패턴

      • 서비스 환경과 모델을 통합해서 관리하고 싶은 경우
      • Docker Image 안에 모델이 저장되어 있는 경우
    • Model Load 패턴

      • Docker 이미지와 모델 파일을 분리하고 싶은 경우
      • 모델 업데이트가 빈번한 경우
    • Prediction Log 패턴

      • 서비스 개선을 위해 예측, 지연 시간(Latency) 로그를 사용하려고 할 경우
      • Data Validation, 예측 결과 등을 확인하고 싶은 경우
    • Condition Based Serving 패턴

      • 상황에 따라 (특정 조건) 예측해야 하는 대상이 다양한 경우
      • 룰 베이스 방식으로 상황에 따라 모델을 선택하는 경우
    • Anti 패턴

      • No Logging 패턴
        • 별도의 로그를 남기지 않는 경우
  • 정리

    • 머신러닝 시스템 개발도 점점 패턴화되고 있음
    • 패턴들이 진리는 아니고, 프로젝트 상황에 따라 맞게 변형해서 사용
    • 참고자료
profile
함께 자라기

0개의 댓글