最近几个月,我被同一个问题问了很多次:“我那台中配AI集群,本来想跑本地LLM,结果折腾了几天,发现连个7B模型微调都费劲,显卡是不是白买了?”问的人多了,我开始意识到,这不是个例。很多人对中配AI集群的期望值,还停留在大模型热潮刚开始时那个“买了GPU就能训练大模型”的阶段。但实际用过之后才发现,中配集群在纯大模型训练这件事上,天花板确实很低。于是“AI集群终结论”开始出现。我的看法恰恰相反:AI集群的终结是个伪命题,它只是从“本地LLM训练”这个执念里走了出来,换到了视频转码这类更务实的重算力任务上。中配集群不仅没死,还找到了新工作。
1. 先给中配AI集群重新定位:它不是跑不动LLM,而是本来就不该用它训练大模型
1.1 什么是“中配AI集群”
我所说的中配AI集群,不是那种几百张卡互联的机房级集群,而是常见的4到8张中高端GPU,放在机架或塔式服务器里,通过PCIe互相通信。显存总量通常在40GB到100GB之间。它可能是公司采购来做内部AI项目,也可能是几个朋友合伙买的算力资源,甚至是从旧矿机改造过来的。这类集群的特点是:单张GPU性能不错,但多卡之间的通信带宽有限,规模又不足以支撑真正的大模型训练。
这里要先放一个判断:中配集群和“大模型预训练”之间,天生就不匹配。很多人看到几块GPU插在一起,就下意识觉得“可以训练大模型了”。但实际上,从头训练一个几十B参数的模型,需要的不只是显卡数量,还有高速互联、稳定分布式调度、海量数据存储和容错机制。中配集群在这些方面都达不到理想状态。它就像一个能跑得很快的短跑运动员,非让他去跑马拉松,结果自然不会好看。
1.2 大模型热潮留下的认知错位
过去两年,最典型的采购理由是“本地化部署大模型”。大家想象中,只要把几张高端显卡插上去,就能和云端A100集群一样微调GPT。实际跑过才知道,预训练一个7B模型需要几十GB显存之外,还有海量通信需求,PCIe版本不同、没有NVLink、交换带宽不够,都会让训练效率掉得离谱。于是很多集群在尝试一次大模型微调后就闲置了,资源利用率极低。
这里要澄清一个事实:中配集群跑本地LLM的推理是可行的,跑LoRA这类小规模微调也是可以试的,但它天生不适合大模型预训练或全量微调。把它定义为“AI集群”其实抬高了期望,它更像一个“通用GPU计算节点”。一旦你能接受这个身份,眼前的很多问题反而迎刃而解。
1.3 核心判断:中配集群的出路是“中间型任务”
中间型任务可以这样理解:一个任务不能太依赖大显存,否则显存会成为瓶颈;也不能太依赖节点间通信,否则网络会拖慢;最好是可以拆成多个独立小任务并行处理,或者能利用显卡上的专用硬件单元。视频转码、批量渲染、数据预处理、音频识别、LLM推理服务,都符合这些特征。把这些任务跑满,中配集群的价值要比硬着头皮做大模型训练高得多。
所以,在讨论“AI集群终结”之前,不如先重新审视你手里的硬件到底适合做什么。很多情况下,不是硬件不行,而是任务选错了。
2. 本地LLM到底吃了什么资源:先看显存和带宽,再看并发
2.1 本地LLM推理的基本消耗模型
很多人以为跑LLM只看显卡算力,实际上推理过程中更紧张的是显存和显存带宽。一次推理需要把模型权重、KV cache、激活值全部放进显存,模型本身就有几GB,KV cache随着输入长度增长,激活值也会波动。以一个13B量化模型为例,int4量化后权重大约7GB,int8约13GB,如果输入长度拉到2048或4096,KV cache还会再占几GB。所以24GB单卡能跑,但并发一高就容易OOM。
中配集群跑本地LLM推理时,可以把它当作一个纯推理服务,比如团队内部的文档助手、代码补全、私有知识库问答。这类场景对延迟要求不高,对并发要求也有限,显存够用。但要注意,多卡推理时张量并行需要很频繁地同步梯度或KV cache,PCIe带宽不够会让延迟成倍增加,所以不要盲目以为卡越多越好。
2.2 本地LLM微调其实更吃显存
再看微调。即使使用LoRA或QLoRA,可训练参数减少,但激活值、优化器状态、梯度依然占据大量显存。把一个13B模型做QLoRA微调,实测中通常需要超过16GB,甚至更高。中配集群如果要跑多个微调任务,很快就会被显存限制住。很多人第一轮尝试就是在这里失败的。
所以,把中配集群定位成“本地LLM训练平台”本身就是一场误会。它在LLM方向最好的角色,是部署和推理服务,而不是训练工厂。从工程经验看,只有把训练、微调和推理分开考虑,硬件利用率才能真正上去。
2.3 本地LLM只是中配集群的“任务之一”
这意味着,如果你已经把中配集群配好了CUDA环境,并且跑过一段时间LLM推理,那么这套环境完全可以复用到视频转码上。因为你已经有了驱动、CUDA和GPU资源,缺少的只是媒体工具链。这也引出了后面的实操路径。
所以,不用急着给中配集群判死刑。它只是需要一个更清醒的任务规划。你完全可以白天让它跑本地LLM服务,晚上让它批量转码。
3. 视频转码为什么会成为中配集群的新工作
3.1 视频转码是典型的“重并行、轻通信”任务
视频转码看起来和AI无关,但它对算力的需求模式和LLM训练非常互补。转码过程中,解码、滤镜、编码都可以分配到多个GPU上并行处理。每个视频片段之间几乎不需要通信,只需最后合并文件或直接生成独立切片。这种负载模式对PCIe带宽和NVLink没有要求,反而非常适合中配集群多卡并行的结构。
更关键的是,现代GPU普遍集成了专用视频编码器和解码器。比如NVIDIA的NVENC/NVDEC。做视频转码时,编码任务会跑在专用硬件单元上,不会挤占CUDA核心。这意味着同一块GPU还能再跑一些小的推理任务,资源利用率被大幅提升。
3.2 与LLM工作负载的错峰属性
从运维角度看,视频转码和LLM推理天然适合错峰。通常LLM推理服务集中在白天业务时段,而视频转码是批处理任务,可以放在夜间或空闲时段。中配集群的调度可以从“常驻AI服务”变成“时段型混合负载”。只要把任务队列设计好,资源浪费率会明显下降。
比如一个视频平台需要用AI做封面识别,白天用GPU跑推理,晚上用同一批GPU转码生成多码率版本。这样本来只做AI的集群,等于多了一份工作,硬件成本被摊薄了。以前你需要单独买转码服务器,现在可以用存量资源解决一部分。
3.3 为什么很多人没想过用它转码
原因其实是技术栈惯性。AI集群里预装的是Python、CUDA、PyTorch,很少有人第一时间想到FFmpeg。很多运维人员一看到转码,下意识会想到CPU转码或者专门的硬件盒子,忽略了手里的GPU本身就有强大的转码能力。只要把FFmpeg配好了,中配集群可以同时处理多个视频流,这比单纯用CPU跑要快一个数量级。这里不是要说所有转码都必须用GPU,而是在已有中配集群的情况下,这是一个成本很低的存量价值释放。
4. 从本地LLM切到视频转码:一条最小可落地路径
4.1 准备:盘点硬件和驱动
第一步,先盘一下手头资源。登录服务器后,运行nvidia-smi,确认GPU型号、显存、驱动版本和CUDA版本。注意,FFmpeg的NVENC支持取决于显卡型号和驱动版本,较老的卡可能不支持HEVC编码,需要先确认。
接着查看FFmpeg是否已经支持硬件加速。运行ffmpeg -version,看编译参数里有没有--enable-cuda或--enable-nvenc。如果没有,需要安装带NVENC支持的版本。在常见Linux发行版上,可以通过包管理安装,也可以从官方二进制或第三方仓库获取。建议先在一个节点或单卡上验证,再推广到整个集群。
4.2 单任务验证:把一条视频转成H.265
准备好一条测试视频,比如用FFmpeg生成或找一段现有视频。执行一条最简单的硬件转码命令,把H.264视频转成H.265:
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -c:v hevc_nvenc -preset p5 -cq 28 -c:a copy output.mp4这里-hwaccel cuda表示启用CUDA硬件解码,-hwaccel_output_format cuda让解码后的数据保留在GPU显存里,避免CPU与GPU之间反复拷贝。-c:v hevc_nvenc指定使用NVIDIA硬件编码器,-preset p5是质量和速度的折中,-cq 28是质量级别。可以先跑通这一条,观察GPU视频编码器占用率和输出文件是否正常。
注意:如果显卡不支持HEVC编码,可以换成h264_nvenc。不同显卡对preset和cq的支持程度不一样,遇到报错时先简化参数,只保留-c:v h264_nvenc再试。单任务跑通后,再开始设计批量任务。
4.3 批量并行:多GPU同步转码
单条跑通后,再设计批量处理。最简单的做法是写一个Python脚本,用多进程并行调用FFmpeg命令。这里给一个简化结构:
import subprocess from concurrent.futures import ProcessPoolExecutor COMMANDS = [ ["ffmpeg", "-hwaccel", "cuda", "-i", "input1.mp4", "-c:v", "hevc_nvenc", "out1.mp4"], ["ffmpeg", "-hwaccel", "cuda", "-i", "input2.mp4", "-c:v", "hevc_nvenc", "out2.mp4"], # 按需生成命令列表 ] def run(cmd): return subprocess.run(cmd, capture_output=True, text=True) with ProcessPoolExecutor(max_workers=4) as executor: results = list(executor.map(run, COMMANDS))这里的max_workers要参考GPU的编码器数量、显存大小和输入视频复杂度,而不是拍大腿定。一开始可以设成GPU总数的一半,跑完一批再提高。串行验证必须先做,否则并发调错时连日志都分不清是哪路任务出了问题。
输出文件的命名建议加上时间戳或UUID,防止并行时互相覆盖。最好把原始文件、转码文件、日志文件放到不同目录,避免I/O瓶颈。如果转码过程中出现了显存不足,不要盲目降低并发,先确认是不是输入视频分辨率太大或者码率太高。
4.4 从脚本到任务队列
如果视频量很大,每天固定要转几百个文件,脚本就不够用了。这时候可以引入简单的任务队列。常见做法是维护一个Redis队列,写个worker循环取任务,执行FFmpeg命令并记录结果。如果团队已有Celery、RocketMQ或Kafka,也可以直接复用。核心不在于用哪个队列,而在于把任务、状态、日志分离,确保失败任务可以重试。
但如果只是临时处理一批素材,用脚本加计划任务完全够用。不要一开始就引入重型调度系统,转码任务本身是最容易标准化的,先跑通、再优化、最后工程化。
注意:不要一上来就把并发数和任务队列拉满,先用一条样例确认输入、输出和日志都正常,再逐步扩大规模。
5. 转码落地的坑:最常见问题不是显卡,是流程和参数
5.1 典型故障现象
我见过太多人第一次跑NVENC转码就卡住。常见现象包括:FFmpeg报错未知编码器;GPU利用率很低,转码速度还不如CPU;转出的视频花屏、黑帧;多个GPU并发时突然OOM;任务跑一半没日志就退出。
这些现象看起来像是硬件问题,但大部分时候是软件或参数问题。比如FFmpeg版本太老不带NVENC,驱动版本和CUDA工具链不匹配,或者并发线程太多把PCIe带宽堵死了。不能说显卡不行,应该先检查环境。
5.2 一套可执行的排查链路
遇到转码失败时,不要急着改参数。按照下面这个顺序排查,基本能覆盖90%的问题:
- 先看日志。FFmpeg的错误输出里通常有明确提示,是编码器不允许、设备失败还是显存不足。
- 查设备能力。运行
ffmpeg -encoders | grep 264,看是否有h264_nvenc或hevc_nvenc;运行nvidia-smi查看GPU是否正常。 - 验驱动和工具链。驱动版本过老会导致硬件编码器无法调用;FFmpeg编译时是否启用了cuda/nvenc。
- 验输入文件。用
ffprobe查看原始视频的编码、分辨率、帧率、时长,排除源文件损坏。 - 简化参数。将preset、cq、b:v、maxrate等高级参数全部去掉,只保留
-c:v hevc_nvenc,跑通后再逐个加回。 - 监控资源。用
nvidia-smi -l 1或nvidia-smi dmon观察GPU利用率、显存占用量和编码器占用,确认任务是否真的分配到了GPU。
这一步一步来,通常不需要看底层代码就能定位问题。
5.3 容易踩的几个细节
- 不要把并发数等同于GPU数量。有些显卡上有多个编码器,有些只有一个,要用
nvidia-smi -q -d encoding或FFmpeg的提示信息确认。 - 输出目录最好按日期分片,文件名加上任务ID,避免并发冲突。
- 不要一直在GPU和CPU之间拷贝数据。硬件解码后尽量保留在显存中,用
-hwaccel_output_format cuda,减少不必要的来回。 - GPU转码不是所有场景都比CPU强。如果视频分辨率很低、源文件已经是目标编码,或者画质要求极高且码率受限,CPU软件编码可能更合适。这一步不能无脑依赖。
这些细节都会直接决定你是在“用GPU转码”还是“假装用GPU转码”。很多团队把FFmpeg命令从CPU换成GPU后速度没有提升,原因通常就是参数里没有真正调用硬件编解码器,或者每次都把数据从显存拷回内存再拷进显存,损耗全浪费在拷贝上了。
6. 长期价值:把中配AI集群当作“通用算力枢纽”来运营
6.1 从“AI集群”变成“算力池”
中配集群在本地LLM训练上可能不如人意,但这不代表它没有价值。换个角度看,它本身就是一堆高性能GPU,可以支撑多种计算任务。视频转码只是其中一个容易被理解的场景。同样的硬件还可以用来跑批量图像处理、3D渲染、音频转写、数据分析甚至游戏串流。当你不把它固定成“AI集群”时,能做的事情反而更多了。
很多团队在采购硬件时只盯着一个目标,比如“训练大模型”。但现实往往是,目标在项目过程中会变化。一个灵活的资源池,比一个只跑单一应用的专用集群更耐用。视频转码这样的任务,能让你在LLM需求低峰期把资源盘活。
6.2 一套可复用的任务迁移评估框架
如果你也想评估自己的中配集群到底适不适合承接新的计算任务,可以按三步走:
第一步:算力画像。盘点GPU型号、显存容量、编码器数量、PCIe带宽、已有的驱动和CUDA版本。这决定了哪些任务能跑、哪些会瓶颈。
第二步:负载画像。记录当前集群的空闲时段、忙时段、GPU利用率和显存占用。如果GPU经常在晚上闲置,那任务调度的优化空间非常大。
第三步:任务匹配。对于一个新的候选任务,问自己几个问题:它是否依赖大显存?能否拆成独立并行子任务?是否需要专用硬件单元?是否可以错峰运行?如果答案都是“是”,那这个任务就值得试点。
用一个表格总结:
| 评估维度 | 核心问题 | 中配集群常见情况 |
|---|---|---|
| GPU算力 | 单卡计算能力和数量 | 够用,并行是强项 |
| 显存容量 | 模型或视频数据是否放得下 | 适合中小负载,不适合超大模型 |
| 互联带宽 | 是否依赖多卡通信 | 不适合频繁同步任务,适合独立并行 |
| 专用硬件单元 | 是否有NVENC/NVDEC | 适合视频编解码 |
| 调度复杂度 | 是否能错峰、排队 | 可以结合任务队列实现 |
这个框架不局限于视频转码,也适用于判断其他任务是否适合放进中配集群。
6.3 什么时候真的需要淘汰或升级
也要承认,有些情况下中配集群确实该退役或升级。比如你的业务长期就是做上百B参数的大模型预训练,那中配集群的显存和通信规模完全撑不起来;又比如每天都在跑超大batch的渲染任务,单卡算力不够成了硬瓶颈。这种情况下,与其迁就硬件,不如集中资源换一张更大显存的卡或加入一个训练集群。
但对大多数中小团队来说,中配集群的真正问题不是硬件过时,而是没有把它当成通用资源来运营。只要调度合理,它既能做本地LLM推理服务,也能在晚上高效完成视频转码。别急着卖掉,先把自己的任务清单重新梳理一遍。
所以,下次再有人问“AI集群是不是终结了”,我更愿意把它看成一次分工调整。中配集群没有从舞台中央消失,它只是换了个工种,继续干活。对大多数团队来说,真正的问题不是硬件过没过时,而是你有没有把它的能力用对地方。