一个人的产线 书架

第 11 章 / 共 15 章

第十一章 · 从我的电脑到产线上的盒子

你的笔记本,和现场那台盒子,是两个世界

前面几章,你在自己电脑上把算法练出来了、把程序跑通了。屏幕上,摄像头拍一张零件,框一闪,"有裂纹 / 没裂纹"跳出来,200 毫秒一张,漂亮。你心里踏实了:成了。

没成。你只是在自己家的厨房里,做了一道好菜。现在要把这道菜,端到工厂车间那个连煤气灶都没有的角落,让它自己做,一天做八千盘,连做三个月不歇火。

这一章讲的就是这段路——从你的电脑现场那台盒子。这段路,是很多小白项目真正死掉的地方。不是死在算法不准,是死在"本地 demo 惊艳,一到现场就跑不动、或者跑几天就趴窝"。我见过太多人,第六章的实时性演示做得飞起,兴冲冲去现场装机,当场傻眼。

记住一句话:能在你笔记本上跑,跟能在现场跑,是两件完全不同的事。前者是做出来了,后者才是交付了。

为什么非得在设备旁边算

你可能会想:我笔记本跑得动,那我不搬了,把现场拍的图传回来、在我这台好电脑(或者云上一台更好的电脑)算完再把结果传回去,不行吗?

大多数工业场景,不行。这里先分清两个词。

云端,就是把计算放到远处一个巨大的机房里去算——你手机上的很多东西都是这么干的,拍张照发上去,那边处理完给你传回来。边缘计算(也叫边缘设备)反过来:不往远处传,就在设备旁边摆一台小盒子,现场就地算完,就地出结果。"边缘"的意思是,它在整张网络的最外圈、最靠近现场的地方,而不是在中心机房。

工业为什么偏要选边缘?四个很实在的原因,都不是玄学:

一句话总结:工业现场要的是快、是稳、是省、是保密,这四条都逼着你把计算搬到设备旁边那台盒子上,而不是甩给远方的云。

现场那台盒子,比你笔记本弱得多

现在来看这台盒子长什么样。它通常叫工控机(工业控制计算机)或者嵌入式设备——说白了就是一台为"皮实耐用、能在车间油污高温里连轴转"而生的电脑。皮实是它的优点,但性能,往往是它的短板。跟你那台买来跑算法的笔记本比,它可能:

所以真正的坑来了:你训练时用的那个又大又猛的模型,搬到这台小盒子上,很可能跑不动,或者慢到没法用。你 demo 里 200 毫秒一张,到了盒子上可能变成 3 秒一张。产线一分钟过一百个零件,你 3 秒才看一个——这不叫慢,这叫瘫。

让模型变小变快,但尽量别变笨

怎么办?把模型"瘦身"。这件事有个正经名字叫模型压缩——想办法让模型体积更小、算得更快,同时尽量不让它变笨(判断得不准)。这里"尽量"两个字很关键:压缩多少都会掉一点点精度,手艺就体现在"少掉精度、多提速度"上。

压缩有很多招,你不用会做,但要听懂两个最常见的直觉,将来跟人聊、跟 AI 提需求,能对上话:

量化:把数字算得粗一点

量化,说白了就是把模型里那一大堆高精度的数字,换成低精度的、更"粗"的数字。

打个比方:你记账,本来每笔都记到小数点后八位,¥3.14159265。可你买菜,记成 ¥3.14 就够用了,甚至 ¥3 也行。位数少了,写起来快、占地方小、算起来省力,而账大差不差还是那个账。模型里成千上万个数字都这么"四舍五入"一下,整个模型立马又小又快,代价是判断精度会掉那么一丁点——通常掉得很少,值。

剪枝:把没用的枝条剪掉

剪枝,就是把模型里那些"没什么用"的连接给剪断、扔掉。

模型内部是密密麻麻的连接,就像一棵长疯了的树。仔细看,很多枝条其实不结果、白占养分。园丁修剪,把这些废枝剪掉,树反而更精神、更省力,结的果子几乎不少。剪枝就是给模型做这个修剪,剪完模型更瘦、跑得更快。

量化 = 数字算粗点;剪枝 = 废连接剪掉。目的都一样:更小、更快,尽量不变笨。细节不用懂,AI 会帮你做,你知道它俩是"瘦身"的两种手法就够了。

"推理"这件事,值得单独优化

这里要分清模型的两个人生阶段。训练是模型上学的阶段——你喂它成千上万张标好的图,它慢慢学会认裂纹,这一步又慢又费,但只做一次。推理是模型毕业上班的阶段——现场来一张新图,它给一个判断(有裂纹/没有),这一步天天做、每张零件都要做。

你的盒子上,只干推理这一件事,不干训练。所以我们要优化的、要它跑得飞快的,是推理。训练慢点无所谓,推理慢一点,产线就堵。

为了让推理在某台特定硬件上跑到最快,业界有专门的东西,通常叫推理引擎(或部署运行时)。它是干嘛的?打个比方:同一份菜谱,交给不同的厨房,得按那个厨房的灶具、锅具重新排一遍工序才最顺手。推理引擎就是这么个"翻译官"——把你的模型,翻译成"这台特定盒子跑得最快的形式"。名字你不用记,知道有这么个东西、它专治"在这台硬件上榨出最高速度"就行。

万恶之源:环境不一致

就算模型瘦了、也优化了,还有一个更隐蔽、更能气死人的坑:环境不一致

你的程序能在你电脑上跑,不只是因为你写了它。是因为你电脑上,日积月累装了一大堆"配套的东西"——各种库、各种依赖、各种设置。你自己都未必记得装过哪些。而现场那台盒子,是张白纸,什么都没有。你把程序拷过去一运行,它当场报错:缺这个、缺那个、这个版本还对不上。

这就像你在自家厨房做菜行云流水,因为你的油盐酱醋、趁手的锅、开好的火,全在。换个空厨房,你啥也做不出来——不是你不会做,是家伙什儿没跟过去。

治这个病的思路,叫容器(也叫打包)。核心想法特别朴素:把程序,连同它需要的一切东西,整个打包在一起,搬到哪儿都能原样开火。

还是厨房的比方:与其祈祷新厨房里凑巧啥都有,不如把整间厨房——连锅带料、油盐酱醋、开着的火——整个装进一个集装箱,运到哪儿,打开就是你熟悉的那间厨房,一点不差。容器就是这么个"整箱搬运"。这样,你电脑上能跑,盒子上就能跑,因为跑的根本是同一套环境。但记住一条边界:容器抹平的是「缺了哪个库、版本对不上」这类环境差异,它抹不平芯片架构那道坎——x86 打的包塞不进 ARM 盒子。所以你得给盒子那种架构专门打一个包(幸好这也是让 AI 帮你做的活)。细节不展开,你只要记住这个"连锅带料整箱搬、但得按盒子的插座打包"的思路。

这段路上,AI 帮得了什么,帮不了什么

老规矩,划清 AI 的能与不能。

AI 能帮你:

AI 帮不了你:

换句话说:脏活累活 AI 干,去现场"量尺寸"这件事,得你自己去。你把盒子的真实家底摸清楚喂给它,它才能帮你把模型剪裁到刚好合身。你不去量,它就是瞎猜。

本地跑通,只是拿到了入场券。真正的比赛,是让它在那台又弱又倔、还得连转三个月的小盒子上,稳稳当当地干活。下一章,我们就来说说怎么让它"跑住"——不是跑起来,是跑住。
一个人的产线
面向对世界有好奇心的人 · 费曼式写法 · 由多个 AI 代理撰写与互相审校