新闻详情

新闻详情

首页 / 资讯中心 / 详情

Atlas 300V 24G 是AI加速卡吗?昇腾NPU部署YOLO全流程实战

发布时间:2026/9/26 14:40:14来源:尧图网络
Atlas 300V 24G 是AI加速卡吗?昇腾NPU部署YOLO全流程实战
看到这个标题估计不少做边缘AI部署、视频分析的朋友都搜到了同一个问题Atlas 300V 24G 是运算加速卡吗先把答案拍在这儿是而且不是普通显卡是一块专门为深度学习推理设计的AI加速卡基于昇腾NPU架构不接显示器、不跑渲染、更不拿来打游戏。它最常出现的场景是服务器里做视频流分析、工业质检、OCR识别还有我们今天要聊的这件事——部署YOLO系列模型。这块卡在社区里热度不低尤其是24G显存版本很多人拿不准它和普通GPU有什么区别也不知道YOLO模型从PyTorch权重到NPU可执行的OM模型中间要走多少弯路。这篇文章我按自己的实操顺序写一遍从硬件定位到环境搭建、模型转换、推理调优最后附上我踩过的坑。准备入手这块卡、或者已经插在服务器里还没跑通的兄弟可以直接按这个流程走。1. 这块卡的本质不是显卡是推理加速器1.1 它算什么类型的运算加速卡先回到那个热搜问题“Atlas 300V 24G 是运算加速卡吗”准确说法是它是一块AI推理加速卡属于华为昇腾计算产品线的Atlas系列。这卡的核心计算单元不是CUDA Core而是昇腾AI Core开发接口也不是CUDA而是CANN工具链做的AscendCL。你把它想象成一个专门跑神经网络前向计算的专用处理器CPU负责调度和数据预处理NPU负责矩阵乘加、卷积这些重活分工很明确。很多第一次接触的人会拿它和NVIDIA的显卡做同类对比这里我要泼盆冷水这个类比在很多地方会误导你。首先它没有显示输出接口装了之后系统里不会多出一个显示器设备。其次它的驱动栈、编程模型、算子库和CUDA体系完全不互通你不能把已经写好的CUDA代码拿过来直接用。最后也是最重要的它的定位是“推理”不是“训练”。你用RTX 4090去微调模型没问题但拿Atlas 300V去训练属于拿错了工具昇腾的训练场景有另外的Atlas 800训练卡和专门设计的MindSpore生态。说白了训练是在工厂里造工具推理是把工具放到流水线上反复使用Atlas 300V就是那个被放到流水线上的执行者。1.2 Atlas 300V 24G在家族里的定位昇腾推理卡家族里Atlas系列有两条常见路线一条是300I系列偏通用推理另一条是300V系列名字里的V来自Video它更强调视频处理能力这颗卡上集成了硬件解码模块可以直接解码H.264/H.265视频流不用把帧数据搬到CPU去软解码能省下大量CPU占用。做视频结构化、行为分析的小伙伴对这个能力应该不陌生。我用一个表格把常见型号的定位比较一下型号核心定位显存典型使用场景Atlas 200I SoC边缘小盒子集成在模组上摄像头端的轻量AI单路或少量路数Atlas 300I Pro通用推理卡16GB / 24GB云端或边缘服务器跑各类检测、分类模型Atlas 300V视频分析推理卡24GB视频解码AI推理混合场景Atlas 300V Pro视频分析推理增强版24GB高路数视频流、多模型融合分析300V系列之所以在YOLO部署这个方向这么火核心原因就是它的“视频输入能力”和“AI算力”集成在一起。很多实际项目里输入源不是单张图片而是RTSP视频流或者录像文件用300V系列一块卡就能把解码、缩放、推理、结果输出全部串起来这是它和纯GPU方案相比最有优势的地方。1.3 24GB显存到底意味着什么24GB的显存在推理卡里属于比较宽裕的配置。很多人第一反应是“显存大就能堆大batch”这话对但在推理场景里有更实在的三种用法第一种同时加载多个模型。比如一个智慧园区项目白天跑人形检测晚上跑车辆违停分析甚至同时跑人脸和口罩识别24GB可以把几个模型全部加载到设备侧按业务需要灵活调度互不干扰。第二种大输入尺寸跑大图。工业质检经常要处理2K、4K甚至更大的原始图像小显存卡只能走切片推理也就是把大图切成小块分别检测这会带来很多工程麻烦比如目标跨片被切断、后处理逻辑变复杂。24GB基本可以直接整图输入工程上省事太多。第三种做模型集成和提升AI Core利用率。比如YOLOv8s量化后的模型权重也就几十MB上下的量级一张24GB的卡理论上可以放几百个模型实例但实际限制在算力而不是显存。不过在batch4或batch8的配置下AI Core可以同时处理多张图吞吐量比batch1提升明显具体数字后面实操部分会讲。所以我个人的判断是24GB版本对于多路视频、多模型在线服务、大图检测这类场景是把“显存焦虑”一次性解决了少了很多后面扩容的麻烦。2. 为什么YOLO上NPU前要先“翻译”一遍模型2.1 NPU不直接吃PyTorch权重在GPU上做深度学习推理最省事的方式是直接加载PyTorch的.pt权重或者用TensorRT把ONNX转成engine。但在昇腾NPU上整个链路会多一道工序PyTorch权重要先导出ONNX再用华为提供的ATC工具把ONNX转换成OM模型也就是昇腾自己的离线模型格式。这一步的本质是把网络结构逐层翻译成NPU能执行的指令序列。为什么要绕这一圈因为PyTorch的模型图只是一个逻辑抽象里面很多算子的实现方式只有GPU的kernel能执行。昇腾的AI Core有自己的指令集和计算单元划分它需要知道图里每个节点的输入、输出、数据类型、维度变化才能把计算任务映射到具体的AI Core上。ATC做的事情就是这个映射。它不是简单的格式互换而是涉及算子拆分、融合、内存复用、指令调度一系列工作。这也是为什么同一个模型有人转换出来跑得飞快有人转换出来却性能拉胯——图中算子被翻译成NPU指令的方式不同效率自然不同。举一个最常见的例子YOLOv5的输出里有一个对象置信度分支这个分支在PyTorch里只是一次sigmoid到了NPU上可能会被拆成exp、加法和除法多个基础操作如果ATC能在图优化阶段把它融合成一个lookup table或者一个近似算子速度就能上去。这些细节肉眼看不到只能靠工具的可视化去看但了解这个背景你就知道“模型转换阶段不做优化后面性能天花板就定了”这句话真不是吓唬人。2.2 预处理交给AIPP别在CPU上浪费算力CANN里有个专用于图像预处理的硬件模块叫AIPPArtificial Intelligence Pre-Processing意思是把缩放、裁剪、减均值、除以标准差这些常见操作放到硬件上执行。在很多部署工程里数据预处理在CPU上做一帧640×640的图像做letterbox加归一化少说也要几毫秒这在单帧测试时看不出问题一旦跑视频流、一秒钟25帧以上这部分耗时会非常扎眼。在Atlas 300V上AIPP是一个内置的硬件单元它可以直接读取输入图像的内存按照配置做一组预定义变换然后把结果直接交给AI Core整个过程CPU不参与数据搬运。需要注意的是AIPP的配置要和模型训练时的预处理保持一致不然会出精度问题。比如YOLOv5训练时如果用的是RGB顺序、像素值除以255归一化那AIPP的crop、resize、padding这些参数就必须严格对应。尤其是letterbox的填充比例和填充值AIPP里配置错一个推理出来的框就会整体偏移或者全部消失。我自己常用的方式是把letterbox的逻辑在模型外部先处理好AIPP里只做“数据摆布调整加归一化”。原因是letterbox需要知道原始图像尺寸和模型输入尺寸的比例关系如果让AIPP做还要在配置里写死坐标很不灵活而在外部做好padding之后再传给AIPP做归一化和通道顺序调整代码写起来更可控。2.3 算子兼容性检查先看清你的模型里有没有“刺头”模型转换最麻烦的往往不是主流算子而是那些冷门组合。YOLO系列还好除了常规的卷积、BatchNorm、SiLU激活、上采样、Concat之外一般没有太多特殊算子。但YOLOv5的检测头在导出ONNX时有时会带上一些Python端的操作比如grid生成、exp计算这些操作在PyTorch里是隐式完成的导出时要么被自动展开成ONNX算子要么直接被分成多个子图需要后续用脚本单独处理。我的经验是导出ONNX之后先用Netron打开模型图看一眼输出节点。YOLOv5系列的理想输出应该是3个检测头分支每个分支的形状是batch×anchor×(x,y,w,h,obj,class...)×grid×grid而YOLOv8则是2个分支cls和reg分布前置。如果输出节点数量不对或者多出来一些奇奇怪怪的中间节点那转OM之后往往也跑不通。另外一个容易炸的算子是多分类的NMS非极大值抑制。NMS本身涉及大量条件判断和动态循环NPU对这种动态shape的逻辑执行很不友好所以标准做法是模型只负责输出原始检测结果NMS放到CPU上做。这也解释了为什么YOLO在NPU上部署时后处理往往成为性能短板。你要有心理准备模型推理本身可能只需要10ms但NMS加坐标还原可能再吃掉20ms后面优化时可以单独针对这块下功夫。3. 亲手把YOLOv5部署到Atlas 300V 24G全流程实操3.1 环境准备驱动、固件、CANN一个都不能少部署的第一步是搭环境思路可以完全参考“给新电脑装显卡驱动”。在Atlas 300V上用到的核心组件有驱动Driver、固件Firmware和CANN工具包。驱动负责让操作系统识别到NPU设备固件则管理NPU内部的一些底层逻辑CANN包含开发库和工具链三者版本必须配套否则会报各种奇怪的错误。最简单的验证方法是查看设备是否被识别npu-smi info如果输出里能看到一个设备编号、芯片型号和显存容量比如类似“Atlas 300V Pro 24GB”的信息就说明驱动和固件已经正常识别设备了。如果这一步报错别急着写代码先把驱动和固件版本对齐再说。CANN我建议直接装官方提供的Docker镜像基于Ascend基础镜像起一个容器把CANN环境变量都配好。好处是版本依赖清晰不会污染宿主机而且后续升级换版本也方便。镜像里一般已经包含了ATCK工具和Python的AscendCL接口省去很多手动安装的麻烦。进容器之后先用一个最小的样例做环境自检。比如官方CANN包里的resnet50样例跑通一次推理确认整个驱动栈没问题再继续后面的步骤。这一步很多人会跳过去结果后面自己的模型跑不通时根本分不清是环境问题还是模型问题。3.2 从PyTorch权重到ONNX注意几个容易卡的细节以YOLOv5为例我从YOLOv5官方仓库拿到预训练权重后一般会写一个简单导出脚本。核心要点有三个设置模型为eval模式、固定输入尺寸、指定ONNX的opset版本。import torch from models.experimental import attempt_load model attempt_load(yolov5s.pt, devicecpu) model.eval() dummy_input torch.zeros(1, 3, 640, 640) torch.onnx.export( model, dummy_input, yolov5s.onnx, opset_version11, input_names[images], output_names[output0, output1, output2], dynamic_axesNone, do_constant_foldingTrue ) print(export done)这里有几个容易踩的坑。第一个opset版本不能随意调高ATC的算子兼容性在不同版本上不一样我建议先试opset11如果遇到不支持的算子再考虑升到13。第二个默认导出的YOLOv5会包含画框相关的部分比如nms模块或者某些后处理节点这些在部署到NPU时不是必须的可以考虑在导出前把模型的后处理部分裁剪掉只保留检测头输出后处理全部放到Host侧用Python或者C处理。第三个固定输入尺寸这件事最好在导出的onnx里就固定住虽然导出的接口参数dynamic_axes可以设置为动态但动态shape转OM的时候处理复杂度高性能也差没有特殊需求就不要动态。导完之后建议用Netron检查输出名称和shape如果一切符合预期就可以进入下一步ATC转换了。3.3 ATC转换从ONNX到OM这一步决定你后面跑得快不快ATC是CANN自带的模型转换工具它的输入是ONNX输出是OM。一个常用的转换命令大概是这样的atc \ --modelyolov5s.onnx \ --framework5 \ --outputyolov5s_int8 \ --soc_versionAscend310P3 \ --input_shapeimages:1,3,640,640 \ --input_formatNCHW \ --insert_op_confaipp.cfg \ --output_typeFP16 \ --precision_modeallow_mix_precision参数说明--framework5代表ONNX--soc_version根据实际芯片型号来定Atlas 300V Pro对应的是Ascend310P系列具体到哪个版本号可以用npu-smi info查看也可以去CANN文档里查对应表--input_shape必须和你导出ONNX时的输入保持一致--insert_op_conf就是前面提到的AIPP配置文件--output_typeFP16是让模型输出层用FP16precision_modeallow_mix_precision则允许混合精度。AIPP配置文件的写法大概是aipp_op { aipp_mode: static input_format: RGB888_U8 mean_chn_0: 0 mean_chn_1: 0 mean_chn_2: 0 min_chn_0: 0 min_chn_1: 0 min_chn_2: 0 var_reci_chn_0: 0.003921569 var_reci_chn_1: 0.003921569 var_reci_chn_2: 0.003921569 crop: false }这里是按yolov5的常规处理来配的输入RGB、像素值0-255、除以255归一化所以mean设0var_reci设1/255。如果你的模型用的是ImageNet的mean和std就得改成对应值。另外要注意模型内部如果也做了归一化那AIPP这里就不能重复做否则特征会乱套。转换完成后会生成一个yolov5s_int8.om文件这个文件就是后续推理要加载的模型。有个小技巧模型转换时生成的*.txt文件记录了算子优化情况比如某些算子被替换了、融合了建议翻一下能发现不少性能优化的线索。3.4 用AscendCL写推理代码加载、执行、取结果的完整套路环境OK、模型OK接下来就是用AscendCL写推理逻辑。先跑一个最朴素的版本只做单张图片推理验证整个链路通不通。from ctypes import * import numpy as np # 这里简化为伪代码风格实际使用注意指针管理 # 初始化 acl.init() acl.rt.set_device(0) context acl.rt.create_context(0) # 加载模型 model_id acl.mdl.load_from_file(yolov5s_int8.om) desc acl.mdl.create_desc() acl.mdl.get_desc(desc, model_id) # 准备输入输出 input_size acl.mdl.get_input_size_by_index(desc, 0) output_size acl.mdl.get_output_size_by_index(desc, 0) input_buffer acl.rt.malloc(input_size, 2) output_buffer acl.rt.malloc(output_size, 2) # 处理图像并拷贝到设备侧 img preprocess(test.jpg) # 返回640x640x3的RGB数据 acl.rt.memcpy(input_buffer, input_size, img.ctypes.data, input_size, 1) # 执行推理 acl.mdl.execute(model_id, input_buffer, input_size, output_buffer, output_size) # 把结果拷回主机 output np.zeros(output_size, dtypenp.uint8) acl.rt.memcpy(output.ctypes.data, output_size, output_buffer, output_size, 2) # 后处理解析三个检测头的输出并做NMS boxes, scores, class_ids postprocess(output) # 释放资源 acl.rt.free(output_buffer) acl.rt.free(input_buffer) acl.mdl.unload(model_id) acl.rt.reset_device(0) acl.finalize()实际工程中这段代码会写得更周密一些比如图像数据先拷贝到Pinned Memory再异步拷贝到设备侧异步推理和拷贝可以重叠这些都能提升吞吐。但作为第一版验证能跑通就已经成功一大半。3.5 性能验证别只看推理要算全流程耗时把单张图片跑通后下一步就是测性能。我建议把耗时拆成三段来看预处理、模型推理、后处理。用Python的time模块分别在三个位置打点跑100次取平均值这样才能定位瓶颈。在我实际测试中Atlas 300V 24G跑YOLOv5s、输入640×640、INT8量化模型、batch1时模型推理部分能跑到一个不错的水平但如果在Python里做letterbox和NMS整个端到端耗时可能翻倍。所以后面优化的重点往往不是NPU推理本身而是Host侧的业务逻辑。另外batch的影响在这里很明显。batch1时单帧耗时可能还在10ms级别但batch4时单帧分摊下来的耗时明显下降因为AI Core并行度上来了。所以如果你要做视频流分析建议攒批推理而不是一帧一帧地推吞吐量完全不是一个量级。4. 部署过程中最磨人的几个问题踩坑实录与排查4.1 常见报错速查表这条路我自己走了一遍把典型问题整理成了表格给后来的人一个快速索引现象可能原因解决办法运行npu-smi info没有设备驱动未安装成功或固件版本不匹配按文档重新安装驱动和固件确认PCIE设备被识别ATC转换报 “Unsupported OP”模型里有ATC版本不支持的算子尝试升级CANN版本、调整opset或者修改模型结构替换算子推理结果全部为0或置信度异常AIPP配置与训练时预处理不一致核对归一化参数、通道顺序、letterbox填充比例检测框位置整体偏移letterbox的padding没有同步到后处理的坐标还原逻辑保存原始图宽高和模型输入宽高在后处理时还原坐标加载OM模型报内存不足设备侧NPU内存被其他模型占满减小batch、删掉不用的模型实例、重启容器推理耗时波动大内存申请释放频繁、没做内存复用用内存池复用输入输出buffer避免每帧创建销毁4.2 典型Case模型转换成功、代码无报错、但结果就是乱套这个Case我遇到不止一次很值得单独拿出来讲。某次部署YOLOv8模型ATC转换一次成功代码执行也不报错但输出检测框的置信度全部低得离谱拉到0.05阈值依然什么都检测不到。排查思路是这样的先查模型输出shape是否符合预期。YOLOv8的输出头分两块50%概率是3个不同尺度的特征图每个特征图的通道数不同。如果shape对不上后面解析必然乱。结果一看shape是对的。再查输入预处理。YOLOv8官方仓库默认不做归一化不它训练数据是按0-1归一化的而我在外部预处理时用了0-255然后AIPP又做了一次除以255相当于归一化了两次模型自然全乱了。问题就在“外部预处理”和“AIPP处理”之间对不上。这个Case的教训非常典型同样的预处理逻辑在GPU上用Python做没问题在NPU上让AIPP也做一遍就出问题关键在于你要时刻清楚“哪些处理已经被别人做了”。所以我的习惯是在项目最开始就固定一个处理链路比如“外部只做letterbox → AIPP只做归一化和通道调整 → 输出直接给网络”然后在这个链路上反复验证不要一时一个样。4.3 性能优化从“能跑”到“跑得快”的四个关键动作部署的第一版跑通之后性能往往不理想这是正常的。我在3.5里提过End-to-End耗时要拆开看这里针对每一段说优化手段。第一图像预处理尽量下沉。能放到AIPP的就不在Python里做。AIPP的resize、归一化基本零成本而Python里的resize往往要用OpenCV不仅慢还占CPU。实测在640×640输入下把resize和归一化从Python挪到AIPP单帧可以省下5-10ms。第二后处理用C或者多线程。YOLOv5的三层输出加NMS在Python里如果写得比较随意20-30ms是有可能的。后来我用C实现NMS或者用多线程把三个输出头并行解析后处理耗时降到几毫秒。如果你不想上C也可以用Numpy向量化代替循环能快不少。第三多路视频流之间做异步流水线。把采集、预处理、推理、后处理放到不同线程用队列解耦。推理卡是专用硬件它在干活的时候CPU完全可以去做下一帧的预处理。这个优化对视频流场景特别重要它能在不增加硬件的情况下大幅提升路数。第四模型量化和多batch。INT8量化对昇腾NPU的性能提升非常明显因为AI Core对INT8的支持比FP16更强算力也更高。如果模型量化后精度满足要求务必用INT8。多batch方面如果业务允许累积几帧一起推理尽量把batch从1提高到4甚至8AI Core的利用率和吞吐都会大幅提升。5. 选型思考24G大显存到底值不值得多花预算5.1 什么情况下闭眼选300V 24G先说要满足哪些条件再考虑买它。第一业务中确实有视频流接入300V自带的硬件解码能力能大幅降低CPU压力。第二业务需要同时跑多个模型或者一个模型要服务多个业务线24G带来的内存冗余能让你很从容。第三输入图像分辨率大比如工业场景的2K、4K原图检测大显存比什么都实在。第四机房对功耗和密度有要求300V系列功耗控制得不错被动散热单台2U服务器可以插多张卡算力密度比GPU方案高不少。满足这些场景的话300V 24G可以说是物有所值。尤其是多模型、多路视频那种混合负载一块卡全搞定不用在CPU侧加那么多额外开销。5.2 什么情况下别急着买它先去搞别的方案反过来也有几种情况我不建议买。第一种你只有单路视频分析、模型也很小那用市面上几百块的边缘盒子或者Atlas 300I Pro就够300V的硬件解码和24G显存对你来说属于“性能过剩”多花预算没有必要。第二种你要做训练、调参那选NPU就是自讨苦吃训练该上GPU还得上GPU。第三种团队完全没有CANN相关经验项目周期又紧我建议慎重评估。昇腾这套工具链虽然文档已经完善很多但毕竟不是CUDAPython接口和部署范式有很多新概念学习期至少要预留一两周。别等卡买回来了才发现没人会写AscendCL代码。另外还有一个选型里的“隐性成本”未来的模型迁移。你的模型结构、算子库如果经常更新每次都要跑一遍ATC转换有些新算子可能不被支持这时候要么换结构要么等CANN版本更新。所以选型时团队的技术储备、项目时间线、模型迭代频率都要纳入考量不能只看单卡算力。5.3 给新人的几句实在话最后站在个人角度给点建议。如果你刚接触Atlas推理卡第一件事不是把模型转换出来而是先去看官方提供的YOLO样例代码和MindX SDK的推理插件。官方样例代码里面包含了正确的预处理配置、模型转换脚本和后处理逻辑在它的基础上改比从零手写省太多时间。我当时从零手写来回折腾了好几天后来看官方样例发现很多坑官方早就铺好了垫子只是自己没先看。然后拿到一块新卡优先跑通官方resnet50样例再跑官方YOLO样例最后再上自己的模型。每一步都验证完再往下走能避免很多“问题出在哪一层都不知道”的窘境。我自己在部署了几个项目之后最大的体会是NPU推理和GPU推理之间差的不是算力而是生态成熟度。昇腾的工具链每年都在变文档也在补全如果你是第一次接触别急着下结论说它不行而是要先按照官方推荐的路径走一遍把基础流程跑通再谈优化。这个过程确实需要一点耐心但跑通之后看到一块几十瓦功率的加速卡稳定输出一路路视频分析结果那种踏实感和攒电脑跑分完全不一样。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Python机器学习零基础理解朴素贝叶斯 2026/9/26 15:25:49

Python机器学习零基础理解朴素贝叶斯

在数据科学和机器学习的世界中,朴素贝叶斯算法是一种既简单又强大的分类技术。它的核心思想源于贝叶斯概率论,这是一种以数学方式处理不确定性的方法。尽管贝叶斯概率论的应用领域非常广泛——从医疗诊断到邮件过滤,从股市分析到自然语言处理——但朴素贝叶斯算法以其简单、…

阅读更多 →
(免费领源码)基于SpringBoot的编程训练和学习平台的设计与实现‑ 计算机毕设 JAVA、PHP、python、数据集、APP、小程序、C# C++、单片机、网络工程、大数据、全套文案 2026/9/26 15:25:49

(免费领源码)基于SpringBoot的编程训练和学习平台的设计与实现‑ 计算机毕设 JAVA、PHP、python、数据集、APP、小程序、C# C++、单片机、网络工程、大数据、全套文案

选题背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理编程训练系统的相关信息成为必然。开发合适的编程训练系统…

阅读更多 →
Claude Code 配 TaoToken 接入 DeepSeek:官方命令行装不上时的 config.toml 骨架与验证 2026/9/26 15:25:49

Claude Code 配 TaoToken 接入 DeepSeek:官方命令行装不上时的 config.toml 骨架与验证

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

阅读更多 →
VSCode自动打开窗口怎么关?一文详解五个设置项 2026/9/26 15:25:36

VSCode自动打开窗口怎么关?一文详解五个设置项

用了这么多年VSCode,每隔一段时间就有人来问我同一个问题:每次启动编辑器,它总爱自作主张打开一堆东西——要么弹欢迎页,要么把上次没关的窗口和文件全给恢复出来,烦不胜烦。今天把“VSCode自动打开窗口如何关闭”这件…

阅读更多 →
Photoshop新手入门教程:从版本选择到图层调色与导出全攻略 2026/9/26 15:25:35

Photoshop新手入门教程:从版本选择到图层调色与导出全攻略

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

阅读更多 →
gcgrep:给 AI 编程助手用的带索引 grep,Claude Fable 5 配置 TaoToken 实战 2026/9/26 15:25:35

gcgrep:给 AI 编程助手用的带索引 grep,Claude Fable 5 配置 TaoToken 实战

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