导言
如今,很多科技企业都投入了对机器学习技术的研究和应用中。但是面临的情况可能是组织已经在本地使用机器学习,但还不能够将其部署到生产环境中;或者能够部署模型,但无法对其进行有效管理。在这种情况下,最有价值的技能不是训练模型,而是管理模型,并以让它们产生最大影响的方式部署它们。
了解模型开发生命周期
通常机器学习或模型开发遵循以下路径:数据→信息→知识→洞察力。这种从数据中产生洞察力的方式可以用下图来形象地描述。
了解“机器学习工程化”
机器学习工程化是指将机器学习模型的开发、部署和维护纳入到软件工程的流程中,以确保模型能够在生产环境中稳定、高效地运行。机器学习工程化的目标是实现模型的可重复性、可扩展性、可维护性和可监控性,同时保持模型的准确性和可解释性。
一些实现机器学习工程化的最佳实践:
- 数据管道:建立自动化的数据收集、清洗、处理和转换管道,确保数据的一致性和准确性。
- 版本控制:对于代码、数据和模型等重要组件进行版本控制,以便快速回滚和追溯。
- 自动化测试:建立自动化的单元测试和集成测试,确保模型的准确性和稳定性。
- 模型监控:建立监控系统,定期检查模型的性能和预测结果,及时发现和解决问题。
- 模型部署:使用容器技术(如Docker)将模型封装为服务,方便部署和管理。
- 可解释性:尽量使用可解释的模型,以便在出现问题时能够理解模型的决策过程。
- 质量保证:建立质量保证流程,确保模型的可靠性和一致性。
- 持续集成和持续部署:建立自动化的持续集成和持续部署流程,确保模型的快速迭代和发布。
- 团队协作:建立跨学科的团队合作机制,促进数据科学家、数据开发工程师和运维人员之间的协作和交流。
- 安全和隐私:建立安全和隐私保护机制,确保模型的数据和预测结果的保密性和安全性。
如果你是一名数据科学家,试图将模型投入生产;或者你是一名数据工程师,试图使模型具有可扩展性和可靠性,Kubeflow都可以帮助到我们。Kubeflow解决的正是机器学习从研究到生产的问题。
了解Kubeflow
Kubeflow 是一个云原生工具集,适用于MDLC(模型开发生命周期)的所有阶段(数据探索、特征准备、模型训练/调整、模型服务、模型测试和模型版本管理)。它是基于Kubernetes 的机器学习工具包,这些工具可以让传统上独立的工具无缝地结合在一起工作。工具的一个重要部分是Pipeline系统,它允许用户建立集成的端到端Pipeline,用于连接MDLC中的所有组件。 我们可以通过 Kubeflow 调整配置以选择要用于 ML 工作流每个阶段的平台和服务:
- 数据准备
- 模型训练
- 预测服务
- 服务管理
Kubeflow试图通过三个特征来简化机器学习:可组合性、可移植性和可扩展性。
- 可组合性:Kubeflow的核心组件来自机器学习从业者已经熟悉的数据科学工具。它们可以独立使用,以促进机器学习的特定阶段,也可以组合在一起形成端到端Pipeline。
- 可移植性:通过基于容器的设计并利用Kubernetes及其云原生架构,Kubeflow不限制开发环境。我们可以在笔记本电脑上进行实验和原型设计,并毫不费力地将其部署到生产中。
- 可扩展性:通过使用Kubernetes,Kubeflow可以根据集群上的需求,通过改变底层容器与机器的数量和大小来动态扩展。
Kubeflow 架构概述
下图显示了 Kubeflow 作为一个平台,用于构建在 Kubernetes 之上的 ML 系统组件:
了解机器学习工作流
开发和部署 ML(机器学习) 系统时,ML 工作流通常由多个阶段组成。开发 ML 系统是一个迭代过程。我们需要评估 ML 工作流各个阶段的输出,并在必要时对模型和参数进行更改,以确保模型不断生成所需的结果。 在试验阶段,我们将根据初始假设开发模型,并以迭代方式测试和更新模型以生成所需的结果:
- 确定我们希望 ML 系统解决的问题。
- 收集和分析训练 ML 模型所需的数据。
- 选择 ML 框架和算法,并对模型的初始版本进行编码。
- 试验数据和训练模型。
- 调整模型超参数,以确保最高效的处理和最准确的结果。
在生产阶段,部署执行以下过程的系统:
- 将数据转换为训练系统所需的格式。为了确保模型在训练和预测期间行为一致,转换过程在试验和生产阶段必须相同。
- 训练 ML 模型。
- 为模型提供在线预测或以批处理模式运行。
- 监视模型的性能,并将结果馈送到流程中,以调整或重新训练模型。
Kubeflow 组件 在 ML workflow 中的功能示意
部署 Kubeflow
我们是在纯净的K8s集群进行的安装,详细部署过程请参见我们同事的安装文档,非常详尽《Kubeflow(1.6.1)部署》
Kubeflow 用户界面 (UI) 概述
- Home:主页,访问最新资源、活动实验和有用文档的中心枢纽。
- Notebook Servers:管理笔记本服务器。
- TensorBoards:用于管理TensorBoard服务器。
- Volumes:用于管理群集的卷。
- Models:管理已部署的 KF 服务模型。
- Experiments (AutoML):用于管理 Katib 实验。
- Experiments (KFP):管理 Kubeflow Pipelines (KFP) 实验。
- Pipelines:管理 KFP 管道。
- Runs:管理 KFP 运行任务。
- Recurring Runs:管理 KFP 定期运行任务。
- Artifacts:跟踪 ML 元数据 (MLMD) 项目。
- Executions:跟踪 MLMD 中的各种组件执行。
- Manage Contributors:在 Kubeflow 部署中配置跨命名空间的用户访问共享。
这篇对于 Kubeflow 的简介文章暂且先到这儿,在使用 Kubeflow 的过程中还是感受到了较高的使用成本,等熟练掌握了希望再进行填充更新。另外,从 Kubeflow 官网的博客宣传得知,它已经进入了CNCF(云原生基金会)项目孵化进程,希望借助CNCF 使之生态愈加繁荣,我们的使用愈加简单便捷。
附
希望大家关注我的 GitHub 开源项目 https://github.com/yaocoder/Architect-CTO-growth 包括技术实践及手册撰写:涵盖DevOps,云原生技术,大数据,人工智能,高并发&高性能&高可用服务等,后续会逐渐细化一些知识点。一起学习成长!如果对你有用,也请星标一下O(∩_∩)O