一个AI应用的开发、上线流程解析

目录

1. 模型文件格式

1.1 CheckPoint (ckpt) 文件格式

1.2 .pth 文件格式

1.3 .mindir 文件格式

1.4 .onnx 文件格式

2. 推理(Inference)

2.1.pth (PyTorch模型格式)

2.2 .mindir (MindSpore模型格式)

2.3.onnx (开放神经网络交换格式)

2.4实际例子:自动驾驶系统中的推理模块

3. APP与网页

4. 运维中心与本地部署SDK

5. RAG(Retrieval-Augmented Generation)

6. 模型支持与硬件适配

7. 模型转换与迁移


1. 模型文件格式

  • ckpt:通常指TensorFlow模型的检查点文件,用于保存模型的权重和优化器状态。

  • .pth:PyTorch模型的文件格式,用于保存模型的参数。

  • .mindir:MindSpore框架的模型文件格式,支持高效的模型推理。

  • .onnx:开放神经网络交换格式,支持不同框架之间的模型转换。

  • 实际例子:在医疗影像诊断中,模型可能以多种格式保存,以便在不同的硬件和框架上进行部署。例如,使用ONNX格式可以在NVIDIA GPU和国产硬件之间无缝迁移。

1.1 CheckPoint (ckpt) 文件格式
  • 特点:ckpt文件格式通常用于保存TensorFlow模型的权重和优化器状态。它能够记录模型训练过程中的参数和优化器的状态,方便训练的中断和恢复。

  • 应用场景:在训练大型深度学习模型时,如图像识别、自然语言处理等,ckpt文件可以用于保存训练过程中的中间结果,防止训练过程中断导致的损失。例如,在训练一个复杂的医疗影像诊断模型时,ckpt文件可以保存模型的权重和优化器状态,方便后续继续训练或进行模型评估。

  • 实际例子:在医疗影像诊断中,使用TensorFlow训练的模型可以保存为ckpt文件,以便在不同的硬件和框架上进行部署。例如,在NVIDIA GPU上训练的模型可以保存为ckpt文件,然后在国产硬件上进行推理。

1.2 .pth 文件格式
  • 特点:.pth是PyTorch模型的文件格式,用于保存模型的参数。它能够保存模型的权重和参数,方便模型的加载和推理。

  • 应用场景:在使用PyTorch框架进行深度学习模型开发时,.pth文件格式常用于保存训练好的模型参数。例如,在自然语言处理任务中,训练好的情感分析模型可以保存为.pth文件,方便在不同的设备上进行推理。

  • 实际例子:在医疗影像诊断中,使用PyTorch训练的模型可以保存为.pth文件,然后在不同的硬件平台上进行部署。例如,在国产硬件上进行推理时,可以加载.pth文件进行模型推理。

1.3 .mindir 文件格式
  • 特点:.mindir是MindSpore框架的模型文件格式,支持高效的模型推理。它能够保存模型的结构和参数,方便在MindSpore框架下进行模型的加载和推理。

  • 应用场景:在使用MindSpore框架进行深度学习模型开发时,.mindir文件格式常用于保存训练好的模型。例如,在图像分类任务中,训练好的ResNet模型可以保存为.mindir文件,方便在MindSpore框架下进行高效的模型推理。

  • 实际例子:在医疗影像诊断中,使用MindSpore训练的模型可以保存为.mindir文件,然后在昇腾AI处理器上进行高效的模型推理。

1.4 .onnx 文件格式
  • 特点:.onnx是开放神经网络交换格式,支持不同框架之间的模型转换。它能够保存模型的结构和参数,方便在不同的框架和硬件上进行模型的加载和推理。

  • 应用场景:在需要将模型从一个框架转换到另一个框架进行推理时,.onnx文件格式非常有用。例如,在使用TensorFlow训练的模型需要在PyTorch框架下进行推理时,可以将模型转换为.onnx文件,然后在PyTorch中加载.onnx文件进行推理。

  • 实际例子:在医疗影像诊断中,使用ONNX格式可以在NVIDIA GPU和国产硬件之间无缝迁移。例如,训练好的模型可以保存为.onnx文件,然后在NVIDIA GPU上进行高效的模型推理,也可以在国产硬件上进行推理。

2. 推理(Inference)

  • 推理模块负责将模型应用于实际数据,生成预测结果。

  • 支持多种模型格式(如.pth、.mindir、.onnx),确保兼容性和灵活性。

  • 实际例子:在自动驾驶系统中,推理模块会实时处理摄像头和传感器数据,生成驾驶决策。

推理模块是AI系统中的关键组件,负责将训练好的模型应用于实际数据,生成预测结果。为了确保系统的兼容性和灵活性,推理模块通常需要支持多种模型格式,如.pth.mindir.onnx等。

2.1.pth (PyTorch模型格式)

import torch
from torchvision import models

# 加载预训练的ResNet50模型
model = models.resnet50(pretrained=True)
model.eval()  # 设置模型为评估模式

# 加载.pth文件
model.load_state_dict(torch.load('model.pth'))

# 准备输入数据
input_data = torch.randn(1, 3, 224, 224)

# 进行推理
with torch.no_grad():
    output = model(input_data)
print(output)

2.2 .mindir (MindSpore模型格式)

import mindspore
from mindspore import context, Tensor
from mindspore.train import inference

# 设置上下文
context.set_context(mode=context.GRAPH_MODE, device_target="Ascend")

# 加载.mindir文件
network = mindspore.load('model.mindir')

# 准备输入数据
input_data = Tensor(np.random.randn(1, 3, 224, 224).astype(np.float32))

# 进行推理
output = network(input_data)
print(output)

2.3.onnx (开放神经网络交换格式)

import onnx
import onnxruntime as ort

# 加载.onnx文件
session = ort.InferenceSession('model.onnx')

# 准备输入数据
input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)

# 进行推理
inputs = {session.get_inputs()[0].name: input_data}
outputs = session.run(None, inputs)
print(outputs)

2.4实际例子:自动驾驶系统中的推理模块

在自动驾驶系统中,推理模块负责实时处理摄像头和传感器数据,生成驾驶决策。以下进行非常简化的示例:

导出模型为ONNX格式

import torch
import torchvision.models as models

# 加载预训练的ResNet-18模型
model = models.resnet18(pretrained=True).eval()

# 创建一个随机输入张量
dummy_input = torch.randn(1, 3, 224, 224)

# 导出模型为ONNX格式
torch.onnx.export(model, dummy_input, "resnet18.onnx", verbose=True)

使用TensorRT将ONNX模型转换为TensorRT引擎

import tensorrt as trt
import pycuda.driver as cuda
import pycuda.autoinit
import numpy as np

TRT_LOGGER = trt.Logger(trt.Logger.WARNING)

def build_engine(onnx_file_path, shape=(1, 3, 224, 224)):
    with trt.Builder(TRT_LOGGER) as builder, builder.create_network() as network, trt.OnnxParser(network, TRT_LOGGER) as parser:
        config = builder.create_builder_config()
        config.max_workspace_size = 1 << 30  # 设置最大工作空间大小为1GB
        builder.max_batch_size = 1  # 设置最大批处理大小为1

        # 读取ONNX模型文件
        with open(onnx_file_path, 'rb') as model:
            if not parser.parse(model.read()):
                print('Failed parsing ONNX file.')
                for error in range(parser.num_errors):
                    print(parser.get_error(error))
                return None

        network.get_input(0).shape = shape  # 设置输入形状
        engine = builder.build_engine(network, config)  # 构建TensorRT引擎
        return engine

engine = build_engine("resnet18.onnx")

分配内存缓冲区

def allocate_buffers(engine):
    inputs = []
    outputs = []
    bindings = []
    stream = cuda.Stream()  # 创建CUDA流

    for binding in engine:
        size = trt.volume(engine.get_binding_shape(binding)) * engine.max_batch_size
        dtype = trt.nptype(engine.get_binding_dtype(binding))
        host_mem = cuda.pagelocked_empty(size, dtype)
        dev_mem = cuda.mem_alloc(host_mem.nbytes)
        bindings.append(int(dev_mem))

        if engine.binding_is_input(binding):
            inputs.append((host_mem, dev_mem))
        else:
            outputs.append((host_mem, dev_mem))

    return inputs, outputs, bindings, stream

inputs, outputs, bindings, stream = allocate_buffers(engine)

创建执行上下文并进行推理

context = engine.create_execution_context()

def infer(context, bindings, inputs, outputs, stream):
    [cuda.memcpy_htod_async(inp[1], inp[0], stream) for inp in inputs]
    context.execute_async(bindings=bindings, stream_handle=stream.handle)
    [cuda.memcpy_dtoh_async(out[0], out[1], stream) for out in outputs]
    stream.synchronize()
    return [out[0] for out in outputs]

# 准备输入数据
input_data = np.random.random_sample((1, 3, 224, 224)).astype(np.float32)
np.copyto(inputs[0][0], input_data.ravel())

# 进行推理
trt_outputs = infer(context, bindings, inputs, outputs, stream)
print(trt_outputs)

3. APP与网页

  • APP:移动或桌面应用程序,提供用户友好的界面,与AI模型进行交互。

  • 网页:通过浏览器访问的Web应用,支持跨平台访问。

  • 实际例子:在智能客服系统中,用户可以通过APP或网页与AI助手进行对话,获取问题解答。

4. 运维中心与本地部署SDK

  • 运维中心:负责监控和管理整个AI系统的运行状态,包括模型的部署、更新和性能优化。

  • 本地部署SDK:提供本地化的开发工具包,方便开发者在本地环境中进行模型的测试和部署。

  • 实际例子:在智能家居系统中,运维中心可以实时监控设备的运行状态,确保AI模型的稳定性和安全性。开发者可以通过本地部署SDK快速测试新的功能模块。

5. RAG(Retrieval-Augmented Generation)

  • RAG是一种结合检索和生成的技术,用于增强模型的回答能力。

  • 通过检索外部知识库,结合生成模型生成更准确和丰富的回答。

  • 实际例子:在智能问答系统中,RAG可以结合维基百科等知识库,生成更准确的回答。

6. 模型支持与硬件适配

  • NVIDIA H20、H100:高性能计算芯片,支持深度学习模型的高效推理。

  • 国产硬件:适配国产硬件平台,确保在本地环境中的自主可控。

  • 实际例子:在金融风险预测中,模型可以在NVIDIA GPU上进行高性能计算,同时在国产硬件上实现本地化部署。

7. 模型转换与迁移

  • 转换迁移:将模型从一种框架或硬件平台迁移到另一种平台,确保兼容性和性能。

  • 实际例子:在工业自动化中,模型可能需要从PyTorch迁移到MindSpore,以适配特定的硬件环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/70892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用grafana v11 建立k线(蜡烛图)仪表板

先看实现的结果 沪铜主力合约 2025-02-12 的1分钟k线图 功能介绍: 左上角支持切换主力合约,日期,实现动态加载数据. 项目背景: 我想通过前端展示期货指定品种某1天的1分钟k线,类似tqsdk 的web_gui 生成图形化界面— TianQin Python SDK 3.7.8 文档 项目架构: 后端: fastap…

【C++】解锁<list>的正确姿势

> &#x1f343; 本系列为初阶C的内容&#xff0c;如果感兴趣&#xff0c;欢迎订阅&#x1f6a9; > &#x1f38a;个人主页:[小编的个人主页])小编的个人主页 > &#x1f380; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 > ✌️ &#x1f91e; &#x1…

JUC并发—1.Java集合包底层源码剖析

大纲 1.为什么要对JDK源码剖析 2.ArrayList源码一&#xff1a;基本原理以及优缺点 3.ArrayList源码二&#xff1a;核心方法的原理 4.ArrayList源码三&#xff1a;数组扩容以及元素拷贝 5.LinkedList源码一&#xff1a;优缺点和使用场景 6.LinkedList源码二&#xff1a;双…

修改docker内容器中的某配置文件的命令

先找到配置文件config.php find / -name "config.php" 2>/dev/null 然后用vi编辑器修改配置文件 vi /var/www/config.php 最后就是vi的基本操作&#xff0c;根据具体需求使用&#xff1a; vi 有两种主要模式&#xff1a; 命令模式&#xff1a;进入 vi 后的默认…

一竞技瓦拉几亚S4预选:YB 2-0击败GG

在2月11号进行的PGL瓦拉几亚S4西欧区预选赛上,留在欧洲训练的YB战队以2-0击败GG战队晋级下一轮。双方对阵第二局:对线期YB就打出了优势,中期依靠卡尔带队进攻不断扩大经济优势,最终轻松碾压拿下比赛胜利,以下是对决战报。 YB战队在天辉。阵容是潮汐、卡尔、沙王、隐刺、发条。G…

使用Docker部署MySQL 5.7并配置防火墙

步骤1: 切换到超级用户 首先&#xff0c;打开终端&#xff0c;输入以下命令切换到超级用户(root)&#xff1a; su 然后输入您的root密码。 步骤2: 启动Docker服务 确保Docker服务已经启动。可以使用如下命令启动Docker&#xff08;如果它尚未运行&#xff09;&#xff1a;…

vue elementui select下拉库组件鼠标移出时隐藏下拉框

方案&#xff1a; select 监听 mouseleave事件&#xff0c;当鼠标离开时通过唯一标识ref设置select 下拉框隐藏&#xff0c;并做失焦 <el-select v-model"value" :popper-append-to-body"false" class"select_drop_inner" size"sm…

国产操作系统安装DeepSeek

从年前到现在&#xff0c;DeepSeek这款语言AI模型&#xff0c;一经发布直接在全球爆火&#xff0c;在热搜上更是牢牢占据一席之地。无论是技术大神&#xff0c;还是紧跟潮流的技术小白&#xff0c;都被它强大的自然语言处理能力所吸引。作为国产操作系统的用户&#xff0c;千万…

记使用AScript自动化操作ios苹果手机

公司业务需要自动化操作手机&#xff0c;本来以为很困难&#xff0c;没想到使用AScript工具出乎意料的简单&#xff0c;但是还有很多坑存在&#xff0c;写个博客记录一下。 工具信息&#xff1a; 手机&#xff1a;iphone7 系统版本&#xff1a;ios15 AScript官方文档链接&a…

关于conda换镜像源,pip换源

目录 1. 查看当前下载源2. 添加镜像源2.1清华大学开源软件镜像站2.2上海交通大学开源镜像站2.3中国科学技术大学 3.删除镜像源4.删除所有镜像源&#xff0c;恢复默认5.什么是conda-forge6.pip换源 1. 查看当前下载源 conda config --show channels 如果发现多个 可以只保留1个…

Springboot 中如何使用Sentinel

在 Spring Boot 中使用 Sentinel 非常方便&#xff0c;Spring Cloud Alibaba 提供了 spring-cloud-starter-alibaba-sentinel 组件&#xff0c;可以快速将 Sentinel 集成到你的 Spring Boot 应用中&#xff0c;并利用其强大的流量控制和容错能力。 下面是一个详细的步骤指南 …

ARM Cortex-M3/M4 权威指南 笔记【一】技术综述

一、Cortex-M3/M4 处理器的一般信息 1.1 处理器类型 ARM Cortex-M 为 32 位 RISC&#xff08;精简指令集&#xff09;处理器&#xff0c;其具有&#xff1a; 32位寄存器32位内部数据通路32位总线接口 除了 32 位数据&#xff0c;Cortex-M 处理器&#xff08;以及其他任何 A…

(一)Axure制作移动端登录页面

你知道如何利用Axure制作移动端登录页面吗&#xff1f;Axure除了可以制作Web端页面&#xff0c;移动端也是可以的哦&#xff0c;下面我们就一起来看一下Axure制作移动端登录页面的过程吧。 第一步&#xff1a;从元件中拖入一个矩形框&#xff0c;并设置其尺寸为&#xff1a;37…

变化检测相关论文可读list

一些用得上的&#xff1a; 遥感变化检测常见数据集https://github.com/rsdler/Remote-Sensing-Change-Detection-Dataset/ 代码解读&#xff1a;代码解读 | 极简代码遥感语义分割&#xff0c;结合GDAL从零实现&#xff0c;以U-Net和建筑物提取为例 NeurIPS2024: https://mp.w…

从深入理解 netty——》AI

想了很久&#xff0c;准备写一个系列从深入理解 netty——》AI。 先说下为啥要从netty开始&#xff0c;看看netty的重要性 rocketmq异步消息组件nacos微服务注册中心spring cloud gateway网关redission分布式缓存es全文检索sentinel流量控制&#xff0c;服务保护seata分布式…

Auto-go 环境配置

go环境配置 1.下载 Go 安装包 从 Go 官方网站&#xff08;https://golang.org/dl/&#xff09;下载适合你操作系统的 Go 安装包。不过由于网络原因&#xff0c;可能访问官方网站不太方便可以用我这里的链接Go安装包下载地址点击自动下载 2.下载ide这里使用GoLand 官方网站 …

如何在 Elasticsearch 中设置向量搜索 - 第二部分

作者&#xff1a;来自 Elastic Valentin Crettaz 了解如何在 Elasticsearch 中设置向量搜索并执行 k-NN 搜索。 本文是三篇系列文章中的第二篇&#xff0c;深入探讨了向量搜索&#xff08;也称为语义搜索&#xff09;的复杂性以及它在 Elasticsearch 中的实现方式。 第一部分重…

Leetcode - 周赛435

目录 一、3442. 奇偶频次间的最大差值 I二、3443. K 次修改后的最大曼哈顿距离三、3444. 使数组包含目标值倍数的最少增量四、3445. 奇偶频次间的最大差值 II 一、3442. 奇偶频次间的最大差值 I 题目链接 本题使用数组统计字符串 s s s 中每个字符的出现次数&#xff0c;然后…

SQLMesh系列教程-2:SQLMesh入门项目实战(上篇)

假设你已经了解SQLMesh是什么&#xff0c;以及其他应用场景。如果没有&#xff0c;我建议你先阅读《SQLMesh系列教程-1&#xff1a;数据工程师的高效利器-SQLMesh》。 在本文中&#xff0c;我们将完成一个小项目或教程&#xff0c;以帮助你开始使用SQLMesh。你可以选择一步一步…

MybatisPlus常用增删改查

记录下MybatisPlus的简单的增删改查 接口概述 Service和Mapper区别 Mapper简化了单表的sql操作步骤&#xff08;CRUD&#xff09;&#xff0c;而Serivce则是对Mapper的功能增强。 Service虽然加入了数据库的操作&#xff0c;但还是以业务功能为主&#xff0c;而更加复杂的SQL…