第六階段:AI項目實戰與生產部署
一個全面的機器學習工程課程,教授如何將機器學習與軟體工程相結合,從實驗到生產部署的完整流程
Made With ML 項目詳細介紹
項目概述
Made With ML 是一個由 Goku Mohandas 創建的開源項目,專注於教授如何將機器學習與軟體工程相結合,設計、開發、部署和迭代生產級機器學習應用程式。該項目已經成為 GitHub 上頂級的機器學習倉庫之一,擁有超過 40,000 名開發者關注。
項目目標和特色
核心理念
該課程從實驗階段(設計 + 開發)到生產階段(部署 + 迭代),通過迭代的方式,逐步構建可靠的生產系統。
主要特色
- 💡 第一性原理:在直接進入代碼之前,為每個機器學習概念建立第一性原理的理解。
- 💻 最佳實踐:在開發和部署機器學習模型時實施軟體工程最佳實踐。
- 📈 規模化:輕鬆在 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 的優秀資源。