머신러닝 시스템 디자인 패턴

AI 엔지니어를 위한

머신러닝 시스템 구축에 필요한 디자인 패턴을 모두 모았다!

머신러닝을 시스템에 도입하고 유용하게 활용하기 위해서는 그에 맞는 설계나 구현이 필요하다.

이 책은 머신러닝을 실제 시스템에 탑재해 운용하기 위한 노하우를 기록한 사례집이자, 머신러닝 시스템의 디자인 패턴을 모아 놓은 해설서이다. 머신러닝 시스템의 그랜드 디자인 및 머신러닝 시스템을 파이썬으로 구현한 예를 설명함과 동시에 머신러닝을 실제로 활용하기 위한 방법론이나 운용, 개선 노하우 등에 관해서 기술한다.

또한 도커와 쿠버네티스를 활용해 코드의 재현성도 보장하고 있다. 머신러닝의 학습부터 평가, QA를 수행하고 추론기를 릴리스해서 운용하는 일련의 흐름을 아키텍처와 코드를 곁들여 설명한다.

★ 이 책에서 다루는 내용 ★

  • 머신러닝을 실용화하기 위한 방법에 관해 알아본다.
  • 파이썬을 활용한 머신러닝 워크플로와 웹 애플리케이션 개발의 개요를 배운다.
  • 머신러닝을 도입한 시스템의 운용 노하우를 익힌다.
  • 머신러닝 시스템의 트러블 슈팅과 장애 대응 방법을 습득한다.

 

도서 상세 이미지

시부이 유우스케

주식회사 티어포(TierⅣ)에서 ML옵스 엔지니어, 인프라 엔지니어, AR 엔지니어로 활약 중이고, 고양이 두 마리의 집사다. 본업으로는 자율주행을 위한 ML옵스 기반을 쿠버네티스로 개발하고 있다. AR과 에지 AI를 조합하며 시간을 보내는 것이 취미다. 과거에는 SIer, 소프트웨어 벤더, 스타트업에서 신규 프로덕트 구축, 대규모 시스템 운용, 팀 매니지먼트에 종사했으며, 전 직장인 메르카리에서 머신러닝을 시스템에 포함시키는 디자인 패턴을 집필하고 공개했다.

하승민

