構(gòu)建機(jī)器學(xué)習(xí) (ml) 模型既引人入勝又復(fù)雜,需要仔細(xì)完成一系列步驟。從機(jī)器學(xué)習(xí)模型開(kāi)發(fā)到部署,是人工智能落地的關(guān)鍵階段。一個(gè)基于正確算法和相關(guān)數(shù)據(jù)、經(jīng)過(guò)良好訓(xùn)練的模型,能夠涵蓋開(kāi)發(fā)階段,之后的重點(diǎn)將轉(zhuǎn)向部署。
部署機(jī)器學(xué)習(xí)模型可能是一個(gè)繁瑣的過(guò)程:構(gòu)建 API、容器化、管理依賴項(xiàng)、配置云環(huán)境以及設(shè)置服務(wù)器和集群通常需要付出巨大的努力,但想象一下,如果整個(gè)工作流程可以自動(dòng)化會(huì)怎樣?在本文中,我們將討論機(jī)器學(xué)習(xí)部署自動(dòng)化如何統(tǒng)一和簡(jiǎn)化所有這些流程。使用通用工具、預(yù)配置模塊和易于集成的自動(dòng)化腳本可以簡(jiǎn)化部署過(guò)程。
???AI 智能聊天, 問(wèn)答助手, AI 智能搜索, 免費(fèi)無(wú)限量使用 DeepSeek R1 模型???
在本文中,我將向您介紹如何訓(xùn)練 ML 模型、使用 Docker 對(duì)其進(jìn)行容器化以及如何使用 Terraform 將其部署到云端,所有這些都使用自動(dòng)化腳本,使流程可重用且適合 CI/CD。
?自動(dòng)化 ML 部署徹底改變了游戲規(guī)則:
要配置 ML 模型部署,我們需要一些基本工具和庫(kù):
現(xiàn)在,讓我們?cè)O(shè)置項(xiàng)目并回顧每個(gè)步驟。該項(xiàng)目主要分為三個(gè)部分:
該項(xiàng)目的結(jié)構(gòu)如下:
ml_deploy/ ├── src/ │ ├── app.py # FastAPI app that serves the ML model │ ├── train_model.py # Trains and serializes the model │ ├── model.pkl # Packaged ML model │ ├── requirements.txt # Python libraries │ └── Dockerfile # Defines the Docker image ├── terraform/ │ ├── main.tf # Terraform configuration file │ ├── variables.tf │ ├── outputs.tf │ └── terraform.tfvars # Holds dynamic values like image name ├── scripts/ │ ├── build_model_and_image.py # Automates model training + Docker │ └── install_terraform.py # Runs Terraform inside Docker
該流程的第一步是模型開(kāi)發(fā)、訓(xùn)練模型并構(gòu)建 API 來(lái)為其提供服務(wù):
train_model.py/ import pickle from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris # Load data X, y = load_iris(return_X_y=True) # Initialize and train model model = LogisticRegression(max_iter=200) model.fit(X, y) # Save model to a file with open("model.pkl", "wb") as f: pickle.dump(model, f)
在上面的示例中,我們使用 scikit-learn在傳統(tǒng)的鳶尾花物種數(shù)據(jù)集上訓(xùn)練了一個(gè)邏輯回歸模型。我們使用Pickle 庫(kù)對(duì)模型進(jìn)行序列化,將所有依賴項(xiàng)封裝到一個(gè)文件中。然后,F(xiàn)astAPI 服務(wù)器加載model.pkl該模型和端點(diǎn)以生成預(yù)測(cè):/predictapp.py
app.py/ from fastapi import FastAPI import pickle import numpy as np app = FastAPI() model = pickle.load(open("model.pkl", "rb")) @app.get("/") def root(): return {"message": "Model running"} @app.post("/predict") def predict(data): prediction = model.predict(np.array(data).reshape(1, -1)) return {"prediction": prediction.tolist()}
經(jīng)過(guò)訓(xùn)練的機(jī)器學(xué)習(xí)模型可以轉(zhuǎn)化為一種服務(wù),在可靠部署和訪問(wèn)的情況下,能夠?qū)崟r(shí)、大規(guī)模地交付。手動(dòng)訓(xùn)練模型、通過(guò)構(gòu)建 Docker 鏡像部署模型以及更新配置文件可能是一個(gè)繁瑣且容易出錯(cuò)的過(guò)程。自動(dòng)化不僅可以提高效率,還可以簡(jiǎn)化工作流程。
我們使用兩個(gè) Python 腳本自動(dòng)執(zhí)行這些步驟:
build_model_and_image.py/ import subprocess import sys # Executes the train model Python code def train_model(): print("Training the Model") try: subprocess.run(["python3", "train_model.py"], check=True, cwd=src_dir) except Exception as e: print(f"Error Training the Model: {e}") sys.exit(1) # Builds the image after training the model def build_image(): print(f"Building the Docker Image: {docker_image}") try: subprocess.run(["docker", "build", "-t", docker_image, "."], check=True) except Exception as e: print(f"Error Building the Docker Image: {e}") sys.exit(1)
install_terraform.py:此 Python 自動(dòng)化腳本通過(guò)在 Docker 容器中運(yùn)行 Terraform 來(lái)負(fù)責(zé)配置基礎(chǔ)設(shè)施,從而確保無(wú)需單獨(dú)安裝 Terraform。install_terraform.py在 GitHub 上查看代碼:https://github.com/yraj1457/MLOps/blob/main/scripts/install_terraform.py
install_terraform.py/ import subprocess import sys from pathlib import Path # Run the Trio, the three Terraform commands def run_terraform(): cmd_list = ['init', 'plan', 'apply'] for cmd in cmd_list: print(f"Running Terraform {cmd}") try: subprocess.run( f"docker run --rm -v {Path(terraform_dir).resolve()}:/workspace " f"-w /workspace {terraform_image} {cmd}", shell=True, check=True ) except Exception as e: print(f"Error running Terraform {cmd}: {e}") sys.exit(1)
這些自動(dòng)化腳本填補(bǔ)了空白,并使工作流程在插入管道時(shí)可重復(fù)使用。
生產(chǎn)就緒服務(wù)需要部署。我們使用 Terraform 的 IaC,它允許我們定義整個(gè)云設(shè)置——包括運(yùn)行模型的容器。它確保部署不僅自動(dòng)化且一致,而且可跨環(huán)境移植。
基礎(chǔ)設(shè)施由四個(gè) Terraform 配置文件配置:main.tf、、和。Python 腳本使用官方 hashicorp/terraform Docker 鏡像來(lái)運(yùn)行 Terraform 命令(、、和),從而無(wú)需維護(hù) Terraform 安裝或版本,并在開(kāi)發(fā)和部署之間提供了明確的劃分variables.tf。outputs.tfterraform.tfvarsinitplanapply
下面的 Terraform 代碼片段可以作為一個(gè)例子。它提供了一個(gè) Azure 資源組和一個(gè)容器實(shí)例來(lái)托管機(jī)器學(xué)習(xí) API。
main.tf/ provider "azurerm" { features {} } resource "azurerm_resource_group" "ml_rg" { name = var.resource_group_name location = var.location } resource "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" container { 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 }
該方法的完整代碼庫(kù)(包括所有腳本和配置文件)可在 GitHub 上找到:https://github.com/yraj1457/MLOps
自動(dòng)化腳本將各個(gè)流程整合在一起,從而實(shí)現(xiàn)更高效的方法,最大限度地減少人工干預(yù),并優(yōu)雅地記錄錯(cuò)誤。此外,通過(guò)在 Docker 容器中運(yùn)行工具,我們最大限度地減少了依賴關(guān)系,并保證了跨環(huán)境的一致性。該架構(gòu)融合了基礎(chǔ)設(shè)施自動(dòng)化、DevOps 和 MLOps 的最佳實(shí)踐。
本文展示了如何利用最少的工具、更少的依賴和最大程度的自動(dòng)化,從機(jī)器學(xué)習(xí)模型訓(xùn)練到部署,為數(shù)據(jù)科學(xué)家和 MLOps 工程師節(jié)省大量重復(fù)性工作。我們利用 Python 編寫的自動(dòng)化腳本,并使用 Docker 封裝模型和 Terraform,構(gòu)建了一個(gè)可重用、自動(dòng)化且可擴(kuò)展的環(huán)境。
這種方法具有高度可移植性,可以插入任何 CI/CD 工具,例如 GitHub Actions 或 Azure DevOps?;A(chǔ)已從這里設(shè)置,您可以根據(jù)自己的需求進(jìn)行修改。?
以上就是從開(kāi)發(fā)到部署:自動(dòng)化機(jī)器學(xué)習(xí)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.400tele.com.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)