重磅预告本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著特邀美国 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精准卸载配置
发布时间:2026/5/25 17:48:07
重磅预告本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著特邀美国 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执行。