《人工智能学习笔记》系列第 6 篇,共 9 篇。

4.4 AI 应用开发流程

AI 应用开发的完整流程

步骤要做的事容易踩的坑
需求分析解决什么问题、有什么数据、怎么解、要什么效果、多少算力/什么设备/什么框架省了这步,后面全在返工
开发环境哪个框架,本地 / 云 / 服务器框架版本、Python 版本、硬件三者要对得上
数据准备占比最大的一块脏数据要剔;无标签数据要打标(除非算法本身是自监督/无监督);开源数据集已处理好,真实数据不是
构建网络输入层 / 隐藏层 / 输出层 + 损失函数 + 超参数隐藏层靠试错;损失多用内置,GAN 这类要自己设计
训练与测试训练 → 保存 → 测试,不达标回去调只看训练损失会骗人
部署与推理转成适配硬件的格式,降延迟、降占用推理前忘关梯度、忘切评估模式

建网的三个口子:输入层取决于数据形态(将整张图片作为特征向量分类时先展平;文本要想好第一层收多少神经元);输出层几类就几个神经元,回归一个;隐藏层没有公式,靠试错——「深度学习像炼丹,出不出好丹得开炉才知道」。实践捷径是拿开源结构 + 预训练参数,冻结一部分只训一部分。超参数(学习率、epoch、动量)多是经验之谈,资源够就用网格搜索 / 随机搜索。

案例:五类花卉图像分类。定性为 CV 里最基础的图像分类、有监督。数据五类、3000 多张(不到 4000),量太小,从零训 ResNet 出不了成果,所以走迁移学习;结构选 ResNet-50(有开源预训练权重)。

残差为什么重要:网络加深理论更强,现实却会退化(加深到一定程度反而变差)。残差在两层计算后把输入 x 加回输出,梯度沿这条加法通路回去不消失,于是能做到上千层不退化。ResNet-50 骨架:7×7/64(stride 2)→ 3×3 maxpool(stride 2)→ 若干瓶颈模块 → 全局平均池化 → 全连接。瓶颈模块 = 1×1 → 3×3 → 1×1:先降维、再升维,让 3×3 在低维上提特征,算力省下一大截,中间那层也顺带整合了跨通道信息;主路与跳连要和得起来,靠最后一个 1×1(必要时跳连上再加一个投影卷积)。18/34/50/101/152 的差别是块的类型 + 堆叠的份数:18/34 用两个 3×3 叠成的 basic block,50/101/152 换成瓶颈块。

两种训练方式:① 从零训(随机初始化,3000 张图硬碰硬);② 迁移学习(加载 ImageNet 权重 → 冻结主干 → 1000 类分类头改成 5 类 → 只训分类头)。推理:PyTorch 先 no_grad + eval。

模型压缩:把大模型塞进小设备

模型压缩是「部署」的前置动作。

为什么必须压缩。推理不更新权重,所以对硬件的算力要求低于训练,但显存和带宽一点没省:

压力来源具体表现
推理性能带宽是瓶颈时,参数越多,每次推理要搬的数据越多,速度掉得快;显存装不下就得退回 CPU,再掉一档
部署成本参数越多,对存储、算力、显存的要求越高,能跑得动的设备越少越贵;而大显存、高带宽恰恰是最贵的指标
显存占用Batch Size 与序列长度一涨,KV 缓存跟着涨,访存压力继续放大

所以想让 AI 落到手机、摄像头这类端边设备上,压缩是绕不过去的一步。

两种主要方法:

方法一句话做法与代价
模型剪枝把不重要的权重和分支裁掉,让网络稀疏化连接就是权重矩阵,剪枝就是把矩阵里一部分元素置零,相当于剪掉贡献小的「突触」甚至整个神经元。代价是可能掉精度,得在模型大小与性能之间找平衡点
知识蒸馏让小网络学大网络本质是带迁移学习理念的压缩:大网络(教师)性能好但冗余多、运算量大;把其中有用信息提取出来迁移给小网络(学生),小网络就能以接近的性能、低得多的算力完成同样的任务

