TensorRT 10.8.0
|
用于在已构建网络上执行推理的引擎,具有功能上不安全的功能。 更多...
#include <NvInferRuntime.h>
公共成员函数 | |
virtual | ~ICudaEngine () noexcept=default |
Dims | getTensorShape (char const *tensorName) const noexcept |
获取输入或输出张量的形状。 更多... | |
DataType | getTensorDataType (char const *tensorName) const noexcept |
根据张量名称确定缓冲区所需的数据类型。 更多... | |
int32_t | getNbLayers () const noexcept |
获取网络中的层数。 更多... | |
IHostMemory * | serialize () const noexcept |
将网络序列化到流。 更多... | |
IExecutionContext * | createExecutionContext (ExecutionContextAllocationStrategy strategy=ExecutionContextAllocationStrategy::kSTATIC) noexcept |
创建执行上下文并指定用于分配内部激活内存的策略。 更多... | |
TensorLocation | getTensorLocation (char const *tensorName) const noexcept |
获取输入或输出张量是否必须在 GPU 或 CPU 上。 更多... | |
bool | isShapeInferenceIO (char const *tensorName) const noexcept |
如果张量是形状计算的必需输入或形状计算的输出,则为 True。 更多... | |
TensorIOMode | getTensorIOMode (char const *tensorName) const noexcept |
确定张量是输入张量还是输出张量。 更多... | |
TRT_DEPRECATED IExecutionContext * | createExecutionContextWithoutDeviceMemory () noexcept |
创建不分配任何设备内存的执行上下文 更多... | |
TRT_DEPRECATED size_t | getDeviceMemorySize () const noexcept |
返回所有配置文件中上下文所需的最大设备内存。 更多... | |
TRT_DEPRECATED size_t | getDeviceMemorySizeForProfile (int32_t profileIndex) const noexcept |
返回配置文件中上下文所需的最大设备内存。 更多... | |
int64_t | getDeviceMemorySizeV2 () const noexcept |
返回所有配置文件中上下文所需的最大设备内存。 更多... | |
int64_t | getDeviceMemorySizeForProfileV2 (int32_t profileIndex) const noexcept |
返回配置文件中上下文所需的最大设备内存。 更多... | |
bool | isRefittable () const noexcept |
如果引擎可以重新拟合,则返回 true。 更多... | |
int32_t | getTensorBytesPerComponent (char const *tensorName) const noexcept |
返回元素每个组件的字节数,如果张量未向量化或提供的名称未映射到输入或输出张量,则返回 -1。 更多... | |
int32_t | getTensorBytesPerComponent (char const *tensorName, int32_t profileIndex) const noexcept |
返回给定配置文件的元素的每个组件的字节数,如果张量未向量化或提供的名称未映射到输入或输出张量,则返回 -1。 更多... | |
int32_t | getTensorComponentsPerElement (char const *tensorName) const noexcept |
返回一个元素中包含的组件数,如果张量未向量化或提供的名称未映射到输入或输出张量,则返回 -1。 更多... | |
int32_t | getTensorComponentsPerElement (char const *tensorName, int32_t profileIndex) const noexcept |
返回给定配置文件的元素的组件数,如果张量未向量化或提供的名称未映射到输入或输出张量,则返回 -1。 更多... | |
TensorFormat | getTensorFormat (char const *tensorName) const noexcept |
返回张量格式,如果提供的名称未映射到输入或输出张量,则返回 TensorFormat::kLINEAR。 更多... | |
TensorFormat | getTensorFormat (char const *tensorName, int32_t profileIndex) const noexcept |
返回给定配置文件的张量格式,如果提供的名称未映射到输入或输出张量,则返回 TensorFormat::kLINEAR。 更多... | |
char const * | getTensorFormatDesc (char const *tensorName) const noexcept |
返回张量格式的人类可读描述,如果提供的名称未映射到输入或输出张量,则返回空字符串。 更多... | |
char const * | getTensorFormatDesc (char const *tensorName, int32_t profileIndex) const noexcept |
返回给定配置文件的张量格式的人类可读描述,如果提供的名称未映射到输入或输出张量,则返回空字符串。 更多... | |
int32_t | getTensorVectorizedDim (char const *tensorName) const noexcept |
返回缓冲区向量化的维度索引,如果提供的名称未映射到输入或输出张量,则返回 -1。 更多... | |
int32_t | getTensorVectorizedDim (char const *tensorName, int32_t profileIndex) const noexcept |
返回给定配置文件的缓冲区向量化的维度索引,如果提供的名称未映射到输入或输出张量,则返回 -1。 更多... | |
char const * | getName () const noexcept |
返回与引擎关联的网络名称。 更多... | |
int32_t | getNbOptimizationProfiles () const noexcept |
获取为此引擎定义的优化配置文件的数量。 更多... | |
Dims | getProfileShape (char const *tensorName, int32_t profileIndex, OptProfileSelector select) const noexcept |
获取在优化配置文件下给定名称的输入张量的最小/最佳/最大维度。 更多... | |
int32_t const * | getProfileTensorValues (char const *tensorName, int32_t profileIndex, OptProfileSelector select) const noexcept |
获取在优化配置文件下给定名称的输入张量的最小/最佳/最大值(非维度)。 这些值对应于在使用 IOptimizationProfile::setShapeValues 构建引擎时设置的值。 更多... | |
EngineCapability | getEngineCapability () const noexcept |
确定此引擎具有哪些执行能力。 更多... | |
void | setErrorRecorder (IErrorRecorder *recorder) noexcept |
为此接口设置 ErrorRecorder。 更多... | |
IErrorRecorder * | getErrorRecorder () const noexcept |
获取分配给此接口的 ErrorRecorder。 更多... | |
TRT_DEPRECATED bool | hasImplicitBatchDimension () const noexcept |
查询引擎是否使用隐式批次维度构建。 更多... | |
TacticSources | getTacticSources () const noexcept |
返回此引擎所需策略来源。 更多... | |
ProfilingVerbosity | getProfilingVerbosity () const noexcept |
返回构建引擎时构建器配置设置的 ProfilingVerbosity。 更多... | |
IEngineInspector * | createEngineInspector () const noexcept |
创建一个新的引擎检查器,用于打印引擎或执行上下文中的层信息。 更多... | |
int32_t | getNbIOTensors () const noexcept |
返回 IO 张量的数量。 更多... | |
char const * | getIOTensorName (int32_t index) const noexcept |
返回 IO 张量的名称。 更多... | |
HardwareCompatibilityLevel | getHardwareCompatibilityLevel () const noexcept |
返回此引擎的硬件兼容性级别。 更多... | |
int32_t | getNbAuxStreams () const noexcept |
返回此引擎使用的辅助流的数量。 更多... | |
ISerializationConfig * | createSerializationConfig () noexcept |
创建序列化配置对象。 更多... | |
IHostMemory * | serializeWithConfig (ISerializationConfig &config) const noexcept |
使用提供的 SerializationConfig 将网络序列化到流。 更多... | |
TRT_DEPRECATED bool | setWeightStreamingBudget (int64_t gpuMemoryBudget) noexcept |
限制网络权重可用的最大 GPU 内存量(以字节为单位)。 更多... | |
TRT_DEPRECATED int64_t | getWeightStreamingBudget () const noexcept |
返回当前权重流式传输设备内存预算(以字节为单位)。 更多... | |
TRT_DEPRECATED int64_t | getMinimumWeightStreamingBudget () const noexcept |
成功进行权重流式传输所需的网络权重的最小 GPU 内存字节数。 更多... | |
int64_t | getStreamableWeightsSize () const noexcept |
获取所有可流式传输权重的总大小(以字节为单位)。 更多... | |
bool | setWeightStreamingBudgetV2 (int64_t gpuMemoryBudget) noexcept |
限制网络权重可用的最大 GPU 内存量(以字节为单位)。 更多... | |
int64_t | getWeightStreamingBudgetV2 () const noexcept |
返回当前权重流式传输设备内存预算(以字节为单位)。 更多... | |
int64_t | getWeightStreamingAutomaticBudget () const noexcept |
TensorRT 自动确定模型运行的设备内存预算。预算接近当前可用内存大小,为用户应用程序中的其他内存需求留出一些空间。如果预算超过从 getStreamableWeightsSize() 获取的大小,则预算将被限制为该大小,从而有效地禁用权重流式传输。由于 TensorRT 缺乏有关用户分配的信息,因此剩余内存大小可能大于所需大小(导致内存浪费),或者小于所需大小(导致内存不足错误)。为了获得最佳内存分配,建议手动计算并设置预算。 更多... | |
int64_t | getWeightStreamingScratchMemorySize () const noexcept |
返回当前权重流式传输预算所需的暂存内存大小。 更多... | |
bool | isDebugTensor (char const *name) const noexcept |
检查张量是否标记为调试张量。 更多... | |
保护属性 | |
apiv::VCudaEngine * | mImpl |
附加继承成员 | |
![]() | |
INoCopy ()=default | |
virtual | ~INoCopy ()=default |
INoCopy (INoCopy const &other)=delete | |
INoCopy & | operator= (INoCopy const &other)=delete |
INoCopy (INoCopy &&other)=delete | |
INoCopy & | operator= (INoCopy &&other)=delete |
用于在已构建网络上执行推理的引擎,具有功能上不安全的功能。
|
virtualdefaultnoexcept |
|
inlinenoexcept |
创建一个新的引擎检查器,用于打印引擎或执行上下文中的层信息。
|
inlinenoexcept |
创建执行上下文并指定用于分配内部激活内存的策略。
分配策略的默认值为 ExecutionContextAllocationStrategy::kSTATIC,这意味着上下文将预先分配一块设备内存,该内存足以容纳所有配置文件。 新创建的执行上下文将被分配优化配置文件 0。 如果已为引擎设置了错误记录器,它也将传递给执行上下文。
|
inlinenoexcept |
创建不分配任何设备内存的执行上下文
此设备上下文执行所需的内存必须由应用程序提供。
|
inlinenoexcept |
创建序列化配置对象。
|
inlinenoexcept |
返回所有配置文件中上下文所需的最大设备内存。
|
inlinenoexcept |
返回配置文件中上下文所需的最大设备内存。
|
inlinenoexcept |
返回配置文件中上下文所需的最大设备内存。
此 API 是有状态的,因此其调用基于以下调用返回不同的值
|
inlinenoexcept |
返回所有配置文件中上下文所需的最大设备内存。
此 API 是有状态的,因此其调用基于以下调用返回不同的值
|
inlinenoexcept |
确定此引擎具有哪些执行能力。
如果引擎具有 EngineCapability::kSTANDARD,则所有引擎功能均有效。 如果引擎具有 EngineCapability::kSAFETY,则只有安全引擎中的功能有效。 如果引擎具有 EngineCapability::kDLA_STANDALONE,则只有序列化、销毁和 const 访问器函数有效。
|
inlinenoexcept |
获取分配给此接口的 ErrorRecorder。
检索给定类别的已分配错误记录器对象。 如果未设置错误处理程序,则将返回 nullptr。
|
inlinenoexcept |
返回此引擎的硬件兼容性级别。
这仅适用于 Ampere 和更新的架构。
|
inlinenoexcept |
|
inlinenoexcept |
成功进行权重流式传输所需的网络权重的最小 GPU 内存字节数。
对于具有可流式传输权重的引擎,这是一个正整数,因为 GPU 上需要一个暂存缓冲区来临时保存流式传输的权重。 暂存缓冲区的大小由 TensorRT 确定,并且必须至少与网络中最大可流式传输权重的大小一样大。
|
inlinenoexcept |
返回与引擎关联的网络名称。
该名称在网络创建期间设置,并在构建或反序列化后检索。
|
inlinenoexcept |
返回此引擎使用的辅助流的数量。
此数字将小于或等于构建引擎时 IBuilderConfig::setMaxAuxStreams() API 调用设置的最大允许辅助流数。
|
inlinenoexcept |
返回 IO 张量的数量。
它是从中构建引擎的网络的输入和输出张量的数量。 IO 张量的名称可以通过调用 getIOTensorName(i) 来发现,其中 i 在 0 到 getNbIOTensors()-1 之间。
|
inlinenoexcept |
获取网络中的层数。
网络中的层数不一定是原始网络定义中的数量,因为在优化引擎时可能会组合或消除层。 当构建逐层表格时,此值可能很有用,例如在聚合多次执行的分析数据时。
|
inlinenoexcept |
|
inlinenoexcept |
获取在优化配置文件下给定名称的输入张量的最小/最佳/最大维度。
tensorName | 输入张量的名称。 |
profileIndex | 配置文件索引,必须介于 0 和 getNbOptimizationProfiles()-1 之间。 |
select | 是否查询此输入张量的最小、最佳或最大维度。 |
|
inlinenoexcept |
获取在优化配置下,给定名称的输入张量的最小/最佳/最大值(非维度)。 这些值与构建引擎时使用 IOptimizationProfile::setShapeValues 设置的值相对应。
tensorName | 输入张量的名称。 |
profileIndex | 配置文件索引,必须介于 0 和 getNbOptimizationProfiles()-1 之间。 |
select | 是否查询此输入张量的最小值、最佳值或最大值。 |
|
inlinenoexcept |
返回构建引擎时构建器配置所设置的 ProfilingVerbosity。
|
inlinenoexcept |
获取所有可流式传输权重的总大小(以字节为单位)。
可流式传输权重集是所有网络权重的子集。总大小可能超过空闲 GPU 内存。
|
inlinenoexcept |
返回此引擎所需策略源。
返回的值等于或多于通过 IBuilderConfig 中的 setTacticSources() 在构建时设置的策略源。 由后者设置但未由 ICudaEngine::getTacticSources 返回的源不会减少整体引擎执行时间,并且可以从未来的构建中删除以减少构建时间。
|
inlinenoexcept |
返回元素的每个组件的字节数,如果张量未向量化或提供的名称未映射到输入或输出张量,则返回 -1。
如果 getTensorVectorizedDim(tensorName) != -1,则返回向量组件大小。
tensorName | 输入或输出张量的名称。 |
|
inlinenoexcept |
返回给定配置的元素的每个组件的字节数,如果张量未向量化或提供的名称未映射到输入或输出张量,则返回 -1。
如果 getTensorVectorizedDim(tensorName, profileIndex) != -1,则返回向量组件大小。
tensorName | 输入或输出张量的名称。 |
profileIndex | 要查询的配置索引 |
|
inlinenoexcept |
返回一个元素中包含的组件数,如果张量未向量化,或者提供的名称未映射到输入或输出张量,则返回 -1。
如果 getTensorVectorizedDim(tensorName) != -1,则返回向量中的元素数。
tensorName | 输入或输出张量的名称。 |
|
inlinenoexcept |
返回给定配置的一个元素中包含的组件数,如果张量未向量化,或者提供的名称未映射到输入或输出张量,则返回 -1。
如果 getTensorVectorizedDim(tensorName, profileIndex) != -1,则返回向量中的元素数。
tensorName | 输入或输出张量的名称。 |
profileIndex | 要查询的配置索引 |
|
inlinenoexcept |
确定缓冲区所需的数据类型,根据其张量名称。
tensorName | 输入或输出张量的名称。 |
|
inlinenoexcept |
返回张量格式,或者如果提供的名称未映射到输入或输出张量,则返回 TensorFormat::kLINEAR。
|
inlinenoexcept |
返回给定配置的张量格式,或者如果提供的名称未映射到输入或输出张量,则返回 TensorFormat::kLINEAR。
tensorName | 输入或输出张量的名称。 |
profileIndex | 要查询格式的配置索引。 |
|
inlinenoexcept |
返回张量格式的人类可读描述,如果提供的名称未映射到输入或输出张量,则返回空字符串。
描述包括顺序、向量化、数据类型和步幅。 示例如下所示:示例 1:kCHW + FP32 "行主线性 FP32 格式" 示例 2:kCHW2 + FP16 "双通道向量化行主 FP16 格式" 示例 3:kHWC8 + FP16 + 行步幅 = 32 "通道主 FP16 格式,其中 C % 8 == 0 且 H 步幅 % 32 == 0"
tensorName | 输入或输出张量的名称。 |
|
inlinenoexcept |
返回给定配置的张量格式的人类可读描述,如果提供的名称未映射到输入或输出张量,则返回空字符串。
描述包括顺序、向量化、数据类型和步幅。 示例如下所示:示例 1:kCHW + FP32 "行主线性 FP32 格式" 示例 2:kCHW2 + FP16 "双通道向量化行主 FP16 格式" 示例 3:kHWC8 + FP16 + 行步幅 = 32 "通道主 FP16 格式,其中 C % 8 == 0 且 H 步幅 % 32 == 0"
tensorName | 输入或输出张量的名称。 |
profileIndex | 要查询格式的配置索引。 |
|
inlinenoexcept |
确定张量是输入张量还是输出张量。
tensorName | 输入或输出张量的名称。 |
|
inlinenoexcept |
获取输入或输出张量是否必须位于 GPU 或 CPU 上。
tensorName | 输入或输出张量的名称。 |
位置在构建时确定。例如,形状张量输入通常需要位于 CPU 上。
|
inlinenoexcept |
获取输入或输出张量的形状。
tensorName | 输入或输出张量的名称。 |
|
inlinenoexcept |
返回缓冲区向量化的维度索引,如果提供的名称未映射到输入或输出张量,则返回 -1。
具体来说,如果每个向量的标量数为 1,则返回 -1。
tensorName | 输入或输出张量的名称。 |
|
inlinenoexcept |
返回给定配置的缓冲区向量化的维度索引,如果提供的名称未映射到输入或输出张量,则返回 -1。
具体来说,如果每个向量的标量数为 1,则返回 -1。
tensorName | 输入的名称。 |
profileIndex | 要查询格式的配置索引。 |
|
inlinenoexcept |
TensorRT 自动确定模型运行的设备内存预算。预算接近当前可用内存大小,为用户的应用程序中的其他内存需求留出一些空间。如果预算超过从 getStreamableWeightsSize() 获取的大小,则会将其限制为该大小,从而有效地禁用权重流式传输。由于 TensorRT 缺少有关用户分配的信息,因此剩余内存大小可能大于所需大小(导致内存浪费),或者小于所需大小(导致内存不足错误)。为了获得最佳内存分配,建议手动计算和设置预算。
|
inlinenoexcept |
返回当前权重流式传输设备内存预算(以字节为单位)。
|
inlinenoexcept |
返回当前权重流式传输设备内存预算(以字节为单位)。
|
inlinenoexcept |
返回当前权重流式传输预算所需的暂存内存大小。
权重流式传输需要在 GPU 上少量暂存内存,以便在执行之前暂存 CPU 权重。此值通常远小于总可流式传输权重大小。然后,每个 IExecutionContext 将分配此额外内存,或者用户可以通过 getDeviceMemorySizeV2() 和 IExecutionContext::setDeviceMemoryV2() 提供额外内存。
此调用的返回值取决于
|
inlinenoexcept |
查询引擎是否使用隐式批次维度构建。
|
inlinenoexcept |
|
inlinenoexcept |
如果引擎可以重新拟合,则返回 true。
|
inlinenoexcept |
如果张量是形状计算所需的输入,或者是形状计算的输出,则为 True。
对于以下任一条件,返回 true
例如,如果网络使用输入张量 "foo" 作为 IElementWiseLayer 的加数,该层计算 IShuffleLayer 的“reshape dimensions”,则 isShapeInferenceIO("foo") == true。 如果网络将所述输入张量 "foo" 复制到输出 "bar",则 isShapeInferenceIO("bar") == true 并且 IExecutionContext::inferShapes() 将写入 "bar"。
|
inlinenoexcept |
|
inlinenoexcept |
使用提供的 SerializationConfig 将网络序列化到流。
可以使用 IRuntime::deserializeCudaEngine() 反序列化网络。 使用 SerializationFlag::kEXCLUDE_WEIGHTS 序列化 plan 文件需要使用 kREFIT、kREFIT_IDENTICAL 或 kREFIT_INDIVIDUAL 构建引擎。
|
inlinenoexcept |
为此接口设置 ErrorRecorder。
将 ErrorRecorder 分配给此接口。ErrorRecorder 将跟踪执行期间的所有错误。此函数将至少调用一次已注册 ErrorRecorder 的 incRefCount。将 recorder 设置为 nullptr 将取消注册接口的 recorder,如果已注册 recorder,则会导致调用 decRefCount。
如果未设置错误记录器,则消息将发送到全局日志流。
recorder | 要注册到此接口的错误记录器。 |
|
inlinenoexcept |
限制网络权重可用的最大 GPU 内存量(以字节为单位)。
gpuMemoryBudget | 此参数可以采用 3 种类型的值: -1:允许 TensorRT 根据可流式传输权重大小选择预算。将在 createExecutionContext() 查询可用 CUDA 内存,并据此
|
通过设置权重限制,用户可以预期 GPU 内存使用量减少(网络权重的总字节数)- gpuMemoryBudget 字节。当 gpuMemoryBudget 设置为 getMinimumWeightStreamingBudget() 时,内存节省最多。创建额外的 IExecutionContext 将使内存使用量增加 O(getMinimumStreamingBudget())。
流式传输更大的内存量可能会导致性能降低,除非在某些边界情况下,流式传输权重允许用户运行更大的批次大小。在这些情况下,更高的吞吐量抵消了延迟的增加。建议调整内存限制值以获得最佳性能。
|
inlinenoexcept |
限制网络权重可用的最大 GPU 内存量(以字节为单位)。
gpuMemoryBudget | 此参数必须为非负值。 0:仅需要少量暂存内存即可运行模型。 >= getStreamableWeightsSize(默认值):禁用权重流式传输。如果网络对于 GPU 内存来说太大,则执行可能会失败。 |
通过设置权重限制,用户可以预期 GPU 内存使用量减少大约(网络权重的总字节数)- gpuMemoryBudget 字节。当 gpuMemoryBudget 设置为 0 时,内存节省最多。如果引擎正在流式传输其权重(预算 < getStreamableWeightsSize()),则每个 IExecutionContext 将需要 getWeightStreamingScratchMemorySize() 字节的额外设备内存。
流式传输更大的内存量可能会导致性能降低,除非在某些边界情况下,流式传输权重允许用户运行更大的批次大小。在这些情况下,更高的吞吐量抵消了延迟的增加。建议调整内存限制值以获得最佳性能。
|
protected |
版权所有 © 2024 NVIDIA Corporation
隐私政策 | 管理我的隐私 | 请勿出售或分享我的数据 | 服务条款 | 辅助功能 | 公司政策 | 产品安全 | 联系方式