1 of 27

오픈소스로 MLOps 생태계에 �기여하는 방법과 활동 사례

AAiCON 2023

박찬성

2 of 27

Who am I?

  • 광네트워크 분야 연구원 @ETRI
    • 하드웨어 추상화 및 가상화
    • 지능형 네트워크 슬라이싱
  • Google Developers Expert for ML & GCP
    • MLOps 시나리오와 컴포넌트 구현
    • 클라우드 접목을 통한 실용적인 구현 기여
  • Hugging Face fellow
    • MLOps + Hugging Face 인프라 활용 사례
    • 트랜스포머 기반 SOTA 모델 구현 기여

3 of 27

MLOps + 오픈소스 기여 사례 소개

오픈소스 기여 관점의 MLOps

개인이 MLOps에 접근하는 방법

MLOps란 무엇인가?

01

02

03

04

오늘의 발표 순서

4 of 27

“머신러닝 모델이 항상 현재 세상을 잘 이해할 수 있도록 유지/보수 하는 갖가지 수단”

MLOps를 바라보는 관점

5 of 27

  • ML(Machine Learning) + Ops(Operation) 를 합친 신조어(?)
  • DevOps 라는 용어로 부터 Ops 부분을 차용
    • DevOps is a set of practices that combines software development and IT operations. It aims to shorten the systems development life cycle and provide continuous delivery with high software quality. �CI / CD == Continuous Integration / Continuous Deployment�⇒ 개발된 기능의 지속적 통합 + (통합에 문제 없음을 검증) +지속적 배포
    • DevOps 에서 통합시킬 대상은 새로운 기능을 구현한 “코드”
    • 그렇다면 MLOps 에서 통합시킬 대상은 무엇인가?

MLOps를 바라보는 관점

6 of 27

MLOps를 바라보는 관점

7 of 27

MLOps를 바라보는 관점

  • End to End (일종의 System Integration)
    • 특정 유스케이스에 부합하는 시나리오 검증
    • 데이터 입력/검증/샘플링, ..., 모델 학습/검증/평가, ..., 배포
    • 비즈니스마다 요구사항이 꽤 다를 수 있음
  • Area Specific
    • 특정 분야에 집중한 기능 단위 구현, 개선, 최적화 등
    • 예시. 작업 리포팅 기능, 새로운 유형의 배포 타깃 지원, � 모델 검증 알고리즘, 서빙 인프라/컴포넌트 성능 튜닝, ...

8 of 27

개인이 MLOps에 접근하는 방법

소프트웨어를

다루는 능력

데이터를

다루는 능력

머신러닝을 다루는 능력

9 of 27

  • 혼자서 모든 것을 밑바닥에서 부터 하는것은 불가능에 가까움
    • 만든다고 해도, 베스트 프랙티스가 아닐 확률이 매우 높음
    • 소꿉놀이로 끝낼 것인지, 정말 쓰일만한 뭔가를 만들것인지
  • 그 대신, 여러 주변 도움을 받으면 수월해짐
    • 클라우드가 제공하는 완전 관리형 서비스
    • 프로덕션 Ready 머신러닝 파이프라인 프레임워크
    • 내 부족한 부분을 채워줄 프로젝트 협업자

개인이 MLOps에 접근할 수 있을까?

10 of 27

  • 완전 관리형 인프라 도구 (k8s, training/serving infra, AutoML, ...)

클라우드 서비스

11 of 27

  • 되도록이면 End to End 파이프라인을 지원하는 것으로

프레임워크

12 of 27

  • 되도록이면 End to End 파이프라인을 지원하는 것으로

프레임워크

13 of 27

  • 프로젝트 협업
    • 되도록이면 서로의 가려운 부분을 긁어줄 수 있는 멤버 구성

개인이 MLOps에 접근하는 방법

Chansung (DevOps + ML + Cloud)

Sayak (TensorFlow Core)

George (on-device ML)

Margaret (on-device ML)

Merve (Hugging Face integration)

Paolo (TF for Golang)

14 of 27

MLOps, 오픈소스 기여 범위

  • 특정 시나리오 워크플로 구현
    • 가능한 쉽게 재현할 수 있는 수준으로 (CI/CD 파이프라인)
    • 다양한 머신러닝 태스크에 대한 워크플로우 구축 사례
    • MLOps의 도입 레벨에 따라 부분적, 완전한 End to End
  • 머신러닝 전문가, 비전문가 레벨
    • 머신러닝 전문성을 떠나서 MLOps가 필요한 곳은 다양함

15 of 27

MLOps, 오픈소스 기여 범위

  • 특정 시나리오에 쓰일 모듈 구현
    • 유니버설한 시나리오는 존재하지 않음
    • 시나리오의 케이스 바이 케이스로 필요한 컴포넌트가 존재
    • 코어 자체가 바뀌지는 않지만, 서비스 엔드포인트 입장의 다양한 타깃
  • 다양한 실험 자동화 및 결과 공유
    • 시도해볼 수 있는 무수히 많은 환경이 존재함
    • 시도해볼 수 있는 무수히 많은 파라미터가 존재함
    • 인터넷에 떠도는 자료 중 중립적인 분석 자료를 찾기 쉽지 않음

