효율적인 머신러닝 파이프라인과 MLOps를 구축하는 30가지 디자인 패턴
발리아파 락슈마난, 세라 로빈슨, 마이클 먼 지음/ 맹윤호, 임지순 옮김 / 한빛미디어 출판
진짜 필요한 비즈니스 로직에 중점을 두고 프로그래밍 하기
검증된 아키텍처와 비즈니스 사용 사례로 필요한 비즈니스에 사용하기
AI 모델이 인간 사회의 기존 편견을 영속화하지 않도록 하려면 머신러닝의 다양성, 형평성, 포용성이 무엇보다 중요함
데이터에서 학습하는 모델을 구축하는 프로세스
Supervised learning(지도 학습) : 데이터에 대한 실측 검증 라벨(ground truth label)을 미리 알고 있는 문제에 적용할 수 있음
라벨이 달린 데이터를 모델에 제공하고 새로운 데이터가 들어왔을 때 자동으로 라벨을 달 수 있도록 충분히 학습시키는 것
-> 일반적으로 분류(Classification), 회귀(Regression)으로 정의할 수 있음
Classification(분류) : 사전에 입력 데이터에 정의된 카테고리의 라벨을 할당함. 반려 동물 이미지로 품종 맞추기, 문서에 태그 지정, 금융 거래 사기 여부 판정
Regression(예측) : 입력 데이터에 연속적인 숫잣값을 할당함. 자전거 여행 기간 예측, 회사 미래 수익 에측, 제품 가격 예측
데이터는 모든 머신러닝 문제의 핵심
데이터셋(dataset)은 머신러닝 모델의 학습, 검증, 테스트에 사용되는 데이터 의미
데이터
머신러닝 모델의 성능 보고서는 학습 또는 검증 테스트가 아닌 독립적인 테스트 데이터를 통해 산출해야 함
세 가지 데이터셋(학습, 검증, 테스트)이 모두 통계적으로 유사한 속성을 갖도록 데이터를 분할 하는 것도 중요함
모델 학습에 사용하는 데이터는 모델의 종류에 따라 다양한 형태를 취할 수 있는데 구조화된 데이터(structured data)는 수치 데이터와 범주 데이터로 이루어짐
구조화된 데이터란 일반적으로 스프레드시트로 다룰 수 있는 데이터로, 아래부터는 테이블 데이터(tabular)를 구조화된 데이터와 같은 의미로 사용한다.
구조화되지 않은 데이터(Unstructred data)는 깔끔하게 표현할 수 없는 데이터이고 자유 형식 텍스트, 이미지, 비디오, 오디오 등이 있음
수치데이터는 보통 머신러닝 모델의 입력으로 직접 투입할 수 있지만 다른 데이터는 모델로 입력하기 위해 다양 데이터 전처리가 필요함
이러한 데이터 전처리 단계에서는 보통 수칫값을 조정하거나, 수치가 아닌 데이터를 모델에서 이해할 수 있는 수치 형식으로 변환-> 특징 가공(feature engineering)
특징 가공
예를 들어, '입력'이 '타임스탬프' 라면 이를 전처리한 '특징'은 '요일'
타임스팸프를 요일로 변환하려면 몇 가지 데이터 전처리를 수행해야 하는데 이러한 단계를 '데이터 변환'
인스턴스(instance) : 예측을 위해 모델로 보내는 데이터 항목
예를 들면 테스트 데이터 셋의 행(라벨 없음), 분류하려는 이미지, 텍스트 문서 등
인스턴스에 대한 특징이 주어지면 모델은 예측값을 계산하는데,
이를 위해 모델은 인스턴스와 라벨(label)을 갖춘 학습 예제(training example)로 학습을 진행함
학습 예제는 모델에 공급될 데이터셋 중 하나의 데이터 인스턴스(행)을 나타냄
예를 들어, 전체 학습 예제에서 '요일', '도시', '자동차 종류'라면 라벨은 데이터셋의 출력 열로, 모델이 예측하고자 하는 대상이다. 라벨은 데이터셋의 예측 열로 모델이 출력하고자 하는 대상 이다.
라벨은 데이터 셋의 대상 열(실측 검증 라벨)과 모델에서 제공한 출력(예측)을 모두 가리키는데, 타임스탬프 예시의 라벨은 '여행 기간' 이 될 수 있으며 분을 나타내는 부동 소수점값이 적절할 것이다.
데이터셋을 조립하고 모델의 특징을 결정했으면 데이터 검증(data validation)을 진행하는데, 데이터에 대한 통계 계산과 스키마 이해, 데이터셋을 평가해 데이터에 내재된 문제(드리프트, 학습 제공 편향)을 식별한다.
데이터에 대한 다양한 통계를 수행하면 데이터셋의 각 특징의 균형 잡힌 표현이 포함되어 있는지 알 수 있고, 더 많은 데이터를 수집할 수 없을 때 데이터의 균형을 이해하면 이를 고려해서 모델을 설계하는데 도움이 된다.
스키마를 이해하려면 각 특징에 대한 데이터 유형을 정의하고 특정값이 잘못되거나 누락될 수 있는 학습 예제를 식별해야 한다.
데이터 검증을 위해 학습 데이터셋과 테스트셋의 품질에 영향을 미칠 수 있는 불일치를 식별할 수 도 있다.
예를 들면, 학습 데이터셋에 대부분 주중 데이터가 포함되어 있고, 테스트셋에는 주말 데이터가 포함되어 있다면 이는 불일치에 해당함
서빙(serving)
모델에 새 데이터를 전송하고 출력하는 예측(prediction) 은, 아직 배포되지 않은 로컬 모델에서 예측값을 생성하는 것은 물론이고, 배포된 모델에서 예측값을 가져오는 모두를 의미한다.
배포된 모델의 예측은 '온라인 예측' 과 '배치 예측' 이 있다.
예측이라는 단어는 단어를 타는 주기나 장바구니가 버려질지의 여부를 예측하는 것처럼 '미래 가치를 추정' 하는 데 적합하다. 이미지 및 텍스트 분류 모델에 예측이라는 말을 사용하는 것은 조금 어색하다.
ML 모델이 텍스트 리뷰를 보고 감정이 긍정적이라고 출력하는 경우 미래 결과가 없어서 '예측' 이 아니기 떄문에 이러한 경우 '예측'을 대체하는 용어로 추론(inference)
을 사용한다. => 통계 용어인 추론과 정확하게 의미가 일치하지는 않지만 ML 업계에서는 이미 일반적으로 통용되는 용어임
학습 데이터 수집, 특징 가공(feature engineering), 학습, 모델 평가 프로세스는 프로덕션 파이프라인과 별도로 처리하는 경우가 많다.
이렇게 별도로 처리하는 경우 모델의 새 버전을 학습시키기에 충분한 추가 데이터가 있다고 결정할 때마다 모델을 다시 평가하게 되는데, 이와 같은 과정을 프로덕션 파이프라인 내에 소화하는 경우에는 새로운 데이터를 지속적으로 수집할 수 있어야 하며, 학습 또는 예측을 위해 모델로 보내기 전에 이 데이터를 즉시 전처리하는 스트리밍(streamin)
이 필요하다.
스트리밍 데이터를 처리하려면 특징 가공(feature engineering), 학습, 평가, 예측을 수행하기 위해 여러 단계에 걸친 시스템이 필요한데 이를 머신러닝 파이프라인(machine learning pipeline)
이라고 한다.
빅쿼리: SQL로 대규모 데이터셋을 빠르게 분석하도록 설계된 엔터프라이즈 데이터 웨어하우스
빅쿼리 ML : 빅쿼리에 저장된 데이터로 모델을 빌드학 위한 도구로, SQL을 사용하여 모델을 학습하고 평가하고 모델로 부터 예측을 생성가능 함.
비지도 클러스터링, 분류 모델, 회귀 모델 지원하고 예측을 위해 학습이 끝난 텐서플로 모델을 빅쿼리 ML로 임포트 가능
클라우드 AI 플랫폼: 구글 클라우드에서 커스텀 머신러닝 모델을 학습하고 서빙하기 위한 제품 포함
=> 두 서비스 모두 텐서플로, 사이킷런, XG부스트를 포함해 다양한 프레임워크로 빌드한 모델을 위한 커스텀 컨테이너 지원
(1) 데이터 과학자(data scientist) : 데이터셋 수집, 해석, 처리를 수행하는 직군
데이터에 대한 통계적 ,탐색적 분석 수행. 머신러닝과 관련해서는 데이터 수집, 특징 가공, 모델 구축 등의 작업을 할 수 있음. 일반적으로 조직의 머신러닝 모델을 가장 먼저 구축
(2) 데이터 엔지니어(data engineer) : 조직의 데이터를 위한 인프라와 워크플로 관리
회사가 데이터를 수집하고, 데이터 파이프라인을 구축하고, 데이터를 저장하고 전송하는 방법을 관리하는데 도움을 줌. 데이터를 중심으로 인프라와 파이프라인을 구현함
(3) 머신러닝 엔지니어(machine learning engineer) : ML 모델에 대해 데이터 엔지니어와 유사한 작업을 수행함. 데이터 과학자가 개발한 모델을 가져와 해당 모델을 학습, 배포와 관련된 인프라와 운영을 관리함.
ML 엔지니어는 모델을 업데이트하고, 모델 버전을 관리하고, 최종 사용자에게 예측 서빙을 처리하는 프로덕션 서비스를 구축함
(4) 연구 과학자(research scientist) : ML 분야를 발전시키기 위해 새로운 알고리즘을 찾고 개발하는 역할
연구로는 모델 아키 텍처, 자연어 처리, 컴퓨터 비전, 하이퍼파라미터 튜닝, 모델 해석과 같은 머신러닝 내의 다양한 하위 분야를 포함함.
연구 과학자는 다른 직군과 달리 프로덕션 ML 시스템을 구축하는 대신, ML에 대한 새로운 접근 방식을 프로토타이핑하고 평가하는 데 대부분의 시간을 보냄
(5) 데이터 분석가(data analyst) : 데이터를 분석하고 통찰한 내용을 뽑아낸 다음, 조직 내의 다른 팀에 이를 공유함.
SQL 스프레드시트에서 작업하고 비즈니스 인텔리전스 도구를 사용해 데이터를 시가고하하여 결과를 공유함.
제품 팀과 긴밀히 협력하며, 통찰력이 어떻게 비즈니스 문제를 해결하고 가치를 창출하는데 도움을 주는지 잘 알고 있음.
보통 기존 데이터의 추세를 식별하고 그로부터 통찰한 결과를 만들어내는 데 집중하지만, 해당 데이터를 사용하여 향후 예측을 만들고 통찰 결과 생성을 자동화하거나 확장하는 데도 관심을 갖음. 머신러닝이 대중화됨에 따라 데이터 분석가가 자신의 역량을 기른다면 데이터 과학자로 성장할 수 있음
(6) 개발자(developer) :
최종 사용자가 ML 모델에 접근할 수 있는 프로덕션 시스템 구축 담당
웹 또는 앱을 통해 사용자 친화적인 형식으로 모델에 쿼리를 날리고 예측을 반한 받기 위한 API를 설계함
이러한 API가 쿼리, 예측을 주고받는 모델은 클라우드에서 호스팅되는 모델일 수 있고, 온디바이스로 내장된 모델일 수 있음.
개발자는 ML 엔지니어가 구현한 모델 서빙 인프라를 통해 모델 사용자에게 예측을 표시하기 위한 애플리케이션과 사용자 인터페이스를 구축함
[1] 데이터 정확도(accuracy)
: 학습 데이터 특징의 정확도와 해당 특징에 해당하는 실측 라벨의 정확도
데이터의 출처와 데이터 수집 과정에 존재할 수 있는 오류에 대해 이해하면 특징의 정확성을 보장할 수 있음
데이터를 수집한 후에는 철저한 분석을 통해 오타, 중복 항목, 데이터 테이블의 단어 불일치, 누락된 특징, 기타 데이터 품질에 영향을 줄 수 있는 오류를 걸러내느 ㄴ것이 중요
=> 학습 데이터셋이 중복되면 모델은 이러한 중복 데이터에 더 많은 가중치를 할당함
데이터 라벨의 정확도 또한 특징의 정확도 만큼 중요한데, 모델은 가중치를 업데이트하고 손실 함수를 최소화할 때 학습 데이터의 실측 라벨에 의존함.
결과적으로 라벨이 잘못 지정된 학습 데이터는 모델의 정확도를 떨어트림
[2] 데이터 완전성(completeness)
: 예를 들어 고양이 품종을 식별하는 모델을 학습시킨다고 할때, 광범위한 고양이 이미지 데이터셋에서 모델을 학습하면 99% 정확도로 10개의 품종 중 하나로 이미지를 분류할 수 있다. 그런데 모델을 프로덕션에 배포하니 사용자가 고양이 사진을 분류하려고 업로드하고, 모델의 결과에 실망하게 되는데 모델이 무엇을 입력받든 상관없이 이 10가지 품종 중 하나로 분류 하기 때문이다. '고양이 아님' 에 해당하는 데이터와 라벨이 학습 데이터셋에 포함되지 않으면 '고양이 아님' 이라는 결과를 출력할 방법이 없음
데이터 완전성을 높이려면 학습 데이터에 각 라벨의 다양한 표현이 포함되도록 해야함.
위의 고양이 품종 모델에서 학습 데이터가 고양이 얼굴의 정면 클로즈업 샷이면 모델은 측면 사진이나 전신사진을 제대로 식별할 수 없음
테이블 데이터의 경우에도 마찬가지, 부동산 가격을 예측하는 모델을 만들 때, 2000 제곱피트가 넘는 주택의 학습 데이터만 사용해 모델을 학습시킨다면 작은 집에 대한 모델의 예측 성능은 떨어짐
[3] 데이터 일관성(consistency)
: 대규모 데이터셋을 만들 때 데이터 수집과 라벨 지정 작업을 여러 팀이 나눠서 수행함
데이터셋 전체의 일관성을 유지하려면 이러한 작업 절차에 대한 표준을 마련해야 함
데이터셋 전체의 일관성을 유지하려면 작업 절차에 대한 표준을 마련해야 하는데, 데이터셋 준비 과정에서 작업자들의 편견이 들어가기 때문임.
데이터 일관성 부족은 데이터의 특징과 라벨 양쪽에서 발생할 수 있음
예를 들어, 온도 센서에서 대기 데이터를 수집할 때, 각 센서가 서로 다른 표준으로 보정되었다면 모델은 부정확하고 신뢰할 수 없는 예측을 만들어내며, 데이터의 형식 자체도 일관성이 부족할 수 있음
위치 데이터 셋 수집시 데이터셋을 준비하는 사람이 일부는 전체 주소를 'Main Street' 으로 작성하고 다른 사용자는 'Main St'로 축약하거나, 마일이나 킬로미터와 같은 측정 단위를 혼재하는 것도 파함됨
라벨링의 일관성은 텍스트 감정 분류에서, 학습 데이터에 라벨을 지정할 때 각 텍스트가 긍정적인지 혹은 부정적인지에 대해 모두가 동일하게 생각하지 않을 수 있다.
이 문제를 해결하기 위해서는 여러 사람이 데이터셋의 각 항목에 라벨을 지정하고 각 항목에 가장 일반적으로 적용되는 라벨을 사용하는 것이 좋음. 누가 하느냐에 따라 라벨링의 편향이 존재할 수 있다는 점을 인식하고 이를 감안한 시스템을 구현한다면 데이터셋 전체에서 라벨링의 일관성이 보장될 것임
[4] 데이터 적시성(timelines)
데이터의 사건이 발생한 시점과 데이터베이스에 추가된 시점 사이의 지연 시간을 말함
애플리케이션 로그에서 데이터를 수집할 때는 오류 로그가 로그 데이터베이스에 표시될 때까지 몇 시간이 걸릴 수 있는데, 신용 카드 거래를 기록하는 데이터라면 거래가 발생하고 시스템에 보고될때 까지 하루가 걸릴 수 있다.
적시성을 처리하려면 특정 데이터에 대해 가능한 한 많은 정보를 기록하고 데이터를 머신러닝 모델의 특징으로 변환할 떄 정보가 반영되는지 확인하는 것이 좋음
-> 이벤트가 발생한 시점과 데이터셋에 추가도니 시점의 타임스탬프를 추적한 후 특징 가공 (feature engineering) 시 이러한 차이점을 반영하면 됨
-> 모델이 98.1%의 정확도로 학습했다면 반복적인 학습이 동일한 결과에 도달한다고 보장할 수 없어 여러 실험에서 비교를 실행하기 어려워 짐
이 재현성 문제를 해결하는 일반적인 방법은 학습을 실행할 때마다 동일한 무작위성이 적용되도록 모델에서 사용하는 시드값을 설정하는 것임
텐서플로에서의 tf.random.set_seed(value)
사이킬런에서 from skelarn.utils import shuffle, data = shuffle(data, random_state=value)
여러 실험에서 반복 가능하고 재현 가능한 결과를 보장하려면, 모델을 학습시킬 떄 동일한 데이터와 동일한 랜덤 시드를 사용해야 함
ML 모델 학습에는 재현성을 보장하기 위해 수정해야 하는 몇 가지 요소가 있는데 학습 데이터
, 학습 및 검증을 윟나 데이터셋 생성에 사용되는 분할 메커니즘
, 데이터 준비와 모델 하이퍼파라미터
, 배치 크기와 학습률
등의 변수이다.
재현성은 머신러닝 프레임워크의 종속성에도 영향을 받는데, 랜덤 시드를 수동으로 설정하는 것 외에도 프레임워크에는 모델을 학습시키기 위해 함수를 호출할 때 실해되는 무작위 요소가 내부적으로 구현되어 있음.
이 기본 구현이 서로 다른 프레임워크 버전 간에 변경되면 재현성이 보장되지 않음
=> 재현성을 보장하고 싶으면 컨테이너에서 ML 워크로드를 실행하고 라이브러리 버전을 표준화하는 것이 좋음
재현성은 모델 학습 환경에 영향도 받는데, 큰 데이터셋과 복잡성을 가진 모델은 학습하는데 상당한 시간이 걸린다.
이를 데이터 또는 모델의 병렬 처리와 같은 배포 전략을 통해 가소고하하는데, 이러한 가속화로 분산 학습을 사용하는 코드를 다시 실행할 때에도 재현성 문제가 생길 수 있음
머신러닝 모델은 일반적으로 입력과 출력의 정적인 관계를 나타내지만, 데이터는 시간의 흐림에 따라 크게 바뀔 수 있음
머신러닝 모델이 입력과 출력 간의 관계를 유지할 수 있는지와 모델 예측이 사용 중인 환경을 정확하게 반영하는지에 대한 문제를 표현하는 용어가 바로 데이터 드리프트(data drift)
임
예를 들어, 뉴스 기사 헤드라인을 '정치', '비즈니스', '기술' 과 같은 카테고리로 분류하는 모델을 학습할 때, 20세기 뉴스 기사에 대한 모델을 학습하고 평가했으면 21세기의 데이터 기준으로는 성능이 좋지 않을 수 있음
예를 들면 '스마트폰' 단어는 요즘 세대의 기술이지만 과거 데이터 학습하면 관련 지식이 없음
데이터 드리프트 문제를 해결하려면 학습 데이터셋을 지속적으로 업데이트하고, 모델을 재학습하고, 모델이 특정 입력 데이터 그룹에 할당하는 가중치를 수정해야 함
드리프트의 예로 빅쿼리의 대규모 폭풍 NOAA 데이터셋(https://oreil.ly/obzvn) 에서, 특정 지역에서 폭풍이 발생할 가능성을 예측하는 모델을 학습하는 경우 날씨 보고가 시간에 따라 변화하는 방식을 고려 해야 함
머신러닝 모델 구축 담당 팀은 조직 내 하나일 수 있지만, 조직 전체의 많은 팀이 어떤 방식으로든 모델을 사용할 수 있음. 팀이 다르면 성공적인 모델을 정의하는 방식도 다름
이미지를 입력으로 받아 결함이 있는 제품을 식별하는 모델을 만들 때, 데이터 과학자의 목표는 모델의 교차 엔트로피 손실을 최소화 하는 것임. 제품 관리자라면 잘못 분류되어 고객에게 발송되는 결함의 제품 수를 줄이는 것이 목표. 경영진의 목표는 매출을 30% 늘리는 것.
이렇게 각 팀의 최적화 대상에 따라 목표는 달라지고 조직 내에서 이러한 서로 다른 요구 사항의 균형을 맞추는 데는 어려움이 따름
데이터 과학자는 거짓 음성(fflase negative)가 거짓 양성(false positive)보다 5배 더 큰 비용을 유발한다는 사실을 인용함으로써 제품 팀의 요구사항을 모델의 맥락으로 변환할 수 있음. 모델을 설계시 이를 충족하기 위해 정밀도(presicion) 보다 재현율(recall)을 최적화해야함.
그러면 제품 팀의 정밀도 최적화 목표와 모델 손실 최소화 목표 사이의 균형을 찾을 수 있음
모델의 목표를 정의할 때는 조직 내 각 팀의 요구사항이 모델과 어떻게 관련되어 있는 지 고려하는 것이 중요함. 솔루션을 구축하기 전에 각 팀의 무엇을 최적화 하고 있는지 분석해 이러한 여러 목표의 균형을 최적화하는 타협 영역을 찾아야 함