일본 리츠메이칸 대학에서 물리학과를 졸업하고, 동대학원 물리학(이학)석사 학위를 취득했다. 머신러닝과 딥러닝, 프로그래밍을 독학하며 실무경력을 쌓았고, 현재는 프로메디우스(Promedius Inc.)에서 AI Researcher로 재직 중이다. 전공은 끈이론과 등각장론이지만, 형식적인 물리학 이론이나 수학이라면 대부분 좋아하고(특히 양자역학과 일반상대성이론), 최근에는 양자 컴퓨터와 관련된 서적을 읽으며 여가시간을 보낸다.

  • [1부] 머신러닝과 ML옵스
    • ▣ 1장: 머신러닝 시스템이란
      • 1.1 머신러닝, ML옵스 및 시스템
        • 1.1.1. 시작하기
        • 1.1.2. 이 책의 목적
      • 1.2 사용자 중심의 머신러닝
        • 1.2.1. 전자 상거래 사이트 예시
        • 1.2.2. 이미지 업로드 애플리케이션 예시
      • 1.3 머신러닝 시스템에 필요한 요소
      • 1.4 머신러닝 시스템 패턴화하기
        • 1.4.1. 학습
        • 1.4.2. 릴리스 방법
        • 1.4.3. 추론의 흐름
        • 1.4.4. 품질관리
      • 1.5 이 책의 구성
        • 1.5.1. 디자인 패턴
        • 1.5.2. 안티 패턴
      •  
  • [2부] 머신러닝 시스템 만들기
    • ▣ 2장: 모델 만들기
      • 2.1 모델 작성
        • 2.1.1. 모델 개발의 흐름
        • 2.1.2. 데이터 분석과 수집
        • 2.1.3. 모델의 선정과 파라미터 정리
        • 2.1.4. 전처리
        • 2.1.5. 학습
        • 2.1.6. 평가
        • 2.1.7. 빌드
        • 2.1.8. 시스템 평가
        • 2.1.9. 모델 개발은 일방통행이 아니다
      • 2.2 안티 패턴 (Only me 패턴)
        • 2.2.1. 상황
        • 2.2.2. 구체적인 문제
        • 2.2.3. 이점
        • 2.2.4. 과제
        • 2.2.5. 회피 방법
      • 2.3 프로젝트, 모델, 버저닝
        • 2.3.1. 프로젝트, 모델, 버저닝 관리
        • 2.3.2. 구현
      • 2.4 파이프라인 학습 패턴
        • 2.4.1. 유스케이스
        • 2.4.2. 해결하려는 과제
        • 2.4.3. 아키텍처
        • 2.4.4. 구현
        • 2.4.5. 이점
        • 2.4.6. 검토사항
      • 2.5 배치 학습 패턴
        • 2.5.1. 유스케이스
        • 2.5.2. 해결하려는 과제
        • 2.5.3. 아키텍처
        • 2.5.4. 구현
        • 2.5.5. 이점
        • 2.5.6. 검토사항
      • 2.6 안티 패턴 (복잡한 파이프라인 패턴)
        • 2.6.1. 상황
        • 2.6.2. 구체적인 문제
        • 2.6.3. 이점
        • 2.6.4. 과제
        • 2.6.5. 해결방법
      •  
    • ▣ 3장: 모델 릴리스하기
      • 3.1 학습환경과 추론환경
        • 3.1.1. 시작하기
        • 3.1.2. 학습환경과 추론환경
      • 3.2 안티 패턴 (버전 불일치 패턴)
        • 3.2.1. 상황
        • 3.2.2. 구체적인 문제
        • 3.2.3. 이점
        • 3.2.4. 과제
        • 3.2.5. 해결방법
      • 3.3 모델의 배포와 추론기의 가동
        • 3.3.1. 모델을 릴리스한다는 것이란
        • 3.3.2. 학습환경과 추론환경의 라이브러리와 버전 선정
        • 3.3.3. 추론기에 모델 포함하기
      • 3.4 모델-인-이미지 패턴
        • 3.4.1. 유스케이스
        • 3.4.2. 해결하려는 과제
        • 3.4.3. 아키텍처
        • 3.4.4. 구현
        • 3.4.5. 이점
        • 3.4.6. 검토사항
      • 3.5 모델 로드 패턴
        • 3.5.1. 유스케이스
        • 3.5.2. 해결하려는 과제
        • 3.5.3. 아키텍처
        • 3.5.4. 구현
        • 3.5.5. 이점
        • 3.5.6. 검토사항
      • 3.6 모델의 배포와 스케일 아웃
      •  
    • ▣ 4장: 추론 시스템 만들기
      • 4.1 시스템을 만들어야 하는 이유
        • 4.1.1. 시작하기
        • 4.1.2. 머신러닝의 실용화
      • 4.2 웹 싱글 패턴
        • 4.2.1. 유스케이스
        • 4.2.2. 해결하려는 과제
        • 4.2.3. 아키텍처
        • 4.2.4. 구현
        • 4.2.5. 이점
        • 4.2.6. 검토사항
      • 4.3 동기 추론 패턴
        • 4.3.1. 유스케이스
        • 4.3.2. 해결하려는 과제
        • 4.3.3. 아키텍처
        • 4.3.4. 구현
        • 4.3.5. 이점
        • 4.3.6. 검토사항
      • 4.4 비동기 추론 패턴
        • 4.4.1. 유스케이스
        • 4.4.2. 해결하려는 과제
        • 4.4.3. 아키텍처
        • 4.4.4. 구현
        • 4.4.5. 이점
        • 4.4.6. 검토사항
      • 4.5 배치 추론 패턴
        • 4.5.1. 유스케이스
        • 4.5.2. 해결하려는 과제
        • 4.5.3. 아키텍처
        • 4.5.4. 구현
        • 4.5.5. 이점
        • 4.5.6. 검토사항
      • 4.6 전처리·추론 패턴
        • 4.6.1. 유스케이스
        • 4.6.2. 해결하려는 과제
        • 4.6.3. 아키텍처
        • 4.6.4. 구현
        • 4.6.5. 이점
        • 4.6.6. 검토사항
      • 4.7 직렬 마이크로서비스 패턴
        • 4.7.1. 유스케이스
        • 4.7.2. 해결하려는 과제
        • 4.7.3. 아키텍처
        • 4.7.4. 구현
        • 4.7.5. 이점
        • 4.7.6. 검토사항
      • 4.8 병렬 마이크로서비스 패턴
        • 4.8.1. 유스케이스
        • 4.8.2. 해결하려는 과제
        • 4.8.3. 아키텍처
        • 4.8.4. 구현
        • 4.8.5. 이점
        • 4.8.6. 검토사항
      • 4.9 시간차 추론 패턴
        • 4.9.1. 유스케이스
        • 4.9.2. 해결하려는 과제
        • 4.9.3. 아키텍처
        • 4.9.4. 구현
        • 4.9.5. 이점
        • 4.9.6. 검토사항
      • 4.10 추론 캐시 패턴
        • 4.10.1. 유스케이스
        • 4.10.2. 해결하려는 과제
        • 4.10.3. 아키텍처
        • 4.10.4. 구현
        • 4.10.5. 이점
        • 4.10.6. 검토사항
      • 4.11 데이터 캐시 패턴
        • 4.11.1. 유스케이스
        • 4.11.2. 해결하려는 과제
        • 4.11.3. 아키텍처
        • 4.11.4. 구현
        • 4.11.5. 이점
        • 4.11.6. 검토사항
      • 4.12 추론기 템플릿 패턴
        • 4.12.1. 유스케이스
        • 4.12.3. 해결하려는 과제
        • 4.12.3. 아키텍처
        • 4.12.4. 구현
        • 4.12.5. 이점
        • 4.12.6. 검토사항
      • 4.13 에지 AI 패턴
        • 4.13.1. 유스케이스
        • 4.13.2. 해결하려는 과제
        • 4.13.3. 아키텍처
        • 4.13.4. 구현
        • 4.13.5. 이점
        • 4.13.6. 검토사항
      • 4.14 안티 패턴 (온라인 빅사이즈 패턴)
        • 4.14.1. 상황
        • 4.14.2. 구체적인 문제
        • 4.14.3. 이점
        • 4.14.4. 과제
        • 4.14.5. 회피 방법
      • 4.15 안티 패턴 (올-인-원 패턴)
        • 4.15.1. 상황
        • 4.15.2. 구체적인 문제
        • 4.15.3. 이점
        • 4.15.4. 과제
        • 4.15.5. 회피 방법
      •  
  • [3부] 품질·운용·관리
    • ▣ 5장: 머신러닝 시스템의 운용
      • 5.1 머신러닝의 운용
      • 5.2 추론 로그 패턴
        • 5.2.1. 유스케이스
        • 5.2.2. 해결하려는 과제
        • 5.2.3. 아키텍처
        • 5.2.4. 구현
        • 5.2.5. 이점
        • 5.2.6. 검토사항
      • 5.3 추론 감시 패턴
        • 5.3.1. 유스케이스
        • 5.3.2. 해결하려는 과제
        • 5.3.2 아키텍처
        • 5.3.4. 구현
        • 5.3.5. 이점
        • 5.3.6. 검토사항
      • 5.4 안티 패턴 (로그가 없는 패턴)
        • 5.4.1. 상황
        • 5.4.2. 구체적인 문제
        • 5.4.3. 이점
        • 5.4.4. 과제
        • 5.4.5. 회피 방법
      • 5.5 안티 패턴 (‘그리고 아무도 없었다’ 패턴)
        • 5.5.1. 상황
        • 5.5.2. 구체적인 문제
        • 5.5.3. 이점
        • 5.5.4. 과제
        • 5.5.5. 회피 방법
      •  
    • ▣ 6장: 머신러닝 시스템의 품질관리
      • 6.1 머신러닝 시스템의 품질과 운용
      • 6.2 머신러닝 시스템의 정상성 평가 지표
        • 6.2.1. 머신러닝의 정상성
        • 6.2.2. 소프트웨어의 정상성
      • 6.3 부하 테스트 패턴
        • 6.3.1. 유스케이스
        • 6.3.2. 해결하려는 과제
        • 6.3.3. 아키텍처
        • 6.3.4. 구현
        • 6.3.5. 이점
        • 6.3.6. 검토사항
      • 6.4 추론 서킷브레이커 패턴
        • 6.4.1. 유스케이스
        • 6.4.2. 해결하려는 과제
        • 6.4.3. 아키텍처
        • 6.4.4. 구현
        • 6.4.5. 이점
        • 6.4.6. 검토사항
      • 6.5 섀도 A/B 테스트 패턴
        • 6.5.1. 유스케이스
        • 6.5.2. 해결하려는 과제
        • 6.5.3. 아키텍처
        • 6.5.4. 구현
        • 6.5.5. 이점
        • 6.5.6. 검토사항
      • 6.6 온라인 A/B 테스트 패턴
        • 6.6.1. 유스케이스
        • 6.6.2. 해결하려는 과제
        • 6.6.3. 아키텍처
        • 6.6.4. 구현
        • 6.6.5. 이점
        • 6.6.6. 검토사항
      • 6.7 파라미터 기반 추론 패턴
        • 6.7.1. 유스케이스
        • 6.7.2. 해결하려는 과제
        • 6.7.3. 아키텍처
        • 6.7.4. 구현
        • 6.7.5. 이점
        • 6.7.6. 검토사항
      • 6.8 조건 분기 추론 패턴
        • 6.8.1. 유스케이스
        • 6.8.2. 해결하려는 과제
        • 6.8.3. 아키텍처
        • 6.8.4. 구현
        • 6.8.5. 이점
        • 6.8.6. 검토사항
      • 6.9 안티 패턴 (오프라인 평가 패턴)
        • 6.9.1. 상황
        • 6.9.2. 구체적인 문제
        • 6.9.3. 이점
        • 6.9.4. 과제
        • 6.9.5. 회피 방법
      •  
    • ▣ 7장: ML옵스 시스템의 End-to-End 설계
      • 7.1 과제와 방법
        • 7.1.1. 머신러닝으로 해결 가능한 과제를 결정하기
        • 7.1.2. 머신러닝으로 해결 가능한지 검토하기
        • 7.1.3. 과제 해결 정도를 수치로 평가하기
        • 7.1.4. 머신러닝 시스템의 요건을 정의
        • 7.1.5. 머신러닝 모델 개발
        • 7.1.6. 평가 및 효과 검증
      • 7.2 수요예측 시스템
        • 7.2.1. 상황과 요건
        • 7.2.2. 시스템 만들기
      • 7.3 콘텐츠 업로드 서비스
        • 7.3.1. 상황과 요건
        • 7.3.2. 모델과 시스템
        • 7.3.3. 머신러닝 활용하기
        • 7.3.4. ML옵스
      • 7.4 정리하기