16 of 27

기여 사례 소개

데이터 변화에 따라 지속적으로 적응하는 머신러닝 시스템

  • 데이터 스트리밍 파이프라인을 제외한 완전한 End to End
  • 샘플링된 데이터에 대해 현재 배포된 모델의 성능 평가
  • 성능 평가 결과에 따라 학습 데이터로 편입
  • 자동 재학습 파이프라인 트리거 ⇒ 기준 부합시 배포
  • 다양한 컴포넌트 통합에 따른 “시스템” 레벨의 작업
  • 이미 안정성이 입증된 다양한 클라우드오픈소스 컴포넌트 활용
  • 저장소, 구현 고려사항 및 방법에 대한 글, 재현 방법 문서화 등

17 of 27

데이터 변화에 따라 지속적으로 적응하는 머신러닝 시스템

배치 예측/모델 평가 파이프라인

배치 예측에 충분한 데이터가 모인 경우

데이터 범위 지정

평가결과에 따른 재학습 트리거

모델 학습 파이프라인

데이터 샘플링 저장소

18 of 27

기여 사례 소개

머신러닝 모델 배포 자동화 및 로드 테스트

  • 모델이 GitHub을 통해 릴리즈 되었을 때 CI/CD 파이프라인 트리거
  • 해당 모델을 TF Serving 이미지로 도커라이징
  • GKE(k8s) 환경으로 해당 이미지 배포
  • CPU 코어 수, RAM 용량, Node 개수에 따른 로드 테스트
  • tensor 연산 병렬 처리 옵션 (intra ops, inter ops)에 따른 로드 테스트
  • GitHub Action 전자동화, 자동화 방법 문서화, 로드 테스트 분석

19 of 27

머신러닝 모델 배포 자동화 및 로드 테스트

20 of 27

기여 사례 소개

End to End 시맨틱 세그먼테이션 머신러닝 파이프라인

  • (거의) 처음 공개된 시맨틱 세그먼테이션용 파이프라인 오픈 소스
  • 필요한 거의 모든것을 다 포함한 파이프라인
  • 데이터 주입, 쉐이핑, 전처리, 학습, 기준선 평가, 이전 모델 비교 평가, 배포
  • + 외부 모델 레지스트리 통합 (Hugging Face Model)
  • + 현재 버전의 프로토타입 애플리케이션 자동 배포 (Hugging Face Space)
  • 협업 프로젝트를 위한 반자동 파이프라인 트리거용 GitHub Action
  • 저장소, 커스텀 컴포넌트 TFX–addon SIG 그룹 기여, Hugging Face 기여

21 of 27

End to End 시맨틱 세그먼테이션 머신러닝 파이프라인

파라미터 지정�GitHub Action

GCP 환경 및 파이프라인 지정

Continuous�Deployment

파이프라인 빌드 검증,�도커라이징, GCP 위임

GCP 환경 속에서 일어나는 일

무거운 데이터 처리�⇒ Dataflow(Apache Beam)

학습 및 배포�⇒Vertex AI Training/Serving

Vertex AI Pipeline

외부 Registry

자동 앱 생성

22 of 27

기여 사례 소개

Stable Diffusion을 배포하는 다양한 방법

  • Stable Diffusion이 여러 모델로 구성된 것에 착안�: Text Encoder(CLIP), Diffusion Model(UNet), Decoder(VAE)
  • 각 모델은 서로 다른 하드웨어 요구사항을 지니지만, �이 사실에 주목한 배포 시나리오를 다룬 프로젝트가 없었음
  • 분리 배포에 대한 실험. 일부는 클라우드, 일부는 클라이언트 (모바일 포함)
  • k8s(GCP/Azure/AWS), FastAPI/TF Serving 다양한 사용법
  • 모든 상황에 대한 소스코드 및 인퍼런스 실험 노트북 배포

23 of 27

Stable Diffusion을 배포하는 다양한 방법

24 of 27

기여 사례 소개

Textual Inversion의 효과적인 관리를 위한 파이프라인

  • 새로운 컨셉을 학습한 Stable Diffusion은 여러개가 만들어 질 수 있음
  • 각 컨셉마다 신규 브랜치 ⇒ GitHub Action 으로 CI/CD 자동화
  • 브랜치별 Hugging Face Hub 통합
  • 논리적으로 컨셉마다 (잘) 분리된 Stable Diffusion을 관리

25 of 27

Textual Inversion의 효과적인 관리를 위한 파이프라인

26 of 27

이후 활동 방향

  • 다양한 외부 플랫폼 통합을 위한 TFX 컴포넌트 개발
    • Weight & Biases 가 제공하는 Model Registry
    • Hugging Face Hub 데이터셋을 기본 파일시스템처럼 지원
  • TFX 비-의존성 Hugging Face Hub 활용 라이브러리 개발
    • Hugging Face Hub as Artifact Store
  • GCP의 다양한 기능에 대한 벤치마크
    • 단일 GPU의 시분할 공유, 단일 GPU의 논리 분할 공유
  • TF Serving의 다양한 설정에 따른 성능 벤치마크
    • CPU 아키텍처별 최적 컴파일버전, 동적 배치 추론

27 of 27

감사합니다