容器化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应用将以容器化的方式运行在云端或边缘,为各行各业带来更智能、更高效的服务体验。

相关文章
|
2月前
|
存储 机器学习/深度学习 算法
​​LLM推理效率的范式转移:FlashAttention与PagedAttention正在重塑AI部署的未来​
本文深度解析FlashAttention与PagedAttention两大LLM推理优化技术:前者通过分块计算提升注意力效率,后者借助分页管理降低KV Cache内存开销。二者分别从计算与内存维度突破性能瓶颈,显著提升大模型推理速度与吞吐量,是当前高效LLM系统的核心基石。建议收藏细读。
537 125
|
14天前
|
人工智能 测试技术 API
构建AI智能体:二、DeepSeek的Ollama部署FastAPI封装调用
本文介绍如何通过Ollama本地部署DeepSeek大模型,结合FastAPI实现API接口调用。涵盖Ollama安装、路径迁移、模型下载运行及REST API封装全过程,助力快速构建可扩展的AI应用服务。
291 6
|
1月前
|
人工智能 物联网 调度
边缘大型AI模型:协作部署与物联网应用——论文阅读
论文《边缘大型AI模型:协作部署与物联网应用》系统探讨了将大模型(LAM)部署于边缘网络以赋能物联网的前沿框架。针对传统云端部署高延迟、隐私差的问题,提出“边缘LAM”新范式,通过联邦微调、专家混合与思维链推理等技术,实现低延迟、高隐私的分布式智能。
504 6
边缘大型AI模型:协作部署与物联网应用——论文阅读
|
2月前
|
人工智能 Ubuntu 前端开发
Dify部署全栈指南:AI从Ubuntu配置到HTTPS自动化的10倍秘籍
本文档介绍如何部署Dify后端服务及前端界面,涵盖系统环境要求、依赖安装、代码拉取、环境变量配置、服务启动、数据库管理及常见问题解决方案,适用于开发与生产环境部署。
544 1
|
28天前
|
存储 人工智能 安全
《Confidential MaaS 技术指南》发布,从 0 到 1 构建可验证 AI 推理环境
Confidential MaaS 将从前沿探索逐步成为 AI 服务的安全标准配置。
|
1月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
20天前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
kde
|
1月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
kde
284 4

热门文章

最新文章