whitbrunn's picture
1231: g0plus dockerfile
38fb1f6 verified
/*
* SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef NV_INFER_PLUGIN_BASE_H
#define NV_INFER_PLUGIN_BASE_H
#if !defined(NV_INFER_INTERNAL_INCLUDE)
static_assert(false, "Do not directly include this file. Include NvInferRuntime.h or NvInferPluginUtils.h");
#endif
#define NV_INFER_INTERNAL_INCLUDE 1
#include "NvInferRuntimeBase.h" // IWYU pragma: exports
#undef NV_INFER_INTERNAL_INCLUDE
namespace nvinfer1
{
//!
//! \enum PluginFieldType
//!
//! \brief The possible field types for custom layer.
//!
enum class PluginFieldType : int32_t
{
//! FP16 field type.
kFLOAT16 = 0,
//! FP32 field type.
kFLOAT32 = 1,
//! FP64 field type.
kFLOAT64 = 2,
//! INT8 field type.
kINT8 = 3,
//! INT16 field type.
kINT16 = 4,
//! INT32 field type.
kINT32 = 5,
//! char field type.
kCHAR = 6,
//! nvinfer1::Dims field type.
kDIMS = 7,
//! Unknown field type.
kUNKNOWN = 8,
//! BF16 field type.
kBF16 = 9,
//! INT64 field type.
kINT64 = 10,
//! FP8 field type.
kFP8 = 11,
//! INT4 field type.
kINT4 = 12,
//! FP4 field type.
kFP4 = 13,
};
//!
//! \class PluginField
//!
//! \brief Structure containing plugin attribute field names and associated data
//! This information can be parsed to decode necessary plugin metadata
//!
//!
class PluginField
{
public:
//! Plugin field attribute name
AsciiChar const* name;
//! Plugin field attribute data
void const* data;
//! Plugin field attribute type
PluginFieldType type;
//! Number of data entries in the Plugin attribute
int32_t length;
PluginField(AsciiChar const* const name_ = nullptr, void const* const data_ = nullptr,
PluginFieldType const type_ = PluginFieldType::kUNKNOWN, int32_t const length_ = 0) noexcept
: name(name_)
, data(data_)
, type(type_)
, length(length_)
{
}
};
//!
//! \struct PluginFieldCollection
//!
//! \brief Plugin field collection struct.
//!
struct PluginFieldCollection
{
//! Number of PluginField entries.
int32_t nbFields{};
//! Pointer to PluginField entries.
PluginField const* fields{};
};
//!
//! \enum TensorRTPhase
//!
//! \brief Indicates a phase of operation of TensorRT
//!
enum class TensorRTPhase : int32_t
{
//! Build phase of TensorRT
kBUILD = 0,
//! Execution phase of TensorRT
kRUNTIME = 1
};
//!
//! \enum PluginCapabilityType
//!
//! \brief Enumerates the different capability types a IPluginV3 object may have
//!
enum class PluginCapabilityType : int32_t
{
//! Core capability. Every IPluginV3 object must have this.
kCORE = 0,
//! Build capability. IPluginV3 objects provided to TensorRT build phase must have this.
kBUILD = 1,
//! Runtime capability. IPluginV3 objects provided to TensorRT build and execution phases must have this.
kRUNTIME = 2
};
namespace v_1_0
{
class IPluginCapability : public IVersionedInterface
{
};
class IPluginResource : public IVersionedInterface
{
public:
//!
//! \brief Return version information associated with this interface. Applications must not override this method.
//!
InterfaceInfo getInterfaceInfo() const noexcept override
{
return InterfaceInfo{"IPluginResource", 1, 0};
}
//!
//! \brief Free the underlying resource
//!
//! This will only be called for IPluginResource objects that were produced from IPluginResource::clone()
//!
//! The IPluginResource object on which release() is called must still be in a clone-able state
//! after release() returns
//!
//! \return 0 for success, else non-zero
//! \usage
//! - Allowed context for the API call
//! - Thread-safe: No; this method is not required to be thread-safe
//!
virtual int32_t release() noexcept = 0;
//!
//! \brief Clone the resource object
//!
//! \note Resource initialization (if any) may be skipped for non-cloned objects since only clones will be
//! registered by TensorRT
//!
//! \return Pointer to cloned object. nullptr if there was an issue.
//!
//! \usage
//! - Allowed context for the API call
//! - Thread-safe: Yes; this method is required to be thread-safe and may be called from multiple threads.
//!
virtual IPluginResource* clone() noexcept = 0;
~IPluginResource() noexcept override = default;
IPluginResource() = default;
IPluginResource(IPluginResource const&) = default;
IPluginResource(IPluginResource&&) = default;
IPluginResource& operator=(IPluginResource const&) & = default;
IPluginResource& operator=(IPluginResource&&) & = default;
}; // class IPluginResource
class IPluginCreatorInterface : public IVersionedInterface
{
public:
~IPluginCreatorInterface() noexcept override = default;
protected:
IPluginCreatorInterface() = default;
IPluginCreatorInterface(IPluginCreatorInterface const&) = default;
IPluginCreatorInterface(IPluginCreatorInterface&&) = default;
IPluginCreatorInterface& operator=(IPluginCreatorInterface const&) & = default;
IPluginCreatorInterface& operator=(IPluginCreatorInterface&&) & = default;
};
class IPluginV3 : public IVersionedInterface
{
public:
//!
//! \brief Return version information associated with this interface. Applications must not override this method.
//!
InterfaceInfo getInterfaceInfo() const noexcept override
{
return InterfaceInfo{"PLUGIN", 1, 0};
}
//! \brief Return a pointer to plugin object implementing the specified PluginCapabilityType.
//!
//! \note IPluginV3 objects added for the build phase (through addPluginV3()) must return valid objects for
//! PluginCapabilityType::kCORE, PluginCapabilityType::kBUILD and PluginCapabilityType::kRUNTIME.
//!
//! \note IPluginV3 objects added for the runtime phase must return valid objects for
//! PluginCapabilityType::kCORE and PluginCapabilityType::kRUNTIME.
//!
//! \see TensorRTPhase
//! \see IPluginCreatorV3One::createPlugin()
//!
virtual IPluginCapability* getCapabilityInterface(PluginCapabilityType type) noexcept = 0;
//!
//! \brief Clone the plugin object. This copies over internal plugin parameters and returns a new plugin object with
//! these parameters. The cloned object must be in a fully initialized state.
//!
//! \note The cloned object must return valid objects through getCapabilityInterface() for at least the same
//! PluginCapabilityTypes as the original object.
//!
//! \return A cloned plugin object in an initialized state with the same parameters as the current object.
//! nullptr must be returned if the cloning fails.
//!
virtual IPluginV3* clone() noexcept = 0;
};
} // namespace v_1_0
//!
//! \class IPluginResource
//!
//! \brief Interface for plugins to define custom resources that could be shared through the plugin registry
//!
//! \see IPluginRegistry::acquirePluginResource
//! \see IPluginRegistry::releasePluginResource
//!
using IPluginResource = v_1_0::IPluginResource;
//!
//! \class IPluginCreatorInterface
//!
//! \brief Base class for all plugin creator versions.
//!
//! \see IPluginCreator and IPluginRegistry
//!
using IPluginCreatorInterface = v_1_0::IPluginCreatorInterface;
//!
//! \class IPluginV3
//!
//! \brief Plugin class for the V3 generation of user-implemented layers.
//!
//! IPluginV3 acts as a wrapper around the plugin capability interfaces that define the actual behavior of the plugin.
//!
//! \see IPluginCapability
//! \see IPluginCreatorV3One
//! \see IPluginRegistry
//!
using IPluginV3 = v_1_0::IPluginV3;
//!
//! \class IPluginCapability
//!
//! \brief Base class for plugin capability interfaces
//!
//! IPluginCapability represents a split in TensorRT V3 plugins to sub-objects that expose different types of
//! capabilites a plugin may have, as opposed to a single interface which defines all capabilities and behaviors of a
//! plugin.
//!
//! \warning Do not inherit from this class, as doing so will break forward-compatibility of the API and ABI.
//!
//! \see PluginCapabilityType
//!
using IPluginCapability = v_1_0::IPluginCapability;
} // namespace nvinfer1
#endif /* NV_INFER_PLUGIN_BASE_H */