【AI大模型】什么是AI模型推理,与训练有什么差异?
【AI大模型】什么是AI模型推理,与训练有什么差异?
在AI领域,推理(Inference)和训练(Training)是AI模型生命周期中的两个核心阶段。训练时,模型通过大量数据与算法学习规律,此过程计算资源消耗巨大且耗时漫长,旨在构建精准模型。而推理则是利用已训练好的模型对新数据进行快速判断与处理,资源需求相对较少,二者差异显著却相辅相成。本文将详细介绍AI模型推理的运行原理以及与训练的差异,帮助读者全面了解AI推理。
为什么叫推理
什么是AI推理?AI推理是指经过训练的AI模型,从全新数据中得出结论的过程,推理就是人工智能模型的实际运行。
举个例子,学生学习和考试,学生平时课堂学习,写作业等,可以看成是AI模型的训练,学生写作业,老师批改作业,以及老师答疑,都是在给学生反馈哪些是正确的哪些是错误的,通过这个过程学生掌握了课本里面的知识。到了考试以后,考题多数情况下是跟平时做的题目不一样(肯定不是现成一模一样的题目),学生需要利用掌握的知识来分析解答考试题目,这个就是推理的过程。但是有一点需要说明,考试的知识点肯定要在课本知识范围内,即考试不能超纲,否则学生也答不上来或者答的效果不好,AI推理本质也是一样,上述说的全新数据也是要在AI训练数据的大范围内,例如一个人脸识别的模型,训练的时候拿的都是人脸数据,包含男人、女人、老人、小孩等等,但是推理的时候拿一张小猫的图片让其识别,大概率会识别错误。
AI模型运行为什么叫推理?推理这个概念相对来说比较抽象,刚接触时有点难理解,找到两个比较合理的一种解释:
- 推理这一术语来源于逻辑学,在逻辑学中,推理是指根据已知前提,通过规则得出结论
- 推理反映了AI在模拟人类思维方面的能力,人类的推理是通过已有知识(经验或教育)对新情况进行分析,例如“如果天空乌云密布,那么可能会下雨”。
AI运行过程其实与上述描述特征基本一致,AI模型的运行被称为“推理”,是因为它模仿了人类和逻辑系统中“从已知信息得出未知结论”的过程。推理强调模型利用训练获得的知识,在不确定的输入情况下生成合理输出。
说明:上述举例AI推理与人类推理类似,这里说明一下,人类推理时具有很强的涌现能力,就是创新能力(根据已有学习的知识创造出新的知识),目前大参数量的AI模型具备一定的涌现能力,但是效果还不稳定。
推理的运行过程
推理技术原理
当完成模型训练,意味着在给定的数据集上,模型已经达到最佳或者满足需求的预测效果。如果AI算法工程师对模型预测效果满意,就可以进入模型部署进行推理和使用模型。AI模型推理整体过程如下:
- 输入预处理:对输入数据进行归一化、特征提取等预处理操作,即将原始数据转化为模型可以理解的数值(通常是向量或矩阵形式)比如图像识别任务中,对图像进行缩放到固定大小并转化为数值矩阵。
- 前向传播:利用训练过程中学到的参数(如神经网络中的权重和偏置)对输入进行逐层计算每一层的计算通常是:a=f(Wx)+b,其中W是权重矩阵,b是偏置向量,f是激活函数。
- 输出后处理:对模型的输出进行解码,如通过Softmax获取分类概率,通过阈值决定预测类别,或将数值转换为自然语言文本,输出比如分类标签、预测值或生成的文本等。
可以看出这里跟训练的一个明显区别是没有反向传播过程。
实际应用模型和业务应用如何配合?
之前介绍AI训练的文章说到,模型训练好以后会导出权重文件,其包含了模型在训练过程中学到的各种参数和配置,还有模型文件,其包含模型网络结构,例如神经网络的拓扑结构和层级配置等,那权重文件和模型文件又是是怎么运行起来的?
这里就需要用到推理框架,推理框架在AI模型推理时扮演了关键角色,其主要功能是高效地加载和执行训练好的模型,生成所需的推理结果。这里展开介绍一下推理框架加载权重文件的过程:
- 文件解析:使用框架的专用加载工具(如TensorFlow的SavedModel或PyTorch的torch.load)。读取权重文件,将二进制数据解码为模型参数。
- 张量构建(可以简单理解成向量):将解析出的权重数据加载为内存中的张量对象(如NumPy数组或框架的张量类)。确保张量的维度和格式与模型定义一致。
- 映射到模型结构:按照模型拓扑,将权重数据映射到网络的每一层(如卷积层、全连接层),确保参数被正确初始化到相应的网络层中。
如上图所示,模型文件主要是定义一个神经网络结构,有多少层,每层有多少神经元节点等,推理框架在加载的时候需要将模型文件和权重文件结合,即从权重文件中读取出对应的权重和偏置设置到模型网络上对应节点上,这就要求权重文件中解析出来的数据维度必须与模型网络结构一样,否则就会加载失败,例如模型网络总共有10层,每层20个节点,但是权重文件中参数只有5层,每层10个节点,显然就对应不上会加载失败
- 设备映射(分配硬件算力)根据推理环境(CPU、GPU、TPU),将加载的张量分配到对应的计算设备。
推理框架加载好模型后,处于推理准备状态,可以接受输入数据进行计算了,那么另外一个问题来了,推理框架在实际的应用场景中,例如手机、电脑等场景中,是一个什么形式运行?
推理框架部署后通常会作为一个独立的进程运行,并通过REST API、gRPC方式对外提供服务。这种方式使其能够独立于业务系统,专注于处理推理任务,同时简化了开发和维护工作,推理框架通常作为单独的进程或容器运行。
举例一个典型AI应用:人脸识别应用,其结构和工作流程大体如下:
- 用户上传图片:用户通过前端应用上传一张人脸图片,图片以HTTP POST请求的形式发送到Java后端。
- 后端处理请求:后端接收到图片,并将图片转码为推理框架支持的格式(如Base64解码、调整尺寸),使用HTTP客户端(如Apache HttpClient、Spring RestTemplate)向推理框架发送推理请求。
- 推理框架执行推:理推理框架接收到请求后,将图片数据传递给人脸识别模型。模型计算结果(如识别到的人脸特征向量、匹配分数)
- 推理结果返回后端:推理框架将结果以JSON或其他格式返回给Java后端。
- Java后端解析结果,并根据业务逻辑执行操作(如匹配数据库中的用户信息)
- 后端返回结果给前端:Java后端将最终处理结果(如认证成功或失败)返回给前端。
- 用户在前端看到相应提示
通过推理框架和业务应用的协同工作,AI模型可以无缝集成到业务系统中,提供智能化服务。例如,在人脸识别场景中,推理框架提供强大的计算能力,而业务系统专注于用户体验和业务逻辑,实现智能化登录认证或其他应用场景。
训练和推理的区别
我们都知道训练和推理典型差异在于对资源的需求不同,训练资源需求大于推理,为什么会有这个差异?
训练通常需要大量的计算资源和较长的时间。例如在训练一个图像分类AI时,会给模型输入成千上万张带有标签(如猫、狗、汽车等类别)的图像,通过复杂的算法(如前向传播、损失计算、反向传播算法、参数更新)来调整模型的权重,并且进行多次迭代处理。可能需要数小时、数天甚至数周的时间,具体取决于模型的复杂度、数据量和硬件性能。
推理相对来说,推理对计算资源的需求和时间消耗要小得多。在推理时,模型已经固定了参数,不需要做权重更新,只是简单地进行前向计算。虽然对于一些大型复杂的模型和高并发的推理场景(如在短时间内处理大量的图像识别请求)也需要一定的计算资源支持,但通常比训练阶段少很多。例如,在一个手机上的人脸识别解锁应用,每次解锁进行推理时,手机的处理器可以在很短的时间(通常不到一秒)内完成计算,判断是否为机主的人脸。
总结:AI训练比推理需要更多资源,因为训练过程涉及复杂的梯度计算和参数更新,同时需要处理海量数据。推理仅需完成前向传播,对资源的需求较低且优化空间更大。两者在计算量、内存和硬件需求上的本质差异,决定了训练资源需求更大。