Ultralytics 如何Ultralytics YOLO 以提升其在CPU、GPU和边缘设备上的运行速度。我们将阐述芯片、内存以及量化、融合和剪枝等智能技术。
Ultralytics 如何Ultralytics YOLO 以提升其在CPU、GPU和边缘设备上的运行速度。我们将阐述芯片、内存以及量化、融合和剪枝等智能技术。
Ultralytics构建计算机视觉模型——简而言之,就是教会计算机看世界!这些模型如同巨型数学配方,由一系列运算(我们称之为层)和海量数字(称为权重)构成。
Ultralytics YOLO 视为其本质:数字数组!每个像素本质上只是颜色值——构成图像的每个点所对应的红、绿、蓝(即RGB)色值。我们将这些数字数组称为"张量",因为这个词听起来比"多维矩阵"酷多了,而"多维矩阵"又比"数字堆叠在数字上再堆叠数字"这个说法酷多了。
当你向我们的模型输入图像时,它便开启了一场穿越神经网络的史诗之旅。想象tensor 在层层网络tensor 以最优雅的方式被变换、卷积、数学重塑。这宛如一场数字狂欢派对,数字们在此交融碰撞,提炼出猫之所以为猫、车之所以为车的本质特征。我们称之为特征提取。
另一端会输出什么?更多数字!有意义的数字。在检测任务中,它们能精确告诉你图像中物体的位置及其可能的类别。"嘿,坐标(x, y)处有95%的概率是一只狗!"我们称这个神奇的过程为推理。
现在,在我们的模型施展魔法之前,它们需要接受教育;它们需要经过训练。而训练环节正是最关键的部分。
在训练过程中,每次向网络输入图像时,我们不仅会得到一个答案。同时还会执行两项极其繁重的任务:首先,计算网络的误差程度(称为损失值,本质上是与目标值的偏差距离);其次,也是关键环节,根据该损失值更新网络中的每个数值(即权重)。 想象成同时调校数千个微型旋钮,每次微调都经过精密计算以提升网络精度。本质上我们通过纠错训练网络:每次错误都教会它"不该做什么",我们调整所有权重,使其再次遇到相似图像时能更接近正确答案。网络正是通过一次次被推向正确方向的学习,逐步提升预测准确率。
具体涉及多少参数?我们可爱的YOLO11n拥有数百万参数。但YOLO11x呢?这个家伙可是拥有超过5000万参数!参数越多意味着能编码的细节越多,就像用蜡笔涂鸦与使用完整调色盘作画的区别。
在推理过程中,参数数量变得至关重要。运行一个300万参数的网络就像绕着街区慢跑。运行一个5000万参数的网络?那更像是边举着燃烧的火炬边跑马拉松。
那么计算究竟是什么?这些数字运算究竟是如何实现的?我们如何让它更快?而"优化计算"又究竟意味着什么?
计算发生在芯片上。这些小小的硅片本质上是宇宙中最精密的沙堡。计算机执行的每项操作——每次加法、每次比较、每次"如果这样那么那样"的判断——都以实体形式镌刻在硅片上。芯片特定区域存在专用于数字加法的物理电路,另有电路负责逻辑运算。这就像一座微型城市,不同街区各自专精于不同类型的数学运算。
这听起来可能很奇怪,即使你是计算机科学家。因为过去40年间,我们不断堆砌抽象层,如同堆砌出高耸入云的技术千层饼,如今已高得看不见底层了。我们过度简化了事物,以至于当今大多数程序员根本不知道计算在硅片上究竟如何发生。这并非他们的过错,而是设计使然!
让我们逐层剖析。看这段极其Python :
x = 1
if x == 1:
y = x + 1我们定义了一个变量x,将其初始化为1,当x等于1时(剧透:确实如此),我们创建y,其值为x加1。三行代码。简单。
但有趣之处正在于此。在这三行看似简单的代码与实际穿梭于硅片中的电子之间,至少存在四层巨大的转换过程(实际更多,但我们的数字内容经理说我的字数已经让她焦虑了)。让我带你踏上这场令人头晕目眩的旅程:
第一层:Python 字节码首先 Python 你的代码并将其编译成一种称为字节码的中间语言。这种语言更易于计算机处理,但若你试图阅读它,恐怕会看得眼花缭乱。
第二层:字节码 → 机器 Python (如CPython)会将字节码转换为机器码——即处理器能识别的实际指令。此时优雅的"if x == 1"语句会被编译为类似"加载寄存器、比较寄存器、若零标志位设置则跳转"的指令序列。
第三层:机器码 → 微代码剧情反转!现代处理器甚至不会直接执行机器码。它们会将其进一步分解为微代码——芯片内部组件能够处理的更微小的操作。你单一的"ADD"指令可能变成多个微操作。
第4层:微代码 → 物理电子元件最终,我们抵达了硅片层面。这些微操作触发了实际的电信号,它们在晶体管中流动。数十亿个微型开关不断切换,电子在精心设计的通路中穿梭舞动,于是神奇地,1+1就变成了2。
每一层的存在,都是为了掩盖其下层疯狂的复杂性。这就像俄罗斯套娃,只不过每个娃娃说着完全不同的语言,而最小的娃娃,字面意义上是由困在沙中的闪电构成的。
讽刺之处在于?这三行Python 数百万个晶体管开关。但正因这些抽象层,你无需思考这些细节。你只需写下"y = x + 1",便能相信在硅片深处,魔法正在发生。
每项运算都在硅片上物理实现,而它们在芯片上的具体位置完全取决于芯片的拓扑结构。这就像城市规划,只不过对象是电子。加法器驻扎在此,乘法器驻扎在彼,它们都需要高效地相互通信。
市面上已有数百种不同芯片,每种都针对特定用途设计。它们之间的差异何在?关键在于拓扑结构——即操作在物理域中的布局与实现方式。这便是我们所说的架构,而天哪,我们拥有如此之多的架构:
每种架构不仅以不同的方式排列其晶体管,还使用不同的语言。我们用来向这些机器发送指令的抽象概念完全不同。这就像为某人撰写旅行路线指引,但根据对方驾驶的汽车类型,你可能需要用法语、普通话或即兴舞蹈来表达。
芯片的燃料是电子——流入芯片的电流为计算提供能量。但仅有能量还远远不够。要使芯片真正运转,让数据在其复杂拓扑结构中流动,一切都依赖于一个关键组件:时钟。正是它让电子在特定时刻沿特定路径流动。若没有时钟,你拥有的不过是闲置的带电硅片。
试想协调一场浩大的演出,数十亿个部件必须完美同步移动。若失去节拍,便会陷入混乱。时钟对处理器的作用正是如此。它是一块以惊人稳定频率振动的晶体,每秒向外发送数十亿次电脉冲。
当你听到"3.5 GHz处理器"时,这个GHz(吉赫兹)指的是时钟频率,即每秒35亿次脉冲。每次脉冲被称为一个时钟周期,这是计算领域最基本的时间单位。
时钟周期之间没有任何事情发生。整个计算机冻结,等待下一个脉冲。这就像宇宙中最极端的红灯绿灯游戏。在每次"绿灯"(时钟脉冲)时:
某些操作只需一个时钟周期(如简单的加法运算),而另一些则需要多个周期(如除法运算或从RAM中读取数据)。数十亿个组件精确协调地执行各自的特定操作,所有动作都与这永不停歇的节拍保持同步。
你可以通过加快晶体振动频率来超频处理器;所有操作都会加速,但同时也会产生更多热量,导致系统稳定性下降。若超频过度,电子将无法跟上节奏,最终导致计算机崩溃。
在过去,这些操作需要依靠房间大小的机器来实现。但完成所有计算的组件却极其简单:它们只是开关——开或关的开关。
将足够多的开关按正确模式连接起来,便形成了计算能力。整个数字革命归根结底就是一种精密的开关排列。
这种简单性意味着只要你有开关——任何开关——就能造出一台计算机。人们曾用水管和阀门、多米诺骨牌、乐高积木、弹珠,甚至用《我的世界》里的红石,成功搭建出能正常运行的计算机。
这些原理自1940年代以来从未改变。我们只是在制造微型开关方面取得了惊人进步。如今你的手机计算能力已超越当年所有登月计算机的总和,却能轻松装进口袋——这全因我们掌握了原子级开关的制造技术。
当我们运行拥有数百万参数的神经网络时,每秒都在数十亿次地翻动这些微小开关,所有动作都与晶体时钟的节拍完美同步。每次权重更新、每次矩阵乘法、每次激活函数,都随着时钟的节拍整齐划一地进行。
难怪训练模型会让你的电脑听起来像是在努力实现升空!
好吧,我们手头有这些芯片,上面数十亿个开关正随着晶体振荡器跳动,而我们要在这上面运行拥有数百万参数的神经网络。这应该很简单吧?直接把数据扔给芯片,让它开足马力运算就行!
快速运行神经网络就像在厨房里烹饪五道菜的盛宴——冰箱却在三条街外,你只有一个平底锅,而每样食材都重达500磅。数学计算本身并非最大难题,真正棘手的是其他所有环节。
大多数芯片的设计初衷是运行Microsoft ,而非神经网络。你的CPU 注定要终生执行if语句、循环结构,偶尔还要计算你的税款(这项计算连超级计算机都觉得令人心力交瘁)。它专为顺序操作而优化:先做这个,再做那个,接着处理其他任务。
但神经网络则截然不同。它们追求的是同时处理所有任务。在训练阶段,你需要根据预测误差实时更新数百万个权重参数;而在推理阶段(即实际应用训练模型时),数据会同时流经数百万个计算节点。试想需要将百万个数字与另一百万个数字CPU(尽管它很努力)只会逐个处理,就像一位速度极快却极其循规蹈矩的会计师。
这就是为什么GPU成为人工智能计算的支柱。GPU最初是为电子游戏设计的,这类场景需要同时计算数百万像素的颜色。结果发现,计算像素颜色和执行神经网络运算竟惊人地相似:两者都涉及对海量数据进行并行操作。
但即使是GPU也并非神经网络的完美选择。正因如此,企业正着手研发专用AI芯片(TPU、NPU以及所有以PU结尾的缩写芯片)。这些芯片从设计之初就只专注于一个目标:加速神经网络运行。 它们就像雇佣了一位只会烹饪一道菜的厨师,但这道菜他们能以超乎寻常的速度完成。CPU 逐行CPU 矩阵运算CPU ,GPU 并行GPU 相当不错,但这些专用芯片却能将矩阵运算当作早餐、午餐和晚餐来消化。
在现代神经网络计算中,我们花费更多时间和精力来移动数据,而非实际进行计算。
想象你的计算机芯片就像一位才华横溢的数学家,以闪电般的速度工作,但所有参考书都散落在城里不同的大楼里。他们能瞬间解开任何方程,但首先需要获取数据,而这段旅程却漫长得令人窒息。
你的芯片能在一个时钟周期内完成两个数的乘法运算(记住,这可是每秒数十亿次脉冲中的一个)。快如闪电!但要把这些数字从存储器传送到芯片呢?这可能需要数百个时钟周期。就像数学家能在一秒内解出问题,却需要五分钟往返图书馆。
原因在于距离(以及空间)。电信号传播速度虽快,却非无限快。数据在芯片上传输的距离越远,所需时间就越长。计算机设计师通过创建分层存储体系解决了这个问题,就像在不同距离处设置多个存储位置:
具体结构各不相同,手机芯片可能省略三级缓存,而服务器CPU 配备海量三级缓存。但原理始终如一:距离内存越近速度越快,但容量越小。
现在神经网络就面临痛苦时刻了。想象一下Ultralytics YOLO 拥有5000万个参数(顺便说ChatGPT 数十亿参数)。这意味着5000万个数字需要在内存和计算单元之间来回传输。即使每个数字仅占4字节,系统仍需移动200兆字节的数据。
芯片或许能在单个时钟周期内处理每个数字,但若从RAM中读取该数字需要100个时钟周期,那么你99%的时间都在等待数据传输。这就像让一辆一级方程式赛车陷入交通拥堵——强大的计算能力被闲置着,只能坐等数据送达。
关键洞见在于:这正是现代计算领域的根本瓶颈,即冯·诺伊曼瓶颈。提升芯片运算速度相对容易,但加速内存运行已触及物理极限。因此人工智能领域几乎所有性能优化都集中在内存层面。工程师加速神经网络时,鲜少通过提升运算速度实现,而是通过减少数据移动、优化缓存策略或改进访问方式等巧妙手段达成。
现代人工智能芯片不仅专注于计算速度,更痴迷于内存带宽和数据移动策略。它们预取数据、复用缓存中的值,并优化计算流程以减少内存访问次数。人工智能硬件竞赛的赢家并非拥有最快计算器的厂商,而是那些掌握了如何持续为计算器输送数据的厂商。整个竞争的核心在于优化内存访问模式。
每次移动数据都会消耗能量。虽然每次消耗量很小——我们说的是皮焦耳级别——但当数据传输速率达到每秒数千兆字节时,能量消耗就会迅速累积。事实上,在芯片上移动数据1毫米所消耗的能量,甚至比实际计算过程消耗的能量还要多!
这就是为什么训练神经网络时,你的笔记本电脑会发出喷气式引擎般的轰鸣声。发热的元凶并非数学运算,而是数据传输。每次参数更新、每次梯度计算、每次前向传播,都在实实在在地让你的房间升温。
现代人工智能加速器本质上是热力学的实践。在芯片熔化前,我们能塞入多少计算量?散热速度能达到多快?这就像超频操作,但时钟永远调到11档,我们只是竭力避免引发火灾。
最快的神经网络未必是最聪明的,它们是专为芯片设计而生的。它们:
这就像食谱的区别:一种写着"用本地超市的食材",另一种却要求你从西藏进口香料、从法国运奶酪、从南极取水。两者或许都美味,但显然前者更实用。
正因如此,让神经网络高效运行堪称一门艺术。仅有精湛的数学功底远远不够——你必须洞悉硬件特性,遵循内存层次结构,并与架构完美共舞。
欢迎来到这个世界——计算机科学与物理学在此交汇,工程学在此融合,纯粹的魔法在此绽放。在这里,移动一个数字的代价远高于用它进行计算。并行运行速度飞快,但同步却意味着死亡。你最大的敌人并非复杂性,而是距离。
当你训练YOLO ,你得到的神经网络在训练环境中表现得非常出色。但问题在于:你的GPU、iPhone和安防摄像头里那颗微型芯片,它们使用的语言完全不同。它们各有优势,各有弱点,对数据处理方式的理解也大相径庭。
不妨这样理解:GPU 数千个可同时运行的核心——它天生就是为并行处理而生的。而移动芯片虽可能配备专为AI运算设计的特殊电路,却只能处理特定类型的数学运算。至于你家门铃摄像头里的边缘设备?它正试图在比LED灯泡还小的功耗预算下运行AI。
Ultralytics支持十余种不同的导出格式,因为每种格式都针对不同硬件进行了优化。这并非提供过多选择,而是为满足您的特定需求提供最合适的选项。
在原始YOLO ,许多操作是顺序执行的。例如,我们可能先进行卷积运算,然后对结果进行归一化,最后应用激活函数。这三个独立步骤各自都需要进行内存读写操作。
但关键在于:我们可以将这些操作合并为单一步骤。在将YOLO 导出YOLO ,我们会将这些操作融合在一起。具体来说:
我们提供:
对于处理640×640图像的典型YOLO 这个简单技巧能消除数千兆字节的冗余内存传输。在手机端,这意味着流畅的实时检测与令人沮丧的卡顿之间的天壤之别。
YOLO 其实YOLO 需要超级精确的数字来准确detect 。在训练过程中,我们用32位来表示每个权重——这就像用科学计算器来测量三明治的配料。实际部署时?8位完全够用。
这被称为量化,是我们最强大的优化技术之一。通过使用更小的数值:
YOLO 不同层对精度降低YOLO 。早期用于detect 边缘和形状的层?它们相当稳健——使用8位数值完全没问题。而最终判断"这是猫还是狗"的检测层则需要更高精度。因此我们逐层调整精度,仅使用维持准确性所需的最低位数,同时最大限度提升速度。
我们发现,通过精确量化处理Ultralytics YOLO 在手机端运行时速度提升三倍,同时YOLO 99.5%的原始准确率。这正是研究模型与实际应用模型的本质区别——后者能真正落地使用。
执行相同的数学运算存在数十种不同方法。一个简单的卷积(YOLO的核心运算)可通过完全不同的算法实现,最佳选择取决于具体硬件配置和输入尺寸。
当我们导出YOLO,优化框架会实际测试多种算法,并为您的具体场景选择最快的方案。这如同拥有通往同一目的地的多条路线,根据实时路况动态选择最佳路径。GPU,我们可能采用能同时处理大量像素的算法;而在CPU,则可能选用针对顺序处理优化的算法。虽然底层数学原理相同,但执行策略却截然不同。
还记得我们说过内存才是现代计算的真正瓶颈吗?YOLO而言尤其如此。该模型可能拥有五千万个参数,而在推理过程中会生成数千兆字节的中间结果。传输这些数据的速度往往比实际计算还要慢。
我们采用多种技巧来最大限度地减少内存移动:
智能调度:我们通过优化操作调度,确保数据在高速缓存内存中时即可被立即使用。YOLO特征金字塔网络,此举可减少40%的内存流量。
分块处理:我们不再一次性处理整张图像,而是将其分割成适合缓存的小块。这意味着处理器可以利用快速的本地内存进行操作,而非不断从低速的主内存中读取数据。
缓冲区复用:我们不再为中间结果不断创建新内存,而是复用相同的内存缓冲区。这种方式极其高效YOLO整个骨干网络仅凭若干可复用的缓冲区即可运行。
一个令人惊讶的事实是:YOLO 往往过度设计。在许多层中,我们可移除30%的通道,几乎不会影响准确率。这不仅能缩小模型规模——更能提升运行速度,因为实际需要执行的计算量确实减少了。
该过程极为优雅:我们分析网络中对最终检测结果贡献最小的部分,将其移除,然后通过微调模型来弥补损失。经过修剪的YOLO11m模型在保持99%原始准确率的同时,运行速度可提升30%。在电池供电设备上,这种效率提升意味着可额外获得数小时的运行时间。
不同处理器擅长不同领域,其性能差异令人瞠目。同款YOLO11n模型在:
这些差异不仅源于时钟频率的快慢——它们反映了根本性的架构差异。GPU拥有数千个并行工作的核心,完美契合YOLO卷积运算YOLO。移动NPU则配备了专为神经网络设计的专用电路。而CPU如同万能工具,虽灵活多变却缺乏专业特化。
优化的关键在于YOLO运算与每种芯片的优势特性相匹配。GPU 同时对大量数据执行相同操作;移动NPU虽仅支持特定运算,但执行效率极高;而边缘TPU 处理8位整数,却能在该限制下实现惊人的运算速度。
当您导出YOLO 时,幕后会发生惊人的变化。我们不仅转换文件格式——实际上还会针对您的目标硬件对模型进行专门编译。这就像Google 和母语人士之间的区别。编译过程如下:
编译器可能会重新组织操作以更有效地利用处理器的缓存,选择芯片支持的专用指令,甚至运用机器学习来寻找最佳优化策略。没错,我们正在用人工智能优化人工智能——未来已至!
此编译步骤可使性能提升十倍。相同的YOLO 在通用代码中可能运行缓慢,但在经过适当优化的指令下却能飞速运行。
让我们来谈谈YOLO 现实世界——特别是充满挑战的边缘设备领域——会发生什么。想象一台需要YOLO 运行YOLO 进行目标检测的安防摄像头,它面临着严苛的限制:
以下是优化在实际应用中的效果。一台运行YOLO11s算法的安防摄像头:
我们成功将功耗降低80%,同时性能反而得到提升!这正是过热耗电设备与经年可靠运行的设备之间的本质区别。
关键在于选择正确的权衡方案。在边缘设备上,我们通常会:
Ultralytics我们遵循系统化的优化方法。首先,我们对模型进行性能分析,以了解实际耗时环节。瓶颈往往出现在意想不到之处——或许80%的时间都耗费在少数几层上,又或是内存传输占据了绝大多数计算时间。
接下来,我们迭代地应用优化:
例如,在手机上部署YOLO11m时:
每一步都提升性能,同时保持超过99%的原始精度。结果如何?在可装进口袋的设备上实现实时物体检测。
现代设备在协同使用多个处理器方面越来越智能。你的手机不仅有一个处理器——它拥有多个处理器,每个处理器都专司不同的任务:
YOLO 未来在于智能地将模型分配到这些处理器上。或许NPU负责主要卷积运算,CPU 最终检测逻辑,而GPU 结果GPU 。每个处理器各司其职,形成比单一处理器更高效的流水线。
我们正在开发智能分区算法,该算法能自动确定YOLO 可用YOLO 进行拆分的最佳方案,不仅考虑处理器性能,还兼顾数据在处理器间传输的成本。
YOLO 不仅是转换文件格式,更是将尖端人工智能转化为真正适用于现实世界的解决方案。通过量化(使用更小的数值)、剪枝(去除冗余部分)、操作融合(合并步骤)和智能内存管理等技术,我们在保持准确性的同时实现了10到100倍的性能提升。
最值得注意的是?根本不存在通用的"最佳"优化方案。拥有无限算力的云服务器与电池驱动的无人机需要不同的优化策略;搭载专用AI芯片的手机与树莓派的处理方式也截然不同。正因Ultralytics 如此丰富的导出选项——每种方案都针对不同场景进行了优化。
我们讨论过的每项优化都服务于一个目标:让计算机视觉无处不在。无论您是在开发智能门铃、无人机应用,还是构建大型云服务,我们都提供工具,让YOLO 能在您的限制条件下YOLO 。
当您Ultralytics导出YOLO ,您不仅是在保存一个文件。您正在运用多年研究成果,将神经网络转化为实用工具。您将尖端的人工智能模型转化为能在真实硬件上运行、应对实际限制、解决实际问题的解决方案。
Ultralytics的使命。我们架起人工智能研究与实际部署之间的桥梁。我们让计算机视觉无处不在,因为人工智能的未来不仅在于拥有最优秀的模型——更在于让这些模型在现实世界中发挥价值。

