这两年只要聊国产化,绕不开的一句话就是“AI+信创双轮驱动”。对外怎么讲都行,对内落到机房和代码里,这件事远没有听起来那么宏大,它意味着把模型推理从一套已经用惯的软硬件环境,搬到另外一套必须自己重新验证的国产底栈上。这篇文章我想认认真真拆解一次:双轮驱动到底驱动了什么,信创环境里的AI选型、迁移、调优和排障怎么做,以及从企业角度怎么看这个组合带来的真实影响。如果你正准备做信创平台上的AI落地,或者正卡在某个算子不兼容的问题里,这篇文章应该对得上你需要的那部分经验。
1. 双轮驱动到底在驱动什么:先拆开概念再选择路径
1.1 一个容易被忽略的事实:信创不是换台电脑那么简单
很多人把信创理解成“换国产服务器+国产操作系统就完事”,实际不是。信创是一整条技术生态链,从芯片、板卡、固件、操作系统、数据库、中间件到上层应用,必须能形成一个完整闭环。用生活里的类比来说,不是买一口新锅就能开火,而是厨房的水管、电路、排烟和动线都要一起重新规划。我在某项目里见过这样的场面:设备到位了,操作系统也装好了,结果AI框架一跑就报运行库版本不兼容,最后才发现基础镜像里自带的编译器版本和运行库太旧,和框架的预编译包对不上。这还不算完,数据库驱动、消息队列、对象存储都要逐一验证版本。这类问题不会出现在汇报PPT上,但一定会在你第一次启动训练脚本时冒出来。
更要注意的是,过去在已有环境里,各团队习惯各管一摊:算法团队负责模型,平台团队负责系统,应用团队负责业务。到了AI+信创项目里,这三类人必须从第一天就在同一张环境清单上协作。算法同学要能说出模型依赖哪些算子,平台同学要锁死操作系统和驱动版本,应用同学要提前确认运行库和接口契约。否则等到联调阶段,你会发现问题根本理不清是哪一端冒出来的。这种组织层面的适配,往往比纯技术迁移更难。
1.2 AI负载是打磨国产底座最有效的“磨刀石”
AI负载恰好是检验这套新厨房的最好压力测试。模型推理对算力、内存带宽、通信延迟都很敏感,稍有不适,性能瓶颈立刻暴露。实践下来比较明显的两个点:第一,相同模型在国产CPU上的多线程扩展性往往不如预期,需要手动调整线程亲和性和并行策略;第二,很多主流加速卡驱动和容器调度器在早期版本上存在兼容性缺陷,需要紧盯驱动日志和算子库版本。这些问题会倒逼底层厂商修复补丁、优化编译器。所以双轮驱动在技术层面是成立的:AI提供真实复杂场景,信创提供一个能沉淀优化经验的国产基础设施。二者不是靠口号绑在一起,而是靠一轮又一轮的负载测试磨出来的。我用同一个图像模型在迁移前后做了三周对比,发现第二周开始,很多启动阶段的问题消失,稳定性和性能都有了明显改善,这就是“磨”的效果。
这里还要区分一个常见的误解:有人说信创环境下算力上限不够,所以AI项目不适合做。我反对这种一刀切。很多业务模型根本不需要超大训练集群,推理场景占大多数,国产平台经过适当量化和调优后完全可满足要求。用不用,取决于你的业务量级,而不是笼统地比峰值算力。比如一个每日百万次调用的文本分类服务,在国产平台上的资源消耗并不高,完全可以用边缘一体机承载,没必要一上来就奔着大规模训练集群去。
2. 信创环境下的AI技术选型:算力、操作系统、框架与容器
2.1 算力选型:先看业务模式,再对比加速卡参数
工具选型永远是项目里最容易返工的地方。选型阶段大家习惯比价格、比算力、比显存,但AI+信创场景里第一优先级应该是业务模式:你是以训练为主,还是以推理为主?未来三年并发量大概涨到什么量级?边缘端是否有部署诉求?这个答案决定你该选CPU+加速卡组合,还是干脆用一体机。另外,还要考虑训练和推理的比例。如果90%的流量是线上推理,却买一堆用于训练的重型卡,资源浪费非常明显。反过来,如果每天都要做增量训练,只靠推理卡又得不偿失。
不同业务场景的选型重点差异很大,我整理了一张参考表:
| 业务场景 | 推荐算力形态 | 选型关注点 |
|---|---|---|
| 训练为主 | CPU+大显存加速卡 | 显存容量、驱动算子库支持、多卡通信效率 |
| 在线推理 | 专用推理加速卡/NPU | INT8/FP16吞吐量、P99延迟、批量支持 |
| 边缘部署 | 国产CPU或NPU一体机 | 功耗、稳定性、接口兼容、离线可用性 |
先不要只看参数表上的FP16理论算力,还要看模型量化后精度损失是否符合业务要求。选显存时把模型参数、激活值、优化器状态都算进去,训练场景通常需要按模型参数量乘以一个系数,例如前向显存可能是参数量的几倍,反向还要再翻倍。这个公式只是用来摸底,真正的显存需求要在最小环境里实测。某个客户吃过亏:选了大显存加速卡,但没有确认驱动对容器化的支持,上线前一晚还在等补丁。选型阶段至少留一周做驱动兼容性验证,这笔时间省不得。
2.2 系统与框架的兼容性:版本锁定比追求新版本更重要
操作系统和AI框架的配套关系,经常被低估。国产操作系统大多基于Linux,但不同版本的内核、编译套件、动态库版本差异很大。同一个AI框架的CPU版本在通用Linux上跑得很顺,换到国产OS上就可能编译失败,或者能装上但运行时提示缺少某个共享库。最稳妥的办法是优先使用OS厂商或框架官方提供的适配版本,不要从通用源直接安装。某个项目里,同事为了求新直接拉取最新版框架源码编译,折腾两天没成功,换回适配版本半小时就搞定。另外一个建议是明确锁定主版本和补丁版本,把依赖镜像存到私有仓库,避免后续新节点出现版本漂移。生产环境里,可复现比功能新更值钱。你在选型阶段多花半天做版本冻结,后面能帮你省下十倍排障时间。
2.3 容器镜像架构:一个可能导致项目延期的普通问题
容器化在信创环境里会多一个架构问题。很多国产硬件是不完全相同的CPU架构,镜像不能像以前那样无脑拉取通用镜像。如果用一套常见架构的镜像推到另一套架构主机的机房环境里,直接会报可执行格式错误。如果自建镜像,注意用支持多架构构建的方式,或者在构建机指定目标架构。基础镜像尽量选带安全加固和内部仓库同步的适配版本,避免在容器里安装驱动。因为容器重启后驱动模块会丢,导致加速卡无法识别。还有一种常见坑:容器默认共享内存太小,模型推理需要共享内存交换中间张量,默认64MB根本不够,启动容器时要显式调大共享内存并设置IPC锁。如果架构和共享内存两个问题都踩一遍,项目至少延期一到两周。提前把这些问题写成部署检查单,比自己预料自己强得多。
2.4 数据库与中间件同样要纳入适配范围
AI服务不可能只靠模型和算力,上下游的数据库、对象存储、消息队列都是不可忽视的一环。迁移到信创环境后,原来封装好的数据访问层可能因为驱动版本、API版本不兼容而出现连接异常。建议在启动AI迁移前,先花半天时间盘点AI链路涉及的周边组件清单:训练数据从哪里读、模型文件放哪里、推理结果写到哪里、告警信息往哪个队列发。每一个点都要有对应的国产兼容版本或API适配层。我在项目中遇到过一个很低级但很常见的问题:训练好的模型文件用传统网络文件存储没问题,但到了新的分布式存储上,路径挂载权限没配置好,导致训练任务一到checkpoint阶段就失败,排查了整整一下午。所以周边依赖的适配检查,要和核心模型适配放在同等优先级。
3. 模型迁移实操:从原有AI服务平滑过渡到国产平台的完整方法
3.1 盘点模型算子:迁移前先做一次“体内检查”
正式开始迁移,第一步不是改代码,而是盘点模型。用脚本把模型里的算子类型和出现次数统计出来,看哪些算子在目标平台的支持列表里找不到。这一步是体力活,但能避免你被一个shape引发的算子错误折磨一整天。下面这个脚本很简单,把ONNX模型里的节点遍历一遍,统计算子分布:
import onnx from collections import Counter model = onnx.load("model.onnx") ops = Counter(node.op_type for node in model.graph.node) for op, cnt in ops.most_common(): print(f"{op}: {cnt}")如果模型不是ONNX格式,也可以用内部表示导出后再统计。得到列表后,把这批算子拿到目标平台的算子清单里逐项比对,标出不支持、有精度差异、性能不佳三类。这个清单会成为后面算子替换和性能调优的作战地图。另外建议把模型输入输出shape、batch大小、是否动态shape等信息一并记录。动态shape是迁移后性能调优最大的变量之一,提前知道就能提前做固定化方案。
3.2 最小化环境:用一个小场景走通全链路
接下来建议搭一个最小化验证环境,而不是直接把整个服务迁移过去。最小化环境指的是:一台服务器、一张加速卡、一个最小模型、一条测试链路。目的是把平台本身的坑先踩完,再叠加业务复杂度。我在实际项目里通常会先用一个图像分类级别的模型,走通“加载模型-前向推理-输出结果-度量精度”这条闭环。如果连这个Demo都跑不顺,那问题大概率在底层环境而不是业务代码。走通之后,再逐步加入真实模型的预处理、后处理、批量拼接和并发请求,每一步都做一次回归对比。这就像装修时先在小房间试住一晚,再考虑全屋展开,避免一开始就把问题复杂化。很多团队直接一把梭迁移整个服务,最后报错时根本分不清是驱动、框架还是模型算子的问题。
3.3 算子替换与精度调整:最花时间的一步
算子替换是迁移过程中最花时间的一步。常见的不支持算子主要分布在特殊激活函数、归一化、若干变形操作上。比如LayerNorm在某些国产推理引擎上算子支持不完整,一个高性能替代方式可能是用GroupNorm替换,但替换后模型的数值行为会变化,必须重新校准或微调。另一个思路是把模型内的后处理算子拉出来,放到CPU上执行。这样做虽然增加一次数据拷贝,但能显著减少模型里的特殊算子数量,让模型主体更容易被推理引擎优化。精度调整时需要注意:不要直接比逐元素数值差异,因为不同实现可能使用不同的浮点运算顺序,先比较最终输出在业务指标上的差异,比如分类准确率或相似度。若业务指标在容忍范围内,就无需过度纠结逐位一致。你需要提前和业务方约定一个阈值,比如F1下降不超过0.5%,这样后续验收才不会一直拉扯不清。
3.4 性能压测与稳定性验证:不能只看跑完一次的结果
性能压测和稳定性验证至少要做两轮。第一轮用真实数据采样跑通全流程,记录吞吐量和时延;第二轮做7×24小时或者至少连续3天的稳定性压测,观察是否存在内存泄漏、句柄堆积、性能衰减。压测时记得同时采集CPU占用、内存占用、加速卡利用率、显存占用、网络I/O这几类指标。我自己常用固定batch+固定并发线程的方式,先从小并发逐步加压,观察服务时延的P99曲线。如果RTT呈现阶梯式跳变,通常意味着线程池满或队列开始积压;如果P99一直抖动,优先查CPU亲和性和核间中断。稳定性验证结束前,最好做一次故障演练,比如手动重启服务、断开某一路存储、模拟上游接口超时,确认服务能按预期恢复或降级。这些操作看似繁琐,但能避免上线后半夜被报警电话叫醒。
3.5 迁移过程记录与版本基线:让自己和队友都睡得安稳
迁移过程会涉及很多临时性改动,比如改驱动版本、加环境变量、调算子实现。如果不做记录,两周后你自己也说不清当时为什么这么改。建议从项目第一天就建立一份迁移日志,字段包括:时间、变更内容、原因、验证结果、负责人。不要等到部署时才补文档。同时,每解决一个问题,就把当前环境的版本组合固定为一个基线,例如“OS版本+内核版本+驱动版本+框架版本+基础镜像版本”的元组。后续所有环境都按这个基线来复现。我在一个持续了四个月的迁移项目里,靠这份日志避免了很多重复排障。特别是换了另一个机房环境后,直接按基线一键配好环境,省掉了至少半周时间。如果你觉得写文档麻烦,至少要把命令行操作和历史记录保留下来,总比深度依赖个人记忆可靠。
4. 迁移过程中的典型问题与排查经验速查
4.1 算子不支持:优先升级框架而不是重写模型
第一个常见问题是模型加载时报算子不支持。碰到这种报错,我会先确认当前框架和推理引擎的版本,再查两个东西:目标平台官方算子列表,以及你的模型实际使用到的算子列表。如果只是某一个算子的子版本问题,优先升级框架到近期稳定版。升级不行,就尝试把该算子拆成多个基础算子组合,或者在上层代码中把它当CPU算子处理。实在走不通,再考虑改模型结构。改结构要记住:可能影响精度,重训或微调的成本不可忽视,把它当成最后的手段。如果你在算子列表里看到框架明确标注“实验性实现”,也要留个心眼,因为实验性算子可能在数值稳定性上有未知行为,线上环境尽量避免启用。
4.2 性能抖动:动态shape和核间干扰是两个大户
性能忽高忽低是最难排查的一类问题。按经验排序,先查动态shape:模型输入shape一直在变,推理引擎每次都要重新做算子优化,导致首次推理特别慢。解决办法是固定batch,或者开启动态shape缓存,但要注意缓存命中率。第二个大户是CPU核间干扰:在多核服务器上,中断和业务线程抢同一个核的事件经常发生。解决方案是把业务进程绑核,同时把网卡中断和业务线程绑到不同核,顺便设置并行库线程数。第三个可能被忽视的是内存分配器。国产平台上某些通用内存分配器在多线程场景下锁竞争严重,换成支持按核分配的线程本地池,性能提升通常很明显。这些优化项需要逐项做A/B对比,不要一口气全上,否则根本分不清哪项在起作用。
另外,性能压测时的并发数不是越高越好。并发过高时,CPU频繁切换线程,上下文切换开销会淹没推理时间。我习惯用几个梯度的并发数做对比:单请求、4并发、8并发、16并发、32并发,画出吞吐和延迟曲线,找到拐点。拐点之后继续加压,吞吐不会明显上升,P99反而暴涨。把这个拐点作为线上流量控制的依据,比凭感觉定一个最大并发数靠谱得多。这个规律在国产CPU平台上尤其明显,因为线程调度对性能的影响更大。
4.3 容器与设备映射:环境对了,问题少一半
容器里识别不到设备,是非常典型的环境问题。排查思路:先宿主机确认设备节点存在,再确认容器运行时的设备挂载配置。常见错误是容器内缺少设备节点映射,或者共享内存配置过小。还有一个权限问题:某些国产加速卡要求容器进程具备特定用户组权限,如果没有正确配置用户组ID,即使设备节点映射了也无法访问。这类问题建议在镜像构建时就固化好:把设备用户的GID写入镜像、启动脚本中显式挂载设备路径、用capabilities参数补充必要权限。这样换环境部署时不容易再踩一遍。我在新环境部署时习惯先用一个最小镜像验证设备可见性,比如在容器里列出设备目录,确认节点出现,再跑一个简单的矩阵乘测试,通过后再上业务镜像。这个习惯能帮你把“环境问题”和“业务问题”快速隔离。
4.4 问题定位与解决方案速查表
把这一年接触过的高频问题整理成一张速查表,方便现场快速定位:
| 症状 | 可能原因 | 快速处理 |
|---|---|---|
| 模型加载报算子错误 | 推理引擎版本不支持 | 升级到适配版本/拆分算子 |
| 首次推理延迟极高 | 动态shape触发重新优化 | 固定batch/开启shape缓存 |
| 长期运行后性能下降 | 内存泄漏/句柄堆积 | 定期重启/排查资源释放 |
| 容器识别不到加速卡 | 设备节点未映射/权限不足 | 检查挂载参数/GID映射 |
| CPU占用高但加速卡打不满 | 数据预处理成为瓶颈 | 预处理移入独立进程并行 |
| 精度与旧平台有细微差异 | 算子实现不同/浮点顺序不同 | 比较业务指标而非逐位值 |
表中的每一种问题,我自己都在真实环境里遇到过。比较感慨的是,其中至少一半问题不是技术难度高,而是环境信息不透明导致排查时间长。所以迁移之前,先把平台版本、驱动版本、框架版本、Python版本、基础镜像版本这些信息整理成环境清单,能帮深夜排障的自己省很长时间。
4.5 流程上的坑:必须做变更管理和灰度发布
技术上的问题往往还有对应的流程问题。信创AI项目上线,最怕的是“所有东西一次切过去”。某个团队上线前一天把操作系统、框架、模型、网关全换掉,结果第二天业务方反馈异常,连回滚都不知道先回哪一层。我的建议是拆小变更:一次只变一个变量。例如先换操作系统不换模型,验证通过后再换框架,再换加速卡。哪怕时间紧张,也要至少拆成三到四个可独立验证的批次。上线时采用蓝绿发布或灰度发布策略,把一部分真实流量切到新环境,观察几小时后再逐步放大。如果新环境出现业务指标下降,第一时间切回旧环境,然后把问题和修复过程记录到迁移日志里。这种流程上的控制,很多时候比具体的技术调优更能决定项目成败。
5. 影响范围与落地节奏:AI+信创如何从点到面产生价值
5.1 对外业务系统:把智能服务跑在自主底座上
影响范围要先从实际场景看。我接触到的案例里,最常落地的是对外智能服务和对内知识管理两类。对外智能服务以智能客服、工单自动分拣、智能审核为主,特点是模型部署集中、数据敏感程度高、对延迟容忍度有限。有一个项目把工单分类模型从原来通用平台迁移到国产CPU+加速卡组合,经过算子替换和量化,分类准确率保持原水平,P99从80毫秒变成120毫秒,业务上可以接受,关键是不再依赖单一硬件来源,部署地点也更灵活。这类场景的迁移价值很容易被性能数字掩盖,但真正重要的一点是:你拥有了可以在更多受限网络环境里交付AI服务的能力。
5.2 内部知识管理与大模型私有化部署:数据不出域
内部知识管理更多用到大模型能力,比如文档摘要、知识库问答、会议纪要素材,这需要私有化部署和数据不出域。信创环境下天然适合做这类事:模型权重放私有仓库,推理服务跑在国产服务器上,数据链路不经过外部公网。不过大模型部署的算力成本不容小觑,选型时会遇到模型参数量、量化精度、显存之间的三角约束。我们一般会先根据业务可接受的响应时间,确定模型大小和量化方式,再反推需要多少算力。在国产平台上,开源模型的适配速度正在加快,但也要亲自验证不同框架之间的算子映射。内部非核心知识库可以先跑起来,比如只处理员工手册和项目文档,积累经验后再扩展到更多敏感知识域。
5.3 价值评估:不能只比“能不能跑”,要比“划不划算”
评估AI+信创项目价值,不能只看单点性能。我一般会建议团队从三个维度建立评价模型:第一个是业务连续性,是否消除了对某些特定硬件和闭源组件的单点依赖,也就是常说的供应链韧性;第二个是长期成本,国产平台的采购和维护成本初期不一定低,但规模化后可能摊薄,关键要看许可模式和总体拥有成本;第三个是生态竞争力,团队是否掌握了一整套国产技术栈的调优技能,这决定了后续更多业务能否在统一底座上继续生长。这三个维度必须和业务负责人对齐,而不是只在技术团队内部自评。否则项目很容易被压到“性能变差但节省多少成本”这种太片面的框架里。我在项目复盘时见过最有说服力的一张表,不只有性能对比,还有不同方案的三年总成本、交付周期、P99达标率、故障自愈时长,这些数字才能真实反映双轮驱动的整体价值。
5.4 实施路径建议:从非核心小场景出发,逐步扩展影响面
实施路径上,我强烈建议先跑非核心小场景,再逐步扩大。所谓非核心,指即使出问题也不会直接影响核心收入或口碑的旁路应用,比如内部IT工单分类、日志摘要、辅助审批建议这类。这类场景数据量适中,试错成本低,适合锻炼整个团队的迁移和调优能力。跑通一个之后再横向复制到下一个场景,团队里的知识库和脚本也会越来越多。采用这种节奏,既不会让大目标压垮团队,也能在半年内形成一批可复用的组件和流程。如果一开始就选核心交易系统做迁移,一旦出问题,业务方会连带着对整个信创项目失去信心。我比较喜欢的一句话是:小规模强循环,比大步快跑更持久。这正是从单点明星项目走向整体生态的实际路径。
最后分享一点我自己的体会。“AI+信创双轮驱动”这句话真的不只是写在规划报告里的愿景。我见过两个团队做类似的事:一个团队把精力压在采购和品牌上,结果后面被驱动版本问题折磨得够呛;另一个团队从一开始就用一个小模型把全链路反复跑了三个月,后期上线反而顺畅很多。技术工作最怕绕开真实负载去谈大方向。如果你准备启动类似项目,我建议从下周一开始就做两件事:把一张算子清单列出来,把最小验证环境搭起来。等这两件事做完,你会发现后面的路比想象的清楚很多。这个内容后续还能继续扩展成一套完整的信创AI迁移工具链,但第一步永远是那个最小实验。