- MLOps의 성공은 강력한 인프라에 의존
- 적절한 인프라구성은 데이터 처리 , 모델 트레이닝 ,배포 및 모니터링과 같은 핵심 작업을 지원
- 이러한 작업들을 원활하고 안정적으로 수행할수 있게 하는것이 인프라
- StorageP
- Computing Resource
- 환경관리 툴
- Container
- Orchestrator
- CI/CD
- Version Control
- HTTP & REST API
- 데이터 저장, 백업, 복구
- S3등 Cloud 기반 서비스
- MLOps 예시로는 대규모 이미지를 S3 버킷에 저장하여 머신러닝 모델 트레이닝에 활용
- 데이터처리 ,분석 ,모델 트레이닝에 필요한 컴퓨팅 파원 제공
- 예시로는 GC의 Computing Engine은 사용자가 필요에 따라 확장가능한 컴퓨팅리소스 제공
- MLOps는 Computing Engine에서 GPU를 활용해 복잡한 머신러닝 빠르게 트레이닝
- 프로젝트별 독립적인 환경 제공하는 패키지 및 관리 시스템
- MLOps에서는 Conda 환경사용해 주로 다양한 머신러닝 프로젝트 의존성 관리
- 의존성을 패키지화하여 일관된 환경에서 실행할수 있도록 지원
- Docker는 app 컨테이너화 하여 다양한 환경에서 실행
- MLOps예시 , 컨테이너를 사용해 모델 트레이닝환경 일관되게 유지
- 여러 컨테이너 배포, 확장, 네트워킹 관리
- 쿠버네티스 사용해 대규모 컨테이너 애플리케이션 ㄴ관리조정 담당
- 작업 효율적으로 컴퓨팅 리소스에 할당하고 실행
- Apache Airflow등 사용하여 관리 및 스케쥴링 사용
- 모델 개발 및 테스트 주기를 단축시켜 빠른 반복 가능하게 하는 도구
- MLOps d예시 . 새로운 모델 알고리즘 코드 업데이트되면 자동으로 모델 학습 및 평가 검증하여 production환경으로 릴리즈
- 소프트웨어 프로젝트 다양한 요소들 버젼관리진행
- MLOps 예시: 이전에 개발된 모델 재현을 위해 원하는 버젼 데이터 , 코드 활용
- 다른 시스템과 통신을 위한 표준 프로토콜 미 ㅊ인터페이스
- GIT등
- 중요성
- 데이터 보존
- 데이터가 가장 중요한 자산, 데이터의 안전한 저장, 데이터 손실방지, 언제든지 데이터 접근허용 가능
- 접근성
- 효율적인 데이터 접근은 머신러닝 모델의 트레이닝과 테스트시간 단축, 빠른 데이터 접근은 프로젝트 전반적인 생산성 향상
- 확장성
- MLOps 프로젝트는 시간에 따라 데이터양 증가 , 따라서 확장가능성 필요
- 데이터 보존
- 클라우드
- S3 , GCS, Azure Blob Storage
- 기능
- 확장성 : 거의 무한에 가까운 저장공간 제공,
- 내구성 가용성: 데이터 복제 및 여러 지역에 걸쳐 분산저장으로 높은 내구성 및 가용성 보장
- 안정성 : 고급 암호화 및 보안 프로토콜을 통해 데이터 보호
- 비용 효율성 : 사용한 만큼만 지불, 다양한 저장옵션 제공
- MLOps활용 예시
- 대규모 이미지 ,비디오셋 저장 및 분ㄴ석 ,글로벌 머신러닝 파이프라인에서 데이터 공유
- 하둡, HDFS , GlusterFs
- 기능
- 대규모 데이터 처리 , 여러 노드에 걸쳐 대규모 데이터 분산 저장 및 처리
- 고가용성 : 데이터를 여러 노드에 복제하여 하나의 노드에 문제가 발생해도 데이터 손실 방지
- 확장 가능한 아키텍쳐 : 데이터 양이 증가함에 따라 쉽게 노드 추가하여 시스템 확장 가능
- 비용 효율성 : 오픈소스 솔루션을 사용하여 비용절감 가능
- MLOps 활용 : 대규모 빅데이터 분석 ,복잡한 데이터 처리 작업, 대용량 데이터 실시간 처리 및 저장
- Snowflake, Amazone Reshift , Google Bigquery
- 기능
- 고속 쿼리 실행 : 최적화 쿼리 엔진 사용
- 대규모 데이터 분석 : 구조화된 대용량 데이터 효율적인 분석 및 저장
- 사용 편의성 : SQL 쿼리로 사용자 친화적
- 보안과 규제 준수
- AWS Lake Formation , Azure Data Lake
- 기능
- 다양한 데이터 형식 지원
- 유연한 데이터 처리
- 대규모 데이터 관리
- 비용 효율성
- MLOps
- 대규모 이미지 또는 비디오 데이터셋 저장 및 분석 ,글로벌 머신러닝 파이프라인에서 데이터 공유
- 데이터 준비
- Model Registrey
- 훈련 모델 및 관련파일 저장
- Data Pipeline
- 지속적인 데이터 업데이트와 Model 재훈련 지원
- 클라우드 기반
- S3 사용하여 대용량 사용자 데이터 저장 및 관리
- 데이터 레이크를 통한 유연한 데이터 관리
- 금융기관에서 데이터레이크 구추갛여 다양한 거래 데이터를 효과적으로 관리하고 분석
- 중요성
- 성능: 높은 ㄱ컴퓨팅 파워
- 유연성 : 컴퓨팅 요구사항 다양하게 대응가능
- 확장성 : 리소스 확장 가능해야함
- 클라우드 기반 컴퓨팅
- GPU/TPU
- 서버리스 컴퓨팅
- 컨테이너화된 컴퓨팅
- EC2 , Google Compute Engine
- 기능
- 인스턴스 유형과 환경 다양성
- 자동 스케일링 : 트래픽이나 작업부하에 따라 자동으로 리소스를 스케일링하여 효율성 및 비용절감
- 종합적인 보안
- 네트워크 보안 , 데이터암호화 , 접근 관리등을 포함한 보안 솔루션 제공
- 전역 네트워크
- 데이터 세터를 통해 글로벌 액세스 지원
- MLOps - > GPU 인스턴스 사용해 글로벌 배포 및 로드밸런싱 가능
- 로드밸런싱 → 동시접속 트래픽 분할 지원해 다양한 클라우드 기반 컴퓨팅으로 나누어줌
- 딥러닝 최적화
- 고속메모리 접근
- 에너지 효율적 설계
- 인프라
- MLOps
- 고해상도 이미지 인식, 복잡한 딥러닝 모델 훈련 ,대규모 데이터셋에서 빠른 추론
- AWS Lambda , Google Cloud Function , Azure Functions
- 기능
- 코드 중심 실행 : 서버 구성이나 관리 없이 바로 코드에 집중 가능
- 다양한 트리거 옵션 : HTTP , 데이터베이스 이벤트 ,큐 메시지등 다양한 이벤트에 의해 트리거
- 빠른 배포 및 업데이트 : 새로운 코드버젼을 빠르게 배포하고 업데이트 , 통합 에코시스템 ,
- MLOps
- 대규모 딥러닝을 위한 GPU 인스턴스 사용
- Docker Container, 쿠버네티스 클러스터
- 기능
- 개발 및 배포 일관성
- 자동 오케스트레이션
- 마이크로서비스 아키텍쳐 지원
- 리소스 효율성
- 데이터 처리
- 대량의 데이터전처리 ,클렌징,변환 신속하게 수용
- 모델 훈련 , 추론
- 모델 배포 및 serving
- 대규모 이미지 분석
- 실시간 사용자 행동 예측
- 자연어 처리 응용 프로그램
- 특정 프로젝트 종속성 및 설정 관리하는데 사용하는 도구
- 프로젝트 별로 격리된 개발환경 설정하고 유지하는데 중점을 두며 , 이를통해 다양한 프로젝트 간의 종속성 출돌 방지하고 일관된 개발환경 보장
- 환경 격리
- 종속성 관리
- 환경 재현성
- 버젼 호환성
- conda
- virtualenv
- pipenv
- conatiner 기술 - > 도커 , 쿠버
- 오픈소스 패키지 관리 시스템 환경 시스템
- python ,R 등 적용가능
- 특징
- 주요 파이썬 프로젝트에 사용
- 크로스 플랫폼 : 리눅스 ,윈도우 ,맥등 작동
- 환경 관리 : 프로젝트 별로 격리된 환경
- 다양한 패키지
- 활용 : 패키지 설치 : 필요한 라이브러리 도구 설치 가능
- 환경관리 : 프로젝트 별 가상환경만들어 종속성 가능
- 파이썬 가상환경 생성
- 각 환경 독립적이며 서로 다른 패키지 관리할수 있음 ,
- 특징
- 각 프로젝트에 독립적 파이썬환경 제공
- 간편한 사용 , 패키지 관리
- 파이썬 개발을 위한 도구
- pipfile과 pipfile lock파일사용하여 프로젝트 종속성 관리
- 특징
- 종속성 관리
- 가상환경 통합
- 보안 강화
conda create -n {name} python=={version}
conda env list
conda info -envs {env name}
conda env export > env.yml
conda env create -n newone -f env.yml
- 필요한 모든 요소를 포함하는 소프트웨어 패키지
- 운영체제를 가상화해서 클라우드, 로컬 실행가능
- 컨테이너를 사용해 효율적 소프트웨어 배포 가능
- 모든 것 , 코드 ,런타임, 시스템 ,라이브러리등 포함하는 표준 단위
- 작동원리
- 운영체제의 커널을 공유하며 각 컨테이너는 서로 격리된 공간에서 실행 ,이른ㄴ 컨테이너가 각 파일시스템을 가지고 있는 가벼운 가상환경과 유사
- 독립된 실행환경
- 경량화
- 전체OS가상화가 아닌 필요한 컴포넌트만 포함
- 이미지 기반
- 어플리케이션 실행에 필요한 모든 파일포함하는 이미지 기반
- 이미지
- Registery
- Conatiner Runtime
- 애플리케이션 실행과 그 필요한 모든 파일 포함하는 불변 템플릿
- 컨테이너 이미지가 저장되고 공유되는 공간
- Docker hub, google conatiner REgistry 등이 있음
- Container를 실행하기 위한 환경 제공
- 예시 : docker , rkt등이 잇으며 컨테이너 이미지를 실행하여 instance 생성
- 환경 일관성 제공
- 개발 ,테스트 , 생산 환경에서 동일한 소프트웨어 환경을 유지할수 있게 해줌
- 자원 효율성증가
- VM보다 적은 리소스 사용하여 더많은 어플리케이션 호스팅 가능, 하드웨어 비용 줄이고 자원 사용률 최적화
- 배포및 확장성 용이
- 배포 및 확장용이하며 빠른 시작과 중단이가능해 CI/CD 파이프라인과 잘통합되어 개발 및 배포가 빠름
- 경량성 및 빠른 시작
- 일관된 환경
- 효율적인 자원 사용
- 운영체제의 커널을 공유하므로 가상머신에 비해 더 적은 양의 메모리와 CPU 사용
- 격리와 분리
- 책임을 깔끔하게 분리, 개발자는 어플리케이션 로직과 종속항목에 집중하고 , IT운영팀은 배포 및 관리에 집중
- 다른 어플리케이션으로부터 논리적 격리된 OS 환경 제공
- 보안 취약성
- 관리 복잡성
- 다수의 컨테이너 사용해 복잡성 증가
- 다양한 클라우드 환경에서 머신러닝 모델을 운영하기 위한 컨테이너 사용
- 구체적 내용
- 문제상황 : 다양한 클라우드 사용해 머신러닝 모델 배포 및 관리 복잡성
- 해결방법 : 여러 클라우드에서 일관된 운영 관리
- 결과 : 클라우드에 상관없이 일관성으로 머신러닝 모델 및 배포
- 대규모 데이터 처리와 머신러닝 모델학습을 위한 파이프라인에서 컨테이너 사용
- 구체적 내용
- 문제 상황 : 복잡한 데이터 파이프라인과 다양한 머신러닝 모델이 다수의 서버환경과 관리되어양함
- 해결 방법 : 컨테이너를 사용하여 모든 데이터파이프랑니 구성요소를 표준화된 환경에 배치
- 결과 : 개발자 + 데이터과학자 동일한 환경에서 작업가능
- MLOps 프로세스의 일환으로 CI/CD 파이프라인에 컨테이너 도입
- 중요성
- 핵심구성요소 이므로 데이터 과학자와 개발자가 동일한 환경에서 작업할수 있게 도와주며 모델의 개발, 테스트, 배포 과정을 효율적으로 만듦
- 효율성과 확장성
- 컨테이너로 ML pipline의 효율성 증가 하며 클라우드 확장성을 제공
- 계속 발전하고 MLOps에 중요한 영향을 끼침
-
어플리케이션 패키징과 배포를 위한 오픈소스 플랫폼
-
구성요소
- Image
- 모든 파일과 설정을 포함하는 템플릿
- Conatiner
- Daemon
- 도커 이미지와 컨테이너를 관리하는 background service
- Registry
- 외부 이미지 저장소, 다른 사람들이 공유하거나 private하게도 사용가능
- Client
- 사용자 interface
- Image
- 도커 컨테이너간 외부 네트워크와의 통신을 위한 다양한 네트워킹 옵션제공
- bridge, host, overlay 네트워크 가 있으며 컨테이너 네트워크 설정가능
- Volume저장 가능 , 컨테이너 삭제, 재시작시에도 데이터 유지 할수 있음
- 여러 컨테이너 정의하고 실행하기 위한 도구
- 복잡한 어플리케이션을 간단하게 정의하고 관리할수 있게 도와줌
- 다수의 container를 조정하고 관리하는 시스템, 컨테이너 배포, 스케일링 및 네트워킹 자동화
- 높은 가용성, 확장성 신뢰성을 가진 시스템을 구축하기 위해 conatiner된 애플리케이션의 복잡한 작업을 간소화
- 복잡성 관리
- 복잡한 서비스의 생명주기 관리하고 컨테이너간 의존성 조정
- 자동화
- 자동화를 ㅌ통해 안정적 운영가능
- 확장성
- 사용량 증가에 따라 자동으로 리소스를 조정하고 ,필요에 따라 서비스를 확장하거나 축소할수 있음
- 고가용성
- 장애발생시 자동으로 복구
- 사용자가 정의한 설정에 따라 컨테이너 자동 배포 및 실행
- Image 환경변수, 명령어 등을 정의하고 자동으로 생성
- 트래픽 증가나 감소에 따라 자동으로 컨테이너 수 조절
- 사용량이 많은 시간대에는 컨테이너 수 늘리고 적은 시간대에는 줄여 리소스를 효율적으로 사용 등
- 오류를 자동으로 감지하고 필요한 경우 복구 조치 취함
- 컨테이너가 실패하거나 비정상으로 동작할 경우 자동으로 재시작시키고 새 instance로 교체
- 컨테이너간 통신 및 서비스 발견 관리
- 내부DNS 또는 다른 서비스 발견 메커니즘을 통해 컨테이너 간의 통신 용이
- 어플리케이션 업데이트를 안전하게 관리하고 필요한 경우 이전 버젼으로 롤백
- 업데이트 중 발생하는 다운타임최소화 하기 위해 롤링 업데이트 같은 전략 사용
- 다양한 데이터 처리하고 모델 효율적 훈련 및 배포 파이프라인 구축
- 전처리 , 트레이닝 , 평가 및 배포 파이프라인 자동화
- 결과 : 모델 개발 시간 단축, 효율적인 리소스 관리 배포
- 시장 데이터 분석 및 트레이딩 결정시에 모델 시스템 구축필요성일때
- 클러스터 활용하여 실시간 데이터 스트림처리 및 빠른 의사결젖ㅇ 위한 분석모델
- 개인화된 추천 제공하기 위해 여러 머신러닝 모델 개발 및 유지보수 필요
- 오케스트레이터 활용
- 다양한 머신러닝 모델을 동시에 트레이닝하고 효율적 배포 및 관리
- 대규모 데이터셋에서 트레이닝 필요시
- 대규모 GPU 분산 배치하고 효율적인 모델 트레이닝 파이프라인 구축
- 복잡한 워크플로우 관리
- 자동 스케일링 및 로드밸런싱 및 리소스 사용최소화
- 고가용성 및 복구 메커니즘
- 머신러닝 시스템의 신뢰성 높임
- CI/CD
- 지속적인 통합과 배포를 지원하기 때문에 모델 지속적 개선
- 온라인 테스트 환경에서 진행
- 비즈니스나 기술프로세스 설계 ,실행, 모니터링 및 최적화를 포함하는 전체적인 접근 방식
- MLOps의 management는 머신러닝 프로젝트의 다양한 단계와 작업을 체계적으로 조율하고 관리하는 프로세스에 중점을 맞춤
- 프로세스 설계 및 모델링
- 기능 : 프로젝트 모든 단계 (데이터 수집 , 전처리 ,모델 트레이닝 등 ) 체계적으로 설계하고 모델링
- 자동화 및 실행
- 기능 : 정의된 workflow에 따라 작업을 자동으로 실행 , 수동작업의 필요성을 줄이고 일관성과 효율성 높임
- 모니터링 및 관리
- workflow 각 단계 모니터링
- 최적화 및 개선
- 자동화
- 시간절약
- 오류 감소
- 상태 모니터링 : 프로젝트 각 단계 실시간 추적 및 상태 명확하게 파악 가능
- 문서화 : 작업의 기록을 자동으로 생성하며 추후 분석하는데 사용
- 데이터 기반 의사결정 : 수집된 데이터 분석하여 보다 정보에 기반한 의사결정 지원
- 비즈니스가 성장하면서 발생하는 확장성 관리
- 데이터수집, 모델훈련, 배포 , 전체 머신러닝 파이프라인 자동화
- 효율적이고 일관된 pipeline구성
- 구성요소
- 데이터 준비
- 모델 개발
- ㅍ평가 및 검증
- 배포 및 모니터링
- 자동화된 데이터처리 파이프라인
- apache kafka등 을 사용해 실시간 데이터 스트림 수집 및 spark를 사용해 데이터 전처리 및 feature추출
- 분산 모델 트레이닝
- 대규모 이미지 데이터셋을 사용하는 딥러닝 모델 개발
- 쿠버네티스 사용하여 여러 GPU에서 모델 동시 training
- 이는 트레이닝 시간 단축하고 효율성 높임
- python으로 작성된 오픈소스 워크플로우 관리도구
- 데이터 엔지니어링 및 머신러닝 파이프라인 스케쥴링과 관리에 탁월
- DAGs 방식으로 정의하여 워크플로우 효과적으로 관리
- 동적 pipeline 구성 : python script 작성
- 장성과 유연성 : 다양한 Excutor지원으로 분산환경에서 확장성 제공
- 데이터 처리 및 ETL 작업 : 대규모 데이터셋 정제 , 변환 및 로딩작업 자동화 및 스케쥴링
- 모델 트레이닝 파이프라인 : 머신러닝 훈련 자동화 및 데이터 전처리
- DAG 구성 예시
- 쿠버네티스 위에서 워크플로우 구축, 실행, 관리하기 위한 오픈소스 플랫폼
- 쿠버네티스 기반 : 확장성과 유연성을 사용하여 머신러닝 파이프라인관리
- 다양한 머신러닝 통합
- Pytorch등 다양한 머신러닝 도구와 프레임워크 지원
- 분산 모델 트레이닝
- 모델 서빙 및 배포
- 하지만 대부분 Airflow를 쓴답니다
- pip install local
- docker conatiner 실행 ⇒ 확장성 용이
- docker Image 생성
- Dockerfile 정의
- docker build -t my_airflow_image .
- docker run -n my_airflow_image -d -p 8080:8080 my_airflow_image:latest
- Directed Acyclic Graph
- Workflow 정의하는 주요 구성 요소
- Task : DAG에서 실행되는 개별단위
- 의존성 : 한 Task가 다른 Task에 의존하는 관계를 의미
- operator : airflow에서 작업을 수행하는 객체, 다양한 유형의 operator가 있으며 특정 작업 수행
- task : operator 인스턴스
- task instance : 특점 시점에서 task의 instance
- workflow
- 순서와 의존성은 >> << 를 통해서 설정
- 의존성 순환 : 순환 안됌
- 스케쥴링 : start_date와 schedule_interval을 적절히 설정하여 작업이 예상되로 실행되도록 해야함
- 오류처리 : 각 task를 실패할수 있으므로 오류 처리 고려해야함
- dag 작성
- dag 실행
- dag 실행결과 확인
- 각 feature enginerring
- 2가지 모델 훈련진행
- 더좋은 모델 선택
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.metrics import accuracy_score
from airflow.models import Variable
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2023, 1, 1),
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
}
dag = DAG(
'model_training_selection',
default_args=default_args,
description='A simple DAG for model training and selection',
schedule_interval=timedelta(days=1),
)
def feature_engineering(**kwargs):
from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()
X = pd.DataFrame(iris.data, columns=iris.feature_names)
y = pd.Series(iris.target)
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# XCom을 사용하여 데이터 저장
ti = kwargs['ti']
ti.xcom_push(key='X_train', value=X_train.to_json())
ti.xcom_push(key='X_test', value=X_test.to_json())
ti.xcom_push(key='y_train', value=y_train.to_json(orient='records'))
ti.xcom_push(key='y_test', value=y_test.to_json(orient='records'))
def train_model(model_name, **kwargs):
ti = kwargs['ti']
X_train = pd.read_json(ti.xcom_pull(key='X_train', task_ids='feature_engineering'))
X_test = pd.read_json(ti.xcom_pull(key='X_test', task_ids='feature_engineering'))
y_train = pd.read_json(ti.xcom_pull(key='y_train', task_ids='feature_engineering'), typ='series')
y_test = pd.read_json(ti.xcom_pull(key='y_test', task_ids='feature_engineering'), typ='series')
if model_name == 'RandomForest':
model = RandomForestClassifier()
elif model_name == 'GradientBoosting':
model = GradientBoostingClassifier()
else:
raise ValueError("Unsupported model: " + model_name)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
performance = accuracy_score(y_test, predictions)
ti.xcom_push(key=f'performance_{model_name}', value=performance)
def select_best_model(**kwargs):
ti = kwargs['ti']
rf_performance = ti.xcom_pull(key='performance_RandomForest', task_ids='train_rf')
gb_performance = ti.xcom_pull(key='performance_GradientBoosting', task_ids='train_gb')
best_model = 'RandomForest' if rf_performance > gb_performance else 'GradientBoosting'
print(f"Best model is {best_model} with performance {max(rf_performance, gb_performance)}")
return best_model
with dag:
t1 = PythonOperator(
task_id='feature_engineering',
python_callable=feature_engineering,
)
t2 = PythonOperator(
task_id='train_rf',
python_callable=train_model,
op_kwargs={'model_name': 'RandomForest'},
provide_context=True,
)
t3 = PythonOperator(
task_id='train_gb',
python_callable=train_model,
op_kwargs={'model_name': 'GradientBoosting'},
provide_context=True,
)
t4 = PythonOperator(
task_id='select_best_model',
python_callable=select_best_model,
provide_context=True,
)
t1 >> [t2, t3] >> t4
- Docker 활용
- docker-compose 작성
version: '3.8'
services:
jenkins:
image: jenkins/jenkins:latest
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins_home:/var/jenkinshome
environment:
- JENKINS_OPTS=--httpPort=8080
restart: unless-stopped
volumes:
jenkins_home:
- docker-compose up & (백그라운드)
- localhost:8080 접속
- workflow managment랑 차이?
- 개발자들이 코드 변경사항을 중앙저장소에 정기적으로 병합하는 것을 의미
- 이 과정에서 자동화된 빌드 및 테스트가 수행되어 코드 변경이 주 저장소에 통합되기 전에 문제를 조기에 발견하고 해결
- 테스트를 거친코드를 자동으로 production 환경에 배포하는 과정
- 수동 개입 없이도 새로운 코드를 변경사항이 사용자에게 신속하게 도달하도록 함
- 빠른 반복 및 지속적인 개선
- 모델 반복속도 향상 : 모델 개발 및 테스트주기 단축시켜 빠른 반복하게함
- 품질 보증 및 신뢰성
- 자동화된 테스트수행해 정확도, 성능 안정성을 지속적으로 모니터링하고 검증
- 협업 및 투명성 강화
- 협업 향상 : CI/CD 는 데이터과학자 , 개발자, 운영간의 협업을 강화, 코드 데이터 모델의 변경사항이 지속적으로 통합되어 모든 이해관계자가 최신상태를 파악
- 배포 및 운영의간소화
- 자동화된 배포 : 모델 프로덕션 환경으로 자동화된 배포 수행
-
차이점
- CI/CD 는 도구의 통합 ,테스트 빌드 및 배포 과정을 자동화하여 소프투웨어 개발 및 배포 프로세스 효율적으로 만들기 위해 설계
- Workflow managment는 데이터 처리 작업과 스케쥴링 ,실행, 모니터링을 자동화하는데 중점을 둠
CI.CD 도구들
- 개요
- java로 작성된 오픈소스, 소프트웨어 개발의 연속적 통합 및 연속적 배포를 위한 도구
- 특징
- 플러그인 생태계 : 다양한 개발 ,테스트 배포 도구들과 통합가능
- 유연성과 확장성: 사용자 정의 워크플로우생성 가능해 groovy기반의 스크립트로 파이프라인 커스터마이즈 가능
- 마스터 -슬레이브 아키텍쳐 : 대규모 프로젝트와 다중환경지원
- 개요
- 소스관리와 CI/CD 통합된 웹기반의 Devops 생명주기 도구
- 특징
- 통합된 환경
- yaml 파일 기반의 파이프라인
- 자동화된 테스트 및 배포
- github 저장소의 기능으로 소프트웨어 워크플로우 자동화
- 특징
- github 통합
- 마켓플레이스
- 다양한 OS 지원
- 클라우드 기반의 CI/CD , 빠른 빌드, 테스트 및 배포 지원
- 특징
- 컨테이너 기반의 아키텍쳐 : Docker 컨테이너 또는 가상머신에서 빌드를 실행
- 쉬운 통합 : Github와 Bikbucket과의 쉬운 통합 제공
- 병렬 처리 : 작업을 병렬로 처리해 빌드시간 단축
- github프로젝트에 쉽게 통합되는 CI 서비스
- SW의 모든 구성요소, (데이터, 코드, 환경설정)등에 대한 변경사항 추적하고 관리
- 프로젝트의 재현성, 안정썽, 협업 효율성을 높이는데 매우 중요
- 소스코드 변경사항 추적 (GIT)
- 데이터 세트의 버젼 관리
- 데이터 변경사항 ,업데이트, 변형 과정 추적
- 모델 각 버젼 추적
- 훈련시 모델 ,파라미터 ,하이퍼파라미터 등 버젼관리
- 머신러닝 모델 훈련하고 실행하는데 사용되는 환경 버젼 관리
- Docker 를 사용하여 환경 일관되게 유지
- 실험 결과 정확히 재현해야함
- 데이터, 모델, 코드의 버젼관리를 통해 똑같이 재현
- 다수의 데이터 과학자와 엔지니어가 동일한 프로젝트에 일관성
- 버젼관리를 통해 다양한 품질관리 가능
- CI/CD , 코드리뷰, 테스트등
- 머신러닝 프로젝트의 각 단계 문서화하고 기록 유지
- git 있음~
- 코드리뷰를 통한 품질관리
- CI/CD 파이프라인을 통한 자동화된 모델 훈련 및 배포
- 머신러닝 프로젝트 데이터셋 버젼관리
- 오픈소스 버젼관리 시스템
- git과 유사한 인터페이스지만 대용량 / 데이터세트, 머신러닝 모델을 효율적으로 관리
- 대용량 데이터 관리
- 데이터세트 버젼관리
- 데이터 파이프라인 관리
- 실험 관리 및 추적
- 원격 저장소 지원
- 특징
- GIT과 통합 잘됌
- 확장성
- 플랫폼 독립성
- 커뮤니티나 문서활성화
- 깃 확장도구 : 대용량 파일 효과적으로 관리
- 대용량 파일관리
- 버젼관리
- 효율적인 데이터 전송
- 통합 및 호환성
- 특징 :
- 확장성
- 성능최적화
- 유연한 작업흐름
- 쉬운 설정 사용
- 아파치 스파크 위에 구축된 오픈소스 저장소 레이어
- 대규모 데이터 레이크 환경에서 데이터 신뢰성과 성능향상
- ACID 트랜젝션 지원 및 데이터 무결성과 복잡한 데이터파이프라인 관리 용이
- 기능
- ACID 트랜잭션 (Atomicity , Consistnect , Isolation ,Durability) 트랜잭션을 사용하여 데이터 무결성 보장
- 스케일러블 , 메타데이터 처리
- Time Travle : 이전버젼 되돌림
- 통합 및 스트리밍 및 배치처리 : 스트리밍 데이터와 배치데이터를 동일한 프레임워크에서 처리할수 있도록 지원,
- 스키마 검증 : 데이터 스키마의 검증 및 자동진화 지원
- 특징
- 데이터 무결성
- 성능 최적화
- 유연한 데이터 처리
- Spark 통합