Atlas 300V 24G推理卡实战:昇腾NPU上跑通YOLO目标检测
直接亮结论Atlas 300V 24G是一块地地道道的运算加速卡而且它专门为AI推理场景设计不是GPU那种通用计算卡更不是训练卡。很多人一听到“昇腾”就默认是华为的服务器芯片然后开始纠结能不能拿来跑YOLO实际上Atlas 300V系列就是干这个的尤其是目标检测、视频分析这类任务用起来相当顺手。这篇文章我会把Atlas 300V 24G从硬件定位到软件部署的完整链路都拆开讲重点还原我在它上面跑通YOLOv5和YOLOv8的真实过程包括环境搭建、模型转换、推理脚本、以及我踩过的几个大坑。1. Atlas产品线梳理300V 24G到底扮演什么角色1.1 昇腾AI硬件全家桶怎么认Atlas是昇腾AI硬件家族的统一品牌从产品形态上能分出好几条线训练卡、推理卡、加速模组、智能小站、服务器等。一上来就容易被型号搞晕比如300V、300I、800T、900 A2这些数字不是随便起的后缀代表用途和代际。300I系列主打轻量推理功耗低常用于端侧或边缘侧。300V系列同样是推理卡但显存更大算力更强适合视频处理和多路并发推理。800T/900系列偏向训练场景性能和价格都高一个量级。Atlas 300V 24G属于300V系列核心芯片是昇腾310P这颗芯片有AI Core、向量单元和矩阵单元官方标称INT8算力能到140 TOPS左右显存做到24GB。一般来说这类推理卡主要跑已经训练好的模型不负责反向传播和梯度更新。换句话说你可以拿它做YOLO目标检测、图像分类、语音识别这些推理任务但不建议拿它从头训练模型那是训练卡和GPU的活。1.2 300V 24G与训练卡、GPU的定位差异很多人会拿Atlas 300V去比NVIDIA的RTX系列或者A系列但这两者实际上不处于同一个生态位。GPU是通用计算卡既可以训练也能推理而Atlas 300V是一颗NPU加速卡重点在“加速”两个字上。所谓运算加速卡指的就是CPU之外专门分担特定计算负载的硬件所以它完全符合这个定义。用个直白的类比CPU像是一个全能型选手什么活都能干但算大数不快GPU像是一个有很多核的数学老师能同时给几千个学生批改卷子而NPU更像是一条专门为AI推理优化的流水线处理卷积、矩阵乘法这类算子时效率极高能耗比也好看。Atlas 300V 24G的24G显存能让它一次性装下多个目标检测模型或者处理分辨率较高、输入尺寸较大的输入这对视频流多路并发场景特别有优势。下面是它和常规GPU、训练卡的一个粗略对比项目Atlas 300V 24G普通GPU推理Atlas 800T训练卡主要用途推理加速通用计算/推理模型训练典型算力140 TOPS INT8视型号而定380 TFLOPS FP16显存24GB8-24GB64-128GB功耗70W左右200-400W更多生态昇腾CANNCUDA昇腾CANN从这张表能看出300V 24G的优势在于功耗低、显存够大、推理算力强价格也远低于训练卡。如果只是要跑YOLO推理它其实是比GPU更划算的选择。2. 为什么要用Atlas跑YOLO性能账和成本账2.1 YOLO模型在昇腾NPU上的适配现状YOLO系列从v3到v8在AI社区一直是目标检测的主流选择。昇腾生态对YOLO的支持也做得比较积极CANN工具链里提供了大量适配算子官方也开源了不少yolov5、yolov7、yolov8的样例。直接用PyTorch训练的权重不能直接塞到NPU里跑需要把PyTorch模型导出成ONNX再通过ATC工具变成昇腾专用的OM模型。这里有一个容易困惑的点很多人以为Atlas只能跑TensorFlow或者MindSpore的模型其实不是。昇腾的离线模型格式是OM而它可以通过ONNX这个中间格式和PyTorch无缝衔接。因此只要有PyTorch的YOLO模型就能转成ONNX再转成OM在Atlas 300V上跑。这个流程我现在已经跑得很熟了之后的章节会一步步展示。2.2 性能指标实测单卡跑多少路视频拿YOLOv5s举例输入640x640batch size为1时在Atlas 300V 24G上实测能跑到50到70 FPS具体看有没有开AIPP预处理优化以及是否做了后端的算子融合。如果是多路视频流假设每路视频25FPS、每帧做一次检测一张300V 24G基本上能覆盖6到16路取决于模型大小。我实际测试过YOLOv5m输入尺寸1280x1280单路推理大概需要25ms到35ms折合28到40 FPS。如果业务只要求每2到3帧检测一次那就能带更多的路数。相比在GPU上做同样的事功耗能少三分之一以上机箱风扇也不会像服务器GPU那样狂飙。对于机房部署在边缘侧的场景这个优势非常实际。性能上不去的原因往往不在NPU本身而是在预处理和后处理环节。YOLO每次推理前需要做letterbox、归一化、通道转换这些如果全在CPU上做会严重拖慢整体吞吐。后面我会讲到用AIPP和DVPP把预处理卸载到昇腾硬件才是真正的性能解药。3. Atlas部署YOLO完整实操从环境搭建到推理3.1 硬件环境与软件栈规划Atlas 300V 24G不是USB设备它是一张标准的PCIe扩展卡建议插在带有昇腾AI服务器的PCIe x16插槽上。如果是普通x86服务器需要在BIOS里确认开启Above 4G Decoding否则硬件无法正确映射IO内存。系统选择上官方主要支持Ubuntu 20.04/22.04和CentOS 7.6等我推荐Ubuntu 20.04 x86_64资料多踩坑少。软件栈核心是三块驱动固件即Ascend HDK包含NPU驱动和固件。CANN Toolkit昇腾计算语言和运行时类似CUDA Toolkit。深度学习框架插件如果只是做推理用纯CANN的ACL接口就够了用不上框架插件。安装的时候建议一套官方文档走到底先装驱动固件再装CANN toolkit。CANN版本要和驱动版本匹配我用的组合是HDK 23.0.RC3 CANN 6.3.RC3稳定运行了几个月。安装完成后用npu-smi info命令确认驱动和卡状态npu-smi info如果能看到类似“---------------------------------------------------”样式的输出并且状态是“Healthy”硬件就算就绪了。如果提示“no devices”大概率是驱动模块没加载成功需要用npu-smi info -t board检查硬件错误日志。3.2 模型准备YOLOv5权重转ONNX再转OM模型转换是昇腾部署里最核心的一步也是新手最容易卡住的地方。整个链路是PyTorch权重 → ONNX → OM。首先用YOLOv5官方仓库自带的export.py把权重转成ONNXpython export.py --weights yolov5s.pt --img 640 --batch 1 --include onnx --opset 11这里有几个参数需要注意opset要指定为11昇腾对ONNX opset 11的支持最完整batch固定为1这样后面ATC转换时不会因为动态batch出问题。如果转出来的ONNX里有大量的Resize、Transpose节点不用慌这是正常的ATC转换的时候能优化掉一部分。接下来使用ATC工具做模型转换。假设文件是yolov5s.onnx目标输出是yolov5s.omatc --modelyolov5s.onnx \ --framework5 \ --outputyolov5s \ --input_shapeimages:1,3,640,640 \ --soc_versionAscend310P3 \ --insert_op_confaipp_yolov5.cfg \ --output_typeFP16 \ --optypelistTranspose \ --dynamic_batch_size1参数解释一下--framework5表示ONNX模型这是ATC固定的映射关系。--soc_version根据自己的芯片型号填Atlas 300V 24G对应的是Ascend310P3。填错了会直接报错。--insert_op_conf是AIPP预处理配置文件YOLO前处理里有除以255、减均值、标准化这些操作直接配置到AIPP里就能把前处理从CPU卸载到NPU非常关键。--output_typeFP16昇腾NPU对FP16支持效率高这里建议显式指定。AIPP配置文件的示例aipp_op { aipp_mode: static input_format: RGB888_U8 src_image_size_h: 640 src_image_size_w: 640 csc_switch: false rbuv_swap_switch: false related_input_rank: 0 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 }这里把像素值归一化系数1/255写进了var_reci这样输入只需要做resize、letterbox和通道变换归一化交给NPU完成。注意如果你使用的是YOLOv8导出ONNX时可能默认输出已经包含了一个后处理层这会生成多个输出节点需要额外在ATC转换时选择主干输出。更稳妥的方式是保留原始模型的三个输出head然后在后处理里做解码和NMS可控性更强。模型转换成功后会在当前目录生成yolov5s.om可以通过以下命令验证文件信息omg --view-model --modelyolov5s.om如果显示“Input/Output”信息正常后面就可以正式写推理了。3.3 基于CANN API编写推理脚本CANN提供了Python的pyACL接口直接把OM模型读到NPU上执行模型推理。这个接口的设计思路和PyTorch的forward类似只是需要手动管理设备、上下文、内存分配和模型输入输出。我给一个最简可运行的推理流程import acl import numpy as np from PIL import Image # 初始化 acl.init() ret acl.rt.set_device(0) context, ret acl.rt.create_context(0) # 加载模型 model_path b./yolov5s.om model_id, ret acl.mdl.load_from_file(model_path) # 获取模型输入输出信息 input_desc acl.mdl.get_input_desc(model_id) output_desc acl.mdl.get_output_desc(model_id) input_size acl.mdl.get_input_size_by_index(model_id, 0) output_size acl.mdl.get_output_size_by_index(model_id, 0) # 准备输入数据 image Image.open(test.jpg).resize((640, 640)) input_data np.asarray(image, dtypenp.uint8) input_data input_data[:, :, ::-1] # RGB - BGR? 取决于模型训练时的颜色通道 input_buffer acl.rt.malloc(input_size, 2) acl.rt.memcpy(input_buffer, input_size, input_data.tobytes(), input_size, 1) # 输出内存 output_buffer acl.rt.malloc(output_size, 2) # 执行推理 ret acl.mdl.execute(model_id, [input_buffer], [output_buffer]) # 取出数据 output_data acl.rt.memcpy_d2h(output_size, output_buffer) # 释放资源 acl.rt.free(input_buffer) acl.rt.free(output_buffer) acl.mdl.unload(model_id) acl.rt.destroy_context(context) acl.rt.reset_device(0) acl.finalize()这个脚本关联了输入模型的一个输入输出也是一段连续内存但YOLO模型通常有3个输出head需要把它们分别解析出来。更好的做法是先使用omg --view-model查看输出节点数量和维度然后在执行后对输出buffer做切片再根据YOLO的anchor和class数做decoding和NMS。需要注意的是pyACL执行时不会自动帮你做letterbox补边所以输入图像必须是640x640且保持纵横比。如果直接把原图resize到640x640容易导致检测框偏移和精度下降最好先用图片处理库做letterbox再把补齐后的数据送入模型。3.4 用MindX SDK快速部署可选如果你不想自己写推理循环昇腾还有一个更上层的东西叫MindX SDK它提供了一种类似GStreamer的pipeline编排方式。可以预先拉一个video decoding插件、一个模型推理插件和一个后处理插件然后通过JSON文件配置串联起来。我当初用MindX SDK跑YOLOv5配置一个pipeline也就20分钟{ pipeline: [ { stream: [ { plugin_name: mxpi_imagedecoder, plugin_type: mxpi_imagedecoder }, { plugin_name: mxpi_tensorinfer, plugin_type: mxpi_tensorinfer, props: { modelPath: ./yolov5s.om, postProcessType: YOLOV5 } }, { plugin_name: mxpi_objectpostprocess, plugin_type: mxpi_objectpostprocess, props: { postProcessConfigPath: ./yolov5_postprocess.cfg } } ] } ] }这个方案的好处是底层已经做了内存优化和资源复用多路视频并发时省很多事。但前提是代码要理解MindX SDK的运行机制否则出问题后排查起来比较痛苦。如果只跑单路或小批量推理直接写pyACL反而更可控。4. 常见坑与排障实录昇腾上跑YOLO的翻车现场4.1 模型转换失败算子不支持最常见的问题是ATC转换时报“Unsupported operator”或“Not supported in current version”。原因通常是ONNX里包含了CANN还不支持的算子或者在导出ONNX时包含了一些只用于训练的特殊节点。解决思路是在导出脚本里将模型设置为eval模式并关掉梯度同时尽量使用较新的CANN版本。另一种情况是模型由YOLOv8导出里面可能有一个名为/model.22/Concat或/model.22/Sigmoid的节点某些CANN版本会因为输出shape不确定而报错。此时可以试着打开ATC的图优化开关或者手动修改ONNX把不支持的节点简化掉。实操时我一般建议先降级到YOLOv5跑通流程后再折腾YOLOv8。4.2 推理结果全错或框的位置偏移如果你模型转成功了输入输出也正常但检测结果完全不对十有八九是图像预处理和模型期望不一致。YOLOv5官方代码里训练时用的是RGB输入推理时做了颜色通道归一化而有些重新训练过的模型是基于BGR的。你需要确认自己的模型是哪个颜色顺序然后再决定是否在AIPP里设rbuv_swap_switch。另外letterbox这一步太容易出问题。模型训练时会在四周补灰边你的推理脚本也必须做同样的补边否则目标被压缩变形置信度会掉得很厉害。我见过不少小白在resize到640x640后直接送模型结果看到检测框贴边且坐标偏差很大就是这个原因。4.3 性能上不去瓶颈在预处理和内存拷贝跑通之后性能不达标是第二个大坑。我在早期用python PIL做预处理再转成numpy数组然后拷贝到设备内存单路推理反而比GPU慢很多。后来把预处理放进AIPP并且用昇腾的DVPP接口做图像缩放推理耗时从40ms降到15ms提升十分明显。还有一个问题是对内存拷贝优化不够。pyACL里acl.rt.memcpy是同步操作会阻塞线程等待数据拷贝完成频繁调用会造成流水线气泡。解决办法是把输入图像拷贝放到另一个线程或者使用异步streamstream acl.rt.create_stream() acl.rt.memcpy_async(input_buffer, input_size, input_data, input_size, 1, stream) acl.rt.execute_async(model_id, [input_buffer], [output_buffer], stream) acl.rt.sync_stream(stream)这样数据和推理可以重叠执行多路并发时吞吐量能明显再涨一截。4.4 资源监控与多路并发建议用Atlas 300V跑多路视频建议先用npu-smi info确认NPU利用率和内存占用npu-smi info -t usages -i 0 -c 0这个命令能看到AI Core占用率、内存使用率、温度等。如果AI Core占用率已经接近100%说明算力饱和再怎么加大batch也没用。如果占用率不到50%那瓶颈大概率在数据读取或预处理。多路并发的最佳实践是设置合理的batch策略。对YOLO这种输入尺寸固定的模型batch1时多卡并发可能最好控制但在单卡上把多个视频帧拼成一个batch喂给模型推理效率更高。比如一次送入4帧640x640图像batch4的耗时大概是batch1的2到3倍但总吞吐量能提升40%以上。注意拼batch时要把所有图resize到同一尺寸且维度维度要和模型的--input_shape一致。内存方面24G显存看起来很大但如果开了多路视频流且每路都保存解码后的原图内存会被缓存吃满。建议限制每个stream的队列长度并使用模型推理结果回收不要长期持有原始帧。如果出现“HBM memory exhausted”错误一般就是内存没及时释放。根据我个人经验Atlas 300V 24G在部署YOLO类模型时真正让人上瘾的地方是它的功耗和价格。一张卡70W和很多路由器差不多插在普通塔式服务器里都不用改电源长时间跑也不烫手。相比动不动几百瓦的GPU边缘机房、无人车、安防监控这些场景实在是太合适了。最后再分享一个小技巧如果不是刚需尽量别在昇腾上跑YOLOv8的大模型YOLOv5s和YOLOv8s在精度上差距没有想象的大但昇腾上YOLOv5的算子优化做得更久性能更稳定。先把YOLOv5s跑通再根据业务需求逐步换大模型这是最稳妥的上手路径。

相关新闻

电脑制作个人简历教程:一文搞懂市政公用工程后端开发避坑指南

电脑制作个人简历教程:一文搞懂市政公用工程后端开发避坑指南

电脑制作个人简历教程:一文搞懂市政公用工程后端开发避坑指南 面试被问简历里的项目细节答不上来,心里是不是发慌?别急,这不是你的错,是大多数人的通病。 很多市政公用工程从业者转后端开发时,习惯用 Word 或 PPT…

2026/9/25 3:52:48 阅读更多 →
397B Agent RL训练实战:LoRA、奖励工程与资源优化

397B Agent RL训练实战:LoRA、奖励工程与资源优化

1. 这不是又一个“大模型发布”,而是一份被反复验证的Agent训练操作手册如果你最近刷到过那条被转发上千次的推文——“LoRA一作、OpenAI o1核心成员联合发布397B Agent RL训练配方”,第一反应可能是:又一个炫技式论文?又一套不可…

2026/9/26 4:50:06 阅读更多 →
Datawhale all-in-rag 实战:糖醋鲤鱼完整做法详解——从腌制挂糊到糖醋汁调制

Datawhale all-in-rag 实战:糖醋鲤鱼完整做法详解——从腌制挂糊到糖醋汁调制

教程人工智能大模型RAG 【免费下载链接】all-in-rag 🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/ 项目地址: https://gitcode.com/datawhalechina/all-in-ra…

2026/9/25 4:35:07 阅读更多 →

最新新闻

Claude Code模板库搭建指南:用预置上下文终结“裸奔式”AI编程

Claude Code模板库搭建指南:用预置上下文终结“裸奔式”AI编程

聊一下claude-code-templates。如果你用过Claude Code,大概率经历过这种场景:装好之后兴奋地跑起来,然后发现每次让它干活都得从零开始描述需求背景、约束条件、期望输出格式,有时扯了半天,它还是给你一份“漂亮但不实…

2026/9/26 6:03:04 阅读更多 →
吴传生微积分PPT课件:从自学备考到二次改制的完整指南

吴传生微积分PPT课件:从自学备考到二次改制的完整指南

简介:《微积分》(吴传生版)配套高等数学PPT课件,聚焦空间解析几何入门知识,适合大学低年级学生及备考者系统学习。课件以空间直角坐标系为主线,介绍坐标原点、三条坐标轴和三个坐标面的划分规则&#xff0c…

2026/9/26 6:03:04 阅读更多 →
视频号批量下载与去水印技术实现全解析

视频号批量下载与去水印技术实现全解析

1. 这不是“下载狗”,而是一套视频资源本地化工作流的起点“下载狗去水印”这个标题,第一眼容易让人联想到某款带动物名的第三方工具——但真正有经验的人看到“视频号都可以下载”“批量下载也支持”这两句,立刻会意识到:这背后不…

2026/9/26 6:03:04 阅读更多 →
Ubuntu安装MySQL完整指南:从版本选型到问题排查

Ubuntu安装MySQL完整指南:从版本选型到问题排查

最近又有朋友在群里问,Ubuntu上面怎么装MySQL,装到一半卡住了怎么处理,还有人说装完之后密码不对进不去。这些场景我太熟悉了,从最早在大学用VMware开Ubuntu虚拟机折腾,到后来在公司负责Linux服务器的数据库部署&#…

2026/9/26 6:03:04 阅读更多 →
Substrate不是AI Agent框架,而是区块链可信执行底座

Substrate不是AI Agent框架,而是区块链可信执行底座

1. Substrate 是什么:不是“AI Agent 框架”,而是区块链底层的“操作系统级基建” Substrate 这个词最近在中文技术社区里被严重误读了。你搜“substrate agent”“substrate oci”“substrate gvisor”,出来的结果八成是混淆——把 Substra…

2026/9/26 6:03:04 阅读更多 →
钢材表面缺陷检测实战:YOLO定制化流水线与产线部署指南

钢材表面缺陷检测实战:YOLO定制化流水线与产线部署指南

简介:本资源面向工业视觉检测工程师、计算机视觉初学者及智能制造领域研究人员,提供一套完整的钢材表面缺陷YOLO目标检测实战方案,聚焦压入鳞片、斑块、划痕、夹杂物、麻点表面与网状裂纹等六类典型缺陷识别,服务于工业产线质量控…

2026/9/26 6:02:03 阅读更多 →

日新闻

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

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

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第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 阅读更多 →