容器化AI模型部署实战:从训练到推理

简介: 在上一篇中,我们探讨了AI技术如何赋能容器化生态。本篇聚焦于AI模型的容器化部署,通过图像分类任务实例,详细介绍了从模型训练到推理服务的完整流程。使用PyTorch训练CNN模型,Docker打包镜像,并借助Kubernetes进行编排和部署,最终通过FastAPI提供推理服务。容器化技术极大提升了AI模型部署的便利性和管理效率,未来将成为主流趋势。

在上一篇中,我们探讨了AI技术如何赋能容器化生态,从智能化运维到创新应用,展现了二者融合的巨大潜力。本篇将聚焦于一个具体场景:AI模型的容器化部署,并通过代码示例,带领读者一步步完成从模型训练到推理服务的完整流程。

一、场景概述

假设我们有一个图像分类任务,需要训练一个卷积神经网络(CNN)模型来识别不同种类的猫。训练完成后,我们希望将这个模型部署为容器化的推理服务,以便其他应用可以通过API调用进行预测。

二、技术栈选择

为了实现上述目标,我们将使用以下技术栈:

  • 模型训练框架: PyTorch
  • 容器化工具: Docker
  • 容器编排平台: Kubernetes
  • 推理服务框架: FastAPI

三、代码实现

1. 模型训练

首先,我们需要使用PyTorch训练一个CNN模型。以下是一个简单的代码示例:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms

# 定义CNN模型
class CatClassifier(nn.Module):
    def __init__(self):
        super(CatClassifier, self).__init__()
        self.conv1 = nn.Conv2d(3, 32, kernel_size=3, stride=1, padding=1)
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
        self.fc1 = nn.Linear(32 * 16 * 16, 128)
        self.fc2 = nn.Linear(128, 10)  # 假设有10种猫

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = x.view(-1, 32 * 16 * 16)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 数据预处理
transform = transforms.Compose([
    transforms.Resize((32, 32)),
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])

# 加载数据集
train_dataset = datasets.ImageFolder(root='path/to/train_data', transform=transform)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True)

# 初始化模型、损失函数和优化器
model = CatClassifier()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练模型
for epoch in range(10):
    for images, labels in train_loader:
        outputs = model(images)
        loss = criterion(outputs, labels)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

# 保存模型
torch.save(model.state_dict(), 'cat_classifier.pth')

2. 构建Docker镜像

训练完成后,我们需要将模型和推理代码打包成Docker镜像。首先,创建一个Dockerfile文件:

FROM python:3.8-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "app.py"]

然后,创建一个requirements.txt文件,列出所需的Python库:

torch
fastapi
uvicorn

最后,构建Docker镜像:

docker build -t cat-classifier .

3. 部署到Kubernetes

接下来,我们将Docker镜像部署到Kubernetes集群。首先,创建一个deployment.yaml文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cat-classifier
spec:
  replicas: 3
  selector:
    matchLabels:
      app: cat-classifier
  template:
    metadata:
      labels:
        app: cat-classifier
    spec:
      containers:
      - name: cat-classifier
        image: cat-classifier
        ports:
        - containerPort: 8000

然后,创建一个service.yaml文件,暴露服务:

apiVersion: v1
kind: Service
metadata:
  name: cat-classifier
spec:
  selector:
    app: cat-classifier
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8000
  type: LoadBalancer

最后,使用kubectl命令部署应用:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

4. 测试推理服务

部署完成后,我们可以通过API调用测试推理服务。以下是一个简单的Python代码示例:

import requests

url = "http://<service-ip>/predict"
files = {
   'file': open('test.jpg', 'rb')}
response = requests.post(url, files=files)

print(response.json())

四、总结

通过以上步骤,我们成功地将一个AI模型容器化并部署到Kubernetes集群,实现了从模型训练到推理服务的完整流程。容器化技术为AI模型的部署和管理提供了极大的便利,而Kubernetes则进一步提升了服务的可靠性和可扩展性。未来,随着AI技术的不断发展,容器化AI模型部署将成为一种主流趋势。我们可以预见,越来越多的AI应用将以容器化的方式运行在云端或边缘,为各行各业带来更智能、更高效的服务体验。

相关文章
|
1月前
|
人工智能 测试技术 API
构建AI智能体:二、DeepSeek的Ollama部署FastAPI封装调用
本文介绍如何通过Ollama本地部署DeepSeek大模型,结合FastAPI实现API接口调用。涵盖Ollama安装、路径迁移、模型下载运行及REST API封装全过程,助力快速构建可扩展的AI应用服务。
566 6
|
1月前
|
人工智能 物联网 调度
边缘大型AI模型:协作部署与物联网应用——论文阅读
论文《边缘大型AI模型:协作部署与物联网应用》系统探讨了将大模型(LAM)部署于边缘网络以赋能物联网的前沿框架。针对传统云端部署高延迟、隐私差的问题,提出“边缘LAM”新范式,通过联邦微调、专家混合与思维链推理等技术,实现低延迟、高隐私的分布式智能。
646 6
边缘大型AI模型:协作部署与物联网应用——论文阅读
|
1月前
|
存储 人工智能 安全
《Confidential MaaS 技术指南》发布,从 0 到 1 构建可验证 AI 推理环境
Confidential MaaS 将从前沿探索逐步成为 AI 服务的安全标准配置。
|
1月前
|
机器学习/深度学习 人工智能 JSON
PHP从0到1实现 AI 智能体系统并且训练知识库资料
本文详解如何用PHP从0到1构建AI智能体,涵盖提示词设计、记忆管理、知识库集成与反馈优化四大核心训练维度,结合实战案例与系统架构,助你打造懂业务、会进化的专属AI助手。
206 6
kde
|
1月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
kde
410 4
|
1月前
|
机器学习/深度学习 人工智能 监控
Java与AI模型部署:构建企业级模型服务与生命周期管理平台
随着企业AI模型数量的快速增长,模型部署与生命周期管理成为确保AI应用稳定运行的关键。本文深入探讨如何使用Java生态构建一个企业级的模型服务平台,实现模型的版本控制、A/B测试、灰度发布、监控与回滚。通过集成Spring Boot、Kubernetes、MLflow和监控工具,我们将展示如何构建一个高可用、可扩展的模型服务架构,为大规模AI应用提供坚实的运维基础。
231 0
|
1月前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
402 29