6단계: AI 프로젝트 실전 및 생산 배포
머신러닝과 소프트웨어 엔지니어링을 결합하여 실험에서부터 프로덕션 배포까지 전체 프로세스를 가르치는 포괄적인 머신러닝 엔지니어링 과정입니다.
Made With ML 프로젝트 상세 소개
프로젝트 개요
Made With ML은 Goku Mohandas가 만든 오픈 소스 프로젝트로, 머신러닝과 소프트웨어 엔지니어링을 결합하여 생산 수준의 머신러닝 애플리케이션을 설계, 개발, 배포 및 반복하는 방법을 가르치는 데 중점을 둡니다. 이 프로젝트는 이미 GitHub에서 40,000명 이상의 개발자가 관심을 갖는 최고의 머신러닝 저장소 중 하나가 되었습니다.
프로젝트 목표 및 특징
핵심 이념
이 과정은 실험 단계(설계 + 개발)에서 생산 단계(배포 + 반복)에 이르기까지 반복적인 방식으로 신뢰할 수 있는 생산 시스템을 점진적으로 구축합니다.
주요 특징
- 💡 제1원리: 코드에 직접 들어가기 전에 각 머신러닝 개념에 대한 제1원리 이해를 구축합니다.
- 💻 모범 사례: 머신러닝 모델을 개발하고 배포할 때 소프트웨어 엔지니어링 모범 사례를 구현합니다.
- 📈 확장성: 새로운 언어를 배우지 않고도 Python에서 머신러닝 작업 부하(데이터, 훈련, 튜닝, 서비스)를 쉽게 확장할 수 있습니다.
- ⚙️ MLOps: MLOps 구성 요소(추적, 테스트, 서비스, 오케스트레이션 등)를 연결하여 엔드 투 엔드 머신러닝 시스템을 구축합니다.
- 🚀 개발에서 생산: 코드 또는 인프라 관리를 변경하지 않고도 개발에서 생산으로 빠르고 안정적으로 전환하는 방법을 배웁니다.
- 🐙 CI/CD: 모듈 방식으로 더 나은 모델을 지속적으로 훈련하고 배포하기 위한 성숙한 CI/CD 워크플로우를 만드는 방법을 배웁니다.
대상 청중
이 프로젝트는 다양한 유형의 학습자를 대상으로 합니다.
- 👩💻 모든 개발자: 소프트웨어/인프라 엔지니어이든 데이터 과학자이든 머신러닝은 제품 개발의 핵심 부분이 되고 있습니다.
- 👩🎓 대학 졸업생: 업계에서 요구하는 실용적인 기술을 배우고 대학 과정과 업계 기대 사이의 격차를 해소합니다.
- 👩💼 제품/리더십: 머신러닝 기반의 놀랍고 신뢰할 수 있는 제품을 구축하기 위해 기술 기반을 구축하고자 합니다.
프로젝트 구조 및 내용
코드 구조
프로젝트의 핵심 코드는 다음과 같은 Python 스크립트로 리팩터링되었습니다.
madewithml
├── config.py
├── data.py
├── evaluate.py
├── models.py
├── predict.py
├── serve.py
├── train.py
├── tune.py
└── utils.py
주요 워크플로우
1. 환경 설정
프로젝트는 다양한 배포 환경을 지원합니다.
- 로컬 환경: 개인 노트북을 클러스터로 사용
- Anyscale 플랫폼: Anyscale Workspace를 사용하여 클라우드에서 개발
- 기타 플랫폼: AWS, GCP, Kubernetes, 로컬 배포 등 지원
2. 데이터 및 모델 훈련
export EXPERIMENT_NAME="llm"
export DATASET_LOC="https://raw.githubusercontent.com/GokuMohandas/Made-With-ML/main/datasets/dataset.csv"
export TRAIN_LOOP_CONFIG='{"dropout_p": 0.5, "lr": 1e-4, "lr_factor": 0.8, "lr_patience": 3}'
python madewithml/train.py \
--experiment-name "$EXPERIMENT_NAME" \
--dataset-loc "$DATASET_LOC" \
--train-loop-config "$TRAIN_LOOP_CONFIG" \
--num-workers 1 \
--cpu-per-worker 3 \
--gpu-per-worker 1 \
--num-epochs 10 \
--batch-size 256 \
--results-fp results/training_results.json
3. 모델 튜닝
python madewithml/tune.py \
--experiment-name "$EXPERIMENT_NAME" \
--dataset-loc "$DATASET_LOC" \
--initial-params "$INITIAL_PARAMS" \
--num-runs 2 \
--num-workers 1 \
--cpu-per-worker 3 \
--gpu-per-worker 1 \
--num-epochs 10 \
--batch-size 256 \
--results-fp results/tuning_results.json
4. 모델 평가
export RUN_ID=$(python madewithml/predict.py get-best-run-id --experiment-name $EXPERIMENT_NAME --metric val_loss --mode ASC)
python madewithml/evaluate.py \
--run-id $RUN_ID \
--dataset-loc $HOLDOUT_LOC \
--results-fp results/evaluation_results.json
5. 모델 예측
python madewithml/predict.py predict \
--run-id $RUN_ID \
--title "Transfer learning with transformers" \
--description "Using transformers for transfer learning on text classification tasks."
6. 모델 서비스
python madewithml/serve.py --run_id $RUN_ID
실험 추적
프로젝트는 MLflow를 사용하여 실험 추적 및 모델 관리를 수행합니다.
export MODEL_REGISTRY=$(python -c "from madewithml import config; print(config.MODEL_REGISTRY)")
mlflow server -h 0.0.0.0 -p 8080 --backend-store-uri $MODEL_REGISTRY
테스트 프레임워크
프로젝트에는 포괄적인 테스트 스위트가 포함되어 있습니다.
# 코드 테스트
python3 -m pytest tests/code --verbose --disable-warnings
# 데이터 테스트
pytest --dataset-loc=$DATASET_LOC tests/data --verbose --disable-warnings
# 모델 테스트
pytest --run-id=$RUN_ID tests/model --verbose --disable-warnings
# 커버리지 테스트
python3 -m pytest tests/code --cov madewithml --cov-report html --disable-warnings
생산 배포
Anyscale 배포
프로젝트는 완전한 Anyscale 배포 솔루션을 제공합니다.
- 클러스터 환경 구성:
export CLUSTER_ENV_NAME="madewithml-cluster-env"
anyscale cluster-env build deploy/cluster_env.yaml --name $CLUSTER_ENV_NAME
- 계산 구성:
export CLUSTER_COMPUTE_NAME="madewithml-cluster-compute-g5.4xlarge"
anyscale cluster-compute create deploy/cluster_compute.yaml --name $CLUSTER_COMPUTE_NAME
- 작업 제출:
anyscale job submit deploy/jobs/workloads.yaml
- 서비스 배포:
anyscale service rollout -f deploy/services/serve_model.yaml
CI/CD 프로세스
프로젝트는 GitHub Actions를 통합하여 자동 배포를 구현합니다.
- 워크플로우 트리거: PR 생성 시 워크로드 워크플로우 트리거
- 모델 훈련 및 평가: 훈련 및 평가 자동 실행
- 결과 피드백: PR에 훈련 및 평가 결과 직접 표시
- 자동 배포: 주 브랜치에 병합 후 자동으로 생산 환경에 배포
핵심 학습 요점
기술 스택
- Python: 핵심 프로그래밍 언어
- Ray: 분산 컴퓨팅 프레임워크
- MLflow: 실험 추적 및 모델 관리
- Transformers: 딥러닝 모델
- FastAPI: API 서비스 프레임워크
- pytest: 테스트 프레임워크
- GitHub Actions: CI/CD 플랫폼
머신러닝 엔지니어링 모범 사례
- 코드 구성: 모듈화된 프로젝트 구조
- 실험 관리: 체계적인 실험 추적
- 버전 관리: 코드 및 모델의 버전 관리
- 테스트 전략: 포괄적인 테스트 커버리지
- 배포 자동화: CI/CD 프로세스 통합
- 모니터링 및 유지 관리: 생산 환경의 지속적인 모니터링
프로젝트 가치
머신러닝은 독립적인 산업이 아니라 특정 유형의 사람에게만 국한되지 않는 강력한 데이터 사고 방식입니다. 이 프로젝트는 기본 개념에서 생산 배포에 이르기까지 완전한 학습 경로를 제공하여 학습자가 현대 머신러닝 엔지니어링의 모든 기술을 습득하도록 돕습니다.
학습 자료
- 온라인 강좌: https://madewithml.com/
- 소스 코드: https://github.com/GokuMohandas/Made-With-ML
- 대화형 노트북: notebooks/madewithml.ipynb
- 실시간 부트캠프: 정기적으로 개최되는 온라인 부트캠프
지속적인 개선
프로젝트는 지속적인 개선의 중요성을 강조하며, CI/CD 워크플로우가 구축됨에 따라 모델을 지속적으로 개선하고 스케줄링 실행(cron), 데이터 파이프라인, 드리프트 감지 모니터링, 온라인 평가 등으로 쉽게 확장하는 데 집중할 수 있습니다.
이 프로젝트는 머신러닝 실무자에게 개념 이해에서 생산 배포에 이르기까지 전체 프로세스를 포괄하는 포괄적이고 실용적인 학습 리소스를 제공하며, 현대 MLOps를 배우는 데 훌륭한 리소스입니다.