热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >详解MLOps,从Jupyter开发到生产部署

详解MLOps,从Jupyter开发到生产部署

来源:互联网 更新时间:2026-08-25 13:57

Jupyter Notebook在机器学习开发阶段确实非常顺手,但真要把模型部署到生产环境里,它那点“单机玩具”的底子往往就撑不住了。想要跑得稳、能扩展,就得把DevOps的思路拉进来——更准确地说,是MLOps。下面这篇实战记录,会完整走一遍从Notebook里的实验代码,到自动化部署到HuggingFace平台的全流程。

详解MLOps,从Jupyter开发到生产部署

先从最关键的代码迁移说起。Jupyter里的单元格写得再漂亮,它本质上还是“草稿纸”。要让它变成可复用的生产代码,必须搬到IDE里,按规范组织起来。

1 代码迁移与自动化

这里以一个经典的猫狗图像识别CNN模型为例,演示迁移过程。数据集来自Kaggle的牛津宠物数据集(链接)。

先看训练脚本的核心——从Notebook搬过来的代码,会变成这样:

# src/train.py
from os.path import join
from fastai.vision.all import *
from utils import is_cat
import yaml
with open("params.yaml", "r") as stream:
    params = yaml.safe_load(stream)

data_path = join('data', 'images')
metrics_path = 'metrics'
models_path = 'models'

dls = ImageDataLoaders.from_name_func(
    os.getcwd(),
    get_image_files(data_path),
    valid_pct=params['train']['valid_pct'],
    seed=params['train']['seed'],
    label_func=is_cat,
    item_tfms=Resize(params['train']['resize_img'])
)

print(f"Image count for dataset")
print(f"- Training: {len(dls.train_ds)}")
print(f"- Validation: {len(dls.valid_ds)}")

learn = vision_learner(dls, resnet34, metrics=error_rate)
learn.fine_tune(0)

光有训练还不够,数据准备工作也要脚本化:

# src/prepare.py
import tarfile
import os
dataset = os.path.join('data','images.tar.gz')
destination = 'data'
print(f'Decompressing {dataset}...')
with tarfile.open(dataset, 'r:*') as tar:
    tar.extractall(path=destination)

最后再来个测试脚本,验证模型预测是否靠谱:

# src/test.py
import numpy as np
from fastai.vision.all import *
from fastai.learner import load_learner
import urllib.request
import os
import sys
from utils import is_cat
import tempfile

def predict(model, url):
    with tempfile.TemporaryDirectory() as temp_dir:
        test_fn = os.path.join(temp_dir, 'test.jpg')
        urllib.request.urlretrieve(url, test_fn)
        f = open(test_fn, mode="rb")
        data = f.read()
        img = PILImage.create(data)
        is_cat,_,probs = model.predict(img)
        return is_cat, probs[1].item()

learn = load_learner('models/model.pkl')

# 对狗的图片进行预测,期望输出为 False
url = "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Black_Labrador_Retriever_-_Male_IMG_3323.jpg/2880px-Black_Labrador_Retriever_-_Male_IMG_3323.jpg"
is_cat, probs = predict(learn, url)
if is_cat is True or probs > 0.1:
    print(f'Image "{url}" incorrectly labeled as cat')
    sys.exit(1)

# 对猫的图片进行预测,期望输出为 True
url = "https://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Cat_August_2010-4.jpg/2880px-Cat_August_2010-4.jpg"
is_cat, probs = predict(learn, url)
if is_cat is False or probs < 0.9:
    print(f'Image "{url}" incorrectly labeled as dog')
    sys.exit(1)

2 数据版本控制(DVC)

代码可以用Git管理,但模型训练依赖的数据集和模型文件,Git就搞不定了——尤其是大文件。这时候DVC(Data Version Control)就派上了用场。它借鉴了Git的理念,专门用来跟踪和管理大型文件。

用起来很简单,执行dvc add path/to/files,文件就会被哈希处理后存入.dvc/cache目录,Git仓库里只留下一个指针文件(.dvc文件),记录了哈希值、大小等信息。当需要恢复时,dvc checkout会根据这些指针从缓存里把文件还原到原位置。

举个实际例子,下载一个牛津宠物数据集的子集:

$ wget https://huggingface.co/datasets/tomfern/oxford-pets-subset/resolve/main/images.tar.gz -O data/images.tar.gz

然后把它纳入DVC管理:

$ dvc add data/images.tar.gz

这样一来,数据版本的变更就像代码版本一样可追溯、可重现。这才是MLOps的起点。

3 ML 管道

ML管道是DVC真正发力的地方。它允许通过定义输入输出来构建步骤清晰的机器学习流程,并且能智能识别哪些环节有变动,只重跑必要的部分,而不是每次都全部重来。

创建管道的语法很直观:

$ dvc stage add -n "stage name" \
  -d "input file1" -d "input file2" \
  -o "output file1" -o "output file2" \
  command

在我们这个案例里,定义了三个关键阶段:数据准备、模型训练和模型测试。

# 数据准备阶段
$ dvc stage add -n prepare \
  -d src/prepare.py \
  -o data/images \
  python src/prepare.py

# 模型训练阶段
$ dvc stage add -n train \
  -d src/train.py -d data/images \
  -o models/model.pkl -o models/model.pth \
  python src/train.py

# 模型测试阶段
$ dvc stage add -n test \
  -d src/test.py -d models/model.pkl -d models/model.pth \
  python src/test.py

执行管道时,只要运行dvc repro,DVC就会根据依赖关系判断哪些阶段需要更新。需要注意的是,每次运行后一定要把dvc.lock文件提交到Git——它记录了管道的状态和输出文件的哈希值,是整个流水线版本控制的核心。

git add dvc.lock

4 DVC 远程存储

Git能推代码到云端,但数据和模型文件不行。DVC支持对接AWS S3、Google Cloud Storage、Azure Storage等主流云存储。以AWS S3为例,先配置好存储桶:

$ aws s3 ls

然后添加远程存储并设为默认:

$ dvc remote add myremote s3://mybucket
$ dvc remote default myremote

设置完成后,工作流程就变成了:在跑dvc repro之前先dvc pull拉取远程数据,执行完后再dvc push推回更新。

5 持续集成和部署

远程存储数据降低了CI过程中自动化训练和部署的复杂度。一个典型的CI训练工作流是这样的:

a. 在CI服务器上安装DVC。
b. 克隆代码仓库。
c. 从远程存储拉取DVC管理的数据。
d. 执行训练和测试脚本。
e. 将更新推送回远程仓库。

整个过程完全不需要人工干预,一旦代码或数据集有更新,CI就会自动触发新一轮的训练和部署。

6 结语

从Jupyter里的实验原型,到生产环境里稳定运行的自动化流程,背后功臣其实是持续集成和数据版本控制这些原本属于DevOps的工具。它们把AI训练和测试中那些重复手动的工作彻底自动化了。

掌握这套自动化AI训练的技能,在这个机器学习逐渐成为基础设施的时代,几乎是绕不开的能力。希望这篇文章能成为一块实用的垫脚石。

关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc