昇腾适配DeepSeek V4全流程解析:算子、图编译与性能调优实践
前阵子我们组接到一个内部项目把DeepSeek V4完整跑通在昇腾上。这里的跑通不是指能出几个token就算交差而是从模型权重、算子适配、图编译、精度对齐到性能压测全部走完最后给业务侧交付一个可用的推理接口。整件事前后花了几周时间做完之后我对芯模协同这四个字的理解完全变了。这篇把我们的拆解思路、技术路线、落地过程和踩坑记录整理出来给正在做国产算力适配的同行一个参考。这篇文章适合几类人看准备把大模型迁移到昇腾的推理工程师、做大模型平台和部署框架的开发同学、做技术选型的管理者。如果你对昇腾还不熟也没关系我会把CANN、MindIE、算子映射这些概念尽量用大白话拆开讲你把这篇文章当一份昇腾适配避坑指南来用就行。1. 芯模协同到底在解决什么问题1.1 先说结论这不是一次简单的模型搬家很多人以为在昇腾上跑DeepSeek V4就是把PyTorch的权重文件搬过去用某个工具转一下格式然后跑个推理脚本就完事了。真实情况远没有这么简单。大模型从设计之初就是围绕GPU的生态特征来的。比如CUDA生态里有非常成熟的算子库、通信库和推理框架模型里的每一个算子几乎都能找到现成的高性能实现。而昇腾走的是另一套软硬件体系达芬奇架构的AI Core、CANN软件栈、MindIE推理引擎它的算子实现、内存管理、指令调度方式都和CUDA体系完全不一样。这意味着一个在GPU上跑得好好的模型放到昇腾上可能连编译都过不了——某个算子不支持、某个shape推导出错、某个融合规则没覆盖到每一环都可能卡住。所以芯模协同这个词本质上说的不是把模型搬过来而是让模型的运行方式和芯片的计算特性互相匹配。模型侧要做结构适配芯片侧要提供对应的算子能力和调度策略两边一起调优才能把一个模型真正跑好。我们这次的DeepSeek V4适配本质上就是在做这件事。1.2 昇腾和CUDA生态的底层差异先聊清楚昇腾的软件栈长什么样后面所有的适配工作都基于这个框架来展开。昇腾最底层是达芬奇架构的AI Core往上依次是CANNCompute Architecture for Neural Networks最核心的软件栈负责算子开发、图编译、任务调度类似CUDA的生态位MindIE昇腾的推理引擎负责大模型推理的加载、调度和执行对标的是CUDA生态里的那些推理框架torch_npu / MindSpore模型侧的接入层torch_npu让PyTorch代码能在NPU上跑MindSpore则是昇腾的原生框架ATCAscend Tensor Compiler模型转换编译工具把ONNX等格式的模型编译成昇腾可执行的离线模型文件.om关键点在于CUDA生态里你写的是算子库的调用昇腾上你需要关注算子在AI Core上怎么排布、AI Core上有多少计算单元、内存带宽怎么分配。同一个算子在GPU上可能是一个已经封装好的函数到了昇腾上可能就得看它的算子实现是否已经适配没有的话就得自己写自定义算子。还有一个不能忽略的差异昇腾对静态Shape的支持比动态Shape成熟得多。动态Shape意味着每次输入的长度、batch大小都可能变化这对算子的调度、内存的分配都是极大的压力。我们在适配过程中大量工作其实是在处理shape相关的兼容问题。1.3 为什么选DeepSeek V4做协同适配选DeepSeek V4作为适配目标不是因为它热度高而是它的架构特点非常适合用来检验一套国产算力栈的成熟度。DeepSeek系列模型用的是MoEMixture of Experts混合专家架构加上MLAMulti-head Latent Attention多头潜在注意力机制。MoE的特点是模型总参数量巨大但推理时只激活其中一部分专家这样可以显著降低计算量。这种稀疏激活的特性对芯片的调度能力和内存带宽要求极高——你需要在很短的时间内决定哪些专家被激活然后快速调度计算资源。对昇腾来说这是一个很好的压力测试如果能把MoE架构的调度在昇腾上跑顺说明这套软件栈的算子调度和图编译能力已经达到相当水平。反过来如果MoE这种稀疏结构跑不通那很多其他模型的适配也会有问题。这也就是为什么我们说芯模协同不只是一个口号——它背后是一整套非常具体的工程问题怎么把模型的计算拓扑映射到芯片的执行单元上怎么让通信模式和芯片的互联结构匹配怎么在精度和性能之间取平衡。下面拆开来讲。2. 核心技术拆解算子、图编译和MoE的适配难点2.1 DeepSeek V4的架构特点与适配难点先快速过一遍DeepSeek V4的架构面。它沿用了DeepSeek系列的MoE设计思路一个大的Transformer主干网络内部包含多个FFN专家模块推理时通过路由网络Router选择激活哪些专家。MLA机制则对KV Cache做低秩压缩降低显存占用这对推理性能非常关键。这个架构在昇腾上适配会遇到几个具体难点。第一个难点是自定义算子的映射。DeepSeek系列模型里有不少融合算子比如注意力计算中的Flash Attention、MoE路由中的TopK选择逻辑。这些算子在PyTorch里可能是一个函数调用但到了昇腾上并没有一一对应的算子实现。我们前期花了不少时间梳理模型的算子清单逐个核对昇腾算子库的覆盖情况。第二个难点是路由和专家调度。MoE的Router需要根据输入动态选择专家这涉及到数据的分发和收集。在GPU上这一块已经有成熟的实现但昇腾的通信方式和显存拓扑不一样直接照搬会有性能问题。第三个难点是动态形状。大模型推理时输入序列长度不同MoE每次激活的专家数也可能不同这会让模型的执行图在运行时发生变化。昇腾对静态Shape的执行效率更高所以我们需要在保留动态能力和换取静态性能之间做权衡。2.2 算子映射与自定义算子开发算子映射是整个适配工作中最琐碎、最容易出问题的一环。我们的流程是这样第一步把PyTorch模型导出成ONNX。这一步看起来简单实际上有很多细节要注意。导出时需要固定一部分shape同时标记哪些维度是动态的。如果遇到不支持的导出操作还需要改写部分forward代码用ONNX支持的算子组合去替代。第二步把ONNX模型交给ATC工具做编译这一步会输出一个算子支持情况报告。哪些算子能直接用哪些需要自定义一目了然。我们第一次编译时报错集中在几类算子上TopK、CumSum、Deformable Attention这类偏门算子以及一些深度定制的融合算子。第三步对缺失算子做自定义开发。昇腾上开发自定义算子有两条路一条是用Ascend C算子编程语言直接面向AI Core写高性能实现适合对性能要求极高的场景另一条是用TBETensor Boost Engine框架偏模板化上手快一些。我们这次用Ascend C开发了两个核心算子一个是MoE路由的TopK分发算子另一个是MLA里的低秩投影算子。心态上要有个准备自定义算子的开发不是一锤子买卖。写完之后要用CPU/GPU的浮点结果做对比验证逐元素比对误差把精度对齐到可接受范围然后才能进图编译。2.3 图编译融合与Shape策略算子映射解决的是每个算子有没有得用的问题图编译解决的是这些算子怎么组织效率更高的问题。ATC在编译ONNX模型时会做几件关键的事算子融合把连续的、可以合并的计算合并成一个算子减少AI Core启停和数据搬运次数内存复用分析哪些中间结果生命周期不重叠复用内存空间指令调度决定计算和搬运的先后顺序尽量让AI Core的矩阵计算单元和向量计算单元都别闲着这里有一个特别值得注意的点昇腾的算子融合规则是跟具体的芯片型号相关的。同一个模型在昇腾910系列的不同型号上编译融合策略可能不一样。所以换芯片型号时模型建议重新编译一次不要用旧型号的.om文件硬跑。Shape策略方面我们的做法是生成两套模型一套静态Shape固定batch为1、序列长度固定为2048用于追求极致性能另一套动态Shape支持序列长度从1到8192变化用于业务侧的灵活接入。静态模型的性能明显更高但业务场景千变万化动态模型必不可少。这个取舍后面会细说。2.4 MoE专家并行在昇腾上的重排MoE的专家调度是这次适配中最有芯模协同感觉的部分。DeepSeek V4的MoE层里有多个专家推理时Router对每个token算出应该走哪些专家。如果这些专家分布在多张昇腾卡上就需要把token按专家归属做分发这会产生大量的通信操作。GPU生态里这块通常靠NCCL这类通信库搞定。昇腾有自己的通信机制叫做HCCSHuawei Cache Compression System——不对实际是HCCL集合通信库。我们的工作重点是把模型里的专家并行策略和昇腾卡间的互联拓扑对齐让通信尽量发生在物理距离近的卡之间。具体的做法查询昇腾设备的拓扑信息把专家分组和卡间连接关系做了一次重排让同一批查询token最常访问的专家物理分布在相邻的卡上。这个调整做完MoE层所有token的网络通信量明显下降端到端耗时降了一截。这里要说一个挺反直觉的经验模型侧的并行策略有时候要反过来适应芯片的拓扑结构而不是一味照搬GPU上的玩法。就像搬家的时候不是把所有东西都塞进一个房间而是根据房间的布局重新安排收纳——这就是芯模协同最直观的体现。3. 全流程实操从PyTorch权重到昇腾推理3.1 环境准备工具链与版本选型先列一下我们这次使用的环境供参考组件版本/配置昇腾硬件昇腾910系列8卡操作系统openEuler 22.03ARM架构Python3.10PyTorch2.1.0配合torch_npuCANN8.0.RC2torch_npu2.1.0.postMindIE2.1.RC1版本选型的第一原则是跟着官方支撑矩阵走不要自己搞混搭。我们一开始贪新鲜想用最新的CANN版本搭配较早的torch_npu结果算子注册老是出问题。折腾了两天最后回到官方发布说明里列出的匹配组合才稳定下来。另一个环境层面的提醒昇腾的镜像最好用官方提供的容器镜像里面CANN、驱动、固件的组合已经验证过。自己手动装很容易出现版本不匹配的问题。我们最开始在物理机上装踩了一堆坑切到官方容器镜像后世界安静了。3.2 模型转换与OM生成环境就绪之后整个转换流程分三步走。第一步是导出ONNX。以下面的方式用torch.onnx.export导出注意用dynamic_axes标记动态维度否则后续推理时序列长度一变就没法用了import torch dummy_input ( torch.randint(0, 100000, (1, 2048), dtypetorch.int64).cpu(), torch.randint(0, 100000, (1, 2048), dtypetorch.int64).cpu(), ) torch.onnx.export( model, dummy_input, deepseek_v4.onnx, opset_version17, input_names[input_ids, attention_mask], output_names[logits], dynamic_axes{ input_ids: {0: batch_size, 1: seq_len}, attention_mask: {0: batch_size, 1: seq_len}, logits: {0: batch_size, 1: seq_len}, }, )第二步是ONNX算子检查。可以用ATC先做一次试编译它会明确报出哪些算子不支持。我们遇到的几个典型报错算子类型为TopK的节点不被支持算子类型为CumSum的节点不被支持某个自定义融合算子不识别遇到这些之后我们有两条路可以选改写模型代码用已支持的算子组合替代或者开发自定义算子。对于TopK我们选择了改写把TopK拆成了排序切片虽然多占了一点计算量但省去了算子开发周期。对于MLA里的那个自定义融合算子没有替代方案只能走Ascend C开发。第三步是ATC编译。这一条命令的例子atc --modeldeepseek_v4.onnx \ --framework5 \ --outputdeepseek_v4 \ --soc_versionAscend910B3 \ --input_shapeinput_ids:1,2048;attention_mask:1,2048 \ --insert_op_confaipp_config.cfg \ --precision_modeallow_mix_precision \ --loginfo其中soc_version要填实际芯片型号precision_mode控制混合精度的策略。编译成功后会生成.om文件这就是昇腾的离线模型。值得注意的是ONNX导出这一步非常耗时且易碎。模型里的if分支、动态循环、某些Python控制流都会导致导出失败。我们团队里有个同事专门改模型里不支持导出的代码段改了几十处才顺利走出来。3.3 精度对齐流程与阈值标准模型编译通过之后并不意味着工作完成了。在GPU上跑得好好的到昇腾上可能结果就飘了。精度对齐是这个项目里最磨人的一环。我们的精度对齐分三个层次第一层算子级比对。对每个关键算子用同一份输入分别在GPU和昇腾上执行计算输出张量的cosine相似度和最大绝对误差。我们的要求是cosine相似度大于0.999最大绝对误差小于1e-2混合精度下。如果某个算子偏差超限就逐项排查通常是算子实现中中间精度保留不够比如某些中间结果被强制cast到FP16精度损失被放大。第二层模型级比对。用一组固定的prompt在GPU和昇腾上各跑一遍前向比对logits分布。阈值是logits的cosine相似度大于0.99top-1预测一致率大于98%。这层能暴露算子级测试发现不了的累加误差问题。第三层生成级比人。拉一个几百条包含数学推理、代码生成、摘要的测试集让模型真实生成文本人工检查结果是否与GPU一致。生成级的偏差往往不体现在logits指标上而体现在长文本的多步推理结果偏离上这一步不能省。精度对不齐时我们的排查顺序是检查输入数据预处理是否完全一致tokenizer版本与padding策略逐个冻结模型层做二分定位确认混合精度时哪些层被降到了FP16/BF16调整precision_mode配置检查自定义算子内核的累加顺序和中间精度印象最深的一次精度偏差定位了整整两天最后发现是某个归一化算子在NPU上用的是近似算法精度略低于GPU直接替换成更高精度的算子实现后问题消失。这种问题常规文档根本不会写只能靠实测排查。3.4 性能调优Batch、序列长度与内存池精度对齐后进入性能调优阶段这阶段的目标是让模型跑得快而不只是跑得对。先说一个评估基准我们用一组固定长度的测试数据分别对比静态Shape模型、动态Shape模型在GPU和昇腾上的推理吞吐和首token延迟。结果符合预期静态Shape显著优于动态Shape昇腾在稳定的batch和序列长度下能发挥出更好的性能水平。性能调优主要做了几件事Batch Size与序列长度分组把业务侧请求按token长度分段每段固定shape用不同的静态模型服务兼得灵活性和性能内存池设置动态Shape下NPU内存分配碎片化严重我们在MindIE里设置了统一的缓存池把内存碎片率降了下来算子融合开关对照昇腾融合规则文档逐个开启可用的融合优化。有些融合开启后精度会轻微下降需要跟精度对齐组来回沟通确认KV Cache量化MLA的低秩特性在昇腾上带来了一个额外红利——KV Cache占用比传统模型更小但缓存策略仍需单独调优调优过程不是一次到位的。我们是改一个参数、压一次测、记录结果、再改下一个的笨办法靠一张对比表串联起全部实验。性能对比表大致长这样配置项基线配置优化后配置提升幅度模型Shape动态Shape静态Shape按长度分段吞吐提升约35%内存池默认统一缓存池P99时延下降约15%算子融合默认开关按需开启端到端耗时下降约20%KV Cache默认分配低秩压缩适配显存占用下降约18%需要提醒的是这些数字只在我们这次的硬件和模型配置下有效。不同型号的芯片、不同的batch策略结果差异会很大。性能调优一定要以自己环境的实测数据为准参考别人的数字只能当方向性指引。4. 常见问题与排查技巧实录4.1 算子不支持的快速处理套路这是昇腾适配里出现频率最高的一类错误。遇到算子不支持时先别急着写自定义算子按以下顺序尝试查昇腾官方算子支持清单确认是否真的不支持看能不能通过修改模型实现来绕开比如把TopK拆成排序切片看ONNX算子的subgraph版本有些算子高版本不支持低版本反而可以最后才考虑开发自定义算子自定义算子开发的工作量很大而且调试周期长非必要不碰。判断必要性有一个简单标准这个算子在整个模型的计算耗时中占比是否达到5%以上如果没有绕开它可能是更划算的选择。4.2 精度对不齐的定位方法精度问题是最难调的。我们沉淀下来一个固定排查链路固定输入确保预处理完全一致在模型中间层插入hook逐层对比输出找到偏差爆发的第一层锁定嫌疑算子检查该算子在NPU上的实现方式是FP16累加还是BF16是不是用了近似算法针对性地替换实现或调整混合精度策略工具层面昇腾的msprof性能剖析工具配合torch_npu的dump接口可以导出NPU上每个算子的输入输出和GPU侧逐元素比对。这套组合基本能解决90%的精度定位问题。4.3 性能不达标的排查路径性能问题我们遇到过几类首token延迟高、吞吐上不去、显存占用异常增长。排查时按这个顺序来先看是否存在CPU与NPU之间的同步等待数据搬运链路是否成了瓶颈再看算子图是否被过度切分小算子过多导致AI Core启动开销大继续看动态Shape是否导致频繁重编译如果是优先改静态Shape最后看通信占比MoE场景下多卡all-to-all通信往往是隐性瓶颈定位通信瓶颈时可以用一个简单技巧先把模型改成单卡执行对比多卡和单卡的时间差就能估算通信开销占比。如果通信开销超过总耗时的30%就该认真优化并行策略了。4.4 问题速查表把这次遇到的高频问题整理成一个速查表方便大家对照现象可能原因处理建议ATC编译报E19999算子不支持或shape异常查看详细日志定位算子按4.1流程处理logits偏差大但算子级测试正常累加顺序或中间精度问题逐层hook定位调整混合精度策略首次推理特别慢动态Shape触发重编译预热warmup或改用静态Shape显存持续增长内存池碎片化或缓存未复用配置统一缓存池检查KV Cache策略MoE部分耗时异常高专家并行与卡间拓扑不匹配按HCCL拓扑重排专家分组输出文本质量明显下降某层被过度降精度将该层算子单独设为FP32执行4.5 一个容易被忽视的坑warmup与动态编译最后单独拎一个坑出来说。昇腾的推理服务上线后第一次请求往往会非常慢有时比后续请求慢一个数量级。原因在于运行时存在懒编译模型第一次执行到某个分支时才开始编译对应的算子内核。如果业务侧没有做预热线上第一个请求就会超时。我们的做法是在服务启动阶段主动跑几条不同长度的请求把最常见的shape组合都触发一遍确保算子内核在正式流量进来前已经编译完毕。这个细节虽然简单但如果不处理上线当天就会收到告警。另外昇腾的日志里有大量从0开始累加的错误计数多数是网关层预设的阈值过高导致。排查问题时建议先看核心索引日志别被外层日志的数量吓到。5. 这次适配做完我的一些真实体会项目收尾那天团队里有人问了一个问题这次适配最大的收获是什么我当时的回答是最大的收获不是让那个模型在昇腾上跑起来了而是把昇腾到底能不能跑大模型这个问题从一个观点变成了一个经过验证的答案。在动手之前团队里也有不同声音有人觉得昇腾生态还不成熟适配成本太高有人觉得MoE架构太复杂短期内搞不定。事实是确实有很多坑工具链的完善程度和CUDA生态比还有差距但这套体系已经具备支撑真实业务的能力了——只要愿意花时间摸清它的脾性。我个人最大的感触是跨生态适配真正难的不是技术本身而是预期管理。当你习惯了CUDA生态里开箱即用的体验之后切换到昇腾需要一个心态转变——很多在GPU上理所当然的事情在这里都需要你亲自确认一遍。比如算子支持、精度行为、性能特性这些都不能假设都要实测。如果你正在做类似的适配我的建议是先做一个小验证项目挑一个运算量适中、算子种类有代表性的模型完整走一遍转换、编译、精度校验和性能调优的闭环。把全流程的坑踩一遍之后再上DeepSeek这种量级的模型。别一上来就直接跑大模型否则你会同时面对格式问题、精度问题、性能问题三座大山排查起来非常痛苦。最后分享一个小技巧在整个适配过程中一定要把每一次报错信息、环境版本、处理方式都记录下来。跨生态适配的问题往往看起来毫无规律但记录多了你会发现很多问题在不同模型上是重复出现的。建一个自己的问题库比翻任何官方文档都管用。

相关新闻

基于SpringBoot+Vue的饮食健康管理系统设计与实现要点解析

基于SpringBoot+Vue的饮食健康管理系统设计与实现要点解析

最近刚把一个基于SpringBootVue的饮食健康管理系统完整走通了一遍。这个项目我一直惦记着——从需求梳理、表结构设计,到前后端联调、打jar包部署,前前后后用了两周多的时间。这类系统在课程设计和实际健康类产品里都很常见,核心思路并不复杂…

2026/10/13 22:09:51 阅读更多 →
Docker中Nginx中文乱码与配置热更新实战

Docker中Nginx中文乱码与配置热更新实战

1. 项目概述:为什么在 Docker 里跑 Nginx 还要操心中文乱码和配置挂载? 你刚用 docker run -d -p 80:80 nginx 跑起一个 Nginx 容器,浏览器一刷——页面能打开,但网页里的中文标题、按钮文字、日志输出全变成方块或问号&#xf…

2026/10/13 22:08:49 阅读更多 →
Docker中Nginx中文乱码与配置挂载全解

Docker中Nginx中文乱码与配置挂载全解

1. 项目概述:为什么在 Docker 里跑 Nginx 还要操心中文乱码和配置挂载?你是不是也遇到过这种情况:用docker run -d -p 80:80 nginx一行命令就跑起了一个 Nginx 容器,页面打开也正常,但一上传带中文名的文件、一访问含中…

2026/10/13 22:08:49 阅读更多 →

最新新闻

微信小程序奶茶店毕设从0到1全流程指南

微信小程序奶茶店毕设从0到1全流程指南

十个计算机毕设选题里,大概有五个是“基于微信的奶茶店小程序”。这个题目乍一看很重复,但它能常年被列入选题清单是有原因的:业务模型清晰,用户能一眼看懂价值;涉及点单、支付、购物车、后台管理、数据统计这些经典模…

2026/10/13 23:59:41 阅读更多 →
微生物群落结构差异分析:从统计显著到生物学可解释

微生物群落结构差异分析:从统计显著到生物学可解释

1. 这不是“画个热图就完事”的统计游戏很多人第一次接触“微生物群落结构差异分析”&#xff0c;脑子里浮现的是一张带颜色的热图、几个堆叠柱状图&#xff0c;外加一句“两组间存在显著差异&#xff08;p<0.05&#xff09;”。我见过太多项目——某高校实验室的土壤样本测…

2026/10/13 23:59:41 阅读更多 →
智慧用能研究院Java一面:高频考点与模拟面试实战拆解

智慧用能研究院Java一面:高频考点与模拟面试实战拆解

一个模拟出来的“研究院一面”&#xff0c;为什么值得认真拆&#xff1f;很多同学一听说“模拟面试”就觉得是走过场——找个学长学姐或者培训机构老师&#xff0c;照着简历问一圈&#xff0c;然后给个“不错”“基础还行”的评价&#xff0c;就结束了。但我可以负责任地讲&…

2026/10/13 23:59:41 阅读更多 →
AnyPS5:基于语义桥接的PS5游戏跨平台运行技术解析

AnyPS5:基于语义桥接的PS5游戏跨平台运行技术解析

1. 项目概述&#xff1a;一个被误读的命名现象&#xff0c;背后是跨平台兼容性设计的现实困境“AnyPS5”这个词最近在多个技术社区和硬件讨论区频繁出现&#xff0c;但几乎没人能说清它到底指什么。它既不是索尼官方发布的型号&#xff0c;也不是某款已上市设备的代号&#xff…

2026/10/13 23:59:41 阅读更多 →
Manjaro GNOME配置包冲突:manjaro-gnome-settings与-18.0互斥解析

Manjaro GNOME配置包冲突:manjaro-gnome-settings与-18.0互斥解析

1. 问题本质&#xff1a;这不是系统坏了&#xff0c;是包管理器在“认真履职”刚看到这个报错——manjaro-gnome-settings 与 manjaro-gnome-settings-18.0 有冲突——很多刚从Ubuntu或Windows转来的用户第一反应是“系统崩了”“是不是升级把GNOME搞挂了”。其实恰恰相反&…

2026/10/13 23:59:41 阅读更多 →
MyBatis插件机制深度剖析:从动态代理到SQL改写与加解密实战

MyBatis插件机制深度剖析:从动态代理到SQL改写与加解密实战

1. 插件机制的本质&#xff1a;不是魔法&#xff0c;是接口的排列组合我最早接触Mybatis插件的时候&#xff0c;把文档翻来覆去看了好几遍&#xff0c;脑子里一直是糊的。原因很简单&#xff1a;网上大部分教程上来就丢一个拦截器的代码&#xff0c;然后告诉你“这样就能自动分…

2026/10/13 23:58:40 阅读更多 →

日新闻

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →