[목 차]
1부 ML옵스 기초 다지기
1장 ML옵스와 머신러닝 엔지니어링 시작하기
1.1 머신러닝 수명주기
__1.1.1 실험 단계
__1.1.2 개발/스테이징/프로덕션 단계
1.2 ML옵스에 필요한 역량
__1.2.1 머신러닝 엔지니어에게 필요한 역량
__1.2.2 사전 요구사항
1.3 머신러닝 플랫폼 구축
__1.3.1 직접 구축 vs 구매
__1.3.2 앞으로의 전망: ML옵스에서 LLM옵스로
__1.3.3 이 책에서 사용하는 도구
1.4 머신러닝 시스템 구축
__1.4.1 머신러닝 프로젝트 소개
__1.4.2 머신러닝 프로젝트
1.5 요약
2장 ML옵스란 무엇인가
2.1 반복적인 ML옵스 수명주기
__2.1.1 데이터 수집
__2.1.2 탐색적 데이터 분석
__2.1.3 모델링과 훈련
__2.1.4 모델 평가
__2.1.5 배포
__2.1.6 모니터링
__2.1.7 유지보수, 업데이트, 검토
2.2 견고한 ML옵스가 중요한 이유
2.3 성숙한 조직에서 ML옵스의 역할
2.4 데브옵스 vs ML옵스
2.5 ML옵스 성숙도 수준
__2.5.1 레벨 0: 기초
__2.5.2 레벨 1: 중급
__2.5.3 레벨 2: 고급
2.6 요약
3장 쿠버네티스 위에서 애플리케이션 구축하기
3.1 컨테이너와 도구
3.2 도커
__3.2.1 애플리케이션 코드 작성
__3.2.2 Dockerfile 작성하기
__3.2.3 도커 이미지 빌드 및 푸시
3.3 쿠버네티스
__3.3.1 쿠버네티스 아키텍처 개요
__3.3.2 kubectl
__3.3.3 쿠버네티스 객체
__3.3.4 네트워킹과 서비스
__3.3.5 기타 객체
__3.3.6 헬름 차트
__3.3.7 결론
3.4 지속적 통합과 배포
__3.4.1 깃랩 CI
__3.4.2 아르고 CD
3.5 프로메테우스와 그라파나
3.6 요약
2부 핵심 머신러닝 플랫폼 역량 구축
4장 신뢰할 수 있는 머신러닝 시스템 설계
4.1 실험 추적을 위한 ML플로
__4.1.1 데이터 탐색
__4.1.2 ML플로 추적
__4.1.3 ML플로 모델 레지스트리
4.2 피처 스토어로서의 피스트
__4.2.1 피처 등록
__4.2.2 피처 조회
__4.2.3 피처 서버
__4.2.4 피스트 UI 사용하기
4.3 요약
5장 머신러닝 파이프라인 오케스트레이션
5.1 큐브플로 파이프라인: 작업 오케스트레이터
__5.1.1 큐브플로 컴포넌트
__5.1.2 소득 분류기 파이프라인
5.2 요약
6장 머신러닝 모델 프로덕션화
6.1 배포 플랫폼으로서의 벤토ML
__6.1.1 벤토 빌드하기
__6.1.2 벤토 빌드 및 푸시
__6.1.3 벤토 배포하기
6.2 데이터 드리프트 모니터링을 위한 에비던틀리
__6.2.1 데이터 드리프트 탐지 보고서와 대시보드
__6.2.2 데이터 드리프트 탐지 큐브플로 파이프라인 컴포넌트
__6.2.3 API로 배포된 모델의 데이터 드리프트 탐지
6.3 요약
3부 ML옵스 실전 적용
7장 데이터 분석 및 준비
7.1 데이터 분석
__7.1.1 큐브플로에서 노트북 서버 실행하기
__7.1.2 워크스페이스와 데이터 볼륨
__7.1.3 설정 및 어피니티/톨러레이션
__7.1.4 메뉴 커스터마이징
__7.1.5 큐브플로 커스텀 노트북 이미지 생성하기
7.2 데이터 전달
__7.2.1 시나리오 1: 다운스트림 컴포넌트에 단순 값 전달하기
__7.2.2 시나리오 2: 대용량 데이터를 위한 경로 전달
__7.2.3 KFP v2 아티팩트 타입 개요
7.3 데이터 준비 실습
__7.3.1 데이터 준비: 객체 탐지
__7.3.2 데이터 준비: 영화 추천기
7.4 요약
8장 모델 훈련과 검증 I
8.1 객체 탐지 모델 훈련
__8.1.1 커스텀 데이터셋으로 YOLO 훈련하기
__8.1.2 모델 훈련
__8.1.3 시스템 의존성을 위한 컨테이너 컴포넌트
__8.1.4 검증 컴포넌트 만들기
__8.1.5 파이프라인 생성하기
__8.1.6 파이프라인 실행하기
__8.1.7 모델 아티팩트 검증하기
8.2 요약
9장 모델 훈련과 검증 II
9.1 PersistentVolumeClaim으로 데이터 저장하기
__9.1.1 PVC로 파이프라인 리팩터링
__9.1.2 효율적인 데이터셋 관리
__9.1.3 VolumeOp 생성하기
__9.1.4 PVC를 활용한 download_op
__9.1.5 데이터셋 직접 분할
__9.1.6 모델 훈련 간소화
__9.1.7 모델 검증 간소화
9.2 텐서보드로 훈련 추적하기
__9.2.1 새 텐서보드 실행하기
__9.2.2 YOLOv8 기본 그래프 살펴보기
9.3 영화 추천기 프로젝트
__9.3.1 MinIO에서 데이터 읽기 및 품질 보증
__9.3.2 모델 훈련 컴포넌트
__9.3.3 평가 지표
__9.3.4 ML플로를 활용한 실험 추적
__9.3.5 ML플로를 활용한 모델 레지스트리
__9.3.6 컴포넌트로 파이프라인 구성하기
__9.3.7 노트북에서의 로컬 추론
9.4 요약
10장 모델 추론과 서빙
10.1 모델 배포는 어렵다
10.2 벤토ML: 모델 배포를 간소화하다
10.3 벤토ML 빠르게 훑어보기
__10.3.1 벤토ML 서비스와 러너
10.4 벤토ML 서비스 로컬 실행
__10.4.1 벤토ML 러너로 모델 불러오기
10.5 벤토 빌드: 배포를 위한 서비스 패키징
__10.5.1 벤토 태그: Bento의 버전 관리
10.6 벤토ML과 ML플로 추론
10.7 ML플로만 사용해 추론 서비스 구축하기
10.8 K서브: 벤토ML의 대안
10.9 요약
11장 모니터링과 설명 가능성
11.1 모니터링
__11.1.1 기본 모니터링
__11.1.2 커스텀 지표
__11.1.3 로깅
__11.1.4 알림
11.2 데이터 드리프트 탐지
__11.2.1 객체 탐지
__11.2.2 영화 추천기
11.3 설명 가능성
__11.3.1 객체 탐지
__11.3.2 영화 추천
11.4 요약
4부 LLM을 위한 ML옵스 확장
12장 LLM 기반 시스템 설계
12.1 LLM옵스: 새로운 도전, 익숙한 원칙
__12.1.1 LLM 애플리케이션이 다른 이유
__12.1.2 LLM을 위한 머신러닝 플랫폼 확장
__12.1.3 LLM 애플리케이션을 위한 핵심 도구
12.2 DataKrypt의 DakkaBot 구축: 간단한 RAG 아키텍처
__12.2.1 구축하게 될 시스템
__12.2.2 단일 API 호출을 넘어서: 조합 가능성을 고려한 설계
__12.2.3 구글의 제미나이 LLM과 임베딩
__12.2.4 검색 컴포넌트
__12.2.5 증강 컴포넌트
__12.2.6 생성 컴포넌트
12.3 DakkaBot에 UI 추가하기
12.4 LLM 애플리케이션을 위한 관측 가능성
__12.4.1 도커로 랭퓨즈 설치하기
__12.4.2 랭퓨즈와 DakkaBot 통합
__12.4.3 DakkaBotCore의 관측 가능성 강화
__12.4.4 전통적인 지표를 넘어서
12.5 요약
13장 프로덕션 LLM 시스템 설계
13.1 프롬프트 엔지니어링: 생성형 AI 시대의 코드
__13.1.1 프롬프트를 핵심 인프라로 취급하기
__13.1.2 DakkaBot을 위한 랭퓨즈 프롬프트 관리
__13.1.3 프로덕션 환경을 위한 랭퓨즈 프롬프트 관리
13.2 LLM 애플리케이션 테스트
__13.2.1 LLM 응답을 위한 평가 프레임워크
__13.2.2 안전성 및 적대적 테스트
13.3 프로덕션 환경의 거버넌스와 안전성
__13.3.1 안전 가드레일 구현
13.4 비용 최적화 전략
__13.4.1 LLM 경제성 이해하기
__13.4.2 모델 선택 전략
__13.4.3 캐싱 전략
__13.4.4 효율성을 위한 프롬프트 최적화
__13.4.5 프로덕션 비용 모니터링
__13.4.6 전통적인 머신러닝에서 LLM옵스로
13.5 요약
부록 A 설치 및 설정
A.1 커맨드라인 도구의 로컬 설치(맥 및 리눅스)
__A.1.1 yq YAML 프로세서
__A.1.2 Kustomize
__A.1.3 kubectl
__A.1.4 K8s 배포판
__A.1.5 k3s 설치
__A.1.6 MicroK8s 설치
__A.1.7 아르고 CD
__A.1.8 큐브플로
__A.1.9 클라우드 제공자 K8s 설정
__A.1.10 ML플로 설정
A.2 ML플로 배포
__A.2.1 레디스 온라인 스토어 설정
__A.2.2 벤토ML 및 야타이 설정
__A.2.3 에비던틀리 UI 설정
부록 B YAML 기초
B.1 기본 YAML 파일
__B.1.1 주석
__B.1.2 스칼라 값
__B.1.3 리스트
__B.1.4 중첩 구조(맵)
__B.1.5 따옴표로 감싼 문자열
__B.1.6 여러 줄 문자열
__B.1.7 YAML의 데이터 타입
B.2 별칭과 앵커
__B.2.1 참조(데이터 병합 및 재사용)
__B.2.2 복합 데이터 타입
__B.2.3 커스텀 데이터 타입
__B.2.4 블록 스타일 vs 플로우 스타일
__B.2.5 키 정렬과 대소문자 구분
__B.2.6 모범 사례
| 이 책에서 다루는 내용 |
• 엔드투엔드 ML옵스/LLM옵스 플랫폼 구축
• 머신러닝 및 AI 모델의 프로덕션 배포
• 효과적인 모니터링, 평가, 설명 가능성
| 이 책의 대상 독자 |
이 책은 주피터 노트북을 넘어 프로덕션 머신러닝 시스템으로 나아가고자 하는 데이터 과학자와 소프트웨어 엔지니어를 위한 것이다. 파이썬에 익숙하고 머신러닝 개념에 대한 기본적인 이해가 있어야 한다. 도커, 쿠버네티스 또는 ML옵스(MLOps) 도구에 대한 사전 경험은 필요하지 않다(모든 것을 처음부터 구축한다). 경험 있는 머신러닝 실무자는 인프라에 대한 체계적인 접근 방식과 마지막 장의 최신 LLM옵스(LLMOps) 내용에서 도움을 얻을 수 있다.
| 이 책의 구성 |
AI와 머신러닝 시스템은 언어 라이브러리와 애플리케이션 프레임워크부터 워크플로와 배포 인프라, LLM과 그 밖의 고급 모델에 이르기까지 많은 구성 요소로 이뤄져 있다. 잘 설계된 내부 개발 플랫폼은 개발자에게 명확하게 정의된 도구와 가이드라인을 제공하여 개발 프로세스를 가속화하고, 일관성, 보안, 개발자 경험을 향상시킨다.
이 책은 머신러닝 및 AI 애플리케이션을 위한 효과적인 내부 개발 플랫폼을 구축하는 방법을 보여준다. 각 장에서는 오케스트레이션 파이프라인 설정, 모델 선택, 학습·추론·서빙을 위한 리소스 할당 등 머신러닝 워크플로의 핵심 요소를 다룬다. 책의 과정을 찬찬히 따라간다면, 큐브플로(Kubeflow), ML플로, 벤토ML, 에비던틀리(Evidently), 피스트(Feast), 랭체인(LangChain) 같은 오픈소스 도구를 사용해 다목적으로 활용할 수 있는 모던 플랫폼을 만들 수 있다. 데이터 엔지니어와 소프트웨어 엔지니어를 위한 필독서로, 이 책에 실린 모든 예제는 파이썬으로 작성되었다.
1부에서는 ML옵스가 무엇을 수반하는지와 머신러닝 시스템의 인프라 기반을 구축하는 방법을 설명한다.
• 1장 ‘ML옵스와 머신러닝 엔지니어링 시작하기‘ 머신러닝 수명주기, 필수 ML옵스 기술, 프로덕션 머신러닝 플랫폼을 처음부터 구축하는 데 필요한 기본 컴포넌트를 소개한다.
• 2장 ‘ML옵스란 무엇인가’ 반복적인 ML옵스 수명주기를 탐구하고, ML옵스를 전통적인 데브옵스(DevOps)와 비교하며, 머신러닝 운영 구현에 있어 조직의 성숙도 수준을 살펴본다.
• 3장 ‘쿠버네티스 위에서 애플리케이션 구축하기’ 도커를 이용한 컨테이너화, 쿠버네티스를 이용한 오케스트레이션, CI/CD(지속적 통합/지속적 배포) 자동화, 프로메테우스(Prometheus)와 그라파나(Grafana)를 이용한 모니터링 등 머신러닝 플랫폼의 인프라 기반을 다룬다.
2부에서는 비정형 머신러닝 프로세스를 프로덕션에 바로 사용할 수 있는 시스템으로 전환하는 핵심 플랫폼 기능 구축에 중점을 둔다.
• 4장 ‘신뢰할 수 있는 머신러닝 시스템 설계’ ML플로를 사용한 머신러닝 실험 추적, 모델 레지스트리에서의 모델 관리, 재현 가능한 머신러닝 워크플로를 위한 피스트 피처 스토어 활용 방법을 시연한다.
• 5장 ‘머신러닝 파이프라인 오케스트레이션’ 큐브플로 파이프라인을 사용한 파이프라인 오케스트레이션으로 배치 추론 워크플로를 자동화하는 방법을 가르치며, 재사용 가능한 컴포넌트를 구축하고 이를 프로덕션 파이프라인으로 결합하는 방법을 시연한다.
• 6장 ‘머신러닝 모델 프로덕션화’ 벤토ML을 사용해 머신러닝 모델을 API 엔드포인트로 배포하는 방법과 에비던틀리(Evidently)를 사용해 배치 및 실시간 사용 사례에서 프로덕션의 데이터 드리프트를 모니터링하는 방법을 보여준다.
3부에서는 두 가지 완전한 실제 프로젝트를 통해 ML옵스 원칙을 실제로 적용하는 모습을 보여줍니다.
• 7장 ‘데이터 분석 및 준비’ 큐브플로 노트북을 사용한 데이터 분석과 두 가지 종합 프로젝트(신분증 탐지기와 영화 추천기)를 위한 견고한 데이터 준비 파이프라인을 구축한다.
• 8장 ‘모델 훈련과 검증 I’ 모듈형 훈련 컴포넌트 설계, 지표 및 아티팩트 캡처, YOLO(You Only Look Once) 객체 탐지를 사용한 실용적인 예제를 통한 모델 검증 전략 구현에 중점을 둔다.
• 9장 ‘모델 훈련과 검증 II’ 쿠버네티스 퍼시스턴트 볼륨(Persistent Volume)을 사용한 효율적인 데이터 관리로 훈련 파이프라인을 확장하는 방법, 텐서보드(TensorBoard)를 통합한 훈련 시각화, ML플로를 사용한 포괄적인 실험 추적 및 모델 버전 관리를 보여준다.
• 10장 ‘모델 추론과 서빙’ 벤토ML을 사용해 머신러닝 모델을 프로덕션 서비스로 배포하는 과정을 안내하며, 로컬 개발, 컨테이너화, 관측 가능성(observability) 엔드포인트, 원활한 모델 수명주기 관리를 위한 ML플로 통합을 다룬다.
• 11장 ‘모니터링과 설명 가능성’ 지표 수집, Alertmanager를 이용한 알림, Loki를 이용한 로그 집계, deepchecks를 이용한 데이터 드리프트 탐지, 예측 동작을 이해하기 위한 모델 설명 가능성(explainability) 기법을 통해 머신러닝 애플리케이션을 위한 포괄적인 모니터링을 구현하는 방법을 보여준다.
4부에서는 LLM옵스를 통해 ML옵스를 생성형 AI로 확장하여, 벡터 데이터베이스, 프롬프트 관리, 안전 제어를 갖춘 프로덕션 RAG 시스템을 구축한 다음, 테스트, 가드레일, 비용 최적화를 통해 기업 배포에 맞게 강화한다.
• 12장 ‘LLM 기반 시스템 설계’ DakkaBot이라는 프로덕션 RAG 시스템을 구축하여 LLM옵스를 소개하며, 문서 수집, 벡터 데이터베이스, 랭체인(LangChain) 오케스트레이션, 체인릿(Chainlit) UI 개발, 랭퓨즈(Langfuse)를 이용한 포괄적인 관측 가능성을 다룬다.
• 13장 ‘프로덕션 LLM 시스템 설계’ 랭퓨즈를 이용한 프롬프트 엔지니어링, DeepEval과 G-Eval을 이용한 시맨틱 테스트, 프롬프트푸(Promptfoo)를 이용한 적대적 보안 테스트, 안전 가드레일 구현, 토큰 기반 가격 모델을 위한 비용 최적화 전략을 통해 LLM 애플리케이션을 프로덕션에 맞게 강화하는 데 중점을 둔다.
부록에서는 이 책 전반의 실습 연습을 지원하기 위한 필수 설정 지침과 참고 자료를 제공한다.
• 부록 A ’설치 및 설정’ 로컬 머신에서 ML옵스 플랫폼의 전체 설치 및 설정 과정을 안내하며, 커맨드라인 도구(yq, Kustomize, kubectl), 쿠버네티스 배포판(리눅스용 k3s, 맥용 MicroK8s), 아르고 CDArgo CD를 사용한 큐브플로 배포, ML플로, PostgreSQL, MinIO, 레디스(Redis), 벤토ML, 에비던틀리 UI 같은 지원 인프라 설정을 다룬다.
• 부록 B ‘YAML 기초’ 키-값 쌍, 리스트, 중첩 구조, 데이터 타입, 별칭과 앵커, 블록 대 플로우 스타일, 일반적인 함정을 다루는 YAML 문법 및 모범 사례에 대한 종합 참조 가이드를 제공한다. 쿠버네티스 설정은 YAML 파일에 크게 의존하므로, 부록 B는 이 책의 실습 및 배포 전반에 걸쳐 사용되는 매니페스트(manifest) 파일을 이해하고 문제를 해결하는 데 필수적인 참고 자료 역할을 한다.