메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

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

14가지 패턴으로 분산 머신러닝 파이프라인 구축하기

한빛미디어

번역서

판매중

  • 저자 : 위안 탕
  • 번역 : 정민정
  • 출간 : 2024-11-29
  • 페이지 : 304 쪽
  • ISBN : 9791169213134
  • eISBN : 9791169218832
  • 물류코드 :11313
  • 초급 초중급 중급 중고급 고급
4.6점 (17명)
좋아요 : 4

14가지 패턴으로 대규모 머신러닝 시스템을 완성하라!


머신러닝의 급속한 발전과 함께 데이터와 트래픽이 폭발적으로 증가하면서, 단순히 성능 향상뿐 아니라 안정적이고 확장 가능한 시스템 설계가 중요해지고 있다. 이에 본 책은 대규모 머신러닝 시스템을 설계하고 운영하기 위한 14가지 실용적인 설계 패턴을 소개하고, 실무에서 빈번히 발생하는 문제와 해결책을 제시한다. 또한 텐서플로, 쿠버네티스, 쿠브플로, 아르고 워크플로 등 클라우드 기반의 최신 도구를 활용한 실무 예제를 통해 이론과 실무를 함께 학습할 수 있도록 구성했다. 특히 시스템 장애나 과부하 상황에서의 대처 방안, 효율적인 자원 관리를 상세히 다룸으로써 실무자들의 기술적 문제 해결 역량을 높이는 데 중점을 두었다. 복잡해지는 머신러닝 시스템의 난관을 뚫고 나아가려는 모든 개발자에게 이 한 권이 길잡이가 될 것이다.
 

14가지 패턴

  • 데이터 수집 패턴: 배치 처리, 샤딩, 캐싱
  • 분산 학습 패턴: 파라미터 서버, 집합 통신, 탄력성 및 내결함성
  • 모델 서빙 패턴: 레플리카 서버, 서비스 샤딩, 이벤트 기반 처리
  • 워크플로 패턴: 팬인 및 팬아웃, 동기 및 비동기, 스텝 메모이제이션
  • 운영 패턴: 스케줄링, 메타데이터

 

위안 탕 저자

위안 탕

Akuity의 창립 엔지니어로, 개발자를 위한 기업용 플랫폼을 구축하고 있다. 이전에 알리바바와 Uptake에서 데이터 과학 및 엔지니어링팀을 이끌며 AI 인프라와 AutoML 플랫폼 개발에 주력했다. 아르고(Argo)와 쿠브플로(Kubeflow)의 프로젝트 리더이자 텐서플로(TensorFlow)와 XGBoost의 메인테이너로 활동 중이며, 이 외에도 다양한 오픈 소스 프로젝트를 만들어 운영 중이다. 세 권의 머신러닝 서적을 집필하고 여러 논문을 발표했다. 다양한 콘퍼런스에서 정기적으로 다양한 발표를 정기적으로 진행하고 있으며, 여러 조직에서 기술 자문과 리더, 멘토 역할을 수행하고 있다.

정민정 역자

정민정

국내 주요 IT 기업에서 머신러닝 엔지니어로 활동하며 대규모 실시간 추론 시스템을 설계 및 운영하고 있다. 컴퓨터 비전과 자연어 처리를 중심으로 다양한 도메인의 머신러닝 모델을 실제 서비스에 적용해왔으며, 현재는 머신러닝 서비스팀을 이끌고 있다. 확장 가능하면서도 안정적인 시스템을 구축하는 데 주력하고 있으며, 실용적인 머신러닝 엔지니어링 문화를 전파하는 데 힘쓰고 있다.

[PART 1 분산 머신러닝 시스템의 배경지식]


CHAPTER 01 분산 머신러닝 시스템 소개
_1.1 대규모 머신러닝
_1.2 분산 시스템
_1.3 분산 머신러닝 시스템
요약

 

[PART 2 분산 머신러닝 시스템의 설계 패턴]


CHAPTER 02 데이터 수집 패턴
_2.1 데이터 수집이란?
_2.2 Fashion-MNIST 데이터셋
_2.3 배치 처리 패턴: 제한된 메모리로 무거운 연산 실행하기
_2.4 샤딩 패턴: 매우 큰 데이터셋을 여러 워커에 분산시키기
_2.5 캐싱 패턴: 효율적인 학습을 위해 데이터 재활용하기
요약

 

CHAPTER 03 분산 학습 패턴
_3.1 분산 학습이란?
_3.2 파라미터 서버 패턴: 8백만 개의 유튜브 영상에 태그 달기
_3.3 집합 통신 패턴: 파라미터 서버가 병목이 되지 않도록 개선하기
_3.4 탄력성 및 내결함성 패턴: 제한된 연산 자원으로 인한 실패 대응하기
요약

 

CHAPTER 04 모델 서빙 패턴
_4.1 모델 서빙이란?
_4.2 레플리카 서버 패턴: 늘어나는 요청량 처리하기
_4.3 서비스 샤딩 패턴: 고해상도 영상을 처리하는 대규모 모델 서빙 다루기
_4.4 이벤트 기반 처리 패턴: 이벤트 기반으로 모델 서빙하기
요약

 

CHAPTER 05 워크플로 패턴
_5.1 워크플로란?
_5.2 팬인 및 팬아웃 패턴: 복잡한 머신러닝 워크플로 체계화
_5.3 동기 및 비동기 패턴: 병렬성으로 더 빠르게 처리하기
_5.4 스텝 메모이제이션 패턴: 반복되는 작업 생략하기
요약

 

CHAPTER 06 운영 패턴
_6.1 머신러닝 시스템 운영하기
_6.2 스케줄링 패턴: 공유 클러스터 자원을 효과적으로 할당하기
_6.3 메타데이터 패턴: 실패를 적절히 처리하는 방법
요약

 

[PART 03 분산 머신러닝 시스템 구축]
 

CHAPTER 07 실습 프로젝트 둘러보기
_7.1 프로젝트 개요
_7.2 데이터 수집 단계
_7.3 모델 학습 단계
_7.4 모델 서빙 단계
_7.5 전체 워크플로 구조
요약

 

CHAPTER 08 실습 관련 기술 둘러보기
_8.1 텐서플로: 머신러닝 프레임워크
_8.2 쿠버네티스: 분산 컨테이너 관리 시스템
_8.3 쿠브플로: 쿠버네티스 머신러닝 워크로드 관리 시스템
_8.4 아르고 워크플로: 컨테이너 기반 워크플로 엔진
요약

 

CHAPTER 09 실습 프로젝트
_9.1 데이터 수집
_9.2 모델 학습
_9.3 모델 서빙
_9.4 전체 워크플로
요약

대규모 데이터 처리와 분석을 위한 분산 머신러닝 실무 가이드

 

이 책은 분산 시스템에서 머신러닝을 구현하고 최적화하는 데 필요한 14가지 핵심 패턴과 모범 사례를 소개하는 실무 지침서다. 복잡한 분산 머신러닝 개념을 쉽게 이해할 수 있도록 설명하고, 실무에서 바로 적용할 수 있는 실질적인 방법론을 제시한다. 데이터 분산 처리, 모델 학습의 병렬화, 효율적인 리소스 관리 등 분산 머신러닝의 전반적인 과정에서 발생할 수 있는 다양한 문제를 해결하기 위한 체계적인 패턴을 소개한다. 이를 통해 AI와 데이터 과학 분야의 전문가들뿐만 아니라, 대규모 데이터 처리 및 분석을 다루는 모든 이에게 실용적인 가이드가 될 것이다.

 

주요 내용

  • 데이터 수집, 분산 학습, 모델 서빙 등 다양한 단계로 구성된 ML 파이프라인 구축
  • 쿠버네티스, 텐서플로, 쿠브플로, 아르고 워크플로를 사용해 ML 작업 자동화
  • 다양한 패턴과 접근 방식 간의 트레이드오프 평가
  • 대규모 머신러닝 작업 관리 및 모니터링

 

 

 

이 서평은 출판사의 후원을 받아 작성하였습니다.

 

어떤 분야가 되었건 마찬가지겠지만, 머신러닝도 똑같이 실무에 가면 이런저런 문제에 부닥친다. 특히 단순히 머신러닝의 수학적 모델링에 관한 문제뿐 아니라, 서버나 다른 인프라 같은 문제들이 실무를 해야 하는 사람들에게 풀기 어려운 과제가 되곤 한다. 

 

풀기 어렵다는 말은 단순히 문제가 기술적인 측면에서 어렵다는 의미는 아니다.

물론 기술적으로 어렵다. 분산처리 시스템인데 당연히 어려울 수밖에 없다. 

 

하지만, 실무를 해야하는 곳이 분산처리 시스템을 운용해야할 만큼 규모가 큰 데이터를 다루는 곳이라면, 각 팀마다 R&R이 다를 것이고, 인프라를 다루는 팀이나 DBA나 각각 분리되어있고, PM 조직도 따로 있을 것이기 때문에 이들과의 소통 및 협업을 통해 원하는 것을 이끌어내야 한다는 점이 더 어려울 것이다. 

 

