在这篇文章中,将深入探讨机器学习运营(MLOps)的流程,从开始到结束。MLOps是机器学习项目从原型到生产部署的桥梁,涉及到构建、部署和监控机器学习模型的各个阶段。将通过一个实际用例——在高速公路上实时分类车辆(汽车和卡车)——来详细解释MLOps的每个模块是如何工作的。
工作流程是一系列按特定顺序重复执行的任务序列。这个流程可以用于任何领域或行业,以构建概念验证或使机器学习解决方案投入运营。工作流程可以分为两个模块:
上层是MLOps管道,由驱动因素启用。使用这个管道,可以快速原型制作、测试、验证和部署模型。
MLOps管道是上层,执行构建、部署和监控等操作。
这个模块负责训练、打包和版本控制机器学习模型。
高速公路管理局提供了一个包含10万张标记好的汽车和卡车图片的数据湖,将使用这些数据来训练模型。工作流程的第一步是数据采集。
数据采集是导入、收集和存储数据以供立即使用或存储在数据库中以供进一步使用的过程。它涉及从各种数据源(例如:数据库、数据仓库、数据湖)提取数据,并为模型训练摄取所需数据。数据可能具有不同的多样性、不同的体积、以不同的速度进入,具有不同的真实性和不同的格式。连接到数据源的管道执行ETL操作——提取、转换、加载。
体积:数据的大小
速度:数据进入的速度
真实性:数据的准确性
多样性:指不同格式的数据。
数据湖:它是一个集中存储各种结构化和非结构化数据的大规模存储库。
在数据采集步骤中获得机器学习训练所需的数据后,现在将启用模型训练。它由模块化代码或脚本组成,执行所有传统的机器学习操作,包括数据预处理、数据清洗、特征工程和特征缩放、标准化等。之后,模型在预处理的训练数据上进行训练。它还执行超参数调整。这种调整可以手动完成,但也有一些高效且自动化的解决方案,如网格搜索或随机搜索方法。这一步输出训练好的模型。
# 示例代码:数据预处理和模型训练
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# 数据预处理
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 模型训练
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3)))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))
现在,在数据采集期间分离和版本控制的测试数据上评估训练好的模型的性能。这个阶段提供了训练好的模型的性能输出,特定的评估指标根据用例评估安排。
在测试训练好的模型后,模型可以序列化为文件或容器化(使用Docker)以导出到生产环境。这有助于部署应用程序时不会出现依赖性错误。这将数据和代码一起包装并打包模型。
一旦模型在模型打包阶段被序列化或容器化,该模型就注册并存储在模型注册表中。