Made-With-ML
从0到1构建生产级ML系统的端到端实战教程,涵盖数据处理、分布式训练、超参调优与模型服务全流程
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
从0到1构建生产级ML系统的端到端实战教程,涵盖数据处理、分布式训练、超参调优与模型服务全流程
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你刚用 Jupyter Notebook 跑出一个准确率不错的推荐模型,兴冲冲地拿给产品经理看,却被泼了一盆冷水——"这玩意儿能上线吗?稳定吗?出故障了怎么排查?"——这大概是每个数据科学家都经历过的尴尬时刻。Made With ML 正是为解决这个问题而生:它不是教你调参的教程,而是一套从零构建生产级 ML 系统的完整工程化实践。
Made With ML 由 Goku Mohandas 创建,他曾在 Apple 从事 ML 产品研发,也曾在肿瘤早筛创业公司摸爬滚打。多年的行业经验让他意识到一个问题:网上不缺 Kaggle 竞赛教程,缺的是真正教人把 ML 系统做"能用、好用、持续用"的资源。于是他将自己在生产环境中的实战经验整理成这套课程,发布在 madewithml.com 平台。 2022 年,Anyscale(Ray 框架背后的公司)将 Made With ML 纳入麾下,让这套课程获得了更强大的工程支撑,也让 Ray 框架成为本项目的核心技术底座。截至目前,项目已在 GitHub 收获超过 47,000 颗星,社区成员超过 30,000 人,是 MLOps 领域最具影响力的开源学习资源之一。
如果把机器学习项目比作一家餐厅,那么:
data.py)负责"清洗食材"——用 Ray Dataset 分布式加载 CSV,去除噪声标签。models.py)基于预训练 BERT 微调,相当于用米其林大厨的经验来调整自己的烹饪方案。Made With ML 提供了一条覆盖 ML 项目全生命周期的流水线,包含以下几个关键阶段:
1. 数据加载与分层划分(data.py)
使用 Ray Dataset 分布式读取数据集,支持按比例进行分层划分(Stratified Split),确保训练集/验证集/测试集中各类别比例一致。内置对 Snorkel 弱标注数据的支持,能够将众包标注或规则生成的软标签纳入训练流程,这对工业级标注成本控制极为关键。
2. 模型架构(models.py)
核心模型是 Fine-tuned BERT(FinetunedLLM),基于 HuggingFace Transformers 的预训练 BERT 编码文本表示,再通过一个全连接层完成多分类任务(30 个 ML 标签分类)。这种"预训练+微调"范式在工业场景中极为常见,兼具 BERT 的语言理解能力与任务适配性。
3. 分布式训练(train.py)
通过 Ray Air 的 TorchTrainer 实现多节点分布式数据并行训练(DDP)。支持通过 ScalingConfig 配置 GPU 数量,RunConfig 配置实验记录(集成 MLflow),CheckpointConfig 配置模型检查点保存策略(每 N 个 step 或仅保留最佳模型)。训练过程中自动处理 GPU 内存分配和梯度同步,代码层面只需几行配置即可完成单机到多机的扩展。
4. 超参数调优(tune.py)
基于 Ray Tune 的超参数搜索,结合 HyperOpt 的异步贝叶斯优化算法(AsyncHyperBandScheduler),在保证搜索效率的同时避免资源浪费。支持并发搜索(ConcurrencyLimiter),可同时评估多组超参数配置,所有结果自动同步至 MLflow Dashboard。
5. 模型评估与切片分析(evaluate.py)
超越简单的准确率指标,通过 Snorkel Slicing 对特定数据子群体(如样本量较少的标签类别)进行专门的性能评估。这解决了一个工业界痛点:整体指标好看,不代表在所有用户群体上都好用。切片分析能发现"模型在 95% 的数据上表现优秀,但在某 5% 的边缘case上完全失效"这类隐藏问题。
6. 模型服务(deploy/services/serve_model.py)
通过 FastAPI + Ray Serve 将训练好的模型部署为 HTTP API。serve.deployment 装饰器自动管理模型版本和流量,支持热更新(不中断服务替换模型)。每个 replica 配置 8 个 CPU 核心,适合 IO 密集型的推理场景。MLflow 的模型注册表(Model Registry)负责存储和管理模型的版本历史,服务端只需传入对应的 run_id 即可加载指定版本。
本地开发门槛(低): 整个项目基于 Jupyter Notebook 构建,notebooks/madewithml.ipynb 是核心教程文件,配合 requirements.txt 安装依赖后可直接在本地运行。对于 Python 环境和 ML 基础有一定了解的学习者,上手路径非常平滑。
进阶部署门槛(高): 如果想真正复刻项目的生产级部署能力,需要:
deploy/cluster_*.yaml)deploy/jobs/workloads.yaml)以提交离线训练任务
官方配套的文档网站 madewithml.com 提供了完整的课程体系,分为 ML 基础(标签、特征工程、模型训练)和 MLOps(实验跟踪、模型注册、在线服务)两大板块,每个 lesson 都配有代码实战。1. 学习曲线陡峭: 项目的野心很大,但随之而来的技术栈复杂度也较高。Ray、MLflow、Ray Serve、Kubernetes——每一项单独拎出来都是一个大课题。对于 ML 新手而言,直接啃这个项目可能会有挫败感。更适合有一定 ML 基础、想要补齐工程化短板的数据科学家。
2. 特定领域的适用性: 项目演示基于 GitHub 项目分类任务(30 类),技术栈以 NLP 为主。如果你做的是 CV 推荐系统或时序预测,部分设计模式需要大幅调整。
3. 缺少自动化 DevOps 集成: 项目提供了训练和 serving 的部署配置,但没有覆盖 CI/CD 流水线(如自动重训触发、灰度发布、A/B 测试)的完整实现。对于真正想在生产环境落地 MLOps 的团队,还需要额外补充这一层。
4. 依赖较重: requirements.txt 中包含 30+ 个依赖包,版本锁定在 2023 年初的旧版本(torch==2.0.0, transformers==4.28.1),直接在新环境中安装可能会遇到依赖冲突,建议使用 Docker 或 conda 管理环境。
Made With ML 的意义远超一个开源项目本身——它代表了 MLOps 教育从"碎片化博客文章"向"系统性工程实践"的跨越。 在它之前,大多数 ML 工程师的工程化知识来自踩坑经验,口口相传,没有系统化的教材。Made With ML 第一次用完整代码库+配套课程的方式,把"如何在生产环境里做 ML"这件事讲清楚了。它不追求算法创新,而是专注于工程最佳实践——这恰恰是学术界最忽视、企业最需要的方向。 从增长曲线看,项目 Star 数从 2022 年的 5K 增长到如今的 47K+,3 年增长近 10 倍。这个数字背后,是 AI 行业从"算法为王"向"工程为王"转型的缩影——当所有人都能用开源模型拿到不错的 baseline 时,真正的竞争壁垒就变成了:谁能更快、更稳、更低成本地把模型部署到用户面前。 Made With ML,正是这个时代最及时的工程化指南。