그렇기에 이 책은 ML을 실무로 하지 않는 나 같은 사람에게도 유용한 책일 수 있다.

 

이 책을 100% 이해할 필요가 없기 때문이다. 깊이 있는 MLOps는 잘 모르더라도, 대략적으로 어떤 용어를 어떤 개념으로 사용하는지, 어떻게 문제접근을 하는지 소통을 하기 위한 도구 정도로 생각하면서 읽어본다면, 컴퓨터 공학적 지식도 쌓으면서 인프라와 ML 모두에 가까워질 수 있다. 물론 쉽진 않겠지만 말이다.

 

 

 

 

 

밑줄긋기

 

p.51

넘파이 배열 형태로 메모리에 올라가있던 Fashion-MNIST 데이터셋을 텐서플로의 from_tensor_slices() API를 사용해 tf.Dataset 객체로 변환했다. 이 과정에서 넘파이 배열은 메모리상에 여러 번 복사되었고, 결과적으로 tf.GraphDef의 메모리 제한값인 2GB에 다다르면서 메모리 에러가 발생했다. 즉, 이런 방식으로는 이보다 큰 데이터셋은 사용할 수 없다.

 

이런 문제는 텐서플로와 같은 프레임워크를 사용하다보면 흔히 발생할 수 있다. 해결책은 간단하다. 이런 패턴은 텐서플로의 성능을 최대로 활용하지 않는 패턴이므로, 더 큰 데이터셋을 사용하기 위해서는 전체 데이터셋을 메모리에 모두 올리지 않고 사용할 수 있는 다른 API를 사용해야 한다. 

 

예를들어 tensorflow_io는 기본 텐서플로가 제공하지 않는 파일 시스템이나 파일 포맷 등과 관련된 기능을 모아놓은 라이브러리이다. 아래 코드와 같이 tfio.IODataset.from_mnist()를 이용하면 MNIST 데이터셋을 로컬 디스크에 저장하지 ㅇ낳고 바로 메모리에 올릴 수 있다. 이는 tensorflow_io가 내부적으로 HTTP 파일 시스템을 사용하기 때문이다.

 

import tensroflow_io as tfio

dataset_url = "https://storage.googleapis.com/cvdf-datasets/mnist/"
d_train = tfio.IODataset.from_mnist(
    dataset_url + "train-images-idx3-ubyte.gz"
    dataset_url + "train-labels-idx1-ubyte.gz"
   )

 

p.54~55

배치 처리를 수행하기에 앞서 고려해야 하는 사항이 있다. 이 방식은 데이터셋을 스트리밍 방식으로 전체 데이터셋의 일부로 학습을 실행할 수 있는 수학적 연산이나 알고리즘에만 적용할 수 있다. 다시 말해 알고리즘 학습을 위해 전체 데이터셋을 한 번에 학습하는 것이 필요하다면 배치 처리를 사용할 수 없다. 예를 들어 학습을 위해 특정 피처의 총합을 알아야 하는 알고리즘이라면 배치 처리는 실행 가능한 방법이 아니다. 전체 데이터셋의 부분 집합으로는 해당 정보를 얻을 수 없기 때문이다. 머신러닝 연구자나 실무자가 Fashion-MNIST에 대해 더 나은 성능과 정확도를 얻고자 다양한 머신러닝 모델을 사용한다고 가정해보자. 이때 어떤 알고리즘이 모델의 파라미터를 업데이트하기 위해 각 클래스마다 최소 10개의 데이터를 필요로 한다면, 배치 처리는 적절한 방법이 아니다. 모든 미니배치에 각 클래스별로 항상 최소 10개의 데이터가 포함되는 것이 아니기 때문이다. 특히 배치 크기가 작다면 더욱 그렇다. 극단적인 예시로 배치 크기가 10인 경우를 생각해보자. 모든 미니배치에 각 클래스의 데이터가 최소 하나씩 포함되는 경우, 즉 10개 클래스의 데이터를 모두 한 장씩 포함한 10장이 구성되는 경우는 매우 드물 것이다.

 

기억해야 할 또 다른 점이 있다. 머신러닝, 특히 딥러닝 모델을 학습시킬 때 적절한 배치 크기는 자원을 얼마나 사용할 수 있느냐에 따라 크게 달라진다는 것이다. 특히 공유 자원 환경(shared-resource environment)이라면 배치 크기를 결정하는 것이 더욱 어려워진다. 머신러닝 학습에서 자원을 얼마나 효율적으로 활용하는지는 모델의 구조뿐만 아니라 배치 크기에도 달려 있다. 이렇게 자원과 배치 크기 사이의 상호 의존성은 머신러닝 실무자가 작업을 효율적으로 실행하고 자원을 활용하기 위해 고려해야 하는 것들을 더욱 복잡하게 만든다. 

 

다행히도 배치 크기를 자동으로 최적화해주는 알고리즘과 프레임워크가 있다. 예를 들어 AdaptDL(https://github.com/petuum/adaptdl)을 사용하면 자동으로 배치 크기를 조절하여 효율적으로 분산학습을 할 수 있다. 이 프레임워크는 학습 과정에서 시스템 성능과 그레이디언트 노이즈 스케일을 측정하여 가장 효율적인 배치 크기를 선택한다. 

 

p.58

배치 처리 방식은 모델을 배치별로 순차적으로 학습시킬 충분한 시간이 있는 경우에만 괜찮은 방법일 수 있다. 그러나 실제 애플리케이션을 개발하기 위해서는 더 효율적으로 모델을 학습시키는 방법이 필요하다. 

 

p.60

큰 데이터셋을 여러 개의 작은 조각으로 나누어 여러 워커에 분산시키는 프로세스를 샤딩(sharding)이라고 하며, 이러한 작은 데이터 조각을 데이터 샤드(data shard)라고 한다.

 

p.61

샤드는 본질적으로 전체 데이터셋의 일부를 포함하도록 분할하는 수평 데이터 분할 (horizontal data partition)이며, 가로 분할이라고도 한다. 

 

p.63

수동 샤딩의 가장 큰 문제는 샤드가 균일하지 않게 할당될 수 있다는 점이다. 샤드의 크기가 균일하지 않으면 문제가 발생할 수 있다. 일부 샤드는 과도하게 커져 과부하가 걸리는 반면, 다른 샤드는 지나치게 작아 워커의 자원이 낭비될 수 있다. 이러한 불균형은 여러 개의 워커로 모델을 학습시키는 프로세스가 지연되는 원인이 된다. 

 

p.64~65

한 샤드에 너무 많은 데이터가 들어가게 되면 속도가 느려지거나 서버에 과부하가 걸릴 수 있으므로 피하는 것이 좋다. 이 문제는 전체 데이터셋을 너무 적은 수의 샤드에 강제로 분산시키는 경우에 발생할 수 있다. 개발 환경 혹은 테스트 환경에서는 시도해도 큰 문제가 되지 않지만, 프로덕션 환경에서 사용하기에는 이상적이지 않다. 

 

또한 데이터셋에 새로운 데이터가 업데이트될 때마다 수동으로 샤딩을 진행하는 것은 운영 비용이 클 뿐만 아니라 복잡도 또한 높아진다. 데이터 유실을 방지하기 위해 여러 개의 워커가 전부 백업되어야 하며, 데이터 마이그레이션 혹은 스키마 변경이 일어나는 경우 모든 샤드가 동일한 스키마 복사본을 유지하는 것 또한 보정되어야 한다. 

 

이러한 문제를 해결하기 위해 수동 샤딩 대신 알고리즘을 기반으로 하는 자동 샤딩을 사용할 수 있다. 예를 들어 해시 샤딩(hash sharding)은 데이터 샤드의 키값으로 해시를 생성한다. 생성된 해시값은 각 데이터가 속할 샤드를 결정한다. 균일한 해싱 알고리즘을 사용한다면 해시 함수가 데이터를 서로 다른 워커에 고르게 분산시킬 것이므로 위에서 언급한 문제를 줄일 수 있다. 또한 비슷한 데이터가 같은 샤드에 배치될 가능성도 낮아진다. 

 

샤딩 패턴은 매우 큰 데이터셋을 여러 데이터 샤드로 나누어 여러 워커에 분산시키고, 각 워커가 개별 데이터 샤드를 독립적으로 사용함으로써 성능을 크게 높인다. 이 방법을 활용하면 배치 처리가 순차적으로 모델을 학습시킴으로써 생기는 지연을 피할 수 있다. 배치와 샤딩 패턴은 전체 데이터셋을 모두 사용하면서 모델 학습 프로세스를 향상시킨다. 다만, 전체 데이터셋을 여러 번 사용해야 하는 머신러닝 알고리즘과 같은 경우에는 배치 및 샤딩을 두 번 이상 수행해야 한다.

 

p.66

트리 기반 알고리즘이나 딥러닝 같은 현대의 머신러닝 알고리즘은 대부분 여러 에포크에 걸친 학습이 필요하다. 1 에포크란 전체 데이터셋을 모두 사용하는 한 번의 주기를 의미한다. 즉, 데이터셋에 포함된 모든 데이터를 최소 한 번씩 전부 사용해서 학습을 진행하는 단위다. 

 

p.68~69

머신러닝 모델을 여러 에포크에 걸쳐 학습시키는 데 비현실적으로 많은 시간이 든다면 어떤 방법으로 개선할 수 있을까? 첫 번째 에포크는 말 그대로 머신러닝 모델이 전체 데이터셋을 처음 사용해서 학습하는 단계이기 때문에 할 수 있는 방법이 거의 없다. 하지만 두 번째라면 어떨까? 모델이 이미 데이터셋을 한 번은 사용했다는 점을 활용해 볼 수 있지 않을까?

 

모델 학습에 사용하는 노트북이 충분한 연산 자원과 메모리, 저장 공간을 가지고 있다고 가정해보자. 머신러닝 모델이 학습 데이터를 메모리에 올려서 사용했다면 나중에 학습할 때 디스크에서 메모리로 올리는 작업을 반복하는 대신 데이터를 메모리에 유지시키는 방법이 있다. 다른 말로 하면 학습 데이터를 캐싱(caching)해놓는 것이다. 데이터가 디스크 대신 메모리에 유지된다면 해당 데이터에 다시 접근하는 것은 훨씬 빨라진다. 

 

p.70~71

캐싱 패턴을 활용하면 모델 학습 과정에서 동일한 데이터셋을 반복적으로 가져오느라 낭비되는 시간을 크게 줄일 수 있다. 캐싱의 또 다른 장점은 머신러닝 파이프라인에서 예상치 못한 오류가 발생했을 때 캐시에 저장된 데이터를 재활용할 수도 있다는 점이다.

 

p.72

일반적으로, 보다 견고하고 안정성이 요구되는 시스템이 필요한 상황이라면 디스크 캐시를 사용하고, 속도나 시간 비용을 줄이는 것이 더 중요한 상황이라면 인메모리 캐시를 사용하는 편이 좋다. 특히 디스크 캐시는 원격 데이터베이스로부터 데이터를 가져와서 사용할 때 매우 유용하다. 네트워크 통신은 매우 느리고 때로는 불안정한 경우도 있기 때문이다. 

 

p.87

머신러닝 엔지니어 혹은 DevOps 엔지니어는 파라미터 서버 패턴을 구성할 때 파라미터 서버와 워커를 각각 몇 대씩, 혹은 어떤 비율로 구성할지 결정하는 데 어려움을 겪을 수 있다. 워커가 계산한 그레이디언트뿐만 아니라 파라미터 서버에 있는 최신 모델 파티션을 주고받는 것까지 고려한다면 워커와 파라미터 서버 간 발생하는 통신 비용은 적지 않다. 모델이 더욱 커서 파라미터 서버의 수가 더 늘어난다면 각 워커에서 실행되는 연산에 비해 통신 비용이 막대해지는 경우가 생길 수도 있다. 

 

머신러닝 기술이 발전하며 모델링에 대한 책은 많았지만, 실제로 현업에서 이를 서비스로 서빙하려면 고려할 사항이 굉장히 많다. 다른 무엇보다 데이터가 차지하는 용량, 그리고 그로 인해 연산 중 메모리 자원을 효율적으로 사용해야만 하고, 이로 인해 분산 컴퓨팅은 선택이 아닌 필수가 되고 있다. 저자는 특정한 기술 스택의 활용 방법을 제시하기 보다는, 본질적으로 문제를 어떻게 해결할 수 있는가에 대한 전체적인 청사진을 제시하고 있다.

 

나 또한 시스템을 구축하는 것에 흥미가 있어서 이 책을 읽으며 실제로 간단한 실습을 진행해보았다. 물론, 데이터 수집 단계에서부터 시간이 오래 걸려, 시간 내에 모든 구성 요소를 온전히 구현하지는 못했지만... 향후에 틈틈이 구현할 예정이다 (링크)

 

 

실무에서 마주하는 문제에 대한 방향성 제시

이 책은 미래에 앞둔 또는 당장 마주한 성능적 결핍을 어떻게 해소할 수 있는지, 또 그 방법은 특히 어떤 상황에서 사용하면 좋은지 설명하고 있다. 시스템의 청사진을 간명하게 제시하고 있다는 점에서 머신러닝 모델링 능력은 뛰어나나, 백엔드 개발에는 경험이 부족한 연구원들이라면 이 책을 통해서 빠르게 방향성을 잡아나갈 수 있을 것이라 생각한다. 그리고 작은 규모의 데이터를 기반으로 머신러닝 서비스를 운영하던 업체가 성장하여, 보다 큰 규모의 데이터셋을 기반으로 안정적인 운영을 시도할 때 참고하면 좋을만한 책이다.

 

구체적인 기술 활용 방법에 대해서는 다루지 않는다

하둡과 같이 주로 활용되는 스택에 대한 내용은 없고, Kubernetes/KubeFlow/ArgoCD 같이 언급된 기술에 대한 구체적인 활용 방법도 부족하다. 엄연히 굉장히 큰 관점에서 문제를 어떻게 해결할 수 있을지 인사이트를 주는 책이라고 보면 된다.

 

마치며...

실제로 실습을 해보며 느낀 점은, 방향성을 잡는 데에는 많은 도움이 되었지만, 실질적인 개발 경험이 부족한 사람이 이 책만을 가지고 개발하는 것은 어려울 것이라는 점이다. 그래서인지 책에서도 1년 이상의 개발 경험을 필요로 한다고 명시하고 있다. 그것만 제외하면 전체적인 흐름을 파악하는데에는 좋다. 그림도 많고 원리도 설명하기 때문이다. 제시한 방법이 어떻게 효율을 높이는지 잘 설명하고 있다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

현업에서 머신러닝 시스템을 구축한다고 하면 대용량 데이터를 빠르게 학습하고 처리하는 분산 시스템의 구성이 필수적일 것입니다. 단순히 머신러닝 알고리즘을 학습하고 튜닝하는 정도의 연구 목적에서 벗어나 실제 대규모 머신러닝 시스템을 구성할 때 어떻게 설계되어야 하는지 데이터 수집-모델 학습-모델 서빙단계 등 워크플로 별로, 혹은 통합된 형태로 디자인 패턴을 익힐 수 있는 책은 거의 없었던 것 같습니다.

 

 

 

이 책은 그런 점에서 가치 있는 책인 것 같습니다. 분산 머신러닝 시스템을 구축해야 하는 경우, 제한된 메모리로 무거운 연산을 처리하는 방법과 고려사항, 제한된 자원으로 인한 실패 상황에 대한 대응 패턴, 효율적인 학습을 위해서 데이터를 재활용하는 방법, 다양한 분산 학습 패턴 등을 체계적으로 설명하고 있습니다.

 

또한 책의 내용을 챕터가 끝날 때마다 '요약'이라는 형태로 챕터 내용들을 이해하기 쉽게 정리해놓았고, 그림과 예제(혹은 개념을 이해할 수 있는 질문)들이 풍부하게 수록되어 있어 이해에 정말 도움이 많이 되었습니다.

 

실제 당면할 수 있는 대규모 AI 시스템 구축간의 문제점에 대한 인사이트를 제공하고, 클라우드 기반의 분산 AI 시스템 구축을 간단한 실습을 통해서 익힐 수 있도록 단계적으로 실습도 수록하여 따라하다보면 어느새 대규모 머신러닝 시스템 디자인 패턴과 분산 AI 시스템을 직접 구축해볼 수 있겠다는 자신감이 생기는 것 같습니다.

 

"한빛미디어 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

『14가지 패턴으로 대규모 머신러닝 시스템을 완성하라』 서평

머신러닝 기술의 발전 속도는 매우 빠르며, 그와 함께 데이터의 규모와 시스템의 복잡성도 기하급수적으로 증가하고 있습니다. 단순한 알고리즘 개발을 넘어, 안정적이고 확장 가능한 대규모 머신러닝 시스템을 설계하고 운영하는 기술이 갈수록 중요해지고 있는 상황입니다. 이러한 흐름 속에서 『14가지 패턴으로 대규모 머신러닝 시스템을 완성하라』는 분산 시스템과 머신러닝의 접점에서 발생하는 주요 문제를 해결할 수 있는 실용적인 가이드를 제공합니다.

이 책은 단순한 머신러닝 이론서가 아닙니다. 실제 산업 현장에서 발생하는 데이터 수집, 학습, 서빙 및 운영 전반의 과정을 포괄적으로 다루며, 효율성과 안정성을 극대화하는 14가지 설계 패턴을 중심으로 설명합니다. 특히, 배치 처리, 샤딩, 파라미터 서버, 레플리카 서버와 같은 패턴은 머신러닝 시스템의 성능과 확장성을 보장하는 데 필수적인 요소입니다. 각 패턴마다 실제 사례와 함께 구현 방식, 발생할 수 있는 문제와 해결 방법을 구체적으로 설명하여 독자의 이해를 돕습니다.

책은 세 가지 주요 파트로 구성되어 있습니다.

PART 1: 분산 머신러닝 시스템의 배경지식

분산 시스템과 대규모 머신러닝의 기본 개념을 탄탄히 다지는 장입니다. 이를 통해 독자는 복잡한 시스템 설계를 시작하기 전에 필요한 기초를 쌓을 수 있습니다.

PART 2: 분산 머신러닝 시스템의 설계 패턴

이 부분은 책의 핵심으로, 데이터 수집, 학습, 서빙, 워크플로, 운영에 걸친 다양한 패턴을 다룹니다. 각 패턴은 개념적으로만 설명되지 않고, 실제 시스템에서 어떻게 동작하는지 구체적인 예제와 코드, 그리고 아키텍처 다이어그램을 통해 명확히 제시됩니다.

PART 3: 실습 프로젝트와 기술 실무

학습한 내용을 바탕으로 텐서플로(TensorFlow), 쿠버네티스(Kubernetes), 쿠브플로(Kubeflow), 아르고 워크플로(Argo Workflows) 등의 최신 기술을 활용하여 직접 프로젝트를 구현할 수 있도록 안내합니다. 실제 시스템을 구축하는 과정에서 발생하는 다양한 장애 요소와 트레이드오프를 경험하며, 독자는 이론과 실무를 균형 있게 익힐 수 있습니다

.

이 책이 특별한 이유는 현실적인 문제에 대한 깊이 있는 통찰을 제공하기 때문입니다. 단순히 '이렇게 하면 된다'라는 접근법에서 그치지 않고, 각 패턴의 장단점, 적용 시 주의해야 할 사항, 시스템 장애에 대한 복구 방법 등 실무에서 반드시 필요한 지식을 체계적으로 다룹니다.

또한, 운영 및 관리 측면에서도 많은 부분을 할애하고 있습니다. 머신러닝 시스템은 단순히 모델을 훈련하고 배포하는 것에서 끝나지 않습니다. 스케줄링, 메타데이터 관리, 자원 최적화, 실패 대응 전략까지 다루며, 시스템을 장기적으로 안정적으로 운영할 수 있는 노하우를 제공합니다.

특히 대규모 트래픽을 처리하는 기업 환경에서 머신러닝 모델을 안정적으로 서비스해야 하는 경우, 이 책에서 소개하는 레플리카 서버 패턴, 서비스 샤딩, 이벤트 기반 처리 등의 기법은 실질적으로 매우 큰 도움이 됩니다. 이러한 기법들은 트래픽 급증이나 서버 장애와 같은 상황에서도 시스템을 유연하고 안정적으로 유지할 수 있도록 돕습니다.

이 책은 대규모 데이터와 트래픽을 처리하는 머신러닝 시스템을 구축하려는 개발자, 데이터 엔지니어, 시스템 설계자, 그리고 MLops 담당자에게 특히 유용합니다. 더불어 머신러닝 시스템의 전반적인 아키텍처를 설계하고자 하는 리더 및 매니저에게도 깊이 있는 인사이트를 제공합니다.

빠르게 변화하는 AI와 머신러닝 분야에서 실무적으로 가장 필요한 것은 실제 문제를 해결할 수 있는 패턴과 시스템 설계 능력입니다. 『14가지 패턴으로 대규모 머신러닝 시스템을 완성하라』는 이와 같은 실무 역량을 강화하는 데 탁월한 지침서입니다. 대규모 머신러닝 시스템 구축을 앞둔 개발자라면 반드시 읽어야 할 필독서라 할 수 있습니다.

MLOps 엔지니어를 꿈꾸거나 경력 관리 차원에서 검토했다면 필독서입니다. Python으로 예시 모델을 학습할 줄 알고 쿠버네티스를 사용해 봤어야 이 책을 이해하기 녹록합니다. 실습을 다룬 장은 뒤에 몰려 있습니다. 패턴 개념 설명과 실습을 교대하는 구성이었다면 어땠을까 하는 아쉬움이 있습니다. 이렇게 생각한 이유는 제 경력이 개발자보다는 BI 개발자와 데이터 엔지니어에 치우쳐서일 수 있습니다. 개발 디자인 패턴에 익숙한 개발자는 이 책의 구성에 친숙하여 이해가 빠를 수도 있겠습니다. Vision AI 분야에서 아주 많이 사용하는 PyTorch와 NVIDIA 기술을 다루지 않아서 아쉽기도 했습니다.

 

그럼에도 분산 학습을 다룬 책이 워낙 드문 상황에, 작은 인프라에서도 실습할 수 있는 환경을 안내하므로 앞서 말했듯이 MLOps 경력을 염두에 둔다면 필독서입니다. 다른 대안이 별로 없습니다. 더불어 분산학습 분야에 입문하기에는 적당한 면이 많습니다.

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

위안탕 지음

정민정 옮김

 

이번 책은 "대규모 머신러닝 시스템 디자인 패턴" 이라는 책 입니다.

책 제목 처럼, 단순히 설치하여 사용만 하는 그런 머신러닝이 아니라 방대한 데이터와 복잡한 대규모 머신러닝 모델을 안정적으로 운영하는 시스템 구축을 위한 가이드 제공을 목적으로 하고 있는 책 입니다.

대규모에 적합한 패턴 들에 대한 장단점을 분석하고 실제 적용사례를 통해서 실무에 바로 적용할 수 있도록 구성되어 있습니다.

대규모 시스템에 대한 부분이기에 분산 머신러닝 시스템에 대해서 다루고 있습니다.

 

책에 나오는 코드는 아래 경로에서 받을 수 있습니다.

https://github.com/terrytangyuan/distributed-ml-patterns

 

[ 대상 독자 ]

 

이 책은 머신 러닝에 대한 기초 또는 기본서는 아니기에 관련 분야에 대해 기본 학습을 하였거나, 실제 필드에서 일하고 있는 엔지니어를 대상으로 하고 있습니다.

 

[ 책 구성 ]

이 책은 총 9개의 장으로 구성되어 있습니다.

  1장, 분산 머신러닝 시스템의 배경지식

      이 장의 내용 

          - 대규모 머신러닝 애플리케이션을 다루는 방법에 대해 알아본다.

          - 안정적이고 확장이 쉬운 분산 시스템을 구축하기 위한 디자인 패턴을 알아본다.

          - 분산 시스템 설계에 일반적으로 사용되는 디자인 패턴을 분산 머신러닝 시스템에 적용하여

            확장과 재사용을 용이하게 하는 방법을 알아본다.

2장 ~ 6장 까지는 분산 머신러닝 시스템의 설계 패턴을 학습하기 위한 장으로 여러패턴에 대해 소개하고 있습니다.

  2장, 데이터 수집 패턴

      이 장의 내용

         - 데이터 수집 단계의 역할과 주요 작업을 알아본다.

         - 대규모 데이터셋을 작은 배치로 쪼갠 뒤 메모리에서 처리하는 배치 처리 패턴을 알아본다.

         - 매우 큰 데이터셋을 작은 조각으로 나누고 여러 대의 서버를 활용해 처리하는 샤딩 패턴을 알아본다.

         - 학습을 반복적으로 진행하는 과정에서 데이터셋을 효율적으로 재사용하기 위한 캐싱 패턴을 알아본다.

  3장, 분산 학습 패턴

      이 장의 내용

         - 전통적인 모델 학습과 분산 과정이 어떻게 다른지 알아본다.

         - 단일 서버에 들어갈 수 없을 정도로 거대한 모델을 구축하기 위해 파라미터 서버를 어떻게 사용하는지에 대해 배운다.

         - 집합 통신 패턴으로 분산 모델 학습 과정을 개선하는 방법에 대해 알아본다.

         - 분산 모델 학습 과정에서 예기치 못한 문제가 발생하는 경우 이를 대응하는 방법을 알아본다.

  4장, 모델 서빙 패턴

      이 장의 내용

         - 학습된 모델에 새로운 데이터를 입력해 예측하거나 추론할 수 있도록 서빙하는 방법을 알아본다.

         - 여러 개의 모델 서버를 활용하는 수평 스케일링 방식으로 많은 요청을 안정적으로 처리하는 방법을 알아본다.

         - 많은 요청을 처리하기 위해 활용할 수 있는 서비스 샤딩 패턴을 알아본다.

         - 이벤트 기반으로 처리하는 시스템 구조를 알아보고 기존 디자인가 비교해본다.

  5장, 워크플로 패턴

      이 장의 내용

         - 머신러닝 시스템의 각 구성 요소를 연결하기 위한 워크플로를 알아본다.

         - 복잡한 머신러닝 워크플로를 안정적으로 운영하기 위해 팬인 및 팬아웃 패턴을 활용하는 방법을 알아본다.

         - 동기 및 비동기 패턴을 활용해 머신러닝 시스템을 가속화하는 방법을 알아본다.

         - 스텝 메모이제이션 패턴을 활용해 성능을 개선하는 방법에 대해 알아본다.

  6장, 운영 패턴

      이 장의 내용

         - 배치 스케쥴링 혹은 메타데이터 관리를 보다 효율적으로 하기 위한 방법을 알아본다.

         - 공정 배분 스케쥴링, 우선순위 스케쥴링, 갱 스케쥴링 등 스케쥴링 기법을 활용해서 자원 고갈이나 데드락 상태를 방지하는

           방법을 알아본다.

         - 메타데이터 패턴을 활용해서 실패 상황을 더 효과적으로 대응하고 고객이 격는 불편을 최소화하는 방법을 알아본다.

7장 ~ 9장 까지는 분산 머신러닝 시스템 구축 파트로 이전에 학습한 패턴들을 적용하여 실습해 볼 수 있습니다. 

  7장, 실습 프로젝트 둘러보기

      이 장의 내용

         - 전반적인 시스템의 설계와 구조를 알아본다.

         - 여러 에포크를 걸쳐 학습하기 위핸 데이터 수집 단계를 최적화한다.

         - 부하를 최소화하기 위한 분산 모델 학습 전략을 알아본다.

         - 고성능 모델 서빙을 위한 모델 서버 레플리카를 추가하는 방법을 알아본다.

         - 머신러닝 시스템의 전체 워크플로를 가속화하는 방법을 알아본다.

  8장, 실습 관련 기술 둘러보기

      이 장의 내용

         - 텐서플로를 활용해 모델을 만드는 방법을 익힌다.

         - 쿠버네티스의 주요 활용 방법을 알아본다.

         - 쿠브플로를 활용한 분산 머신러닝 워크플로 실행 방법을 알아본다.

         - 아르고 워크플로를 활용해 컨테이너 기반의 워크플로를 배포하는 방법을 알아본다.

  9장, 실습 프로젝트

      이 장의 내용

         - 텐서플로를 활용해 데이터 수집 시스템을 구현한다.

         - 머신러닝 모델을 정의하고 분산 모델 학습을 실행한다.

         - 단일 모델 서버와 레플리카 서버를 구현한다.

         - 효율적인 머신러닝 시스템의 전체 워크플로를 구축한다.

 

 

책 중간 중간에 필요에 따라 많은 그림과 표를 이용하여 내용을 이해하는데 많은 도움을 주고 있습니다.

 

 

각 장의 마지막에 "요약" 부분을 두었는데, 각 장에 대한 요약이라기 보다 각 장의 학습을 통해 알고자 하는 목표가 정의되어 있어서

"요약" 부분을 먼저 확인 한 후 각 장을 학습하는 것도 좋을 것 같습니다.

 

각 섹션에서 필요에 따라 "예제" 부분을 두어 학습 후 한번 더 생각해 볼 수 있도록 제공 하고 있습니다.

정답은 장 마지막에 "예제 정답" 부분이 정리되어 있습니다.

 

[ 결론 ]

대규모 머신러닝 시스템에 대해서 간접적으로 경험할 수 있는 기회를 주는 책 입니다.

기본 지식이 없이 깊이 있게 이해하기 힘들 수 있지만,

최대한 쉽게 풀어서 설명하고 있기에 기본 지식이 없어도 한번 학습해 볼 수 있는 책입니다.

대규모 머신러닝 시스템 디자인 패턴 - 한빛미디어

초심으로 돌아가 Hello, World 를 화면에 찍고, 익숙해 질 즈음 구구단과 * 을 이용한 피라미드를 화면에 찍었던 시절을 생각해본다. 객체지향을 공부하고 메소드와 클래스를 배우고 어느 덧 객체라는 것을 어렴풋이 어쩌면 알 것도 같다는 느낌이 들 즈음, 디자인 패턴이라는 것을 배워야 한다고 누군가 알려주었다.

데이터를 저장하는 것도 대용량으로 차차 확장되다 보면 다양한 테크닉들이 등장하고 샤딩과 파티셔닝이라는 용어를 만나게 된다. 네트워크도 대역폭을 넓히기 위해서는 단순히 스위칭 장비를 넘어서 Managed Switching 장비를 통해 다양한 기법으로 대용량에 대응한다.

데이터 수집 후 데이터 셋이 대용량인 경우, 스토리지 확장은 비용으로, 순차 학습이나 모델링은 시간으로 해결할 수 있지만, 예측해야 하는 시스템이라면? 시스템의 성격과 구성이 완전히 달라져아 한다. 꼭 머신러닝이 아니더라도 대량의 요청에 의한 처리 결과를 빠르게 응답한다던지, 트래픽을 감당하기 위해서 분산 시스템으로 대응하는 것은 이 분야 종사자의 오래된 과제이면서 도전의 영역이다.

이 책은 단일 서버 ( 혹은 개인 PC ) 에서 머신러닝을 학습 또는 구성하는 단계를 막 넘어 효율성과 확장성을 고려하면서도 중복 요청을 방지하는 로드 밸런서라든가, 전통적인 기법인 캐싱, 시스템(혹은 처리 노드) 간 메시징 관련 기술과 같이 대용량으로 데이터를 수집, 모델 학습, 선정하고 서빙하는 단계까지를 고려한 과정을 담고 있다.

분산 시스템에서는 필연적으로 각각의 워커(또는 노드?) 가 필요하고 이를 가장 잘 다루는 것은 컨테이너 기술이 기반인 도커, 쿠버네티스 기술이기에 이 책에서도 소개되며, 온라인강의로 접한 MLOps 내용과 상통하는 내용이 있어서 어렵지 않게 보완해가면서 읽을 수 있었다.

책을 읽는 내내 유투브에서 내가 클릭하는 내용을 기반으로 어떻게 데이터가 수집되는지, 어떻게 모델링을 통해 추천 영상이 노출되는지, 전세계를 상대하는 유투브가 ‘나’라는 인지능력이 있는 존재를 어떻게 조정하는지에 대한 (음모론) 가정을 설정하고 패턴들을 접했다.

예전에 객체지향 디자인패턴을 학습할 때는 스타크래프트의 유닛을 예시로 들면서 학습하면서 재미있었던 기억이 있다. 이 책은 그런 즐거움은 조금 부족하지만, 클라우드 환경에서 분산 시스템을 구축하면서 만나게 되는 문제를 해결하는 과정을 통해 상황제시 > 문제발견 > 해결책의 순서대로 구성되어 진행한다.

머신러닝 워크플로우에 관심있으면서 자동화에까지 관심있는 개발자라면 읽어보자.

 

 

"한빛미디어 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

마무리

어쩌다보니 안좋은 내용위주로 얘기한 것 같은데...

그만큼 기대를 갖고 봤던 책이고.. 관심있게 읽어서 그런것이라고 생각해주었으면 한다.

그래도 다른책들과는 다르게 실습에 대한 내용이 존재한다는 것만으로도 꽤 장점이 있는 책이고..

이런 분산 시스템에 대해서 14가지의 패턴으로 정리해서 설명한다는 것 자체도 장점이다.

실제로 분산 시스템을 적용해서 서비스를 제공하는 회사가 손에 꼽기도하고, 접하기도 어려운 것이 사실이다.

이번 기회로 이 내용들에 대해서 한번 더 리마인드하면서

내가 꿈꾸는 MLOps생태계는 어떻게 되는것인가,

만약 나라면, 지금 상황에서 이렇게도 구축을 해보고 싶다

와 같은 생각도 해보면서 열심히 공부해야겠다고 느껴지는, 동기부여가 되는 책이었다.

하지만 아쉬운 점은 너무나 명확했던 책.

https://blog.naver.com/ab415/223708754428

이 책을 통해 머신러닝 시스템 설계의 다양한 측면을 살펴보면서, 특히 워크플로우 관리 도구들의 진화와 선택의 중요성을 재인식하게 되었습니다. 기존에 Apache Airflow를 활용하여 워크플로우 관리를 하였는데,
Kubeflow와 Argo Workflow와 같은 현대적인 도구들이 제공하는 새로운 가능성을 발견할 수 있었습니다.

본 도서는 단순히 도구의 사용법을 넘어서,
머신러닝 시스템의 전체적인 아키텍처를 설계하는 데 필요한 다양한 패턴과 접근 방식을 제시합니다.

이는 향후 프로젝트에서 기술 스택을 선택할 때 더욱 폭넓은 시각으로 접근할 수 있게 해주는 값진 인사이트를 제공합니다.
특히 실무자의 관점에서, 이 책이 제시하는 디자인 패턴들은 단순한 이론이 아닌, 실제 프로젝트에서 마주치는 다양한 도전 과제들을 해결하는 데 직접적인 도움이 될 것으로 기대됩니다. 머신러닝 프로젝트를 시작하는 팀이나, 기존 시스템을 개선하고자 하는 엔지니어들에게 추천드립니다.

대규모 시스템을 구축하기 위한 안내서

 

 

이 책을 서평 신청하기 전에는 사실 대규모 머신러닝 보다는 디자인 패턴에 더 관심이 있어서 해당 책을 신청하게 되었다. 해당 책은 시스템 설계와 관련된 내용이 주를 이루며 혹시라도 머신러닝과 관련된 코드를 더 많이 보고자 하는 사람들은 다른 책을 봐야할 것이다. 

해당 책이 아예 머신러닝 코드를 다루지 않는 것은 아니지만, 기본적으로는 시스템 설계를 어떻게 진행해야하는지, 설계함에 있어서 어떤 부분을 놓치면 안되는지에 대해서 그림으로 알려주는 책이다.

 

 

위와 같이 삽화들이 굉장히 많다. 아무래도 설계와 관련된 책이다 보니, 위와 같은 그림이 없으면 이해하기 힘들 수 있었는데 해당 책은 시스템 설계에 해당하는 많은 삽화를 삽입하였다. 

 

 

책은 아주 기초적인 시스템을 바탕으로 어떤 부분을 발전시킬 수 있고 성능을 더 끌어올릴 수 있는 지에 대해서 점진적으로 발전시켜 나가며 내용을 전개한다. 

 

 

한 챕터가 끝날 때마다 문제와 모범 답안이 나온다. 내가 읽었던 것을 바탕으로 테스트 하기 좋다.

 

 

해당 책은 위에서 말했다 싶이 머신러닝과 관련된 책이라기 보다는 시스템 설계에 더 가까운 책이다. 혹시라도 머신러닝 시스템을 구축하거나 꼭 머신러닝이 아니더라도 대규모 데이터 시스템 설계와 관련된 책을 찾아본다면 해당 책이 적합할 것이다.

나는 AI 엔지니어로서의 실무 경험도 소규모 초기 스타트업이 전부이고, 학사 졸업 직후 대학원에 진학을 하다 보니 대규모 데이터가 오고 가는 환경에서 머신러닝 모델을 운영해 볼 기회가 거의 없었다. 특히나 대규모 데이터의 효율적 처리나 엄격한 기술적 완성도보다 사용자 중심의 접근을 더 중요시하는 HCI 분야로 진학한 지금은 단일 GPU나 로컬 환경에서의 모델 개발 및 운영으로도 충분했기에 사실상 대규모 데이터와 분산 처리의 실질적인 필요성을 체감할 기회가 많지 않았다. 하지만 언젠가는 그런 경험을 하게 될 것이기 때문에 언제나 이러한 지식을 습득하고자 함에 목이 말랐었다. 대규모 분산처리를 경험해보고 싶지만 기회도 없을뿐더러, 어디부터 시작해야 할지 몰라 막막했었다.

이 책은 그런 나의 갈증을 해소해준 책이다. 대규모 머신러닝 시스템을 설계하고 운영하는 데 있어 반드시 필요한 14가지 설계 패턴을 체계적으로 다루고 있다. 데이터 수집, 분산 학습, 모델 서빙, 워크플로, 운영의 전 과정에 걸쳐 실질적인 예제와 함께 최신 도구를 활용한 구현 방법까지 상세히 설명해 실무 중심의 접근법을 제시한다.

특히, 분산 처리와 확장성을 중심으로 데이터의 폭발적 증가와 복잡한 연산이 요구되는 현대의 머신러닝 시스템에서 발생할 수 있는 다양한 문제를 해결하는 실용적인 가이드를 제공한다는 점에서 매력적이다. 예를 들어, 파라미터 서버 패턴과 같은 분산 학습 패턴은 제한된 자원으로 고효율의 학습을 수행할 수 있는 방법을 제시하며, 스케줄링 및 메타데이터 관리 패턴은 시스템 장애 상황에서의 대처와 안정성을 높이는 데 유용하다.

이 책에서 가장 인상 깊었던 부분은 복잡한 머신러닝 워크플로를 체계적으로 관리할 수 있는 팬인 및 팬아웃 패턴과 스텝 메모이제이션 패턴이다. 이를 통해 중복 작업을 최소화하고 병렬 처리를 활용하여 업무 효율성을 극대화하는 방법을 배울 수 있었다. 이러한 패턴은 대규모 시스템이 아니더라도, 반복적이고 비효율적인 작업을 최소화하거나, 병렬 처리를 활용해 학습 속도를 높이는 데 바로 적용할 수 있는 유용한 패턴이었기에 연구 단계에서도 충분히 응용 가능할 것이라는 생각이 들었다.

이처럼, 대규모 시스템 운영 경험이 없는 나에게도 이 책이 주는 가치는 분명했다. 분산 학습과 같은 개념이 연구 환경에서는 멀게 느껴질 수 있지만, 실제로는 현대 머신러닝이 직면한 핵심 문제들을 해결하기 위한 기본적인 접근 방식임을 깨달았다. 특히, 아르고 워크플로(Argo Workflows)와 같은 도구를 활용해 작업 흐름을 자동화하고 최적화하는 방법은 앞으로의 연구 및 시스템 개발에서 실질적인 도움이 될 것이라 생각한다.

이 책은 단순히 실무자들만을 위한 것이 아니라, 연구자로서도 머신러닝 시스템의 확장성과 안정성을 고려한 설계에 대해 배울 수 있는 훌륭한 가이드가 되어준다. 대규모 데이터 처리와 시스템 설계의 복잡성을 이해하고 싶은 연구자나 실무자 모두에게 추천하고 싶다.

“대규모 머신러닝 시스템 디자인 패턴”은 전통적인 GoF 디자인 패턴과는 차별화된 접근을 통해, 분산 환경과 대규모 데이터를 다루는 머신러닝 시스템 설계에 초점을 맞춘 엔지니어들에게 실질적인 도움을 제공합니다. 이 책은 코드 중심의 고전적 디자인 패턴과 달리 데이터의 흐름 중심으로 구성된 패턴을 제공하며, 특히 TensorFlow, Kubernetes, Kubeflow와 같은 현대적인 도구를 활용한 예제와 실습을 통해 실무적인 활용도를 극대화합니다.

책은 총 14가지의 설계 패턴을 소개하며, 이를 통해 분산 환경에서의 데이터 수집, 분산 학습, 모델 서빙, 워크플로 설계 및 운영과 같은 모든 단계를 체계적으로 다룹니다. 특히, 파라미터 서버, 팬인/팬아웃 패턴 등 분산 학습 및 워크플로 관리의 핵심적인 개념을 명확하게 설명하고, 이를 기반으로 안정적이고 확장 가능한 시스템을 구축할 수 있도록 돕습니다.

이 책의 주요 강점은 다음과 같습니다:

  • 분산 환경 특화 설계: 머신러닝 시스템을 단일 장치에서 대규모 클러스터로 확장하는 데 필요한 현실적인 가이드를 제공합니다.
  • 현대적 도구 활용: TensorFlow와 Kubernetes와 같은 de facto 표준 도구를 중심으로 설계 및 운영 패턴을 익힐 수 있습니다.
  • 실무 중심의 접근: 실질적인 예제와 프로젝트를 통해 이론과 실무를 통합적으로 학습할 수 있습니다.

물론, 책이 특정 기술 스택(TensorFlow, Kubernetes)에 기반하기 때문에, PyTorch와 같은 다른 기술을 사용하는 독자들에게는 일부 내용이 덜 직접적으로 다가올 수 있습니다. 그러나 이는 패턴의 일반성을 고려하면 큰 단점은 아닙니다.

이 책은 머신러닝과 AI 시스템 설계의 실무적 측면을 학습하고자 하는 엔지니어들에게 훌륭한 참고서가 될 것입니다. 분산 환경의 복잡성을 이해하고, 이에 대한 실질적인 해결책을 모색하고자 하는 이들에게 적극 추천합니다.

 

"한빛미디어 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

오늘날 기술 환경은 초고속으로 변화하고 있습니다. 머신러닝과 인공지능(AI) 분야에서도 새로운 프레임워크, 언어, 도구들이 끊임없이 등장하며 기술 발전을 이끌고 있습니다. 이러한 변화 속에서 성공적인 시스템 구축을 위해 개발자와 엔지니어들은 단순히 새로운 기술을 익히는 것을 넘어, 확장 가능하고 유지보수 가능한 시스템 설계를 이해하고 적용해야 하는 과제에 직면하고 있습니다.

"대규모 머신러닝 시스템 디자인 패턴"은 이러한 시대적 요구를 충족하고자 설계된 책으로, 머신러닝 시스템에서 성공적인 설계를 위한 핵심 원칙과 디자인 패턴을 구체적으로 다루고 있습니다.
이 책은 고도화된 기술적 논의뿐 아니라 실무 중심의 실질적인 가이드라인을 제공해, 단순한 이론서에서 그치지 않고 실제 응용 가능한 해결책을 제시합니다.

이 책은 머시러닝 시스템 설계를 위해 세 가지를 소개합니다.

1. 분산 머신러닝 시스템 배경

"대규모 머신러닝 시스템 디자인 패턴" 은 머신러닝 시스템 설계에서 본질적인 목표를 명확히 정의하는 것의 중요성을 강조합니다. 설계는 단순히 기술적 실행을 위한 과정이 아니라, 비즈니스 문제를 해결하고 사용자 요구를 충족시키는 방향으로 이루어져야 한다는 점을 책 전반에 걸쳐 상기시킵니다. 특히, 머신러닝 시스템 설계는 데이터 수집, 모델 학습, 배포 등 모든 구성 요소가 문제의 본질적 목적과 긴밀히 연결되어야만 성공적인 결과를 도출할 수 있습니다.
책은 독자들에게 “문제를 정의하는 것”이 시스템 설계와 구현의 핵심 단계임을 일깨워 주며, 이를 기반으로 데이터를 다루는 방식과 전체 머신러닝 파이프라인 설계에 대한 구체적인 접근법을 제시하고 있습니다.

2. 분산 머신러닝 시스템의 설계 패턴

대규모 머신러닝 시스템은 방대한 데이터와 복잡한 계산을 요구하기 때문에 분산 시스템 설계가 필수적입니다. 이 책은 분산 머신러닝 시스템을 효율적으로 구축하기 위해 필요한 디자인 패턴들을 체계적으로 다룹니다. 특히, 다음의 핵심적인 설계 패턴에 중점을 두고 실제 사용 사례와 함께 설명합니다.

  • 데이터 파이프라인 설계
    데이터 수집, 정제, 처리 과정을 효율적으로 관리하기 위한 디자인 패턴을 소개합니다. 책은 데이터 엔지니어링의 복잡성을 줄이고, 대규모 데이터 세트를 처리하기 위한 최적화 방법론을 구체적으로 다룹니다.
  • 모델 서빙 아키텍처
    고성능 실시간 모델 예측 서비스를 설계하기 위한 아키텍처 원칙을 설명하며, 이를 통해 안정성과 성능을 동시에 확보하는 방법을 제시합니다.
  • 확장성과 장애 복구 고려
    대규모 시스템에서는 장애를 예방하고, 장애가 발생하더라도 빠르게 복구할 수 있는 설계 패턴이 필수적입니다. 책은 확장성을 고려한 분산 시스템 설계와 이를 구현하기 위한 사례를 제시하며, 독자들이 실무에서 이를 활용할 수 있는 인사이트를 제공합니다.
    이를 통해 독자는 단순한 이론적 지식을 넘어 실질적이고 실무적인 시스템 설계 기술을 익힐 수 있습니다.

3. 분산 머신러닝 시스템 구축

분산 머신러닝 시스템 설계는 팀워크와 협업이 핵심입니다. 데이터 엔지니어, 머신러닝 모델 개발자, 소프트웨어 엔지니어, 제품 관리자 등 다양한 역할 간의 긴밀한 협력이 없으면 대규모 시스템은 성공적으로 구축되기 어렵습니다.
이 책은 팀 간 명확한 의사소통과 협력의 중요성을 강조하며, 이를 위해 다음과 같은 방법론을 제안합니다:

  • 일관된 설계 문서화: 모든 팀원이 동일한 이해를 공유할 수 있도록 설계 문서를 체계적으로 유지하는 방법
  • 공통 언어 사용: 기술적 세부사항을 넘어 비전공자나 다양한 이해관계자와도 소통할 수 있는 언어를 도입
  • 목표 공유 체계 마련: 전체 시스템 설계의 방향성을 설정하고 이를 팀원과 동기화하는 방법

책은 이러한 협업의 중요성을 다양한 예시와 함께 설명하며, 분산 머신러닝 시스템의 구축을 팀워크의 결과물로 성공적으로 이끌어낼 수 있는 전략을 제시합니다.

결론: 분산 머신러닝 시스템 설계의 필독서

"대규모 머신러닝 시스템 디자인 패턴"은 독자들에게 단순히 기술적 지식을 전달하는 데 그치지 않고, 설계의 근본적인 원칙과 실질적 활용 방법을 제시합니다. 이 책은 다음과 같은 독자들에게 강력히 추천할 만한 필독서입니다:

  • 대규모 데이터와 복잡한 모델을 다루는 엔지니어
  • 분산 머신러닝 시스템을 처음 설계하려는 초보자
  • 확장성과 장애 복구를 고려한 시스템 설계에 대한 깊은 통찰을 얻고자 하는 전문가

변화하는 기술 환경 속에서도 변치 않는 설계 원칙을 배우고, 이를 실무에 적용하고자 하는 모든 독자들에게 이 책은 귀중한 지침서가 될 것입니다.

"한빛미디어 서평단 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

이제는 단순히 데이터를 적재하는 시기에서 벗어나 많은 곳에서 머신러닝을 여러 비즈니스 모델에 적용하고 있다. 이러한 상황에서 무엇보다 중요한 것은 증가하는 수요에 맞게 확장 가능하면서 보안까지 보장되는 시스템의 필요성이다. 이를 위해서 모델을 개발하는 엔지니어는 안정적인 확장에 대하여 고민해야 할 필요성이 커졌고, 시도해볼 수 있는 것이 바로 이 책에서 다루고 있는 분산 머신러닝 시스템이다.

분산 머신러닝 시스템이란 데이터의 수집과 학습, 서빙 등 애플리케이션의 각 단계를 수행하는 다양한 구성 요소와 파이프라인으로 이루어진 분산 시스템을 의미한다. 일반적인 분산 시스템 방법론을 이용하면서도 머신러닝에 최적화될 수 있는 설계가 요구된다는 점이 특징이다. 이 책에서는 텐서플로, 쿠버네티스, 쿠브플로, 도커, 아르고 워크플로와 같은 많이 사용되는 최신 프레임워크를 사용하여 분산 머신러닝 시스템의 다양한 구성 요소를 구축하는 방법에 대해서 알아보고, 엔드투엔드 파이프라인을 구축하는 실습 프로젝트까지 진행해볼 수 있다.

이 책에서는 분산 머신러닝 시스템을 총 14개의 패턴으로 나누어 설명한다. 예를 들면, 제한된 메모리로 무거운 연산을 실행해야할 때 사용할 수 있는 배치 처리 패턴, 매우 큰 데이터셋을 여러 워커에 분산시키는 샤딩 패턴, 효율적인 학습을 위해 데이터를 재활용하는 캐싱 패턴 등이 있다. 또한 각 패턴마다 예제라는 항목하에 3가지씩 해당 패턴에 대해 다시 생각해볼 수 있는 질문을 던진다. 이 질문을 통해 단순히 패턴을 인식하고 지나가는 것이 아닌, 언제 어떻게 활용할 수 있고 효율적인지를 다시금 인지하고 넘어갈 수 있게 되어 있다.

예상 독자가 머신러닝 애플리케이션을 실제 사용자가 사용하는 환경에 배포해본 경험이 있고, 파이썬과 배시를 1년 이상 사용한 사람인 만큼 책의 내용이 완전한 입문 레벨의 수준은 아니다. 하지만 그렇기에 어느정도 기본적인 부분들은 사용해 본 경험이 있으면서 분산 환경을 사용해야 하는 실무자에게는 무척이나 유용할 것으로 생각된다.

한빛미디어 < 나는리뷰어다 > 활동을 위해서 책을 제공받아 작성된 서평입니다

이 책은 대규모 데이터 처리와 분석을 위해 분산 머신러닝을 구현하고 최적화하는 데 필요한 14가지 핵심 패턴과 모범 사례를 다룬 실무 중심의 가이드입니다. 

 

분산 시스템에서 머신러닝을 실제로 적용하려면 꽤나 복잡한 개념과 기술들을 다뤄야 하는데, 이 책은 그런 복잡한 내용들을 최대한 이해하기 쉽게 풀어내고 있습니다. 

 

특히, 실무에 바로 적용할 수 있는 구체적이고 실질적인 방법론들을 제시하고 있어서, 단순히 이론적인 내용만 다루는 게 아니라 실제 업무에서 발생할 수 있는 다양한 문제들을 해결하는 데 필요한 체계적인 접근 방식을 소개합니다.

 

책에서는 데이터 분산 처리부터 모델 학습을 병렬화하는 방법, 그리고 효율적인 리소스 관리까지, 분산 머신러닝의 전반적인 과정에서 마주치게 될 여러 상황과 문제들에 대해 다루고 있어요. 

 

이런 내용을 통해 머신러닝이나 데이터 과학 분야에서 이미 전문성을 갖춘 사람들뿐만 아니라, 대규모 데이터를 다루는 모든 사람에게 실용적이고 유용한 가이드가 될 수 있도록 구성되어 있습니다.

 

이 책의 주요 내용으로는, 우선 데이터 수집부터 시작해서 분산 학습, 그리고 모델 서빙까지 이어지는 머신러닝 파이프라인의 다양한 단계에 대해 설명합니다. 

 

또, 쿠버네티스(Kubernetes), 텐서플로(TensorFlow), 쿠브플로(Kubeflow), 아르고 워크플로(Argo Workflow) 같은 툴을 활용해서 머신러닝 작업을 자동화하는 방법도 다루고 있죠. 

 

무엇보다 다양한 패턴과 접근 방식들 간의 트레이드오프를 평가하는 내용이 포함되어 있어서, 각각의 방법이 어떤 상황에 적합한지, 어떤 단점이 있을 수 있는지를 이해하는 데도 도움이 됩니다.

 

또, 이 책에서 설명하는 14가지 패턴은 특히 유용한데요. 

 

예를 들어, 데이터를 효율적으로 나눠서 처리하는 배치 처리 패턴, 데이터를 분할하고 관리하는 샤딩 패턴, 자주 사용하는 데이터를 저장해 처리 속도를 높이는 캐싱 패턴, 그리고 파라미터 서버 패턴 같은 내용이 포함되어 있습니다. 

 

그 외에도 집합 통신 패턴, 탄력성과 내결함성을 확보하기 위한 패턴, 여러 서버를 복제해서 안정성을 높이는 레플리카 서버 패턴, 이벤트 기반 처리나 팬인/팬아웃 패턴 등 실무에서 자주 필요한 다양한 기술과 전략들을 다룹니다. 

 

특히, 동기와 비동기 처리의 장단점, 스텝 메모이제이션으로 계산 효율을 높이는 방법, 작업을 스케줄링하고 관리하는 방법, 그리고 메타데이터를 효과적으로 다루는 패턴까지 폭넓은 내용을 포함하고 있죠.

 

이 책은 머신러닝 알고리즘의 기초를 알고 있는 사람이라면 누구나 이해할 수 있게 쓰였지만, 특히 실제 환경에서 머신러닝을 운영해 본 데이터 분석가, 데이터 사이언티스트, 그리고 소프트웨어 엔지니어에게 적합합니다. 

 

다만, 책의 내용을 잘 이해하고 활용하려면 Bash 스크립트와 파이썬, 그리고 도커(Docker)를 사용하는 데 어느 정도 익숙해야 한다는 점을 염두에 두는 게 좋겠어요.

 

결론적으로, 이 책은 대규모 데이터를 다루는 사람들에게 분산 머신러닝을 실무적으로 접근할 수 있는 훌륭한 가이드가 될 겁니다. 

 

분산 처리 환경에서 머신러닝을 효과적으로 설계하고 운영하려는 사람이라면 이 책을 통해 큰 도움을 받을 수 있을 거예요.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서

책을 제공받아 작성된 서평입니다."

이 책은 머신러닝 웹 서비스를 어떻게 하면 효율적으로 운영할 수 있는지 설명을 하고 있는 책입니다.

실습에 관련한 내용은 적고, 현재 또는 앞으로 이와 관련한 솔루션 및 프로젝트에 대한 니즈가 있는 분이라면 이 책만한 개념 설명 도서는 없다고 생각 합니다. Kubernetes, Kuberflow 등 다양한 솔루션에 접근하기 전에 이 책으로 기본기를 탄탄하게 세운다면 많은 도움이 되어 줄 것입니다.

 

책의 구성은  머신러닝 서비스 단계별로 잘 나뉘어 있습니다.

 

chapter 02 데이터 수집 패턴
chapter 03 분산 학습 패턴
chapter 04 모델 서빙 패턴
chapter 05 워크플로 패턴
chapter 06 운영 패턴

 

저자의 설명방식이 이 책의 강점인데, 일방적으로 내용을 설명을 하고 있지 않습니다. (개요) 해당 내용 어떤 내용인지에 대하여 설명을 우선 합니다. (문제) 그리고 어떠한 내용이 필요한지 독자들의 이해를 돕기위해 문제점을 설명 합니다. (해결책) 해당 내용에 대하여 저자가 생각한 Solution 에 대하여 자세한 설명을 합니다. (고려사향) 그리고 더 낳은 해결책에 대하여 독자들과 함께 고민할 수 있도록 추가적인 대안들에 대하여 이야기를 하고 있습니다.

 

※ 본 리뷰는 IT 현업개발자가, 한빛미디어 책을 제공받아 작성한 서평입니다.

 

소개

얼마 전까지만 해도 AI & 머신러닝은 소프트웨어 개발이나 언어와는 다른 별도의 분야로 인식되고 있었으나 최근 들어서 머신러닝도 UI나 데이터베이스처럼 마치 소프트웨어 개발의 하나의 요소처럼 여겨지고 있는 것 같습니다.

이런 상황에서 개발자들은 머신러닝 모델을 안정적으로 운영할 수 있는 능력도 요구되고 있습니다.

훌륭하게 결과를 산출하는 머신러닝 모델을 개발했어도 실제로 사용자들이 이 모델을 안정적으로 사용하게 하기 위해서는 훨씬 더 다양하고 복잡한 문제들이 개발자들을 기다리고 있습니다.

더욱이 이 모델을 운영하는 시스템이 분산 환경이라면 고려해야 할 문제는 더욱더 많아집니다.

학습 데이터의 방대함, 모델의 복잡성, 실시간 트래픽 처리 등 분산 환경에서 머신러닝 시스템을 구축하는 일은 기존의 단일 서버 중심 개발과는 차원이 다른 도전이 될 것입니다.

이 책은 단순히 모델을 학습시키는 기술적 방법론에 그치지 않고, 대규모 데이터 셋과 모델을 분산 처리하고 운영하는 시스템 디자인 패턴을 체계적으로 소개합니다.

이를 통해 머신러닝 엔지니어, 데이터 사이언티스트, 소프트웨어 개발자가 시스템 전반을 설계하고 운영할 수 있는 역량을 갖출 수 있도록 돕습니다.

 

특징

책을 읽으면서 느꼈던 특징은 필요하고 핵심적인 내용만 다루고 있습니다.

군더더기 없이 깔끔한 설명과 실용적인 패턴들의 설명에 집중한다는 것입니다.

특히, 소개하는 패턴들의 장단점을 실제 사례를 통해서 명확하게 설명해 줍니다.


 

구성

총 3개의 Part로 구성되어 있으며 각 파트는 분산 머신러닝 시스템의 정의와 분산 머신러닝 시스템에서 적용 가능한 다양한 패턴들 그리고 실제 분산 머신러닝 시스템 실습을 통해서 배운 패턴들을 확인하는 순서로 이루어져 있습니다.

Part 1에서는 분산 머신러닝 시스템의 필요성과 개념, 데이터의 분산 처리, 모델 학습의 확장성과 같은 필수적인 기초 지식과 분산 머신러닝 시스템의 배경지식을 다룹니다.

Part 2는 분산 시스템의 다양한 설계 패턴에 대해서 상황별로 적용이 필요한 시점과 함께 핵심 내용을 다룹니다.

분산 환경에서 대규모 Dataset으로 학습을 하기 위해서 필요한 배치처리 패턴, 샤딩 패턴 그리고 캐싱 패턴 등을 다룹니다.

이 패턴들은 모두 대규모 Dataset을 작은 단위로 나누어서 학습을 하는 패턴들이며 각각의 장단점을 설명합니다.

학습할 Dataset이 준비가 되었으니, 다음으로 이 Dataset으로 분산 환경에서 모델을 학습하는 패턴들에 대해서 다룹니다.

파라미터 서버 패턴, 집합 통신 패턴, 탄력성 및 내결합성 패턴 등과 같은 패턴들은 여러 개의 Worker를 이용해서 빠르게 학습하는 방법들에 대한 패턴들입니다.

학습이 완료된 모델들을 실제로 사용자들에게 서빙을 하기 위해서 필요한 패턴들에 대해서도 다룹니다.

레플리카 서버 패턴, 서비스 샤딩 패턴, 이벤트 기반 처리 패턴들은 대규모 사용자들의 요청에 대해서 적절히 트래픽을 분산하여 서빙하는 방법들에 대해서 논의합니다.

다음으로는 이 전체 Workflow를 유연하고 안정적으로 흘러가도록 관리해 주는 패턴들에 대해서 알아봅니다.

팬인 팬아웃 패턴, 동기 및 비동기 패턴, 스템 메모이제이션 패턴들은 워크플로 전체를 최적화하는 데 도움을 주는 패턴들입니다.

마지막으로, 워크플로 상에서 문제 상황에 대처하는 패턴들과 공유 자원을 효과적으로 할당하는 데 도움이 되는 스케쥴링 패턴, 메타데이터 패턴들을 소개합니다.

마지막 Part 3에서는 Part 2에서 배운 다양한 패턴들을 실제로 이미지 분류 프로젝트를 기반으로 앞서 배운 패턴을 적용하고, 현실에서 발생할 수 있는 문제들을 개선해 나가는 과정이 실습을 통해 체화됩니다.

패턴을 실제 코드로 구현하며 실무에 바로 적용할 수 있는 기술력을 갖출 수 있습니다.


 

대상 독자

이 책은 머신러닝 모델의 개발 경험이 있고, 분산 환경에서 이를 운영하고자 하는 데이터 사이언티스트, 소프트웨어 엔지니어를 대상으로 합니다.

특히 Bash, Python, Docker와 같은 기술에 익숙한 독자라면 더욱 쉽게 내용을 이해하고 실습할 수 있을 것입니다.


 

마무리

분산 환경에서의 소프트웨어 개발, 특히 머신러닝 모델의 운영에 관한 책들이 많이 없는 상황에서 실제 현장에서의 경험이 녹아있는 가이드가 발간되었다는 것이 정말 반가운 일입니다.

단순히 모델 개발만 하던 개발자들에게 서비스 운영 전체를 통찰할 수 있는 안목을 기르는 것에도 큰 도움이 될 것 같아서 이런 내용들이 필요한 분들에게 추천해 드리고 싶습니다.

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원 무료배송
닫기

리뷰쓰기

닫기
* 상품명 :
대규모 머신러닝 시스템 디자인 패턴
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
대규모 머신러닝 시스템 디자인 패턴
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
대규모 머신러닝 시스템 디자인 패턴
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실

최근 본 상품1