剪枝前后:减去不重要的突触与神经元

部署工具示例:

工具阵营定位
llama.cpp独立C++ 实现,目标是在各种硬件(本地与云)上以最少配置实现 LLM 推理,完全不需要 AI 框架(第 6 章 6.3 就是它)

4.5 开发框架实验

本节用 PyTorch 练习基础 API、图像分类与 ResNet。重点是使用流程和 API 参数含义——nn.Conv2d 摆在你面前,得知道每个参数在干什么。

PyTorch 实验:基础 API → CIFAR-10 的「卷积 + 全连接」网络(50 个 epoch,准确率 75.97%,正好体会「结构不够复杂,上限就在那」)→ ResNet(Python 版本按所选 PyTorch 的支持范围匹配,环境示例见 6.0;ImageFolder + DataLoader 设 batch_size、shuffle、多线程;瓶颈块用 nn.Sequential 打包;全局平均池化接分类头)。

留下的三个思考题:① 训练中损失不降反而回弹是什么原因?② 加大 epoch,精度会一直升吗?为什么?③ 不改 ResNet-50 结构、准确率只有 70~75%,还能怎么提?

4.6 模型部署与应用实验(llama.cpp)

训练与推理的差别

前一实验止于「训完保存」,这个实验把模型变成服务:用 llama.cpp 在笔记本上跑一个 1B 量化模型,先做命令行对话,再做 Web 服务供代码调用。

项要求
CPU本节按 x86-64 笔记本示例准备程序;预编译包的指令集要求须与本机匹配,这不是 llama.cpp 项目本身的架构限制
系统Windows 10 以上,或 Ubuntu 22.04 以上
Python3.x,仅实验二(requests 调接口)需要
其他准备 llama.cpp 程序与 GGUF 模型文件

本节以笔记本为例。llama.cpp 上游支持 ARM,也可在树莓派上构建运行;应按目标设备选择匹配的程序版本。

准备三样:程序(从 llama.cpp 上游获取与系统、硬件匹配的版本;项目更新频繁,命令参数以所用版本的帮助为准)、模型文件(本节用 1B 量化版;同模型有 FP16 约 2.48 GB、Q8 等版本,这里以 800 多 MB 的量化文件为例,换版本时同步改模型名)、下载源(HuggingFace 国内直连受限时可用 hf 镜像站)。

实验一:命令行

llama-cli -m 模型路径 -cnv --chat-template llama3 --color

-m 模型路径;-cnv 对话模式(不打印前缀);--chat-template 指定或覆盖对话模板——指令模型需要正确套用模板(Llama、Gemma 等格式不同),模型内置元数据且所用版本支持时可自动读取,缺失或需覆盖时再显式指定;填错等于用错格式;--color 区分人机颜色;另有温度、top-k、重复惩罚控制输出随机性。实测 1B 的 Llama 3.2 中文很差(中英混杂),建议用英文问;同一问题每次回答也不同,因为采样本身带随机。

实验二:Web 服务

llama-server -m 模型路径 -c 上下文长度

-c 是上下文(序列)长度,按 token 计,超出不让输入。先看服务状态:健康检查接口 200 正常、503 异常;要开给局域网同学用,服务端还需用 --host 局域网IP 或 --host 0.0.0.0 监听外部连接,并按需允许对应端口入站,客户端再将 127.0.0.1 换成服务端局域网 IP;仅监听 127.0.0.1 时不能靠改客户端 URL 共享,勿直接暴露到公网。

调用方式接口特点返回怎么取
原始 API原始补全接口采样参数有默认值,具体值依版本;原始 prompt 不自动等同聊天消息,未正确套模板时可能呈现续写风格从 json 里取内容
OpenAI 兼容/v1/chat/completions按 OpenAI 消息模板传,多数参数已默认,回答正常choices[0].message.content
openai 库同上最省代码三级剥:完整结果 → choices[0].message → .content

