Atlas 300V 24G部署YOLOv5全流程:环境搭建、模型转换与推理优化
最近手里来了两张 Atlas 300V 24G要把一套 YOLOv5 检测服务完整地迁到昇腾平台上跑起来。不少朋友第一次听到这块卡问得最多的就是Atlas 300V 24G 到底是不是运算加速卡答案是——它确实是一块运算加速卡但不是大家熟悉的那种 CUDA 显卡而是昇腾 NPU 架构的 AI 推理加速卡。这篇文章我会从板卡定位、环境搭建、模型转换、ACL 推理代码写到性能调优和报错排查全程按我实际操作的顺序来尽量把能抄作业的步骤都给你。做推理部署、服务器端目标检测或者准备从 GPU 迁到昇腾平台的人可以直接照着走一遍。1. Atlas 300V 24G 到底是个什么设备1.1 一张表看懂这块卡的核心定位Atlas 300V 24G 在华为昇腾的产品序列里属于AI 推理加速卡不是训练卡也不是传统意义上的通用 GPU。它基于昇腾 310P 系列 NPU 芯片自带 24GB 板载显存通过 PCIe 接口插在服务器上主要面向视频解析、目标检测、图像分类这类推理负载。官方定位是视频解析卡但用在 YOLO 检测、OCR、人脸识别这类任务上也非常合适。我把它的几个关键点整理成了表格方便和 NVIDIA 的 T4 / L4 做对照维度Atlas 300V 24GNVIDIA T4芯片架构昇腾 310PDa VinciTuring核心类型AI CoreNPUCUDA CoreGPU板载显存24GB16GB软件栈CANN / MindSpore / MindXCUDA / TensorRT模型格式OM离线模型TensorRT Engine / ONNX精度支持FP16 / INT8 为主FP32 / FP16 / INT8生态成熟度国内部署文档较多全球生态更全从这张表能看出来Atlas 300V 24G 的显存、推理算力其实都够用但软件栈跟 CUDA 完全不一样。原来用 GPU 跑的 PyTorch 模型不能直接拿过来用中间必须走模型转换 推理框架替换这一步。这也是很多人上手时最不适应的点。1.2 为什么我选它跑 YOLO 推理选这块卡核心原因是性价比和算力规格。YOLO 这类单阶段检测模型在推理阶段对算力的需求是高吞吐、低延迟Atlas 300V 24G 的 INT8 推理算力能达到百 TOPS 量级应对视频流中的实时检测绰绰有余。而且 24GB 显存意味着你可以塞下一个不小的 batch或者在模型里跑更高分辨率的输入。另一个原因是部署形态。Atlas 300V 24G 是标准 PCIe 卡普通 x86 服务器插上就能用不需要专门的硬件平台。它不像 Atlas 200/300I 系列那样偏向边缘小盒子也不像 Atlas 800 那样是整套训练服务器它更像一块服务器里的推理单元。不过我要提前给你打个预防针这块卡的推理能力不弱但它的软件链路比 CUDA 生态陡峭。你必须有耐心把 CANN 的版本、驱动、模型转换流程吃透否则很容易在 ATC 转换这一步卡住。后面几节我重点讲的就是这些坑。2. 部署前的准备工作驱动、固件与 CANN 版本匹配2.1 拿到板卡后的第一步确认硬件状态插卡、开机之后先不要急着装 CANN。第一步是用昇腾自带的工具确认板卡有没有被系统识别。执行npu-smi info如果驱动已经预装或者机器里已经有昇腾环境这条命令会列出每张卡的芯片型号、显存、固件版本、驱动版本。比如Chip Version: Ascend 310P3Memory: 24576 MB这就是一块 24G 的 Atlas 300V。如果你看到No npu-smi was found说明驱动还没装上或者卡没有被正确枚举这时候需要先安装驱动和固件。驱动和固件包一般可以从昇腾社区官网下载文件名字类似Ascend-hdk-310p-npu-driver_xxx.run、Ascend-hdk-310p-npu-firmware_xxx.run。安装顺序是先驱动、再固件别反。安装命令很传统chmod x Ascend-hdk-310p-npu-driver_xxx.run ./Ascend-hdk-310p-npu-driver_xxx.run --full装完驱动之后重启再执行npu-smi info看到板卡状态是Normal就说明硬件层面没问题了。2.2 CANN Toolkit 的安装与环境变量硬件状态正常之后就要装 CANN。CANN 是昇腾的计算架构相当于 CUDA cuDNN TensorRT 的合体。模型转换工具 ATC、推理运行时 ACL都在 CANN 里。CANN 的安装包叫Ascend-cann-toolkit_xxx.run安装命令chmod x Ascend-cann-toolkit_xxx.run ./Ascend-cann-toolkit_xxx.run --install默认安装路径是/usr/local/Ascend/ascend-toolkit/latest。装完之后一定要 source 环境变量source /usr/local/Ascend/ascend-toolkit/set_env.sh这一步经常有人漏掉结果执行atc命令的时候提示command not found。另外CANN 安装包还分toolkit、nnrt、nnae等不同版本。推理场景装toolkit就够训练场景可能需要nnae如果你只是部署模型没必要全装省空间也省得版本互相干扰。2.3 版本匹配最容易翻车的三个细节这一节是重点。昇腾这套东西版本敏感程度比 CUDA 还离谱。我实际踩过三个坑第一驱动、固件和 CANN 三者之间有配套关系不能随便混装。比如某版驱动要求 CANN 必须高于某个小版本否则atc转换时会报E40007之类的错误。建议直接去昇腾社区查驱动/固件/版本配套表按表下载不要用最新的要用配套的。第二--soc_version参数必须和实际芯片一致。比如昇腾 310P 有Ascend310P1、Ascend310P3等区分写错之后 ATC 会直接报E10016: soc version is invalid。查询方法是用npu-smi info看芯片版本再对应到 ATC 能识别的写法。第三CANN 的 Python ACL 依赖路径。如果你打算用 Python 写推理CANN 自带一个acl的 Python 包位置通常在/usr/local/Ascend/ascend-toolkit/latest/python/site-packages。用 Python 调用之前要把这个路径加到PYTHONPATH否则import acl直接失败。提示安装完 CANN 之后最好把source set_env.sh写进~/.bashrc。否则每次新开终端都要手动执行很烦。3. 模型转换从 PyTorch 权重到 OM 离线模型3.1 把 YOLOv5 导出成规范的 ONNX昇腾 NPU 不能直接读取 PyTorch 的.pt权重标准流程是先把 PyTorch 模型转成 ONNX再用 ATC 工具把 ONNX 转成 OM。所以第一步是在 GPU 或 CPU 机器上把 YOLOv5 导出成 ONNX。YOLOv5 官方仓库自带了导出脚本python export.py --weights yolov5s.pt --include onnx --opset 11 --simplify--opset 11是为了兼容 ATC 对算子版本的要求太高的 opset 很容易遇到不支持的算子。--simplify会调用 onnxsim 做图优化能让模型更干净。这里有几个细节要强调导出时要把 NMS非极大值抑制留在 ONNX 外面。YOLOv5 的检测头输出是 25200 个候选框的原始预测NMS 最好在推理代码里自己做不要在 ONNX 图里带torchvision::nms算子。原因是昇腾的 ATC 对 NMS 算子的支持有限而且后处理里 NMS 用 CPU 跑反而更灵活。导出前要确认输入名。ONNX 的输入节点名默认是images但不同版本可能不一样。如果你用的不是官方仓库建议用netron打开 ONNX 看一眼输入名和输出名的拼写必须完全准确后续 ATC 和推理代码都要用。输入尺寸。YOLOv5 默认是 640x640如果你的业务里要跑 1280 分辨率导出时可以直接设定--img 1280也可以后续在 ATC 里做动态分辨率我后面会单独讲。3.2 ATC 命令完成 ONNX 到 OM 转换拿到 ONNX 文件之后用 ATC 转换。一个最基础的转换命令长这样atc --modelyolov5s.onnx \ --framework5 \ --outputyolov5s_bs1 \ --soc_versionAscend310P3 \ --input_shapeimages:1,3,640,640 \ --input_formatNCHW \ --output_typeFP32参数含义逐个解释--framework55 表示输入模型是 ONNX。--output输出 OM 文件的名称前缀会生成yolov5s_bs1.om。--soc_version芯片版本用npu-smi info查出来的实际版本填写。--input_shape固定输入尺寸格式是输入名:batch,channel,height,width必须和 ONNX 输入名一致。--input_formatNCHW标准的 NCHW 布局。--output_typeFP32输出数据类型。如果做 INT8 量化后面还要用到 AIPP 和校准集这个先不展开。转换过程会打印大量算子信息看到最后有success字样并且当前目录多了一个.om文件说明转换成功。注意ATC 是纯离线工具整个过程不依赖板卡状态所以你也可以在纯 CPU 机器上先做转换再把 OM 文件拷到有 Atlas 卡的服务器上。这一点对没有昇腾卡的开发机特别友好。3.3 AIPP 预处理配置归一化究竟该放哪一层YOLO 系列的预处理通常是 letterbox 缩放 RGB 转 float 除以 255。在昇腾平台上这部分可以放在 host 侧用代码做也可以交给 AIPP 在设备侧做。AIPP 是 Atlas 板卡上的图像预处理单元支持缩放、颜色空间转换、均值/方差归一化能省不少 CPU 开销。我建议的分配方式是letterbox 这种非线性的缩放在 host 侧用 OpenCV 做RGB 转浮点、除以 255 这种逐像素操作交给 AIPP。原因是 AIPP 支持的是固定参数的预处理letterbox 的填充值、缩放比例是动态的写死到 AIPP 配置里会很别扭。AIPP 配置是一个文本文件示例aipp_op { aipp_mode: static input_format: RGB888_U8 src_image_size_w: 640 src_image_size_h: 640 csc_switch: false mean_chn_0: 0 mean_chn_1: 0 mean_chn_2: 0 min_chn_0: 255 min_chn_1: 255 min_chn_2: 255 }这一段的意思是输入是 RGB 三通道 8 位图均值设为 0缩放因子设为 255本质上就是让像素值除以 255 归一化到0~1。使用方式是在 ATC 命令里加一个参数atc --modelyolov5s.onnx --framework5 --outputyolov5s_aipp \ --soc_versionAscend310P3 \ --input_shapeimages:1,3,640,640 \ --input_formatNCHW \ --insert_op_confaipp_yolov5.cfg这里有个容易忽略的点一旦插入了 AIPP模型的输入数据格式就变成了 uint8 图像而不是之前习惯的 float32 tensor。所以 host 侧你把 letterbox 之后的np.uint8数据直接拷给模型就行不要再手动转 float、除以 255否则等于做了两次归一化推理结果全是错的。3.4 动态 shape让一个 OM 模型吃下不同分辨率推理场景里你不可能永远只跑固定的 640x640。视频流里的目标大小、输入帧尺寸都可能变化如果每个分辨率都转一个 OM管理和显存都很浪费。解决办法是用 ATC 的动态 shape 能力。动态 batch 的转换命令atc --modelyolov5s.onnx --framework5 --outputyolov5s_dyn \ --soc_versionAscend310P3 \ --input_shapeimages:-1,3,640,640 \ --dynamic_batch_size1,2,4,8动态分辨率的转换命令atc --modelyolov5s.onnx --framework5 --outputyolov5s_dynhw \ --soc_versionAscend310P3 \ --input_shapeimages:-1,3,-1,-1 \ --dynamic_image_size640,640;960,960;1280,1280动态 shape 听着很爽但有两个代价一是模型转换后NPU 做内存规划时不能把显存完全写死会预留一部分余量导致单 batch 性能略低于静态 shape二是推理代码里必须显式设置输入输出的实际维度。我的建议是如果业务场景非常固定就用静态 shape性能最好如果必须面对多种输入优先用动态 batch其次是动态分辨率。4. 推理落地用 ACL 接口写最小可用推理 Demo4.1 初始化流程与模型加载模型转成 OM 之后推理代码就不再依赖 PyTorch 了。昇腾推理的底层接口叫 ACLAscend Computing Language它负责管理设备、上下文、内存、模型加载和执行。下面我用 Python 接口写一个最小 demoC 的流程也是一一对应的。初始化部分import acl # 初始化 ACL acl.init() # 设置并激活设备 00 对应 npu-smi info 里看到的第 0 张卡 ret acl.rt.set_device(0) # 创建上下文类似 CUDA 的 context context acl.rt.create_context(0) # 加载 OM 模型 model_id acl.mdl.load_from_file(yolov5s_bs1.om)这里有几个容易踩的坑acl.init()如果没有调用后续任何接口都会报ACL_ERROR_RT_PARAM_INVALID之类的错。多卡服务器上set_device的参数要和npu-smi info里的 Device ID 对应别混。一个进程一个设备时create_context只调用一次即可如果要一张卡跑多个模型也是在同一个 context 下加载多个model_id。4.2 输入输出准备与执行推理ACL 的推理流程和 CUDA 很像准备输入输出内存拷贝数据执行推理再拷贝结果回来。下面这段是核心流程# 从模型描述里获取输入输出信息 model_desc acl.mdl.create_desc() acl.mdl.get_desc(model_desc, model_id) input_size acl.mdl.get_input_size_by_index(model_desc, 0) output_size acl.mdl.get_output_size_by_index(model_desc, 0) # 分配设备内存 input_ptr, ret acl.rt.malloc(input_size, 2) output_ptr, ret acl.rt.malloc(output_size, 2) # 把预处理后的数据拷贝到设备内存 input_data preprocess_frame(frame) # 形状为 1x3x640x640 的 uint8 / float32 数组 acl.rt.memcpy(input_ptr, input_size, input_data.tobytes(), input_size, 1) # 构造输入输出 dataset input_dataset acl.mdl.create_dataset() acl.mdl.add_dataset_buffer(input_dataset, acl.create_data_buffer(input_ptr, input_size)) output_dataset acl.mdl.create_dataset() acl.mdl.add_dataset_buffer(output_dataset, acl.create_data_buffer(output_ptr, output_size)) # 执行推理 acl.mdl.execute(model_id, input_dataset, output_dataset) # 把结果拷回 host 内存 output_data acl.rt.memcpy(output_size, output_ptr, output_size, 1)这段代码背后有几个需要理解的设计acl.rt.malloc等价于 CUDA 的cudaMalloc分配的是设备显存不能直接用 numpy 访问。acl.mdl.create_dataset的作用是把输入多个 tensor 组合成一个 dataset。YOLOv5 如果导出的是单输出模型只需要一个 buffer如果你导出的是三尺度输出就要为每个输入输出节点都创建 buffer。acl.rt.memcpy最后一个参数是拷贝方向1表示 host 到 device2表示 device 到 host。方向写错的话要么报错要么直接乱码。4.3 输出解析25200 个候选框怎么变成最终结果推理拿到的是原始输出 tensor。以 YOLOv5s、640x640、80 类为例常见输出形状是[1, 25200, 85]。85 4框坐标 1置信度 80类别分数。解析流程可以拆成三步第一步确定输出 tensor 在内存里的排列方式。NX 上默认情况下输出是 FP32数据是按行连续存放的可以直接转成 numpyoutput_np np.frombuffer(output_data, dtypenp.float32).reshape(1, 25200, 85)第二步过滤低置信度的框。YOLOv5 的置信度计算是目标分数乘类别分数的最大值这里先做一个阈值过滤比如只保留conf 0.25的框能大幅减少后续 NMS 的计算量。第三步NMS。昇腾的 ACL 本身没有直接暴露 NMS API所以这一步基本都在 host 上用 OpenCV 或者手写实现。可以用cv2.dnn.NMSBoxes也可以直接用torchvision.ops.nms。由于此时数据已经拷回 CPUNMS 就算只跑单线程对一个视频帧来说耗时也就在几毫秒到十几毫秒完全可接受。我自己更推荐把 NMS 的框数量限制得好一点比如max_det300这样对高密度场景能避免 NMS 把所有 CPU 都吃光。这是推理管线里最容易忽视的性能瓶颈。5. 性能优化与问题排查5.1 推理性能优化的三招模型能跑通之后下一步就是榨性能。我整理了三个立竿见影的优化方向。第一招用动态 batch 合并小请求。视频检测里的单帧推理batch 1NPU 利用率很低。把多路视频帧攒成 batch 4 再推理吞吐通常能提升 3 倍以上。前提是转换 OM 时用了--dynamic_batch_size推理代码里根据实际攒到的帧数动态设置 batch。第二招异步执行和流水线。acl.mdl.execute是同步阻塞的CPU 会一直等 NPU 跑完。可以用acl.mdl.execute_async配合 stream让 CPU 在 NPU 计算的同时做下一帧的预处理和后处理形成流水线。这个思路和 TensorRT 的多 stream 一模一样。第三招换个输出精度。如果业务对精度不是极端敏感可以在 ATC 转换时加上--output_typeFP16减少输出数据量host 拷贝和后续解析都会快一些。同样模型转换时也可以考虑--precision_modeallow_fp32_to_fp16让 ATC 把模型内部浮点运算转成 FP16推理速度一般能提升明显。5.2 常见报错与排查速查我把实际部署中高频出现的报错整理成了表格方便你排查报错现象可能原因解决办法command not found: atc环境变量没 sourcesource set_env.sh 或重新安装 CANNE10016: soc version is invalid--soc_version写错用 npu-smi info 查芯片版本E40007算子不支持ONNX 算子不在 ATC 支持范围降低 opset 到 11或换更简单的算子实现ModuleNotFoundError: aclPYTHONPATH 没有指向 CANN python 包把对应 site-packages 加入 PYTHONPATH推理结果全 0 或全 NaN输入数据格式/预处理和 AIPP 冲突检查是否重复归一化检查是否用了 uint8 输入模型加载失败日志提示内存不足静态 shape 预留显存不够或 batch 过大减小 batch或改用动态 batch 控制并发ACL_ERROR_RT_PARAM_INVALID参数为空或顺序不对检查 init/set_device 是否先执行检查指针是否为 0另外要特别强调日志是救命稻草。CANN 的报错信息虽然有时很长但关键行都在[ERROR]后面。运行推理前可以设置环境变量ASCEND_GLOBAL_LOG_LEVEL1它会输出更详细的运行日志对定位问题非常有帮助。5.3 最后说点我的个人经验这次整体玩下来我对 Atlas 300V 24G 的结论是硬件本身不差推理性能和显存容量都对得起定位真正的难点全在软件链路。和我平时用 CUDA 相比昇腾的文档和社区资料确实要花更多时间去翻但只要把驱动/CANN 配套和模型转换参数这两个命门抓住后面的路就顺了。我个人建议第一次上手的人不要一上来就追新版本选一个昇腾官网的稳定配套版本把板卡跑通再升级。其次是尽量把预处理、后处理和模型推理解耦开来调试时可以先用 CPU 上的 PyTorch 结果做参照对比昇腾输出一旦出现精度偏差立刻能定位是模型转换的问题还是预处理的问题。这套流程跑通之后YOLOv5 只是第一步。同样的方法很快就能扩展到 YOLOv8、RT-DETR 或其他检测模型。只要 ONNX 能导出ATC 能转出来的 OM 模型就能套用同一套推理框架。到时候你会发现Atlas 这块卡真正吃透之后部署效率并不比传统的 GPU 方案差多少。

相关新闻

Atlas 300V 24G加速卡实战:从YOLO模型转换到ACL推理部署全解析

Atlas 300V 24G加速卡实战:从YOLO模型转换到ACL推理部署全解析

前两天后台收到一条留言,有人发了一张Atlas 300V 24G加速卡的照片,问“这卡到底是不是运算加速卡,能不能用来部署YOLO”。我一看这问题就乐了,因为同一张卡在电商页面上被标成“AI加速卡”,在整机配置单里又被写成“推…

2026/9/26 15:52:42 阅读更多 →
本地部署MiniMax H3视频生成:ComfyUI工作流搭建与性能优化实战

本地部署MiniMax H3视频生成:ComfyUI工作流搭建与性能优化实战

1. 为什么要在本地跑 MiniMax H3 视频生成1.1 本地部署的真实动机先说结论:把 MiniMax H3 这类视频生成模型放到本地跑,核心动机无非三个——数据不出本机、批量生成不烧积分、工作流可定制。我身边做短视频批量生产的朋友,最头疼的就是在线生…

2026/9/25 9:06:20 阅读更多 →
Atlas 300V 24G推理卡实战:YOLO部署全流程与选型避坑

Atlas 300V 24G推理卡实战:YOLO部署全流程与选型避坑

先说个我自己的经历。有一阵子做视频流检测的项目,客户要求单机跑十几个YOLO实例做实时推理,预算又卡得死。销售甩过来一片卡,名字就叫“Atlas 300V”,我第一反应是:24G显存,这不挺大么,拿来训个…

2026/9/25 9:06:20 阅读更多 →

最新新闻

自采四分类运动想象BCI数据集解析:从EEGLAB预处理到实时脑控算法落地

自采四分类运动想象BCI数据集解析:从EEGLAB预处理到实时脑控算法落地

简介:适用于2025世界机器人大赛BCI脑控机器人大赛MetaBCI创新应用开发赛项的开发者与研究者,这份压缩包围绕自采四分类运动想象数据集,覆盖脑电信号采集、预处理、特征提取、分类器训练及实时脑控算法优化全流程。压缩包共64个文件&#xff0…

2026/9/26 16:42:46 阅读更多 →
基于机器学习的异常驾驶检测:从OBD数据到隔离森林完整流程

基于机器学习的异常驾驶检测:从OBD数据到隔离森林完整流程

简介:一套面向机器学习与智能交通方向学习者的异常驾驶检测项目,聚焦驾驶行为中的异常模式识别,提供可运行的源码与说明书,便于按需二次修改。压缩包内共有六个文件,以三个交互式编程笔记为主,配合两个网页…

2026/9/26 16:42:46 阅读更多 →
桌面智能体从聊天到干活的工程化实践:技能化与项目化

桌面智能体从聊天到干活的工程化实践:技能化与项目化

1. 桌面智能体到底卡在哪:从“能聊天”到“能干活”的那道坎桌面智能体这个词这两年热得发烫,但真正上手用过一圈的人心里都清楚,大部分产品还停留在“能聊天”的阶段。你问它今天天气怎么样,它答得挺溜;你让它帮你把桌…

2026/9/26 16:42:45 阅读更多 →
Codex CLI 手搓自动化脚本:配置、DeepSeek 接入与代理报错排查

Codex CLI 手搓自动化脚本:配置、DeepSeek 接入与代理报错排查

这次我们来看 Codex CLI 怎么用来手搓自动化脚本。很多人对 Codex 的印象还停留在聊天界面里写代码,实际上它的核心价值在命令行 Agent 模式:你把需求用自然语言写清楚,它自己规划任务、写脚本、执行命令、读终端报错、改代码,循环…

2026/9/26 16:42:45 阅读更多 →
QLoRA微调实战:从8GB显存到GGUF本地部署

QLoRA微调实战:从8GB显存到GGUF本地部署

1. 项目概述:为什么QLoRA是当前微调大模型最务实的选择“大语言模型QLoRA微调方法(终)”这个标题里的“终”字,不是指技术终点,而是指一种实践意义上的闭环——它标志着在消费级显卡、单机环境、有限显存(甚…

2026/9/26 16:42:45 阅读更多 →
AI Agent标准架构拆解:用TaoToken统一Key打通LLM与Tools的Loop

AI Agent标准架构拆解:用TaoToken统一Key打通LLM与Tools的Loop

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

2026/9/26 16:41:45 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →