研发岗转管理岗 从研发到管理
构建机器学习(ml)模型既引人入胜又复杂,需要完成一系列步骤。从机器学习模型开发到部署,是人工智能落地的关键阶段。一个基于正确的算法和相关数据、经过良好训练的模型,能够覆盖开发阶段,之后的重点将转向部署。
部署机器学习模型可能是一个繁琐的过程:构建API、容器化、管理依赖项、配置云环境以及设置服务器和集群通常需要讨论巨大的工作流程,想象一下,如果整个工作可以自动化会怎样?在论文中,我们将机器学习部署自动化如何统一和简化所有这些流程。使用通用工具、预配置模块和易于集成的自动化脚本可以简化部署过程。
在论文中,我将向您介绍如何训练 ML 模型、使用 Docker 进行容器化以及如何使用 Terraform将其部署到云端,所有这些都使用自动化脚本,使流程可重用且适合 CI/CD。自动化机器学习部署带来的好处
自动化 ML 部署彻底改变了游戏规则:使机器学习模型能够扩展有效的四分之一内将模型投入生产消除运行的重复步骤减少人为错误使用的工具
要配置ML模型部署,我们需要一些基本工具和库:Python 3.4:用于训练和托管模型以及编写脚本语言填写空白的核心编程scikit-learn:用于机器学习的Python库FastAPI:将ML模型作为Web API托管的Python库Docker:运行Terraform和ML模型Cloud CLI:需要安装才能与Azure、AWS和GCP等云交互平台Terraform:基础设施即代码(IaC)用于配置云资源项目设置
现在,让我们设置项目并回顾每个步骤。
该项目主要分为三个部分:机器学习模型训练机器学习工作流程自动化使用 Terraform 的 IaC
该项目的结构如下:
ml_deploy/├── src/│ ├── app.py # 为 ML 模型提供服务的 FastAPI 应用程序│ ├── train_model.py # 训练和序列化模型│ ├── model.pkl # 打包的 ML 模型│ ├── requirements.txt # Python 库│ └── Dockerfile # 定义 Docker 镜像├── terraform/│ ├── main.tf # Terraform 配置文件│ ├──variables.tf│ ├──outputs.tf│ └── terraform.tfvars # 保存动态值,如镜像名称├──scripts/│ ├──build_model_and_image.py # 自动进行模型训练 Docker│ └── install_terraform.py # 在里面运行 Terraform Docker登录后复制机器学习模型训练
该流程的第一步是模型开发、模型并构建API来方便提供训练服务:
train_model.py/import picklefrom sklearn.linear_model import LogisticRegressionfrom sklearn.datasets import load_iris# Load dataX, y = load_iris(return_X_y=True)# Initialize and train modelmodel = LogisticRegression(max_iter=200)model.fit(X, y)# Save model to a filewith open(quot;model.pklquot;, quot;wbquot;) as f: pickle.dump(model, f)登录后复制
在上面的示例中,我们使用 scikit-learn 在传统的鸢尾花物种数据集中得到了一个回归逻辑模型。我们使用 Pickle 训练库对模型进行序列化,将所有依赖项封装到一个文件中。
然后,FastAPI服务加载model.pkl该模型和端点以生成预测:/predictapp.py
app.py/from fastapi import FastAPIimport pickleimport numpy as npapp = FastAPI()model = pickle.load(open(quot;model.pklquot;, quot;rbquot;))@app.get(quot;/quot;)def root(): return {quot;messagequot;: quot;Model runningquot;}@app.post(quot;/predictquot;)def Predict(data):prediction = model.predict(np.array(data).reshape(1, -1)) return {quot;predictionquot;:prediction.tolist()}登录后复制机器学习工作流自动化
经过训练的机器学习模型可以转化为一种服务,在可靠部署和访问的情况下,能够实时、大规模交付。手动训练模型、通过构建 Docker 镜像部署模型以及更新配置文件可能是一个繁琐而容易出错的过程。自动化不仅可以提高效率,还可以简化工作流程。
我们使用两个Python脚本自动执行这些步骤:build_model_and_image.py:此Python脚本可自动执行模型训练、Docker镜像构建、人工智能到DockerHub以及更新.tfvarsTerraform文件将其组合到单个工作流程中。
build_model_and_image.py在 GitHub 上查看代码:https://github.com/yraj1457/MLOps/blob/main/scripts/build_model_and_image.py
build_model_and_image.py/import subprocessimport sys# 执行训练模型 Python 代码def train_model(): print(quot;Training the Modelquot;) try: subprocess.run([quot;python3quot;, quot;train_model.pyquot;], check=True, cwd=src_dir) except Exception as e: print(fquot;Error Training the Model: {e}quot;) sys.exit(1)# 训练模型后构建镜像def build_image(): print(fquot;Building the Docker Image: {docker_image}quot;) try: subprocess.run([quot;dockerquot;, quot;buildquot;, quot;-tquot;, docker_image, quot;.quot;], check=True) except Exception as e: print(fquot;构建 Docker 映像时出错: {e}quot;) sys.exit(1)登录后复制
install_terraform.py:此 Python 自动化脚本通过在 Docker 容器中运行 Terraform 来负责配置基础设施,从而确保单独安装 Terraform。
install_terraform.py在 GitHub 上查看代码:https://github.com/yraj1457/MLOps/blob/main/scripts/install_terraform.py
install_terraform.py/import subprocessimport sysfrom pathlib import Path# 运行Trio,三个Terraform命令def run_terraform():cmd_list = ['init','plan','apply'] for cmd in cmd_list:print(fquot;正在运行Terraform {cmd}quot;)try:subprocess.run(fquot;docker run --rm -v {Path(terraform_dir).resolve()}:/workspace quot;fquot;-w /workspace {terraform_image} {cmd}quot;,shell=True,check=True)except Exception as e:print(fquot;运行Terraform {cmd}时出错:{e}quot;) sys.exit(1)登录后复制
这些自动化脚本填补了空白,整理工作流程在插入管道时可重复使用。使用 Terraform 进行基础设施代码
生产验证服务需要部署。我们使用 Terraform 的 IaC,它允许我们定义整个云设置——包括运行模型的容器。它确保部署不仅自动化一致且可跨环境移植。
基础设施由四个 Terraform 组成配置文件配置:main.tf、、和。Python脚本使用官方 hashicorp/terraform Docker 来运行 Terraform 命令(、、和),从而需要维护 Terraform 安装或版本,并在开发和配置之间提供了明确的划分变量.tf。outputs.tfterraform.tfvarsinitplanapply
下面的 Terraform 代码片段可以作为一个例子。它提供了一个 Azure 资源组和一个容器实例来托管机器学习 API。
main.tf/provider ";azurerm"; { features {}}资源 ";azurerm_resource_group";";ml_rg"; { name = var.resource_group_name location = var.location}资源 ";azurerm_container_group";";ml_app"; { name = ";ml-model-api"; location = azurerm_resource_group.ml_rg.location resource_group_name = azurerm_resource_group.ml_rg.name os_type = ";Linux"; 容器 { name = ";mlmodel"; image = var.container_image cpu = ";1.0"; memory = ";1.5"; ports { port = 80 protocol = ";TCP"; } } ip_address_type = ";public"; dns_name_label = var.dns_label}登录后复制
该方法高效的完整代码库(包括所有脚本和配置文件)可在 GitHub 上找到:https://github.com/yraj1457/MLOps为什么这种方法更有效
自动化脚本将各个流程整合在一起,从而实现更详细的方法,最大程度地减少人工干预,并优雅地记录错误。此外,通过在 Docker容器中运行工具,我们最大程度地减少了依赖关系,并保证了跨环境的一致性。该架构融合了基础设施自动化、DevOps 和 MLOps 的最佳实践。结论
本文展示了利用最少的工具、最少的依赖和最大程度的自动化,从机器学习模型到部署,为数据科学家和 MLOps 工程师节省大量重复工作性。我们利用 Python 编写的自动化脚本,并使用 Docker 封装模型和Terraform,构建了一个可重用、自动化且可扩展的环境。
这种方法具有高度可移植性,可以插入任何 CI/CD 工具,例如 GitHub Actions 或 Azure DevOps。基础已从这里设置,您可以根据自己的需求进行修改。
以上就是从开发到部署:自动化机器学习的详细内容,更多请关注乐哥常识网其他相关文章!