两个要点:OpenAI 兼容接口里 role: system 优先级最高,先于用户提问——实验给它一句「你现在是 ChatGPT 助手」,它就真自称 ChatGPT,本质是提示词的「催眠」,模型没变;用 openai 库时 base_url 只写到 /v1,库会自动补后续路径,写全了反而重复。

注意:Kimi 那类「超长文本」宣传,实际指上下文 token 数;token 与汉字不是一对一,不能按字数直接换算。

4.7 AI 芯片概览

为什么需要专用芯片

全连接、Transformer 拆开看都是矩阵乘加。一个常被引用的量级:AI 任务中 99% 以上的运算是矩阵运算。既然只有一种运算,硬件就该把晶体管几乎全给乘法器。

定义:广义与狭义

口径定义典型例子
广义 AI 芯片能承担 AI 的大量计算任务,同时也能干别的活NVIDIA 游戏卡 / GPU(如 RTX 4090、5090)
狭义 AI 芯片针对 AI 算法做了特殊加速设计,但不意味着只能做 AI;计算 GPU 也可用于 HPC、数据分析NVIDIA 的 A100 / H100 / B100 / B200 一类加速卡

维基式定义:AI 加速器是一类专用硬件加速器或计算系统,用于加速 AI 与机器学习应用,含神经网络与机器视觉(指传统人工设计算子如 Laplacian 提边缘,不是今天的 CNN)。

四个共性特征:多核并行(AI 要海量并行)、低精度(相对渲染与超算的 FP64;AI 里 FP32 已算高,大模型之前 FP16+FP32 混合精度够,量化后主流 INT8/INT4,NVIDIA 在推 FP8/FP4)、数据流设计、存内计算。

训练与推理:两种任务,两种要求

AI 芯片的两类任务:训练与推理

训练推理
做什么权重随机初始化 → 喂数据 → 比对标签算 loss → 反向传播更新权重权重已固定,给输入直接出结果,像 y = f(x)
计算量极大小得多,但仍是大量矩阵运算
精度高——迭代上万次,一点误差会累积相对低
可扩展性高,模型涨得比芯片快,必须组集群(典型是万卡集群)也可分布式推理

按部署位置分:终端 / 边缘 / 云

维度终端(手机)边缘(路侧、小站)云·训练云·推理
功耗超低:5~6 W 已偏高,超 10 W 算太高低(体积比终端大,可放宽)在机房散热允许内尽可能高(功耗高才性能高)低(算力打不满就是浪费)
吞吐较低中高高(多用户并发)
精度中中高中高
可扩展性不需要不需要需要(组集群)需要(分布式推理)
主要任务推理为主,可做联邦学习式增量训练抓拍、违法识别训练推理

诀窍:本表左两列是终端/边缘,右两列是云训练/云推理;按表中需求,右两列强调扩展性,云训练尤其追求高吞吐。

终端使用本地 NPU 的考虑:调云端有三毛病——没网用不了、延迟高、拿不到本地数据。

发展进程

时间事件
1990s有人发现可用 FPGA 加速神经网络,但 AI 当时不火,未被重视
2006Hinton 证明大规模 DNN 可学习;同年 NVIDIA 发布 CUDA
其后NVIDIA 推出早期 AI 芯片;IBM 做类脑芯片
2012AlexNet 用 GPU 加速夺冠,比手工构造特征的方法领先好几个百分点——分水岭
2015Google 第一代 TPU,属狭义 AI 芯片

四条技术路线

GPU / FPGA / ASIC / 类脑四条技术路线

路线定位优点缺点
GPU通用(图形 + 计算)生态与设计制造工艺成熟推理阶段并行能力发挥不满(厂商正在改,缺点已变小)
FPGA半定制、可编程可编程改功能;平均性能较高、功耗较低、开发周期短,适合抢新市场单件成本高,量产也降不下来
ASIC硬件电路固定(TPU 属此;仍可编程换模型)同工艺同面积下性能能效最高;量产后成本极低超出硬件能力的需求难适配;研发失败或没人用就摊不平,只有大厂玩得起
类脑芯片理想形态功耗低、效率高、认知能力强仍在科研探索,未大规模应用

