news 2026/9/25 14:53:08

Atlas 300V 24G部署YOLO模型实战:从环境搭建到推理调优

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Atlas 300V 24G部署YOLO模型实战:从环境搭建到推理调优

这两年在AI落地项目里,围绕“atlas部署yolo”来问的人越来越多。做工业质检、智慧安防、边缘计算盒子的朋友,手里拿着一块Atlas 300V 24G,第一反应基本都一样:这卡到底是不是运算加速卡,能不能把我这套YOLO模型跑起来,部署起来难不难?

先说结论:Atlas 300V 24G是运算加速卡,但它和常见的游戏显卡、通用GPU不是一回事,它是一张昇腾生态里的AI推理加速卡。它的定位非常明确——模型已经训练好了,要稳定、低延迟、高吞吐地跑推理任务,这个卡非常合适,尤其适合YOLOv5、YOLOv8这类目标检测模型。这篇文章我按自己实际做项目的顺序,把选型判断、环境搭建、模型转换、推理落地到性能调优、踩坑排查整个流程完整写一遍,给你一份能直接照着操作的参考。

1. 先把硬件看清楚:Atlas 300V 24G是一张什么样的卡

1.1 定位与算力:它是推理加速卡,不是训练卡

很多人第一次接触昇腾卡时,容易拿它跟NVIDIA的GPU直接对照,然后发现装驱动、转模型的思路全对不上。这里要先把定位问题讲透。

Atlas 300V 24G使用的是昇腾310P系列处理器,官网标称的INT8算力最高为240 TOPS,FP16也算力可观。但请注意,它在设计上的侧重点是推理,不是训练。什么意思呢?如果你打算在这张卡上从零开始训练一个YOLO模型,那不太现实,训练效率和生态支持都远不如训练卡或NVIDIA数据中心卡;但如果你已经有一个训练好的PyTorch或者ONNX模型,想把推理部署到生产环境里,这张卡在功耗、体积、单卡并发路数上是很有优势的。

我用一个生活化的类比帮助理解:训练卡好比一个厨师学校,帮你把菜的做法练出来;推理卡则是一个标准化餐厅厨房,每道菜按既定配方快速出餐。Atlas 300V 24G就是这样一个标准化出餐厨房,你要做的是把配方(模型)转换成它认得的格式,然后高效出餐。

功耗方面,Atlas 300V 24G的典型功耗并不高,官方规格大致在70多瓦到80瓦级别,远远低于动辄几百瓦的数据中心GPU。对于边缘服务器、小机箱工控机、一体化智能站这些场景来说,这是很核心的选型优势。加上被动散热或者自带风扇的设计,部署环境要求并不苛刻。

1.2 24G大显存的实际意义:能做什么,不能做什么

关于显存,先要把一个误区说清楚:24G显存在推理卡上并不是用来“塞超大模型”这么简单。推理场景下显存的作用有两大块:一是装下模型本身,二是容纳多路并发推理的中间数据。如果你的业务是得多路视频流同时做检测,24G的余量非常关键。

举例来说,我们用YOLOv5s模型,输入尺寸640x640,单路推理的显存占用也就几百MB到1GB左右。在这种情况下,24G显存能轻松支撑多路并发,让一张卡的价值最大化。而如果换成YOLOv8x这类大模型,模型参数加特征图缓冲区可能到3到4GB,24G仍然能从从容容。

但也要说明白,24G这个数字并不等于你可以在推理卡上随意开超大batch训练微调。推理卡的驱动、算子库和显存调度都围绕推理场景设计,一些训练框架在它上面跑不仅慢,还可能因为算子兼容问题直接跑不起来。我在实际项目中的做法是:训练永远在GPU或者云上完成,Atlas只负责最终的模型推理。

另外,Atlas 300V标准版和Pro版有个细节区别:部分Pro版本会带视频解码能力,更偏向视频解析。如果你的项目主要输入是RTSP视频流,建议把解码能力纳入考量,选型时确认好对应型号是否支持解码。而这一篇我们侧重讨论YOLO模型推理,所以我按照标准版的部署方式来介绍,但流程同样适用。

1.3 服务器选型和供电散热,这些细节不能省

在实际部署时,主板兼容性、供电、散热这些硬件层面的问题往往比软件更先卡住你。Atlas 300V 24G是一张标准PCIe半高卡,接口是PCIe x8或者x16都可以工作,供电依靠PCIe插槽本身以及可能附加的辅助供电接口。

我遇到过几个低级坑,这里先说清楚,免得后面再踩:

  • 主板BIOS里建议关闭CSM,开启UEFI模式,否则昇腾驱动在部分主板上会有中断分配问题。
  • 如果服务器上插了两张Atlas卡,注意PCIe带宽分配。部分消费级主板走PCH通道的PCIe插槽速度不稳定,建议插到直连CPU的插槽上。
  • 供电方面,尽量用品牌服务器或者工作站电源,不要用“二手矿龙”之类的杂牌电源。昇腾卡对电压稳定性比较敏感,供电纹波大容易出现莫名其妙的设备丢失。

安装好卡以后,可以用昇腾自带的npu-smi工具查看驱动是否识别到卡、温度、功耗、显存占用等状态。这一步我们下一节具体说。

2. 部署前的软件栈准备,一步步装齐环境

2.1 驱动、固件和CANN版本怎么对应,才不会白折腾

昇腾的软件栈比NVIDIA要复杂一层,这是很多从GPU转过来的人最不适应的地方。简单说,你的服务器上需要装三样东西:驱动(Driver)、固件(Firmware)和CANN工具包。

驱动负责操作系统与NPU设备之间的通信,固件负责NPU芯片内部的微码和底层管理,CANN则相当于CUDA工具包,提供算子库、推理运行时和模型转换工具。三者版本有配套关系,不能随便拼凑。官方文档里会给出一个“版本配套表”,我的建议是直接安装同一版本号下的全套组件,例如CANN 8.0系列对应HDK 24.1系列,不要混用。

操作系统方面,官方正式支持Ubuntu 20.04/22.04 x86_64、openEuler、CentOS等。我个人长期使用Ubuntu 20.04,稳定性最好,踩坑最少。内核版本太新也可能导致驱动编译失败,如果你用Ubuntu 22.04遇到问题,可以检查一下内核版本是否在官方支持列表内。

下载地址在昇腾社区,需要注册账号就能拿到。下载的时候认准“Ascend HDK”和“Ascend Toolkit”两个包就够了。

2.2 CANN工具包安装:一个run文件搞定大部分事

昇腾的安装包是.run格式,安装方式比RPM包要简单一些。拿到驱动、固件、工具包三个.run文件后,安装顺序不能乱:先驱动,再固件,最后CANN。

整个安装流程我记录一下:

# 1. 安装NPU驱动,--full表示全量安装 ./Ascend-hdk-310P-npu-driver_24.1.rc1_linux-x86_64.run --full # 2. 安装固件 ./Ascend-hdk-310P-npu-firmware_24.1.rc1_linux-x86_64.run --full # 3. 安装CANN工具包 ./Ascend-cann-toolkit_8.0.rc1_linux-x86_64.run --install --install-for-all

安装完成后,先把环境变量加载好:

source /usr/local/Ascend/ascend-toolkit/set_env.sh

然后验证一下设备状态:

npu-smi info

正常情况下,你能看到类似下面这样的输出,包括芯片名称、温度、显存使用率、功耗等信息:

+-------------------------------------------------------------------------------------------+ | npu-smi 24.1.rc1 Version: 24.1.rc1 | +---------------------------+---------------+---------------------------------------------+ | NPU Name | Health | Power | HBM-Usage | | 0 310P3 | OK | 45W | 8% / 24GB | +---------------------------+---------------+---------------------------------------------+

看到这里,说明驱动和固件已经正常工作。如果报错或者看不到设备,大概率是驱动安装问题或者主板BIOS设置问题,后面专门讲排查。

2.3 对外提供推理服务时,MindX SDK要不要用

环境装好之后,很多人会纠结一个问题:用纯AscendCL写推理,还是用MindX SDK封装好的pipeline?

我自己的经验是分两种情况:

如果你只是验证模型能不能跑,或者做定制化很强的推理逻辑,直接用AscendCL。它相当于CUDA里的Driver API,灵活度高,但代码量不小。如果你想快速上线一个类似“取流、解码、推理、后处理、输出”的完整视频分析服务,优先考虑MindX SDK。它把视频解码、图像缩放、预处理这些常见模块都封装成了插件,用配置文件就能组装一条推理流水线,开发效率高很多。

不过MindX SDK的版本和CANN也有配套关系,安装时留意版本对应。这篇博文主要讲YOLO模型部署的核心流程,所以我以AscendCL为主展开,这个路径可以让你把底层原理吃透,之后再用SDK会非常顺手。

3. 模型转换:从PyTorch权重到OM模型

3.1 先把模型导出成ONNX,这些坑一定要绕开

Atlas上的原生推理模型格式叫OM(Offline Model),它由CANN自带的ATC工具从ONNX、TensorFlow、MindSpore等格式转换而来。我们主流路线是:PyTorch训练得到pt权重,导出ONNX,再用ATC转成OM。

导出ONNX这一步看起来简单,但里面的细节直接影响后续能否转换成功。先看命令:

# YOLOv5写法 python export.py --weights yolov5s.pt --include onnx --opset 11 --img-size 640 # YOLOv8写法 yolo export model=yolov8s.pt format=onnx opset=11 imgsz=640

导出之后一定要做一件事:用Netron可视化工具打开ONNX文件,确认计算图和输入输出节点。YOLOv5系列导出后,输入通常是images,输出是一个形状为[1, 25200, 85]的Tensor;YOLOv8则输出[1, 84, 8400]这种排列,维度顺序不一样,后处理逻辑也不一样。

这里有一个最常见的坑:NMS要不要导出到ONNX里。我的答案是不要。YOLO训练时框架自带的NMS算子复杂,ATC对自定义NMS支持不稳定,而且NMS包含大量循环和条件判断,放到NPU上反而拖慢性能。正确做法是导出时把模型输出停留在原始预测张量,然后让宿主机CPU做解码、过滤和NMS。YOLOv5的export.py默认不会导出自定义NMS,但如果你用了某些第三方修改版,要手动去掉。

另外一个细节是动态shape。ONNX导出时如果你设置了dynamic=True,ATC转换会尝试支持动态输入尺寸。但动态shape推理时性能会有明显下降,内存分配也更麻烦。生产环境里,如果没有必须支持多尺寸输入的需求,我强烈建议导出固定尺寸,例如640x640。在预处理阶段用letterbox统一缩放填充就好。

3.2 ATC转换:一条命令把ONNX变成OM模型

ONNX准备好之后,核心的转换命令如下:

source /usr/local/Ascend/ascend-toolkit/set_env.sh atc --model=yolov8s.onnx \ --framework=5 \ --output=yolov8s_bs1 \ --input_shape="images:1,3,640,640" \ --soc_version=Ascend310P3 \ --insert_op_conf=aipp.cfg \ --output_type=FP32

我来逐项解释参数的意义,方便你自己调:

  • --framework=5表示输入是ONNX模型。MindSpore是1,TensorFlow是3,ONNX是5。
  • --input_shape对应模型输入节点的名称和维度,注意要和ONNX里的输入名完全一致,否则会报错。YOLOv8默认输入名是images,YOLOv5也是images,但你自己改过导出脚本的话需要以实际为准。
  • --soc_version指定目标芯片类型。310P芯片一般填Ascend310P3,但具体型号不同会有差异,可以用npu-smi info查看NPU名称来确认。
  • --insert_op_conf指定预处理配置,下一节详细说。
  • --output_type=FP32用于保持输出精度。如果模型输出最后接的是FP32预测值,这里设成FP32,避免默认的FP16带来精度损失。

转换成功后,会在当前目录生成yolov8s_bs1.om文件。可以用以下命令做模型信息核对:

omg -o yolov8s_bs1.om --check

或者直接用Ascend自带的模型查看工具确认输入输出形状。

3.3 AIPP配置:把归一化和通道顺序在硬件上解决

ATC支持把一部分图片预处理操作融合进模型,这就是AIPP(AI Preprocessing)。常见的像素归一化、减均值、通道变换、Resize都可以配置。

YOLO系列训练时通常会把图像像素从0到255缩放到0到1,也就是除以255。这个操作如果在CPU上做,一千张图片就要白白占用很多CPU时间;放到AIPP里,NPU处理数据的同时就完成了归一化。

下面是一个典型的aipp.cfg文件:

aipp_op { aipp_mode: static input_format: RGB888_U8 mean_var_chn_0: 0 mean_var_chn_1: 0 mean_var_chn_2: 0 var_reci_chn_0: 0.003921569 var_reci_chn_1: 0.003921569 var_reci_chn_2: 0.003921569 }

这里var_reci_chn是方差的倒数,0.003921569就是1/255。如果模型训练时用了ImageNet均值,则需要把mean换成对应值。

使用AIPP后,模型输入变成了NHWC格式的Uint8数据。因此你在推理代码里喂进去的图像必须是未归一化的原始图像数据,不能再除以255,否则相当于做了两次归一化,输出会全部乱掉。这个错误我见过很多次,一定要小心。

另外注意通道顺序。OpenCV读取图像默认是BGR,YOLOv5和YOLOv8训练时通过cv2读图后会转换到RGB再进网络。所以如果网络期望RGB,而AIPP的input_format写成BGR888_U8,图像颜色通道就反了,推理结果会非常奇怪——目标框还在,但分类几乎是错的。我一般直接配置RGB888_U8,在推理代码里用cv2读图后转成RGB再传给NPU。

4. 推理落地:AscendCL调用OM模型

4.1 初始化、加载模型、申请内存,三件事的顺序别搞错

模型转换完成后,就到了写推理代码的环节。我用Python版的pyACL来做演示,它的API和C++版本一一对应,方便理解。

先看初始化和加载模型的骨架:

import acl # 1. 初始化ACL ret = acl.init() assert ret == 0, f"acl.init failed, ret={ret}" # 2. 设置设备,0表示第一张卡 ret = acl.rt.set_device(0) assert ret == 0 # 3. 创建上下文 context, ret = acl.rt.create_context(0) assert ret == 0 # 4. 加载OM模型 model_id, ret = acl.mdl.load_from_file("yolov8s_bs1.om") assert ret == 0

这里有几个容易忽略的细节。ACL初始化是进程级别的,一个进程里调用一次即可,不要反复init。设备号要和你npu-smi看到的编号对应,多卡服务器上要注意进程绑核,把不同进程分配到不同NPU上。

接下来需要获取模型的输入输出维度信息,然后申请Device侧内存。pyACL的显存申请一般用acl.rt.malloc,同时需要创建数据缓存对象acl.mdl.create_data_buffer。我的习惯是写一个简单封装类,把输入输出buffer的管理统一起来,避免每个推理请求都重新申请内存。

推理执行的代码:

# 启动推理 ret = acl.mdl.execute(model_id, input_data_list, output_data_list) assert ret == 0

注意execute是同步执行,也就是说调用返回时推理已经完成,可以直接从输出buffer取数。如果需要做并行流水线,可以让多个线程分别持有不同的输入输出buffer交替执行,达到“数据搬运和计算重叠”的效果。

4.2 YOLO后处理:decode、过滤、NMS在CPU上完成

从OM模型拿到的原始输出并不是最终的检测框,需要经过decode和NMS两步处理。这一步在宿主机CPU上做。

以YOLOv8为例,输出节点的形状通常是[1, 84, 8400],其中84是4个框坐标(cx, cy, w, h)加80个类别概率,8400是不同尺度特征图上的候选框数量。拿到输出后,第一步是转置成[8400, 84],然后按列解析。

后处理的核心流程就是三个函数:decode把模型输出变换成真实坐标,conf过滤把低置信度框丢掉,NMS去除重叠框。这部分用纯numpy写也就几十行,我贴一下最关键的结构:

def decode_output(pred, conf_thres=0.25, iou_thres=0.45, num_classes=80): # pred shape: [8400, 84] # 分离box和cls boxes = pred[:, :4] class_probs = pred[:, 4:] # 得到每个box的最高类别分数和索引 conf = class_probs.max(axis=1) cls_id = class_probs.argmax(axis=1) # 置信度过滤 mask = conf > conf_thres boxes = boxes[mask] conf = conf[mask] cls_id = cls_id[mask] # 这里再把cx,cy,w,h转为x1,y1,x2,y2 # 然后用cv2.dnn.NMSBoxes执行NMS # 返回最终框 return final_boxes

关于缩放还原,注意输入图像做了letterbox,处理完之后要把检测框坐标减去填充偏移,再除以缩放比例,映射回原图尺寸。yolo的letterbox算法在部署时很容易被忽略,导致画框位置偏移。我自己常用一个解决办法:把letterbox的ratio和padding信息保存下来,后处理时直接使用。

另外,YOLOv5的输出形状是[1, 25200, 85],排列是[box(4), objectness(1), class(80)],和YOLOv8不一样。你有YOLOv5模型时,记得先把输出reshape再按85维解析,objectness那个维度不能直接丢掉。

4.3 性能实测:24G显存跑YOLO是什么水平

环境搭好、代码调通后,我最关心的就是实际性能。以YOLOv5s模型、640x640输入、batch=1为例,我在多台服务器上实测,单帧端到端延迟大概在8到15毫秒之间浮动,具体取决于CANN版本、是否启用AIPP、CPU核数以及机器负载。如果开启多batch并配合异步推理,吞吐量能明显更高。

用Atlas 300V 24G支撑多路视频流时,24G显存的价值就体现出来了。我做过一个测试:同时启动8路推理线程,每路跑一个YOLOv5s实例,每路处理25帧/秒的视频,设备显存占用大概只到了40%左右,整卡功耗也很稳。这种并发能力对于边缘场景来说非常实用。

性能数字仅供参考,实际差异主要来自三点:一是模型是否固定shape;二是预处理是否做到AIPP里;三是后处理是否有优化。后面会详细讲。

5. 性能调优与常见问题排查实录

5.1 一套可复用的调优顺序,先软件后硬件

性能不达标时,我建议按一个顺序排查:数据搬运、预处理、模型执行、后处理。这四个环节里最容易被忽视的是数据搬运和预处理。

先说数据搬运。AscendCL的acl.rt.memcpy负责Host和Device之间的数据拷贝。如果每一帧图像都先分配新内存再拷贝,会造成大量的内存分配开销。我的做法是预分配固定大小的输入输出buffer,每一帧数据直接memcpy进去,避免反复malloc和释放。显存和内存分配都是耗时操作,复用是最高性价比的优化。

再说预处理。能交给AIPP的绝对不要留在CPU上。很多项目里YOLO推理本身只有几毫秒,CPU做resize、归一化反而占了更长的时间。我在一个项目里把图像缩放和归一化全部交给AIPP后,整体端到端延迟从22毫秒降到了13毫秒,效果非常明显。

然后是模型执行。如果batch=1的模型性能已经到瓶颈,可以尝试加大batch到4或8,用批量推理换吞吐量。但需要同步修改ATC转换时的--input_shape,比如images:4,3,640,640,并生成一个batch=4的OM模型。推理时把多帧图像拼成一个batch做一次推理,再在CPU端拆开做后处理。

最后说后处理。模型输出8400个候选框,在CPU上用逐元素循环遍历是很慢的。要学会用numpy的向量化操作代替循环,一次pred[:, 4:]就能完成分类分支的切片。如果后处理还是很慢,可以用Cython或者把numpy优化到极致。实在不行,可以只取少数几个特征图输出,但那样可能影响小目标检测效果,一般不建议。

5.2 我遇到过的几个高频报错和解决方法

记录几个我在不同机器上反复遇到的报错,这些在排障时非常典型:

报错一:atc: command not found

原因很简单,环境变量没有source。执行source /usr/local/Ascend/ascend-toolkit/set_env.sh,或者把它写进~/.bashrc。还有一种可能是只装了驱动没装CANN,检查一下/usr/local/Ascend/ascend-toolkit目录是否存在。

报错二:ATC转换时E19999或E10001

这类一般是模型或参数问题。E19999通常表示内部编译错误,最常见的原因是--soc_version填错了,或者模型里有ATC不支持的算子。先用npu-smi info确认芯片型号,再检查ONNX里是否有特殊算子。如果是自定义算子,需要先注册或替换成基础算子集合里的等价实现。

报错三:运行时acl.mdl.load_from_file返回非0

原因通常是OM模型和当前驱动不匹配,或者模型是在其他版本CANN下转换的。建议在部署机上用同一个CANN版本重新转换OM,不要贪图方便直接拷贝别处转换好的文件。

报错四:推理输出全是0或者全是一个常数

这个错误我排查过多次,九成出在输入数据上。拿AIPP开启前后的输入差别来解释:开启AIPP后模型输入是Uint8原始图像,但代码里如果还按老逻辑先除以255,输出自然全乱。还有通道顺序反了也会让分类结果异常。把预处理逻辑重新读一遍,确认输入数据的格式和模型转换时完全一致。

报错五:acl.rt.set_device时报设备不存在

先看npu-smi能不能看到卡。如果npu-smi也看不到设备,很可能是驱动加载失败。重新执行一次驱动的.run --full安装,并确认固件版本匹配。如果驱动正常而ACL里看不到卡,检查进程权限,有时昇腾设备文件权限不对,需要用root或者其他用户加组。

5.3 多卡部署时的资源分配经验

如果服务器上插了两张或更多的Atlas卡,分配策略也很重要。最常见的方式是每个进程绑定一张卡,用环境变量或者启动参数指定设备编号。

举个例子,你写了一个推理服务Python脚本,打算开两个实例跑两张卡:

# 实例1使用NPU 0 ASCEND_RT_VISIBLE_DEVICES=0 python inference_service.py --port 8001 # 实例2使用NPU 1 ASCEND_RT_VISIBLE_DEVICES=1 python inference_service.py --port 8002

需要注意的是,昇腾驱动会按照卡的实际顺序编号,而且物理插槽位置可能影响性能。两条卡如果插在同一个PCIe switch下面,设备间通信带宽可能会有共享瓶颈。对独立推理任务来说影响不大,但如果要做卡间通信的流水线,就要仔细规划PCIe拓扑。

另外,多进程加载同一个OM文件时,每张卡会各自维护一份模型副本。24G显存对这个量级的模型来说非常宽裕,但如果你用MindX SDK跑视频解析pipeline,注意系统内存也要同步分配,因为解码出来的视频帧缓存在Host端内存里。

6. 一点个人经验分享

Atlas 300V 24G这块卡,我用下来的最大感受是:它确实是一张实打实的AI推理运算加速卡,但它的工作方式和NVIDIA生态很不一样。它的强项不在于你能像用CUDA一样写出各种自定义kernel,而在于你按昇腾的工具链走对流程,它能在极低功耗下输出稳定的推理性能。这也是为什么工业现场、边缘盒子里越来越多见到它的身影。

如果你现在正准备在Atlas 300V 24G上部署YOLO模型,我最后再给你三个建议。第一,选型阶段就确认好有没有视频解码需求,型号选错了后面很麻烦;第二,软件栈一定用同一版本的驱动、固件和CANN,不要混搭;第三,从ONNX到OM转换和后处理的流程,在项目早期就固定下来,后面换模型或者换分辨率只会越来越轻松。希望这篇记录能帮你少走一些弯路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 14:51:39

传奇客户端大合集:版本匹配、文件整理与Win10/11兼容运行全指南

玩传奇这游戏十几年的人聚在一起,嘴上聊的是装备、爆率和沙巴克,聊到后半场基本都会绕回同一个话题:你手上还有没有XX版本的客户端?这话听着像收藏古董,可真正折腾过传奇客户端的人心里都明白,一套版本齐全…

作者头像 李华
网站建设 2026/9/25 14:51:38

第056篇 网易·初中级工程化面经——前端构建体积优化有哪些手段,Tree Shaking 如何生效

摘要:本篇复盘 网易 前端开发岗位在 工程化 方向的真实问法,重点拆 8 道题:MVC、MVP 与 MVVM 的差异与取舍、前端构建体积优化有哪些手段,Tree Shaking 如何生效、Webpack 与 Vite 的核心差异,各自适用场景。每题按「考察点 → 参考答案 → 代码/实操 → 易错点 → 面试官…

作者头像 李华
网站建设 2026/9/25 14:49:42

CTF Linux 内核 Pwn:SMEP/SMAP 与用户代码不可执行防护的攻防全解析

文档网络安全教程 【免费下载链接】ctf-wiki Come and join us, we need you! 项目地址: https://gitcode.com/gh_mirrors/ct/ctf-wiki 点击查看 免费下载 本篇文章聚焦 CTF Linux 内核 Pwn 中最基础也最关键的防御机制——SMEP(Supervisor Mode Execut…

作者头像 李华
网站建设 2026/9/25 14:44:37

ng-zorro-antd Button 加载中状态(nzLoading)完整实战指南

UI组件前端 【免费下载链接】ng-zorro-antd Angular UI Component Library based on Ant Design 项目地址: https://gitcode.com/gh_mirrors/ng/ng-zorro-antd 点击查看 免费下载 导读 在 Angular 应用中使用 ng-zorro-antd 的 Button 组件时,nzLoadin…

作者头像 李华
网站建设 2026/9/25 14:43:22

Atlas 300V 24G推理加速卡部署YOLOv5:从模型转换到性能调优实战

1. 先搞清楚:Atlas 300V 24G到底是不是运算加速卡最近不少做视觉算法落地的朋友在问Atlas,特别是Atlas 300V 24G这张卡。问题集中在两个:这玩意儿到底算不算运算加速卡,以及它能不能拿来部署YOLO。我今天就把这块卡从头到尾聊透—…

作者头像 李华
网站建设 2026/9/25 14:38:29

多智能体协同工程化实战:角色拆分、通信契约与上下文管理

1. 从"一个模型打天下"到"一支队伍打硬仗":多智能体协同到底在解决什么如果你最近半年在关注 AI 研发的工程化落地,大概率会反复撞见一个词——多智能体协同。但真正让我决定动手写这篇总结的,不是概念本身有多热&#x…

作者头像 李华