当前位置: 首页 > article >正文

Jetson Orin上TVA模型DLA精准卸载配置

重磅预告本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“AI教母”李飞飞教授学术引用量在近四年内突破万次是全球AI与机器人视觉领域的标杆性人物type-one.com。全书严格遵循“基础—原理—实操—进阶—赋能—未来”的六步进阶逻辑致力于引入“类人智眼”新范式系统破解从数字世界到物理世界“最后一公里”的世界级难题。该书精彩内容将优先在本专栏陆续发布其纸质专著亦将正式出版。敬请关注前沿技术背景介绍AI智能体视觉TVATransformer-based Vision Agent是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术属于“物理AI” 领域的一种全新技术形态实现了从“虚拟世界”到“真实世界”的历史性跨越。它区别于传统计算机视觉和常规AI视觉技术代表了工业智能化转型与视觉检测模式的根本性重构tianyance.cn)。 在实质内涵上TVA是一种复合概念是集深度强化学习DRL、卷积神经网络CNN、因式分解算法FRA于一体的系统工程框架构建了能够“感知-推理-决策-行动-反馈”的迭代运作闭环完成从“看见”到“看懂”的范式突破不仅被业界誉为“AI视觉品控专家”而且也是具身机器人视觉与灵巧运动控制的关键技术支撑。版权声明本文系作者原创首发于 CSDN 的技术类文章受《中华人民共和国著作权法》保护转载或商用敬请注明出处。引言在 NVIDIA Jetson Orin 平台上为 TVA智能体视觉模型启用 DLA深度学习加速器进行算子卸载时实现“精准卸载”的核心在于通过 TensorRT 的显式配置控制哪些网络层或算子运行在 DLA 上哪些保留在 GPU 上以在能效、性能和兼容性之间取得最佳平衡。这需要综合运用构建期配置、层精度设置以及运行时回退策略。一、TensorRT Builder 与 DLA 核心配置精准卸载的起点是在创建 TensorRT 构建器Builder时启用 DLA 并设置其核心编号和默认精度。这决定了后续网络层在未显式指定时的默认执行设备。import tensorrt as trt logger trt.Logger(trt.Logger.WARNING) builder trt.Builder(logger) # 1. 启用 DLA 支持 if builder.num_DLA_cores() 0: print(f“Platform has {builder.num_DLA_cores()} DLA cores available.”) builder.default_device_type trt.DeviceType.DLA # 设置默认设备为 DLA builder.DLA_core 0 # 指定使用第一个 DLA 核心 (0 或 1) else: print(“No DLA core detected. Engine will fallback to GPU.”) # 2. 配置 DLA 核心的默认计算精度 # DLA 对 INT8 和 FP16 有良好支持FP32 支持有限或效率较低。 builder.set_flag(trt.BuilderFlag.FP16) # 启用 FP16 精度DLA 高效支持 # builder.set_flag(trt.BuilderFlag.INT8) # 如果需要 INT8 量化可启用 # 3. 设置 GPU 回退策略当某层无法在 DLA 上运行时允许回退到 GPU。 builder.set_flag(trt.BuilderFlag.GPU_FALLBACK) # 4. 设置严格的类型约束可选用于调试 # 如果设置为 True则任何不满足 DLA 精度/类型约束的层都会导致错误而非静默回退到 GPU。 # builder.set_flag(trt.BuilderFlag.STRICT_TYPES) config builder.create_builder_config() # 5. 在 BuilderConfig 中也可以设置 DLA 相关参数 config.default_device_type trt.DeviceType.DLA config.DLA_core builder.DLA_core config.set_flag(trt.BuilderFlag.GPU_FALLBACK) config.set_flag(trt.BuilderFlag.FP16)二、网络层级别的精准设备分配在定义网络INetworkDefinition时可以对每一层ILayer显式设置其运行设备set_device_type这是实现“精准卸载”最核心的步骤。通常的策略是将计算密集、标准且 DLA 高效支持的算子如卷积、池化、全连接分配给 DLA而将自定义、动态形状或 DLA 不支持的算子如某些激活函数、特殊规约操作保留在 GPU。# 假设 network 是已解析或手动创建的 INetworkDefinition parser trt.OnnxParser(network, logger) success parser.parse_from_file(“tva_model.onnx”) for i in range(network.num_layers): layer network.get_layer(i) layer_type layer.type # 策略将特定类型的层分配给 DLA # DLA 高效支持的典型层类型 # - trt.LayerType.CONVOLUTION # - trt.LayerType.FULLY_CONNECTED # - trt.LayerType.ACTIVATION (部分激活函数如 ReLU) # - trt.LayerType.POOLING # - trt.LayerType.ELEMENTWISE (部分逐元素操作) # - trt.LayerType.SCALE # - trt.LayerType.DEAONVOLUTION if layer_type in [trt.LayerType.CONVOLUTION, trt.LayerType.FULLY_CONNECTED, trt.LayerType.POOLING]: # 检查该层是否可以在 DLA 上运行 if builder.can_run_on_DLA(layer): layer.precision trt.DataType.HALF # 显式设置为 FP16 精度 layer.set_device_type(trt.DeviceType.DLA) print(f“Layer {i} ({layer.name}) set to run on DLA with FP16.”) else: print(f“Layer {i} ({layer.name}) is not supported by DLA, will fallback to GPU.”) elif layer_type trt.LayerType.ACTIVATION: # 对激活函数进行更精细的控制 activation_type layer.activation_type # DLA 通常支持 ReLU, Sigmoid, TanH 等标准激活 if activation_type in [trt.ActivationType.RELU, trt.ActivationType.SIGMOID]: if builder.can_run_on_DLA(layer): layer.set_device_type(trt.DeviceType.DLA) print(f“Activation layer {i} ({layer.name}) set to DLA.”) else: # 其他层如 SHUFFLE, SLICE, CONCATENATION, PLUGIN_V2自定义插件等 # 通常保留在 GPU 上除非经过测试确认 DLA 支持且性能更优。 layer.set_device_type(trt.DeviceType.GPU) # 对于 GPU 上的层也可以根据需要设置精度 # layer.precision trt.DataType.HALF # 设置网络输入输出的设备类型通常由 TensorRT 自动管理也可显式设置 # for i in range(network.num_inputs): # input_tensor network.get_input(i) # # 输入通常在 CPU/GPU由运行时内存拷贝决定 # for i in range(network.num_outputs): # output_tensor network.get_output(i)三、处理自定义插件与不兼容算子TVA 模型可能包含非标准算子这些算子通常以 TensorRT 插件IPluginV2的形式实现。DLA 对自定义插件的支持非常有限这是“精准卸载”中需要规避的主要陷阱。# 在遍历网络层时特别处理插件层 for i in range(network.num_layers): layer network.get_layer(i) if layer.type trt.LayerType.PLUGIN_V2: plugin layer.plugin plugin_name plugin.name print(f“Found plugin layer {i}: {plugin_name}”) # 关键绝大多数自定义插件无法在 DLA 上运行。 # 必须强制将其设备类型设置为 GPU并避免使用 STRICT_TYPES 标志 # 否则构建可能失败或引擎无法创建。 layer.set_device_type(trt.DeviceType.GPU) # 如果插件有 FP16 实现可以设置其精度以保持整体精度一致 if “my_custom_plugin” in plugin_name and hasattr(plugin, ‘supports_format_combination’): # 检查插件是否支持 FP16 # ... 插件特定的兼容性检查代码 ... layer.precision trt.DataType.HALF四、构建引擎与序列化完成网络定义和设备分配后构建引擎并序列化保存。构建日志对于调试 DLA 层分配至关重要。# 设置最大工作空间大小 config.max_workspace_size 1 30 # 1 GB # 构建引擎 print(“Building TensorRT engine with DLA offloading...”) serialized_engine builder.build_serialized_network(network, config) if serialized_engine is None: print(“Engine build failed!”) else: # 保存引擎文件 with open(“tva_engine_dla_precise.engine”, “wb”) as f: f.write(serialized_engine) print(“Engine built and saved successfully.”) # 可选打印详细的层信息验证设备分配 inspector engine.create_engine_inspector() # 获取每一层的详细信息包括执行设备 for i in range(engine.num_layers): layer_info inspector.get_layer_information(i, trt.LayerInformationFormat(0)) # layer_info 字符串中会包含 “Device Type: DLA” 或 “Device Type: GPU” 的信息 if “Device Type: DLA” in layer_info: print(f“Layer {i} is scheduled on DLA.”)五、运行时验证与性能剖析引擎构建后需要在 Jetson Orin 上运行以验证算子是否按预期在 DLA 上执行并评估性能。使用trtexec工具验证TensorRT 自带的trtexec是快速验证 DLA 卸载配置的有效工具。# 使用 trtexec 加载引擎并运行基准测试同时启用详细输出 trtexec --loadEnginetva_engine_dla_precise.engine --useDLACore0 --allowGPUFallback --verbose在trtexec的详细输出中搜索 “DLA” 关键字可以清楚地看到哪些层在 DLA 上执行哪些层回退到了 GPU。在推理代码中检查设备类型在 Python 或 C 推理脚本中可以在执行上下文IExecutionContext中查询层的设备信息较新版本的 TensorRT API 支持。性能与功耗监控结合tegrastats如之前讨论和 NVIDIA Nsight Systems 进行系统级性能剖析确认 DLA 核心C0C1在推理期间是否被激活以及 GPU 负载是否相应降低从而验证卸载效果。六、精准卸载策略总结表算子/层类型推荐设备配置要点理由与注意事项标准卷积 (Convolution)DLA显式调用layer.set_device_type(trt.DeviceType.DLA)并设置layer.precision trt.DataType.HALF。DLA 对卷积有硬件加速能效比极高。必须使用 FP16 或 INT8 精度。全连接层 (FullyConnected)DLA同上。DLA 同样高效支持。池化层 (Pooling)DLA同上。标准池化操作在 DLA 上支持良好。ReLU/Sigmoid/TanH 激活DLA检查builder.can_run_on_DLA(layer)后设置。这些标准激活函数通常可卸载。复杂激活如 SiLU/GELU可能需在 GPU 运行。ElementWise 操作按需分配简单的加、乘等操作可尝试 DLA复杂的组合操作建议 GPU。DLA 支持有限的基本逐元素操作。需通过can_run_on_DLA或实际测试验证。连接/切片/重组 (Concat/Slice/Shuffle)GPU显式设置为trt.DeviceType.GPU。这些涉及内存布局操作的层通常在 GPU 上效率更高且 DLA 支持可能不佳。自定义插件 (PluginV2)GPU必须设置为trt.DeviceType.GPU。避免使用STRICT_TYPES标志。DLA 无法执行自定义插件内核。强制分配会导致运行时错误。动态形状算子GPU设置为 GPU或在构建配置中标记为动态形状时TensorRT 可能自动将其分配在 GPU。DLA 对动态形状的支持非常有限固定形状的算子才是卸载的主要目标。网络输入/输出自动管理通常无需手动设置TensorRT 会处理主机与设备间的数据搬运。输入输出张量通常驻留在 GPU 内存与 DLA/GPU 计算层无缝衔接。核心工作流程总结首先在Builder级别启用 DLA 和 GPU 回退。接着在解析或构建网络时遍历所有层根据上表的策略结合builder.can_run_on_DLA()进行兼容性检查使用layer.set_device_type()进行精准的设备分配。对于 DLA 层统一设置为FP16精度。最后构建引擎并通过工具验证卸载结果。通过这种细粒度的控制可以确保 TVA 模型在 Jetson Orin 上实现最优的 DLA-GPU 混合计算最大化能效收益。写在最后——以TVA重新定义视觉技术的能力边界本文介绍了在NVIDIA Jetson Orin平台上为智能体视觉模型(TVA)启用深度学习加速器(DLA)进行算子卸载的核心方法。通过TensorRT的显式配置可以精准控制网络层在DLA或GPU上的执行位置实现能效、性能和兼容性的最佳平衡。关键步骤包括构建期配置DLA核心和默认精度、网络层级别的设备分配策略、处理自定义插件与不兼容算子、引擎构建与序列化以及运行时的验证与性能剖析。文章详细说明了不同类型算子的推荐设备配置方案并强调需要通过实际测试验证DLA支持情况特别是对于自定义插件等特殊算子需要强制设置为GPU执行。

相关文章:

Jetson Orin上TVA模型DLA精准卸载配置

重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

模拟电路实现自主循线机器人:无MCU的硬件逻辑设计

1. 项目概述:用最纯粹的模拟电路,造一台会“思考”的机器人每次看到那些在赛道上灵巧穿梭的循线小车,你是不是也手痒,想自己动手做一个?但一听到“单片机”、“编程”、“Arduino”这些词,又觉得门槛太高&a…...

Driver Store Explorer终极指南:轻松管理Windows驱动存储区,释放宝贵磁盘空间

Driver Store Explorer终极指南:轻松管理Windows驱动存储区,释放宝贵磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾为Windows系统越来越慢而烦…...

DLA功耗优化验证:tegrastats实战指南

重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

从科研图表到商业报表:如何用Matplotlib的legend()提升你的图表专业度?

从科研图表到商业报表:如何用Matplotlib的legend()提升你的图表专业度? 在数据驱动的决策时代,图表不仅是科研论文中的证据载体,更是商业汇报中的说服工具。我曾见证一位生物统计学家将同一组临床试验数据呈现给三种不同受众&…...

C语言(12) 指针的常见操作

指针的常见操作指针变量&#xff0c;有两方面的意思:一个指针指向的内容(数据值&#xff0c;一级)指针变量本身存储的数据 (地址值)#include <stdio.h>int main() {int a 10;int b 0 ;int c 50;int *p NULL;int *q NULL;p &a; // 对指针变量本身进行修改// 对指…...

想深耕网络安全行业,这些必备条件缺一不可

网络空间的攻防对抗日益激烈&#xff0c;网络安全已成为企业生存和国家安全的命脉&#xff0c;它负责构筑数字世界的坚固防线&#xff0c;保护核心资产与用户隐私免受侵害。 想要成为一名优秀的网络安全专家&#xff0c;除了敏锐的安全意识和高度的责任感&#xff0c;更需要锤…...

DeepSeek安全测试辅助Prompt工程白皮书(含17个CVE靶场验证指令模板)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek安全测试辅助 DeepSeek系列大模型在代码生成、漏洞模式识别与安全上下文理解方面展现出独特优势&#xff0c;可作为安全测试工程师的智能协作者。其对OWASP Top 10、CWE分类体系及常见PoC结构具…...

3步快速上手Whisper-WebUI:轻松实现语音转字幕的完整指南

3步快速上手Whisper-WebUI&#xff1a;轻松实现语音转字幕的完整指南 【免费下载链接】Whisper-WebUI A Web UI for easy subtitle using whisper model. 项目地址: https://gitcode.com/gh_mirrors/wh/Whisper-WebUI 还在为视频制作繁琐的字幕而烦恼吗&#xff1f;Whis…...

第2章 谁在危险中——被AI替代的五类程序员

第2章 谁在危险中——被AI替代的五类程序员 核心问题:哪些程序员最容易被AI替代?背后的原因是什么? 2.1 问题定义:一场正在发生的结构性塌陷 2.1.1 数据不会说谎 2026年1月12日,Ravio发布了一份让整个科技圈沉默的报告:过去一年,初级开发者岗位招聘量暴跌73%。 不是…...

Cesium动态数据可视化实战:CallbackProperty结合setInterval打造实时运动轨迹

Cesium动态数据可视化实战&#xff1a;CallbackProperty结合setInterval打造实时运动轨迹 在三维地理信息系统中&#xff0c;实时数据可视化一直是开发者面临的挑战之一。想象一下&#xff0c;当我们需要在地球表面追踪一架正在飞行的无人机&#xff0c;或者监控城市中数百辆出…...

别让依赖毁了你的实验:记一次Vision Mamba复现中causal_conv1d与mamba-ssm的版本“打架”事件

Vision Mamba复现实战&#xff1a;破解依赖冲突的工程化解决方案在深度学习项目的复现过程中&#xff0c;依赖管理往往是最容易被忽视却又最常导致问题的环节。最近在复现Vision Mamba模型时&#xff0c;我遭遇了一场典型的Python依赖"战争"——causal_conv1d与mamba…...

别再乱建索引了!用Explain的key_len字段,一眼看穿你的MySQL联合索引到底生效了几个字段

解密MySQL联合索引&#xff1a;用key_len精准判断索引生效范围 在数据库性能优化领域&#xff0c;联合索引的使用一直是个既基础又容易踩坑的话题。很多开发者虽然知道"最左匹配原则"这个名词&#xff0c;但在实际业务场景中&#xff0c;面对复杂的查询条件组合时&a…...

终极指南:Windows 10完美安装PL2303驱动,解决老旧USB转串口芯片兼容性问题

终极指南&#xff1a;Windows 10完美安装PL2303驱动&#xff0c;解决老旧USB转串口芯片兼容性问题 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 你是否还在为Windows…...

基于KS距离度量交通流分布偏移:提升DRL交通信号控制鲁棒性的工程实践

1. 项目概述与核心挑战在智能交通系统&#xff08;ITS&#xff09;领域&#xff0c;基于深度强化学习&#xff08;DRL&#xff09;的交通信号控制&#xff08;Traffic Signal Control&#xff09;正从研究走向实际部署。作为一名长期关注AI落地应用的从业者&#xff0c;我见过太…...

量子机器学习与傅里叶分析:革新期权定价的混合计算范式

1. 项目概述&#xff1a;当量子机器学习遇见金融定价在金融工程的核心地带&#xff0c;期权定价一直是个计算密集型的硬骨头。传统的蒙特卡洛模拟虽然通用&#xff0c;但为了达到足够的精度&#xff0c;动辄需要百万甚至千万次的路径模拟&#xff0c;计算成本高昂。近年来&…...

基于Arduino与蓝牙模块的六路无线开关控制系统设计与实现

1. 项目概述&#xff1a;用手机蓝牙控制六路LED想不想把手机变成一个无线遥控器&#xff0c;随手一点就能开关家里的灯带、氛围灯&#xff0c;甚至是其他电器&#xff1f;这个项目就是为你准备的。它基于一块功能增强的Arduino兼容板——GlowDuino Uno&#xff0c;配合一个极其…...

DIY智能USB充电器:基于电流检测与双稳态继电器的零功耗节能方案

1. 项目概述&#xff1a;打造一款智能、节能的USB手机充电器作为一名电子爱好者&#xff0c;我经常折腾各种电源项目。市面上很多手机充电器&#xff0c;包括一些原装货&#xff0c;都存在一个通病&#xff1a;手机充满电后&#xff0c;充电器依然插在插座上&#xff0c;内部电…...

基于PIC32单片机实现Android USB音频转SPDIF输出的DIY方案

1. 项目概述&#xff1a;为Android设备打造一个高保真SPDIF音频接口作为一名长期折腾嵌入式音频和家庭影院的玩家&#xff0c;我经常遇到一个痛点&#xff1a;手头那些性能不错的Android手机或平板&#xff0c;其内置的3.5mm耳机孔或者USB-C口的音频输出质量&#xff0c;在连接…...

微信红包助手终极指南:无需ROOT的智能抢红包解决方案

微信红包助手终极指南&#xff1a;无需ROOT的智能抢红包解决方案 【免费下载链接】WeChatLuckyMoney :money_with_wings: WeChats lucky money helper (微信抢红包插件) by Zhongyi Tong. An Android app that helps you snatch red packets in WeChat groups. 项目地址: ht…...

AutoPentest:面向红队的渗透测试决策引擎架构解析

1. 这不是又一个“自动化扫描器”&#xff0c;而是一套能替你做决策的渗透测试工作流引擎AutoPentest这个名字&#xff0c;第一眼容易让人联想到Nmap加个for循环、或者Burp Suite里点几下Intruder——但实际用过的人很快会意识到&#xff1a;它根本不在同一个维度上。我第一次在…...

中小企无需重型数据中台:轻量化数据体系搭建完整方案

过去几年&#xff0c;“数据中台”一度成为企业数字化的标配热词。大量中小企业盲目跟风搭建重型数据中台&#xff0c;投入高额成本、耗费数月甚至数年周期&#xff0c;最终落地效果极差&#xff1a;功能冗余、运维复杂、使用率低、投入产出比失衡。大量项目最终沦为“摆设式中…...

Burp抓包失败的五大隐形墙与HTTPS解密断裂点排查指南

1. 这不是Burp用得不对&#xff0c;是环境链路断在了你没看见的地方“Burp抓不到包”——这句话我过去三年里听开发、测试、刚转安全的新人说了不下两百遍。但真正打开Burp一看&#xff0c;Proxy标签页里空空如也&#xff0c;连个localhost:8080的请求都没有&#xff0c;十有八…...

5步彻底解决Windows DLL加载冲突:UE4SS系统故障排查指南

5步彻底解决Windows DLL加载冲突&#xff1a;UE4SS系统故障排查指南 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS…...

Xia Sql插件:可调试的SQL注入决策引擎

1. 这不是又一个“自动扫SQL”的插件&#xff0c;而是把渗透工程师的判断逻辑塞进了Burp里你有没有过这种经历&#xff1a;在Burp Proxy里看着一堆GET参数、POST JSON、Cookie字段&#xff0c;心里清楚“这里大概率能注入”&#xff0c;但手动拼payload试了七八轮&#xff0c;还…...

ComfyUI-Manager完全指南:掌握AI工作流管理的核心技术

ComfyUI-Manager完全指南&#xff1a;掌握AI工作流管理的核心技术 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custo…...

qobuz-dl终极实战指南:专业无损音乐下载工具架构解析与高效应用

qobuz-dl终极实战指南&#xff1a;专业无损音乐下载工具架构解析与高效应用 【免费下载链接】qobuz-dl A complete Lossless and Hi-Res music downloader for Qobuz 项目地址: https://gitcode.com/gh_mirrors/qo/qobuz-dl 在数字音乐时代&#xff0c;追求极致音质的音…...

Python strip 与 rstrip 函数区别

Python strip 与 rstrip 函数区别 文章目录Python strip 与 rstrip 函数区别一、核心作用二、基础语法三、基础使用示例四、指定删除特定字符五、常用业务场景一、核心作用 函数作用范围strip()移除字符串首尾空白字符rstrip()仅移除字符串右侧末尾字符&#xff0c;左侧保持不…...

【RT-DETR实战】070、模型分析工具:PyTorch Profiler性能分析

上周在部署RT-DETR到边缘设备时遇到一个诡异现象:模型推理时延波动极大,有时30ms,偶尔突然跳到200ms。 盯着代码看了半天没发现逻辑问题,数据流也正常。这种时候,靠猜是没用的,必须上性能分析工具——PyTorch Profiler。 今天我们就来聊聊怎么用它揪出那些藏在细节里的…...

在数据预处理与分析流水线中集成大模型API进行智能标注与摘要

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在数据预处理与分析流水线中集成大模型API进行智能标注与摘要 对于数据工程师而言&#xff0c;处理海量非结构化文本数据是一项常见…...