FPGA 与 ASIC 的逐项对比

两个学习要点细节:FPGA 运行前要加载硬件配置,ASIC 流片后硬件电路固定,但可编程 ASIC 仍可加载不同程序/模型;且 AI 本质仍是矩阵运算,把矩阵运算优化好性能就高——这是 ASIC 专用数据通路设计的思路。

通用计算与 AI 计算:CPU 为什么不适合

通用计算(CPU)与 AI 计算(GPU/NPU)

CPU(x86 等)GPU / NPU
内部构成ALU(算)+ 控制单元(指挥)+ Cache(缓存)控制与缓存占比大幅压缩,算力单元堆满
晶体管70% 以上给控制与缓存,真正算的很少大量 ALU,缓存很小
特点适合复杂逻辑、分支跳转、中断;NPU 能做的 CPU 基本都能做,只是效率低适合类型高度统一、依赖少的大规模数据 + 不需打断的纯净计算环境
核与频率核少(数据中心 CPU 上百核,个人机十几核)、频率高、单核强GPU 有大量小型算术执行单元;NPU 内含并行计算单元,核数粒度不同;利用率取决于任务
精度支持 FP64,传统超算(流体、电磁仿真)用它FP16 / INT8 即可

CPU 蹭 AI 的四条路:加核数、加指令集(AVX-512 一类,Intel 11 代做过但生态没跟上)、提频率、片内塞专用 NPU 单元(如 Intel Core Ultra)。GPU 的路是加专用计算单元(Tensor Core、矩阵核心)——都在从通用走向专用。

本章学习要点

  1. 框架的三层位置:上算法应用、中 AI 框架、下硬件算力;五项必有功能是数据处理、开发接口、可视化调试、编译、部署。
  2. 框架的全链路:前端接口 → 构图 → 图优化 → 编译 → 调度执行(内存/显存管理)→ 训练 → 部署;换框架能跑而原框架爆显存,差别在调度。
  3. 张量是框架唯一的基础数据结构:0 维标量、1 维向量、2 维矩阵、3 维图像、4 维加 batch。
  4. 张量五属性:shape、ndim、dtype、device、name;dtype 能否混用取决于算子,PyTorch 加减乘常自动提升、矩阵乘等常要求同类型;跨设备运算通常先迁移到同一设备,name 用于定位某层做微调。
  5. 图像维度顺序:PyTorch 常规 Conv2d 用 NCHW、TensorFlow 默认 NHWC;喂错可能报通道数错误,尺寸偶合时也可能静默错义,需显式转换,不会自动混合 batch。
  6. TFRecord 用于改善磁盘与网络 IO(减少大量小文件操作);可不压缩,也支持 GZIP / ZLIB,体积取决于数据与设置。
  7. 模型文件格式:pth 可存参数或整模型、bin 用于大模型分片、ONNX 用于跨框架迁移。
  8. 计算图 = 张量 + 算子的有向无环图,价值在可编译优化、支撑自动微分、便于大模型切分并行。
  9. 静态图 vs 动态图:静态图效率高、易优化易部署但难调试;动态图灵活易调试但效率低;做法是开发用动态图、部署转静态图;动静统一只统一 API 与底层,语法难统一。
  10. PyTorch 建模方法:继承 nn.Module,写 __init__ + forward。
  11. 训练闭环:前向 → 算损失 → 清梯度 → 反向 → 更新;推理前 no_grad + eval。
  12. AI 应用开发六步 + 残差的价值:需求分析 → 环境 → 数据(占比最大)→ 建网 → 训练测试 → 部署推理;ResNet 用跳连加法解决退化,瓶颈模块 1×1 卷积升降维。

Logo

更多推荐