来源:互联网 更新时间:2026-08-25 13:57
Jupyter Notebook在机器学习开发阶段确实非常顺手,但真要把模型部署到生产环境里,它那点“单机玩具”的底子往往就撑不住了。想要跑得稳、能扩展,就得把DevOps的思路拉进来——更准确地说,是MLOps。下面这篇实战记录,会完整走一遍从Notebook里的实验代码,到自动化部署到HuggingFace平台的全流程。
先从最关键的代码迁移说起。Jupyter里的单元格写得再漂亮,它本质上还是“草稿纸”。要让它变成可复用的生产代码,必须搬到IDE里,按规范组织起来。
这里以一个经典的猫狗图像识别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)
代码可以用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的起点。
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
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推回更新。
远程存储数据降低了CI过程中自动化训练和部署的复杂度。一个典型的CI训练工作流是这样的:
a. 在CI服务器上安装DVC。
b. 克隆代码仓库。
c. 从远程存储拉取DVC管理的数据。
d. 执行训练和测试脚本。
e. 将更新推送回远程仓库。
整个过程完全不需要人工干预,一旦代码或数据集有更新,CI就会自动触发新一轮的训练和部署。
从Jupyter里的实验原型,到生产环境里稳定运行的自动化流程,背后功臣其实是持续集成和数据版本控制这些原本属于DevOps的工具。它们把AI训练和测试中那些重复手动的工作彻底自动化了。
掌握这套自动化AI训练的技能,在这个机器学习逐渐成为基础设施的时代,几乎是绕不开的能力。希望这篇文章能成为一块实用的垫脚石。
腾讯ima怎么把微信内容一键导入知识库?
腾讯ima怎么创建共享知识库?
Celestia价格预测2026-2032:TIA币能否引领山寨币上涨行情?历史价格回顾
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
比特币(BTC)核心周期指标复刻历史走势 价格或跌破5.8万美元关键支撑位
比特币 2025 年价格预测:BTC 的未来走势
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
WorkBuddy微信版怎么获得积分?
新浪人工智能热点小时报丨2026年07月30日18时_今日实时人工智能热点速递
短剧《史上最强洪荒修为》剧情介绍
海尔消毒柜自动消毒如何中止
5000元起的鼠标哪个最值得入手?
男生高性价比充电头?
博世壁挂炉关闭暖气怎么操作
腾讯ima知识库怎么分类管理?
车载冰箱重置到出厂设置几步?
Windy卫星云图怎么看?云层变化识别技巧
5000-6000元鼠标有什么推荐?
管线机怎么接云米净水器
笔记本移动电源推荐哪款?
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc