6.深入解析AI开发流程
6.1 概述
1.常规AI开发流程
AI开发流程可分为训练迭代和部署上线两个方面:
- 训练迭代,即从选定特定数据集、模型结构、损失函数和评价指标入手,通过模型参数的不断优化,致力于实现尽可能接近或超越领域内最先进技术(SOTA)的结果。
- 部署上线,即把训练好的模型在特定环境中推理运行的过程,更多关注于部署场景、部署方式、吞吐率和延迟。
AI模型通常通过PyTorch、TensorFlow、飞桨等深度学习框架训练完成,但直接使用训练模型推理有两个问题:直接通过这些模型来进行推理需要依赖这些训练框架,用起来比较复杂;不同的硬件的对算子的底层优化方式可能不同,相同模型运行在不同硬件上效率并不高,特别是对延时要求严格的线上场景;由此,经过工业界和学术界数年的探索,AI开发流程有了一条主流的流水线。

这一条流水线解决了模型部署中的两大问题:使用对接深度学习框架和推理引擎的中间表示,开发者不必担心如何在新环境中运行各个复杂的框架;通过中间表示的网络结构优化、推理引擎对运算的底层优化,模型的运算效率大幅提升。
2.基于K230的AI开发流程

基于K230的AI开发流程与主流AI开发流程类似,也是先训练,再部署。训练时开发者可以使用常见深度学习框架,eg:Pytorch、TensorFlow、飞桨等来定义网络结构,并通过训练确定网络中的参数。之后,模型的结构和参数会被转换成一种只描述网络结构的中间表示,eg:onnx、tflite,一些针对网络结构的优化会在中间表示上进行。最终,将中间表示转换成特定的文件格式(kmodel),并利用面向K230的推理引擎(K230Runtime),在K230硬件平台上实现模型的高效运行。
相信大家都对训练过程非常熟悉,因此本文着重介绍部署过程。选择开源repo人脸检测、人脸识别(稍后会详细解释两者含义),这两个开源repo都提供了基于Pytorch训练好的模型;因此 ,本文以Pytorch模型为例,对AI模型在K230的部署过程展开叙述。

对于Pytorch模型来说,从训练好到部署到K230上,会经过三种文件格式:pth/ckpt->onnx->kmodel,每转成新的文件格式之后,我们都需要验证转换模型的正确性,以保证成功部署。
- 已经训练好的Pytorch模型,我们会用pth推理脚本验证它的正确性;
- 验证pth/ckpt没有问题后,转onnx;
- 转onnx后,验证onnx模型的正确性,需要使用ONNXRuntime来验证,验证流程与Pytorch推理流程类似,包括加载onnx、读取图像/视频流、图像/视频帧预处理、onnx run、后处理、显示结果;
- 验证onnx没有问题,将其转换为kmodel;
- 此时使用K230Runtime来验证kmodel的正确性,验证流程与ONNXRuntime推理流程类似,包括加载kmodel、读取图像/视频流、图像/视频帧预处理、kmodel run、后处理、显示结果;
- kmodel推理流程正确了,我们AI模型就可以成功部署了。
PyTorch模型从训练到在K230上部署经过三个阶段:pth/ckpt验证(通常已验证)、onnx验证(使用ONNXRuntime),最后是kmodel验证(使用K230Runtime)。每个阶段都需要确保模型的正确性,以保证成功部署。验证流程包括加载模型、处理输入数据、运行推理、处理输出结果,最终确保K230上的AI模型部署成功。