AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


揭秘!如何在边缘设备上优雅部署和调用AI模型——必看的操作指南
发布日期:2024-04-19 15:04:20 浏览次数: 1766



欢迎回到“智慧电力工坊:AI快速入门与实践”系列!继上次我们一同探索了如何快速入门人工智能,今天我们将继续深入探讨如何在边缘设备上优雅地部署和使用已训练好的AI模型。
在本篇操作指南中,我们将通过三个详细的Python脚本,一步步展示从创建模型到在实际环境中调用模型的全过程。这些步骤将帮助您掌握每一个关键环节,确保您能够在任何边缘设备上轻松部署和运行您的AI模型。通过本指南,您的电力解决方案将更加智能,技术应用也将变得简单直观。

1.创建和保存模型

首先,我们从创建一个简单的神经网络模型开始。这是一个基于全连接层的二分类模型,我们将其保存在名为 model 的文件夹中,以便其他脚本调用。
import torchimport torch.nn as nn
# 定义简单的全连接神经网络class SimpleNet(nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc1 = nn.Linear(784, 128)# 28*28 = 784 输入节点, 128 输出节点self.fc2 = nn.Linear(128, 64)self.fc3 = nn.Linear(64, 2)# 输出10类,对应MNIST的10个数字
def forward(self, x):x = x.view(-1, 784)# flatten the imagex = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))x = self.fc3(x)return torch.log_softmax(x, dim=1)
接着,我们编写一个脚本来实例化这个模型,并将其参数保存到文件中。这一步是确保我们的模型能够在不同环境中复用,无需重新训练。
# 从model模块导入SimpleNet类from model.simple_nn import SimpleNet# 导入PyTorch库import torch# 设置保存模型参数的文件路径path_state_dict = '3_simple_nn_model.pth'# 创建SimpleNet类的实例,这会初始化模型model = SimpleNet()# 加载保存的模型参数到模型实例model.load_state_dict(torch.load(path_state_dict))# 将模型切换到评估模式,这对于进行预测是必要的,因为它会禁用一些特定于训练阶段的操作,比如Dropoutmodel.eval()# 生成随机输入数据:1个样本,每个样本10个特征input_data = torch.randn(1, 784)# 使用模型进行预测,此时不计算梯度以提高性能和减少内存使用with torch.no_grad():    output = model(input_data)

2. 载入和使用模型 

接下来,我们展示如何在边缘设备上加载这些预训练的模型参数,并在新的数据上进行预测。这一步是模型部署的核心,展示了如何将AI模型快速整合到实际应用场景中。
# 从model模块导入SimpleNet类from model.simple_nn import SimpleNet
# 导入PyTorch库import torch
# 设置保存模型参数的文件路径path_state_dict = '3_simple_nn_model.pth'
# 创建SimpleNet类的实例,这会初始化模型model = SimpleNet()
# 加载保存的模型参数到模型实例model.load_state_dict(torch.load(path_state_dict))
# 将模型切换到评估模式,这对于进行预测是必要的,因为它会禁用一些特定于训练阶段的操作,比如Dropoutmodel.eval()
# 生成随机输入数据:1个样本,每个样本10个特征input_data = torch.randn(1, 784)
# 使用模型进行预测,此时不计算梯度以提高性能和减少内存使用with torch.no_grad():output = model(input_data)
3. 优雅地应用模型
最后,我们通过封装模型加载和调用过程在一个类中 (SimpleNet_Predictor) 来展示如何优雅地在应用中使用模型,并将其存储在python包中(utils_AI)。
import torchfrom torchvision import transformsfrom model.simple_nn import SimpleNet
class SimpleNet_Predictor:def __init__(self, model_path):"""初始化模型预测器,加载模型并进行热身。:param model_class: 模型类,用于实例化模型:param model_path: 预训练模型的路径,用于加载模型参数"""# 实例化模型self.model = SimpleNet()# 加载模型参数self.model.load_state_dict(torch.load(model_path))# 切换到评估模式self.model.eval()# 定义数据预处理self.transform = transforms.Compose([# 此处为空,可自定义])# 进行模型热身,以确保模型在首次调用时响应迅速self.warmup()
def warmup(self):"""执行一次前向传递以热身模型。"""with torch.no_grad():# 使用一些随机数据进行热身random_input = torch.randn(1, 784)random_input = self.transform(random_input)# 应用转换self.model(random_input)
def __call__(self, input_data):"""使得该类实例可以像函数那样被调用,进行模型预测。:param input_data: 输入数据,应为torch.Tensor格式:return: 模型的输出结果"""with torch.no_grad():input_data = self.transform(input_data)# 应用转换return self.model(input_data)
具体的调用过程如下:
from utils_AI.simplenet_predictor import SimpleNet_Predictorimport torch
model_path = '3_simple_nn_model.pth'# 假设模型参数已经保存在这个路径predictor = SimpleNet_Predictor(model_path)
# 测试模型预测test_input = torch.randn(1, 784)output = predictor(test_input)print("Model output shape:", output.shape)



通过以上脚本,您不仅学会了如何创建和保存AI模型,还掌握了在边缘设备上高效调用和使用模型的方法。希望这篇指南能帮助您在智慧电力的应用中,轻松迈向智能化和自动化。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询