diff --git a/CHANGELOG.md b/CHANGELOG.md index a67bb266..c81d2225 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,38 @@ # TensorRT OSS Release Changelog -## 10.3.0 GA - 2024-08-07 +## 10.4.0 GA - 2024-09-11 +Key Features and Updates: + +- Demo changes + - Added [Stable Cascade](demo/Diffusion) pipeline. + - Enabled INT8 and FP8 quantization for Stable Diffusion v1.5, v2.0 and v2.1 pipelines. + - Enabled FP8 quantization for Stable Diffusion XL pipeline. +- Sample changes + - Add a new python sample `aliased_io_plugin` which demonstrates how in-place updates to plugin inputs can be achieved through I/O aliasing. +- Plugin changes + - Migrated IPluginV2-descendent versions (a) of the following plugins to newer versions (b) which implement IPluginV3 (a->b): + - scatterElementsPlugin (1->2) + - skipLayerNormPlugin (1->5, 2->6, 3->7, 4->8) + - embLayerNormPlugin (2->4, 3->5) + - bertQKVToContextPlugin (1->4, 2->5, 3->6) + - Note + - The newer versions preserve the corresponding attributes and I/O of the corresponding older plugin version. + - The older plugin versions are deprecated and will be removed in a future release. + +- Quickstart guide + - Updated deploy_to_triton guide and removed legacy APIs. + - Removed legacy TF-TRT code as the project is no longer supported. + - Removed quantization_tutorial as pytorch_quantization has been deprecated. Check out https://github.com/NVIDIA/TensorRT-Model-Optimizer for the latest quantization support. Check [Stable Diffusion XL (Base/Turbo) and Stable Diffusion 1.5 Quantization with Model Optimizer](https://github.com/NVIDIA/TensorRT-Model-Optimizer/tree/main/diffusers/quantization) for integration with TensorRT. +- Parser changes + - Added support for tensor `axes` for `Pad` operations. + - Added support for `BlackmanWindow`, `HammingWindow`, and `HannWindow` operations. + - Improved error handling in `IParserRefitter`. + - Fixed kernel shape inference in multi-input convolutions. + +- Updated tooling + - polygraphy-extension-trtexec v0.0.9 + +## 10.3.0 GA - 2024-08-02 Key Features and Updates: diff --git a/CMakeLists.txt b/CMakeLists.txt index a1f072a5..2928f5ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,7 +80,7 @@ option(BUILD_PARSERS "Build TensorRT parsers" ON) option(BUILD_SAMPLES "Build TensorRT samples" ON) # C++14 -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) diff --git a/README.md b/README.md index 4a120aab..cdd6bdbb 100644 --- a/README.md +++ b/README.md @@ -26,13 +26,13 @@ You can skip the **Build** section to enjoy TensorRT with Python. To build the TensorRT-OSS components, you will first need the following software packages. **TensorRT GA build** -* TensorRT v10.3.0.26 +* TensorRT v10.4.0.26 * Available from direct download links listed below **System Packages** * [CUDA](https://developer.nvidia.com/cuda-toolkit) * Recommended versions: - * cuda-12.5.0 + cuDNN-8.9 + * cuda-12.6.0 + cuDNN-8.9 * cuda-11.8.0 + cuDNN-8.9 * [GNU make](https://ftp.gnu.org/gnu/make/) >= v4.1 * [cmake](https://github.com/Kitware/CMake/releases) >= v3.13 @@ -73,25 +73,25 @@ To build the TensorRT-OSS components, you will first need the following software If using the TensorRT OSS build container, TensorRT libraries are preinstalled under `/usr/lib/x86_64-linux-gnu` and you may skip this step. Else download and extract the TensorRT GA build from [NVIDIA Developer Zone](https://developer.nvidia.com) with the direct links below: - - [TensorRT 10.3.0.26 for CUDA 11.8, Linux x86_64](https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/tars/TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz) - - [TensorRT 10.3.0.26 for CUDA 12.5, Linux x86_64](https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/tars/TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-12.5.tar.gz) - - [TensorRT 10.3.0.26 for CUDA 11.8, Windows x86_64](https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/zip/TensorRT-10.3.0.26.Windows.win10.cuda-11.8.zip) - - [TensorRT 10.3.0.26 for CUDA 12.5, Windows x86_64](https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/zip/TensorRT-10.3.0.26.Windows.win10.cuda-12.5.zip) + - [TensorRT 10.4.0.26 for CUDA 11.8, Linux x86_64](https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.4.0/tars/TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz) + - [TensorRT 10.4.0.26 for CUDA 12.6, Linux x86_64](https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.4.0/tars/TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-12.6.tar.gz) + - [TensorRT 10.4.0.26 for CUDA 11.8, Windows x86_64](https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.4.0/zip/TensorRT-10.4.0.26.Windows.win10.cuda-11.8.zip) + - [TensorRT 10.4.0.26 for CUDA 12.6, Windows x86_64](https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.4.0/zip/TensorRT-10.4.0.26.Windows.win10.cuda-12.6.zip) - **Example: Ubuntu 20.04 on x86-64 with cuda-12.5** + **Example: Ubuntu 20.04 on x86-64 with cuda-12.6** ```bash cd ~/Downloads - tar -xvzf TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-12.5.tar.gz - export TRT_LIBPATH=`pwd`/TensorRT-10.3.0.26 + tar -xvzf TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-12.6.tar.gz + export TRT_LIBPATH=`pwd`/TensorRT-10.4.0.26 ``` - **Example: Windows on x86-64 with cuda-12.5** + **Example: Windows on x86-64 with cuda-12.6** ```powershell - Expand-Archive -Path TensorRT-10.3.0.26.Windows.win10.cuda-12.5.zip - $env:TRT_LIBPATH="$pwd\TensorRT-10.3.0.26\lib" + Expand-Archive -Path TensorRT-10.4.0.26.Windows.win10.cuda-12.6.zip + $env:TRT_LIBPATH="$pwd\TensorRT-10.4.0.26\lib" ``` ## Setting Up The Build Environment @@ -101,27 +101,27 @@ For Linux platforms, we recommend that you generate a docker container for build 1. #### Generate the TensorRT-OSS build container. The TensorRT-OSS build container can be generated using the supplied Dockerfiles and build scripts. The build containers are configured for building TensorRT OSS out-of-the-box. - **Example: Ubuntu 20.04 on x86-64 with cuda-12.5 (default)** + **Example: Ubuntu 20.04 on x86-64 with cuda-12.6 (default)** ```bash - ./docker/build.sh --file docker/ubuntu-20.04.Dockerfile --tag tensorrt-ubuntu20.04-cuda12.5 + ./docker/build.sh --file docker/ubuntu-20.04.Dockerfile --tag tensorrt-ubuntu20.04-cuda12.6 ``` - **Example: Rockylinux8 on x86-64 with cuda-12.5** + **Example: Rockylinux8 on x86-64 with cuda-12.6** ```bash - ./docker/build.sh --file docker/rockylinux8.Dockerfile --tag tensorrt-rockylinux8-cuda12.5 + ./docker/build.sh --file docker/rockylinux8.Dockerfile --tag tensorrt-rockylinux8-cuda12.6 ``` - **Example: Ubuntu 22.04 cross-compile for Jetson (aarch64) with cuda-12.5 (JetPack SDK)** + **Example: Ubuntu 22.04 cross-compile for Jetson (aarch64) with cuda-12.6 (JetPack SDK)** ```bash - ./docker/build.sh --file docker/ubuntu-cross-aarch64.Dockerfile --tag tensorrt-jetpack-cuda12.5 + ./docker/build.sh --file docker/ubuntu-cross-aarch64.Dockerfile --tag tensorrt-jetpack-cuda12.6 ``` - **Example: Ubuntu 22.04 on aarch64 with cuda-12.5** + **Example: Ubuntu 22.04 on aarch64 with cuda-12.6** ```bash - ./docker/build.sh --file docker/ubuntu-22.04-aarch64.Dockerfile --tag tensorrt-aarch64-ubuntu22.04-cuda12.5 + ./docker/build.sh --file docker/ubuntu-22.04-aarch64.Dockerfile --tag tensorrt-aarch64-ubuntu22.04-cuda12.6 ``` 2. #### Launch the TensorRT-OSS build container. **Example: Ubuntu 20.04 build container** ```bash - ./docker/launch.sh --tag tensorrt-ubuntu20.04-cuda12.5 --gpus all + ./docker/launch.sh --tag tensorrt-ubuntu20.04-cuda12.6 --gpus all ``` > NOTE:
1. Use the `--tag` corresponding to build container generated in Step 1. @@ -132,38 +132,38 @@ For Linux platforms, we recommend that you generate a docker container for build ## Building TensorRT-OSS * Generate Makefiles and build. - **Example: Linux (x86-64) build with default cuda-12.5** + **Example: Linux (x86-64) build with default cuda-12.6** ```bash cd $TRT_OSSPATH mkdir -p build && cd build cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out make -j$(nproc) ``` - **Example: Linux (aarch64) build with default cuda-12.5** + **Example: Linux (aarch64) build with default cuda-12.6** ```bash cd $TRT_OSSPATH mkdir -p build && cd build cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out -DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_aarch64-native.toolchain make -j$(nproc) ``` - **Example: Native build on Jetson (aarch64) with cuda-12.5** + **Example: Native build on Jetson (aarch64) with cuda-12.6** ```bash cd $TRT_OSSPATH mkdir -p build && cd build - cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out -DTRT_PLATFORM_ID=aarch64 -DCUDA_VERSION=12.5 + cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out -DTRT_PLATFORM_ID=aarch64 -DCUDA_VERSION=12.6 CC=/usr/bin/gcc make -j$(nproc) ``` > NOTE: C compiler must be explicitly specified via CC= for native aarch64 builds of protobuf. - **Example: Ubuntu 22.04 Cross-Compile for Jetson (aarch64) with cuda-12.5 (JetPack)** + **Example: Ubuntu 22.04 Cross-Compile for Jetson (aarch64) with cuda-12.6 (JetPack)** ```bash cd $TRT_OSSPATH mkdir -p build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_aarch64.toolchain -DCUDA_VERSION=12.5 -DCUDNN_LIB=/pdk_files/cudnn/usr/lib/aarch64-linux-gnu/libcudnn.so -DCUBLAS_LIB=/usr/local/cuda-12.5/targets/aarch64-linux/lib/stubs/libcublas.so -DCUBLASLT_LIB=/usr/local/cuda-12.5/targets/aarch64-linux/lib/stubs/libcublasLt.so -DTRT_LIB_DIR=/pdk_files/tensorrt/lib + cmake .. -DCMAKE_TOOLCHAIN_FILE=$TRT_OSSPATH/cmake/toolchains/cmake_aarch64.toolchain -DCUDA_VERSION=12.6 -DCUDNN_LIB=/pdk_files/cudnn/usr/lib/aarch64-linux-gnu/libcudnn.so -DCUBLAS_LIB=/usr/local/cuda-12.6/targets/aarch64-linux/lib/stubs/libcublas.so -DCUBLASLT_LIB=/usr/local/cuda-12.6/targets/aarch64-linux/lib/stubs/libcublasLt.so -DTRT_LIB_DIR=/pdk_files/tensorrt/lib make -j$(nproc) ``` - **Example: Native builds on Windows (x86) with cuda-12.5** + **Example: Native builds on Windows (x86) with cuda-12.6** ```powershell cd $TRT_OSSPATH mkdir -p build diff --git a/VERSION b/VERSION index 92bc5b53..9de5818c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -10.3.0.26 +10.4.0.26 diff --git a/demo/BERT/README.md b/demo/BERT/README.md index b48bd8be..2aa91952 100755 --- a/demo/BERT/README.md +++ b/demo/BERT/README.md @@ -75,8 +75,8 @@ The following software version configuration has been tested: |Software|Version| |--------|-------| |Python|>=3.8| -|TensorRT|10.3.0.26| -|CUDA|12.5| +|TensorRT|10.4.0.26| +|CUDA|12.6| ## Setup @@ -430,245 +430,244 @@ The following sections provide details on how we achieved our performance and in Results were obtained by running `scripts/inference_benchmark.sh --gpu Ampere` on NVIDIA A100 (40G). -##### BERT Base +##### BERT base | Sequence Length | Batch Size | INT8 Latency (ms) | | | FP16 Latency (ms) | | | |-----------------|------------|-----------------|-----------------|---------|-----------------|-----------------|---------| | | | 95th Percentile | 99th Percentile | Average | 95th Percentile | 99th Percentile | Average | -| 128 | 1 | 0.53 | 0.68 | 0.54 | 0.79 | 0.79 | 0.64 | -| 128 | 2 | 0.76 | 0.76 | 0.60 | 0.72 | 0.91 | 0.72 | -| 128 | 4 | 0.73 | 0.92 | 0.73 | 1.03 | 1.04 | 0.93 | -| 128 | 8 | 0.94 | 1.20 | 0.95 | 1.31 | 1.31 | 1.31 | -| 128 | 12 | 1.19 | 1.20 | 1.19 | 1.72 | 1.73 | 1.72 | -| 128 | 16 | 1.33 | 1.71 | 1.34 | 2.07 | 2.08 | 2.05 | -| 128 | 24 | 1.82 | 1.82 | 1.81 | 3.04 | 3.07 | 3.01 | -| 128 | 32 | 2.23 | 2.24 | 2.23 | 3.90 | 3.93 | 3.86 | -| 128 | 64 | 4.15 | 4.17 | 4.12 | 7.62 | 7.70 | 7.57 | -| 128 | 128 | 8.11 | 8.12 | 8.03 | 15.34 | 15.35 | 15.20 | -| 384 | 1 | 1.13 | 1.45 | 1.13 | 1.24 | 1.25 | 1.24 | -| 384 | 2 | 1.31 | 1.31 | 1.31 | 1.54 | 1.98 | 1.55 | -| 384 | 4 | 1.66 | 1.66 | 1.66 | 2.12 | 2.12 | 2.12 | -| 384 | 8 | 2.21 | 2.21 | 2.20 | 3.34 | 3.36 | 3.32 | -| 384 | 12 | 3.32 | 3.32 | 3.31 | 4.78 | 4.82 | 4.77 | -| 384 | 16 | 4.01 | 4.01 | 4.00 | 6.37 | 6.44 | 6.35 | -| 384 | 24 | 5.71 | 5.71 | 5.70 | 9.47 | 9.49 | 9.39 | -| 384 | 32 | 7.64 | 7.64 | 7.63 | 13.00 | 13.04 | 12.85 | -| 384 | 64 | 14.87 | 14.88 | 14.73 | 25.12 | 25.14 | 24.78 | -| 384 | 128 | 28.96 | 28.97 | 28.70 | 48.93 | 49.13 | 48.57 | - -##### BERT Large +| 128 | 1 | 0.69 | 0.69 | 0.55 | 0.79 | 0.79 | 0.63 | +| 128 | 2 | 0.60 | 0.76 | 0.60 | 0.72 | 0.91 | 0.72 | +| 128 | 4 | 0.73 | 0.93 | 0.73 | 1.09 | 1.09 | 0.94 | +| 128 | 8 | 1.21 | 1.21 | 0.95 | 1.31 | 1.31 | 1.30 | +| 128 | 12 | 1.40 | 1.40 | 1.21 | 1.72 | 1.72 | 1.72 | +| 128 | 16 | 1.34 | 1.71 | 1.34 | 2.08 | 2.08 | 2.06 | +| 128 | 24 | 1.82 | 1.83 | 1.82 | 3.05 | 3.06 | 3.03 | +| 128 | 32 | 2.23 | 2.24 | 2.23 | 3.95 | 3.99 | 3.91 | +| 128 | 64 | 4.19 | 4.20 | 4.14 | 7.82 | 7.83 | 7.69 | +| 128 | 128 | 8.14 | 8.19 | 8.09 | 15.37 | 15.42 | 15.32 | +| 384 | 1 | 1.13 | 1.45 | 1.14 | 1.25 | 1.60 | 1.26 | +| 384 | 2 | 1.32 | 1.69 | 1.32 | 1.55 | 1.98 | 1.55 | +| 384 | 4 | 1.66 | 2.12 | 1.66 | 2.12 | 2.13 | 2.12 | +| 384 | 8 | 2.21 | 2.21 | 2.20 | 3.37 | 3.40 | 3.33 | +| 384 | 12 | 3.31 | 3.31 | 3.31 | 4.82 | 4.83 | 4.78 | +| 384 | 16 | 4.00 | 4.00 | 4.00 | 6.38 | 6.43 | 6.37 | +| 384 | 24 | 5.70 | 5.75 | 5.70 | 9.44 | 9.49 | 9.35 | +| 384 | 32 | 7.72 | 7.74 | 7.66 | 13.02 | 13.02 | 12.91 | +| 384 | 64 | 14.88 | 14.90 | 14.84 | 25.17 | 25.25 | 24.88 | +| 384 | 128 | 29.00 | 29.01 | 28.83 | 49.03 | 49.22 | 48.77 | + +##### BERT large | Sequence Length | Batch Size | INT8 Latency (ms) | | | FP16 Latency (ms) | | | |-----------------|------------|-----------------|-----------------|---------|-----------------|-----------------|---------| | | | 95th Percentile | 99th Percentile | Average | 95th Percentile | 99th Percentile | Average | -| 128 | 1 | 1.22 | 1.23 | 1.22 | 1.54 | 1.91 | 1.55 | -| 128 | 2 | 1.42 | 1.42 | 1.41 | 1.82 | 1.82 | 1.82 | -| 128 | 4 | 1.78 | 2.06 | 1.79 | 2.50 | 2.50 | 2.50 | -| 128 | 8 | 2.64 | 2.64 | 2.64 | 3.98 | 3.98 | 3.98 | -| 128 | 12 | 3.09 | 3.09 | 3.08 | 5.02 | 5.07 | 4.99 | -| 128 | 16 | 4.09 | 4.09 | 4.08 | 6.93 | 6.94 | 6.86 | -| 128 | 24 | 5.28 | 5.28 | 5.27 | 9.64 | 9.68 | 9.56 | -| 128 | 32 | 7.01 | 7.01 | 6.95 | 12.92 | 13.07 | 12.85 | -| 128 | 64 | 12.86 | 12.86 | 12.73 | 24.79 | 25.07 | 24.59 | -| 128 | 128 | 25.03 | 25.26 | 24.99 | 49.12 | 49.28 | 48.83 | -| 384 | 1 | 2.55 | 2.55 | 2.55 | 2.96 | 2.96 | 2.95 | +| 128 | 1 | 1.24 | 1.24 | 1.24 | 1.54 | 1.55 | 1.54 | +| 128 | 2 | 1.42 | 1.79 | 1.42 | 1.82 | 1.82 | 1.82 | +| 128 | 4 | 1.78 | 1.79 | 1.78 | 2.53 | 2.53 | 2.52 | +| 128 | 8 | 2.64 | 2.64 | 2.64 | 4.07 | 4.10 | 4.06 | +| 128 | 12 | 3.11 | 3.12 | 3.11 | 5.08 | 5.10 | 5.03 | +| 128 | 16 | 4.03 | 4.03 | 4.03 | 6.95 | 6.95 | 6.90 | +| 128 | 24 | 5.32 | 5.34 | 5.30 | 9.80 | 9.90 | 9.72 | +| 128 | 32 | 7.07 | 7.07 | 7.00 | 13.08 | 13.08 | 12.93 | +| 128 | 64 | 12.94 | 13.01 | 12.82 | 24.83 | 24.99 | 24.69 | +| 128 | 128 | 25.29 | 25.29 | 25.09 | 49.70 | 49.72 | 49.06 | +| 384 | 1 | 2.55 | 2.56 | 2.55 | 2.96 | 2.96 | 2.96 | | 384 | 2 | 3.04 | 3.04 | 3.03 | 3.90 | 3.90 | 3.90 | -| 384 | 4 | 4.01 | 4.02 | 4.01 | 5.68 | 5.74 | 5.67 | -| 384 | 8 | 7.18 | 7.18 | 7.17 | 11.13 | 11.13 | 11.01 | -| 384 | 12 | 9.14 | 9.15 | 9.13 | 15.43 | 15.44 | 15.32 | -| 384 | 16 | 12.28 | 12.28 | 12.27 | 21.14 | 21.15 | 20.90 | -| 384 | 24 | 17.68 | 17.68 | 17.54 | 30.98 | 31.02 | 30.68 | -| 384 | 32 | 23.24 | 23.24 | 23.02 | 41.11 | 41.20 | 40.58 | -| 384 | 64 | 44.86 | 45.13 | 44.78 | 79.25 | 79.68 | 79.10 | -| 384 | 128 | 87.82 | 87.84 | 87.69 | 156.70 | 157.02 | 155.61 | +| 384 | 4 | 4.01 | 4.01 | 4.01 | 5.74 | 5.79 | 5.71 | +| 384 | 8 | 7.16 | 7.16 | 7.15 | 11.15 | 11.24 | 11.09 | +| 384 | 12 | 9.15 | 9.23 | 9.14 | 15.46 | 15.47 | 15.40 | +| 384 | 16 | 12.40 | 12.40 | 12.29 | 21.17 | 21.18 | 21.05 | +| 384 | 24 | 17.72 | 17.85 | 17.64 | 31.09 | 31.36 | 30.81 | +| 384 | 32 | 23.29 | 23.31 | 23.15 | 41.32 | 41.34 | 40.86 | +| 384 | 64 | 45.38 | 45.40 | 45.02 | 79.95 | 80.27 | 79.31 | +| 384 | 128 | 87.97 | 87.99 | 87.89 | 156.97 | 157.56 | 155.84 | ##### Megatron Large with Sparsity | Sequence Length | Batch Size | INT8 QAT Latency (ms) | | | |-----------------|------------|-----------------|-----------------|---------| | | | 95th Percentile | 99th Percentile | Average | -| 128 | 1 | 1.11 | 1.40 | 1.11 | -| 128 | 2 | 1.33 | 1.33 | 1.33 | -| 128 | 4 | 1.78 | 1.78 | 1.78 | -| 128 | 8 | 2.54 | 2.54 | 2.53 | -| 128 | 12 | 2.97 | 2.97 | 2.97 | -| 128 | 16 | 3.99 | 3.99 | 3.98 | -| 128 | 24 | 4.91 | 4.91 | 4.90 | -| 128 | 32 | 7.13 | 7.13 | 7.12 | -| 128 | 64 | 11.61 | 11.62 | 11.60 | -| 128 | 128 | 21.22 | 21.32 | 21.09 | -| 384 | 1 | 1.71 | 2.15 | 1.71 | -| 384 | 2 | 2.21 | 2.21 | 2.21 | -| 384 | 4 | 3.47 | 3.48 | 3.47 | -| 384 | 8 | 5.74 | 5.74 | 5.74 | -| 384 | 12 | 8.21 | 8.21 | 8.20 | -| 384 | 16 | 10.33 | 10.34 | 10.32 | -| 384 | 24 | 14.68 | 14.69 | 14.67 | -| 384 | 32 | 18.73 | 18.74 | 18.72 | -| 384 | 64 | 35.77 | 35.78 | 35.49 | -| 384 | 128 | 67.78 | 67.95 | 67.63 | +| 128 | 1 | 1.24 | 1.56 | 1.24 | +| 128 | 2 | 1.42 | 1.42 | 1.42 | +| 128 | 4 | 1.78 | 1.79 | 1.78 | +| 128 | 8 | 2.64 | 2.65 | 2.64 | +| 128 | 12 | 3.11 | 3.12 | 3.11 | +| 128 | 16 | 4.03 | 4.03 | 4.02 | +| 128 | 24 | 5.32 | 5.34 | 5.31 | +| 128 | 32 | 7.07 | 7.09 | 7.02 | +| 128 | 64 | 12.98 | 13.01 | 12.86 | +| 128 | 128 | 25.40 | 25.55 | 25.17 | +| 384 | 1 | 2.55 | 2.55 | 2.55 | +| 384 | 2 | 3.03 | 3.04 | 3.03 | +| 384 | 4 | 4.01 | 4.01 | 4.01 | +| 384 | 8 | 7.16 | 7.16 | 7.16 | +| 384 | 12 | 9.14 | 9.23 | 9.14 | +| 384 | 16 | 12.31 | 12.41 | 12.29 | +| 384 | 24 | 17.85 | 17.90 | 17.68 | +| 384 | 32 | 23.41 | 23.51 | 23.23 | +| 384 | 64 | 45.39 | 45.40 | 45.09 | +| 384 | 128 | 88.73 | 88.79 | 88.11 | ### Inference Performance NVIDIA L4 Results were obtained by running `scripts/inference_benchmark.sh --gpu Ampere` on NVIDIA L4. -##### BERT Base +##### BERT base | Sequence Length | Batch Size | INT8 Latency (ms) | | | FP16 Latency (ms) | | | |-----------------|------------|-----------------|-----------------|---------|-----------------|-----------------|---------| | | | 95th Percentile | 99th Percentile | Average | 95th Percentile | 99th Percentile | Average | -| 128 | 1 | 0.61 | 0.61 | 0.60 | 1.01 | 1.01 | 1.00 | -| 128 | 2 | 0.79 | 0.80 | 0.77 | 1.32 | 1.35 | 1.31 | -| 128 | 4 | 1.14 | 1.15 | 1.12 | 2.22 | 2.23 | 2.14 | -| 128 | 8 | 1.94 | 1.96 | 1.90 | 3.66 | 3.67 | 3.63 | -| 128 | 12 | 2.67 | 2.67 | 2.61 | 5.34 | 5.34 | 5.26 | -| 128 | 16 | 3.37 | 3.38 | 3.32 | 6.69 | 6.69 | 6.64 | -| 128 | 24 | 4.84 | 4.84 | 4.75 | 10.53 | 10.64 | 10.50 | -| 128 | 32 | 6.21 | 6.28 | 6.13 | 13.91 | 13.91 | 13.72 | -| 128 | 64 | 13.40 | 13.60 | 13.20 | 31.48 | 31.53 | 31.01 | -| 128 | 128 | 28.42 | 28.68 | 27.84 | 70.60 | 71.10 | 69.25 | -| 384 | 1 | 1.27 | 1.27 | 1.27 | 2.08 | 2.09 | 2.07 | -| 384 | 2 | 1.84 | 1.84 | 1.82 | 3.15 | 3.19 | 3.11 | -| 384 | 4 | 2.94 | 2.94 | 2.91 | 5.68 | 5.75 | 5.63 | -| 384 | 8 | 5.53 | 5.55 | 5.42 | 11.45 | 11.59 | 11.32 | -| 384 | 12 | 8.21 | 8.31 | 8.07 | 17.16 | 17.36 | 17.00 | -| 384 | 16 | 10.96 | 11.07 | 10.80 | 23.20 | 23.50 | 22.81 | -| 384 | 24 | 16.71 | 16.74 | 16.55 | 39.82 | 40.46 | 38.15 | -| 384 | 32 | 22.82 | 23.00 | 22.63 | 50.56 | 50.89 | 50.14 | -| 384 | 64 | 49.66 | 50.18 | 48.40 | 104.90 | 105.55 | 103.81 | -| 384 | 128 | 104.78 | 105.09 | 103.96 | 208.20 | 208.70 | 206.93 | - -##### BERT Large +| 128 | 1 | 0.62 | 0.62 | 0.60 | 1.03 | 1.03 | 1.01 | +| 128 | 2 | 0.79 | 0.80 | 0.77 | 1.31 | 1.35 | 1.30 | +| 128 | 4 | 1.14 | 1.15 | 1.12 | 2.23 | 2.23 | 2.15 | +| 128 | 8 | 1.97 | 1.97 | 1.92 | 3.68 | 3.69 | 3.63 | +| 128 | 12 | 2.66 | 2.67 | 2.61 | 5.34 | 5.35 | 5.27 | +| 128 | 16 | 3.39 | 3.39 | 3.34 | 6.62 | 6.69 | 6.58 | +| 128 | 24 | 4.84 | 4.85 | 4.76 | 10.49 | 10.55 | 10.32 | +| 128 | 32 | 6.20 | 6.29 | 6.14 | 13.92 | 13.92 | 13.75 | +| 128 | 64 | 13.42 | 13.42 | 13.26 | 31.28 | 31.48 | 31.07 | +| 128 | 128 | 28.48 | 28.64 | 28.19 | 66.10 | 66.23 | 65.36 | +| 384 | 1 | 1.29 | 1.30 | 1.29 | 2.08 | 2.09 | 2.08 | +| 384 | 2 | 1.83 | 1.84 | 1.82 | 3.15 | 3.19 | 3.11 | +| 384 | 4 | 2.99 | 2.99 | 2.92 | 5.75 | 5.81 | 5.68 | +| 384 | 8 | 5.53 | 5.54 | 5.42 | 11.28 | 11.33 | 11.08 | +| 384 | 12 | 8.26 | 8.29 | 8.09 | 17.19 | 17.22 | 16.99 | +| 384 | 16 | 11.00 | 11.08 | 10.85 | 23.38 | 23.38 | 22.90 | +| 384 | 24 | 16.79 | 16.89 | 16.60 | 37.90 | 38.29 | 37.18 | +| 384 | 32 | 23.08 | 23.31 | 22.74 | 50.70 | 50.94 | 50.27 | +| 384 | 64 | 49.43 | 49.86 | 48.56 | 103.88 | 104.19 | 102.89 | +| 384 | 128 | 104.55 | 104.97 | 103.74 | 211.09 | 211.67 | 209.85 | + +##### BERT large | Sequence Length | Batch Size | INT8 Latency (ms) | | | FP16 Latency (ms) | | | |-----------------|------------|-----------------|-----------------|---------|-----------------|-----------------|---------| | | | 95th Percentile | 99th Percentile | Average | 95th Percentile | 99th Percentile | Average | -| 128 | 1 | 1.79 | 1.80 | 1.77 | 3.11 | 3.11 | 3.09 | -| 128 | 2 | 2.49 | 2.49 | 2.43 | 4.35 | 4.37 | 4.33 | -| 128 | 4 | 3.62 | 3.70 | 3.60 | 6.86 | 6.89 | 6.78 | -| 128 | 8 | 6.26 | 6.31 | 6.24 | 12.85 | 12.91 | 12.73 | -| 128 | 12 | 8.40 | 8.41 | 8.28 | 18.42 | 18.43 | 18.33 | -| 128 | 16 | 11.23 | 11.24 | 11.12 | 25.18 | 25.19 | 25.10 | -| 128 | 24 | 15.95 | 16.09 | 15.90 | 35.67 | 35.67 | 35.47 | -| 128 | 32 | 21.26 | 21.31 | 20.91 | 48.92 | 49.21 | 48.26 | -| 128 | 64 | 44.10 | 44.11 | 43.92 | 108.81 | 109.12 | 107.18 | -| 128 | 128 | 94.22 | 95.02 | 92.65 | 217.32 | 219.58 | 212.68 | -| 384 | 1 | 3.41 | 3.43 | 3.39 | 6.55 | 6.57 | 6.36 | -| 384 | 2 | 5.55 | 5.56 | 5.46 | 10.34 | 10.35 | 10.18 | -| 384 | 4 | 9.69 | 9.79 | 9.53 | 20.66 | 20.95 | 19.94 | -| 384 | 8 | 18.08 | 18.19 | 17.92 | 38.41 | 39.30 | 37.62 | -| 384 | 12 | 26.20 | 26.44 | 26.11 | 60.38 | 60.91 | 58.67 | -| 384 | 16 | 36.33 | 36.41 | 36.02 | 81.66 | 82.16 | 80.52 | -| 384 | 24 | 53.54 | 53.61 | 53.08 | 123.01 | 123.34 | 122.10 | -| 384 | 32 | 75.01 | 75.43 | 74.40 | 170.40 | 171.03 | 169.12 | -| 384 | 64 | 157.97 | 158.62 | 155.87 | 349.25 | 351.53 | 344.76 | -| 384 | 128 | 330.88 | 331.87 | 328.27 | 632.85 | 633.88 | 629.74 | +| 128 | 1 | 1.78 | 1.79 | 1.76 | 3.11 | 3.11 | 3.10 | +| 128 | 2 | 2.50 | 2.51 | 2.44 | 4.35 | 4.45 | 4.31 | +| 128 | 4 | 3.60 | 3.63 | 3.54 | 6.83 | 6.86 | 6.77 | +| 128 | 8 | 6.27 | 6.31 | 6.25 | 12.98 | 13.01 | 12.80 | +| 128 | 12 | 8.40 | 8.41 | 8.27 | 18.45 | 18.66 | 18.22 | +| 128 | 16 | 11.22 | 11.23 | 11.12 | 25.18 | 25.19 | 25.14 | +| 128 | 24 | 15.95 | 16.10 | 15.82 | 35.67 | 35.68 | 35.59 | +| 128 | 32 | 21.30 | 21.35 | 20.90 | 49.02 | 49.26 | 48.33 | +| 128 | 64 | 44.08 | 44.32 | 43.93 | 107.89 | 108.30 | 107.11 | +| 128 | 128 | 93.69 | 94.36 | 92.69 | 215.00 | 215.46 | 213.84 | +| 384 | 1 | 3.43 | 3.44 | 3.41 | 6.58 | 6.66 | 6.40 | +| 384 | 2 | 5.55 | 5.55 | 5.49 | 10.56 | 10.59 | 10.44 | +| 384 | 4 | 9.80 | 9.88 | 9.58 | 20.55 | 20.94 | 19.93 | +| 384 | 8 | 18.04 | 18.11 | 17.86 | 38.87 | 39.47 | 37.69 | +| 384 | 12 | 26.44 | 26.61 | 26.14 | 59.28 | 59.85 | 56.90 | +| 384 | 16 | 36.37 | 36.48 | 36.04 | 82.93 | 83.33 | 81.95 | +| 384 | 24 | 53.60 | 53.73 | 53.15 | 122.78 | 123.06 | 122.05 | +| 384 | 32 | 75.52 | 75.84 | 74.45 | 164.55 | 164.98 | 163.68 | +| 384 | 64 | 157.71 | 158.27 | 155.68 | 345.90 | 346.53 | 344.57 | +| 384 | 128 | 331.37 | 332.44 | 329.06 | 663.75 | 664.69 | 661.89 | ##### Megatron Large with Sparsity | Sequence Length | Batch Size | INT8 QAT Latency (ms) | | | |-----------------|------------|-----------------|-----------------|---------| | | | 95th Percentile | 99th Percentile | Average | -| 128 | 1 | 1.49 | 1.49 | 1.48 | -| 128 | 2 | 2.03 | 2.03 | 1.99 | -| 128 | 4 | 2.99 | 3.00 | 2.93 | -| 128 | 8 | 5.00 | 5.07 | 4.99 | -| 128 | 12 | 6.69 | 6.72 | 6.58 | -| 128 | 16 | 8.77 | 8.84 | 8.66 | -| 128 | 24 | 13.28 | 13.30 | 13.14 | -| 128 | 32 | 17.41 | 17.44 | 17.26 | -| 128 | 64 | 35.73 | 36.07 | 35.49 | -| 128 | 128 | 79.03 | 79.15 | 78.47 | -| 384 | 1 | 2.78 | 2.79 | 2.72 | -| 384 | 2 | 4.10 | 4.12 | 4.06 | -| 384 | 4 | 7.57 | 7.58 | 7.45 | -| 384 | 8 | 15.03 | 15.10 | 14.86 | -| 384 | 12 | 21.52 | 21.69 | 21.31 | -| 384 | 16 | 28.29 | 28.33 | 28.10 | -| 384 | 24 | 46.83 | 47.09 | 46.29 | -| 384 | 32 | 60.29 | 60.47 | 59.37 | -| 384 | 64 | 125.58 | 125.64 | 125.24 | -| 384 | 128 | 253.46 | 253.90 | 252.28 | +| 128 | 1 | 1.78 | 1.79 | 1.76 | +| 128 | 2 | 2.50 | 2.51 | 2.44 | +| 128 | 4 | 3.56 | 3.57 | 3.54 | +| 128 | 8 | 6.27 | 6.31 | 6.26 | +| 128 | 12 | 8.40 | 8.41 | 8.29 | +| 128 | 16 | 11.23 | 11.23 | 11.16 | +| 128 | 24 | 16.06 | 16.12 | 15.90 | +| 128 | 32 | 21.31 | 21.34 | 20.98 | +| 128 | 64 | 44.15 | 44.66 | 43.88 | +| 128 | 128 | 94.19 | 94.93 | 92.81 | +| 384 | 1 | 3.39 | 3.43 | 3.37 | +| 384 | 2 | 5.56 | 5.56 | 5.48 | +| 384 | 4 | 9.81 | 9.90 | 9.61 | +| 384 | 8 | 18.07 | 18.25 | 17.94 | +| 384 | 12 | 26.47 | 26.57 | 26.27 | +| 384 | 16 | 36.78 | 37.14 | 36.37 | +| 384 | 24 | 54.16 | 54.53 | 53.65 | +| 384 | 32 | 75.33 | 75.62 | 74.69 | +| 384 | 64 | 158.72 | 159.55 | 156.72 | +| 384 | 128 | 333.24 | 334.26 | 330.67 | ### Inference Performance NVIDIA L40S Results were obtained by running `scripts/inference_benchmark.sh --gpu Ampere` on NVIDIA L40S. -##### BERT Base +##### BERT base | Sequence Length | Batch Size | INT8 Latency (ms) | | | FP16 Latency (ms) | | | |-----------------|------------|-----------------|-----------------|---------|-----------------|-----------------|---------| | | | 95th Percentile | 99th Percentile | Average | 95th Percentile | 99th Percentile | Average | -| 128 | 1 | 0.33 | 0.33 | 0.33 | 0.48 | 0.48 | 0.48 | -| 128 | 2 | 0.41 | 0.41 | 0.41 | 0.57 | 0.57 | 0.57 | -| 128 | 4 | 0.50 | 0.51 | 0.50 | 0.78 | 0.78 | 0.78 | -| 128 | 8 | 0.67 | 0.67 | 0.67 | 1.33 | 1.33 | 1.32 | -| 128 | 12 | 0.91 | 0.91 | 0.91 | 1.75 | 1.76 | 1.73 | -| 128 | 16 | 1.10 | 1.10 | 1.09 | 2.29 | 2.29 | 2.28 | -| 128 | 24 | 1.48 | 1.49 | 1.47 | 3.30 | 3.31 | 3.27 | -| 128 | 32 | 1.84 | 1.84 | 1.83 | 3.98 | 3.99 | 3.97 | -| 128 | 64 | 3.61 | 3.66 | 3.56 | 8.64 | 8.70 | 8.51 | -| 128 | 128 | 7.92 | 7.99 | 7.82 | 18.78 | 18.82 | 18.45 | -| 384 | 1 | 0.73 | 0.73 | 0.73 | 1.11 | 1.12 | 1.10 | -| 384 | 2 | 0.88 | 0.88 | 0.88 | 1.39 | 1.39 | 1.38 | -| 384 | 4 | 1.17 | 1.17 | 1.17 | 2.19 | 2.20 | 2.19 | -| 384 | 8 | 1.74 | 1.74 | 1.73 | 3.53 | 3.53 | 3.50 | -| 384 | 12 | 2.75 | 2.75 | 2.73 | 5.32 | 5.33 | 5.29 | -| 384 | 16 | 3.33 | 3.33 | 3.31 | 7.62 | 7.64 | 7.57 | -| 384 | 24 | 4.97 | 4.98 | 4.95 | 10.53 | 10.57 | 10.40 | -| 384 | 32 | 6.55 | 6.57 | 6.48 | 14.36 | 14.47 | 14.20 | -| 384 | 64 | 14.27 | 14.37 | 14.07 | 33.31 | 33.51 | 32.65 | -| 384 | 128 | 30.38 | 30.52 | 29.73 | 67.34 | 68.04 | 66.06 | - -##### BERT Large +| 128 | 1 | 0.34 | 0.34 | 0.34 | 0.48 | 0.48 | 0.48 | +| 128 | 2 | 0.41 | 0.41 | 0.41 | 0.56 | 0.56 | 0.55 | +| 128 | 4 | 0.50 | 0.50 | 0.50 | 0.77 | 0.77 | 0.77 | +| 128 | 8 | 0.67 | 0.67 | 0.67 | 1.30 | 1.30 | 1.29 | +| 128 | 12 | 0.91 | 0.91 | 0.91 | 1.68 | 1.68 | 1.67 | +| 128 | 16 | 1.09 | 1.10 | 1.09 | 2.22 | 2.23 | 2.22 | +| 128 | 24 | 1.50 | 1.50 | 1.48 | 3.23 | 3.24 | 3.20 | +| 128 | 32 | 1.82 | 1.83 | 1.82 | 3.94 | 3.94 | 3.93 | +| 128 | 64 | 3.47 | 3.47 | 3.45 | 8.24 | 8.26 | 8.14 | +| 128 | 128 | 7.74 | 7.91 | 7.66 | 17.73 | 17.86 | 17.56 | +| 384 | 1 | 0.73 | 0.73 | 0.73 | 1.02 | 1.02 | 1.02 | +| 384 | 2 | 0.88 | 0.89 | 0.88 | 1.38 | 1.38 | 1.37 | +| 384 | 4 | 1.17 | 1.17 | 1.16 | 2.16 | 2.17 | 2.15 | +| 384 | 8 | 1.72 | 1.73 | 1.72 | 3.45 | 3.46 | 3.45 | +| 384 | 12 | 2.73 | 2.73 | 2.72 | 5.07 | 5.07 | 5.05 | +| 384 | 16 | 3.28 | 3.28 | 3.27 | 7.41 | 7.44 | 7.37 | +| 384 | 24 | 4.93 | 4.94 | 4.90 | 10.16 | 10.19 | 10.09 | +| 384 | 32 | 6.33 | 6.34 | 6.29 | 14.07 | 14.11 | 13.96 | +| 384 | 64 | 13.74 | 13.76 | 13.57 | 30.65 | 30.82 | 30.14 | +| 384 | 128 | 28.25 | 28.41 | 27.87 | 62.48 | 62.67 | 61.70 | + +##### BERT large | Sequence Length | Batch Size | INT8 Latency (ms) | | | FP16 Latency (ms) | | | |-----------------|------------|-----------------|-----------------|---------|-----------------|-----------------|---------| | | | 95th Percentile | 99th Percentile | Average | 95th Percentile | 99th Percentile | Average | -| 128 | 1 | 0.89 | 0.89 | 0.88 | 1.30 | 1.30 | 1.29 | -| 128 | 2 | 0.97 | 0.98 | 0.97 | 1.45 | 1.45 | 1.44 | -| 128 | 4 | 1.36 | 1.36 | 1.35 | 2.30 | 2.30 | 2.29 | -| 128 | 8 | 1.94 | 1.96 | 1.93 | 3.89 | 3.90 | 3.88 | -| 128 | 12 | 2.82 | 2.82 | 2.80 | 5.89 | 5.90 | 5.85 | -| 128 | 16 | 3.26 | 3.27 | 3.24 | 6.85 | 6.86 | 6.80 | -| 128 | 24 | 4.62 | 4.63 | 4.59 | 10.72 | 10.73 | 10.64 | -| 128 | 32 | 5.74 | 5.76 | 5.70 | 13.22 | 13.23 | 13.04 | -| 128 | 64 | 12.18 | 12.20 | 11.97 | 29.42 | 29.59 | 28.89 | -| 128 | 128 | 26.68 | 26.86 | 26.23 | 68.72 | 69.05 | 67.12 | -| 384 | 1 | 1.68 | 1.68 | 1.68 | 2.78 | 2.78 | 2.77 | -| 384 | 2 | 2.31 | 2.31 | 2.30 | 3.95 | 3.95 | 3.94 | -| 384 | 4 | 3.29 | 3.30 | 3.29 | 6.57 | 6.58 | 6.50 | -| 384 | 8 | 5.16 | 5.17 | 5.13 | 10.89 | 10.90 | 10.79 | -| 384 | 12 | 8.16 | 8.17 | 8.10 | 19.81 | 19.91 | 19.31 | -| 384 | 16 | 9.90 | 9.93 | 9.80 | 23.34 | 23.51 | 23.10 | -| 384 | 24 | 15.60 | 15.62 | 15.39 | 37.37 | 37.48 | 36.93 | -| 384 | 32 | 20.66 | 20.73 | 20.33 | 50.13 | 50.34 | 49.52 | -| 384 | 64 | 46.31 | 46.53 | 45.39 | 111.74 | 111.98 | 110.14 | -| 384 | 128 | 93.80 | 94.04 | 92.33 | 213.05 | 214.15 | 210.25 | +| 128 | 1 | 0.89 | 0.89 | 0.88 | 1.30 | 1.30 | 1.30 | +| 128 | 2 | 0.98 | 0.98 | 0.98 | 1.47 | 1.47 | 1.47 | +| 128 | 4 | 1.34 | 1.35 | 1.33 | 2.29 | 2.29 | 2.28 | +| 128 | 8 | 1.92 | 1.92 | 1.91 | 3.82 | 3.83 | 3.79 | +| 128 | 12 | 2.77 | 2.78 | 2.75 | 5.73 | 5.73 | 5.71 | +| 128 | 16 | 3.22 | 3.22 | 3.19 | 6.72 | 6.73 | 6.67 | +| 128 | 24 | 4.54 | 4.55 | 4.52 | 10.38 | 10.39 | 10.31 | +| 128 | 32 | 5.67 | 5.68 | 5.63 | 12.87 | 12.90 | 12.74 | +| 128 | 64 | 11.92 | 11.96 | 11.77 | 28.21 | 28.40 | 27.89 | +| 128 | 128 | 25.44 | 25.49 | 25.12 | 61.85 | 62.01 | 61.20 | +| 384 | 1 | 1.68 | 1.68 | 1.68 | 2.74 | 2.75 | 2.74 | +| 384 | 2 | 2.32 | 2.32 | 2.30 | 3.87 | 3.87 | 3.85 | +| 384 | 4 | 3.27 | 3.28 | 3.27 | 6.32 | 6.35 | 6.29 | +| 384 | 8 | 5.09 | 5.09 | 5.06 | 10.76 | 10.77 | 10.60 | +| 384 | 12 | 8.06 | 8.07 | 8.02 | 18.73 | 18.77 | 18.64 | +| 384 | 16 | 9.70 | 9.75 | 9.61 | 22.15 | 22.26 | 21.95 | +| 384 | 24 | 15.02 | 15.04 | 14.88 | 35.43 | 35.48 | 35.15 | +| 384 | 32 | 20.37 | 20.49 | 20.00 | 46.36 | 46.37 | 45.86 | +| 384 | 64 | 43.50 | 43.65 | 43.02 | 105.84 | 106.08 | 104.92 | +| 384 | 128 | 86.30 | 86.48 | 85.58 | 195.18 | 195.98 | 192.90 | ##### Megatron Large with Sparsity | Sequence Length | Batch Size | INT8 QAT Latency (ms) | | | |-----------------|------------|-----------------|-----------------|---------| | | | 95th Percentile | 99th Percentile | Average | -| 128 | 1 | 0.76 | 0.76 | 0.76 | -| 128 | 2 | 0.91 | 0.91 | 0.91 | -| 128 | 4 | 1.13 | 1.13 | 1.13 | -| 128 | 8 | 1.70 | 1.70 | 1.70 | -| 128 | 12 | 2.26 | 2.26 | 2.25 | -| 128 | 16 | 2.72 | 2.72 | 2.71 | -| 128 | 24 | 4.54 | 4.55 | 4.52 | -| 128 | 32 | 5.14 | 5.16 | 5.10 | -| 128 | 64 | 10.07 | 10.08 | 10.01 | -| 128 | 128 | 21.57 | 21.67 | 21.21 | -| 384 | 1 | 1.13 | 1.13 | 1.13 | -| 384 | 2 | 1.64 | 1.65 | 1.62 | -| 384 | 4 | 2.51 | 2.51 | 2.50 | -| 384 | 8 | 5.02 | 5.03 | 4.99 | -| 384 | 12 | 6.43 | 6.43 | 6.41 | -| 384 | 16 | 8.47 | 8.49 | 8.41 | -| 384 | 24 | 12.62 | 12.65 | 12.54 | -| 384 | 32 | 16.88 | 16.91 | 16.74 | -| 384 | 64 | 36.62 | 36.71 | 36.12 | -| 384 | 128 | 79.88 | 80.18 | 77.33 | - +| 128 | 1 | 0.89 | 0.89 | 0.88 | +| 128 | 2 | 0.98 | 0.98 | 0.98 | +| 128 | 4 | 1.34 | 1.36 | 1.33 | +| 128 | 8 | 1.93 | 1.95 | 1.91 | +| 128 | 12 | 2.79 | 2.82 | 2.77 | +| 128 | 16 | 3.24 | 3.24 | 3.22 | +| 128 | 24 | 4.59 | 4.59 | 4.57 | +| 128 | 32 | 5.68 | 5.68 | 5.65 | +| 128 | 64 | 11.81 | 11.87 | 11.71 | +| 128 | 128 | 26.21 | 26.24 | 25.86 | +| 384 | 1 | 1.68 | 1.68 | 1.68 | +| 384 | 2 | 2.31 | 2.32 | 2.31 | +| 384 | 4 | 3.29 | 3.29 | 3.28 | +| 384 | 8 | 5.14 | 5.15 | 5.10 | +| 384 | 12 | 8.05 | 8.06 | 8.01 | +| 384 | 16 | 9.78 | 9.80 | 9.66 | +| 384 | 24 | 15.14 | 15.15 | 15.01 | +| 384 | 32 | 20.34 | 20.42 | 19.99 | +| 384 | 64 | 43.81 | 43.97 | 43.39 | +| 384 | 128 | 88.37 | 88.64 | 87.38 | \ No newline at end of file diff --git a/demo/Diffusion/README.md b/demo/Diffusion/README.md index 469f0b26..dd9aa50d 100755 --- a/demo/Diffusion/README.md +++ b/demo/Diffusion/README.md @@ -7,7 +7,7 @@ This demo application ("demoDiffusion") showcases the acceleration of Stable Dif ### Clone the TensorRT OSS repository ```bash -git clone git@github.com:NVIDIA/TensorRT.git -b release/10.2 --single-branch +git clone git@github.com:NVIDIA/TensorRT.git -b release/10.4 --single-branch cd TensorRT ``` @@ -43,17 +43,17 @@ pip3 install -r requirements.txt > NOTE: demoDiffusion has been tested on systems with NVIDIA H100, A100, L40, T4, and RTX4090 GPUs, and the following software configuration. ``` -diffusers 0.26.3 +diffusers 0.29.2 onnx 1.15.0 onnx-graphsurgeon 0.5.2 onnxruntime 1.16.3 polygraphy 0.49.9 -tensorrt 10.3.0.26 +tensorrt 10.4.0.26 tokenizers 0.13.3 torch 2.2.0 transformers 4.33.1 controlnet-aux 0.0.6 -nvidia-modelopt 0.11.2 +nvidia-modelopt 0.15.1 ``` > NOTE: optionally install HuggingFace [accelerate](https://pypi.org/project/accelerate/) package for faster and less memory-intense model loading. Note that installing accelerate is known to cause failures while running certain pipelines in Torch Compile mode ([known issue](https://github.com/huggingface/diffusers/issues/9091)) @@ -84,6 +84,20 @@ export HF_TOKEN= python3 demo_txt2img.py "a beautiful photograph of Mt. Fuji during cherry blossom" --hf-token=$HF_TOKEN ``` +### Faster Text-to-image using SD1.5 or SD2.1 INT8 & FP8 quantization using ModelOpt + +Run the below command to generate an image with SD1.5 or SD2.1 in INT8 + +```bash +python3 demo_txt2img.py "a beautiful photograph of Mt. Fuji during cherry blossom" --hf-token=$HF_TOKEN --int8 +``` + +Run the below command to generate an image with SD1.5 or SD2.1 in FP8. (FP8 is only supppoted on Hopper.) + +```bash +python3 demo_txt2img.py "a beautiful photograph of Mt. Fuji during cherry blossom" --hf-token=$HF_TOKEN --fp8 +``` + ### Generate an image guided by an initial image and a text prompt ```bash @@ -139,16 +153,26 @@ python3 demo_txt2img_xl.py "a photo of an astronaut riding a horse on mars" --hf python3 demo_txt2img_xl.py "Picture of a rustic Italian village with Olive trees and mountains" --version=xl-1.0 --lora-path "ostris/crayon_style_lora_sdxl" "ostris/watercolor_style_lora_sdxl" --lora-scale 0.3 0.7 --onnx-dir onnx-sdxl-lora --engine-dir engine-sdxl-lora --build-enable-refit ``` -### Faster Text-to-image using SDXL & INT8 quantization using ModelOpt +### Faster Text-to-image using SDXL INT8 & FP8 quantization using ModelOpt + +Run the below command to generate an image with Stable Diffusion XL in INT8 ```bash python3 demo_txt2img_xl.py "a photo of an astronaut riding a horse on mars" --version xl-1.0 --onnx-dir onnx-sdxl --engine-dir engine-sdxl --int8 ``` -> Note that INT8 quantization is only supported for SDXL, and won't work with LoRA weights. Some prompts may produce better inputs with fewer denoising steps (e.g. `--denoising-steps 20`) but this will repeat the calibration, ONNX export, and engine building processes for the U-Net. -For step-by-step tutorials to run INT8 inference on stable diffusion models, please refer to examples in [TensorRT ModelOpt diffusers sample](https://github.com/NVIDIA/TensorRT-Model-Optimizer/tree/main/diffusers). +Run the below command to generate an image with Stable Diffusion XL in FP8. (FP8 is only supppoted on Hopper.) + +```bash +python3 demo_txt2img_xl.py "a photo of an astronaut riding a horse on mars" --version xl-1.0 --onnx-dir onnx-sdxl --engine-dir engine-sdxl --fp8 +``` + +> Note that INT8 & FP8 quantization is only supported for SDXL, SD1.5, SD2.1 and SD2.1-base, and won't work with LoRA weights. FP8 quantization is only supported on Hopper. Some prompts may produce better inputs with fewer denoising steps (e.g. `--denoising-steps 20`) but this will repeat the calibration, ONNX export, and engine building processes for the U-Net. + +For step-by-step tutorials to run INT8 & FP8 inference on stable diffusion models, please refer to examples in [TensorRT ModelOpt diffusers sample](https://github.com/NVIDIA/TensorRT-Model-Optimizer/tree/main/diffusers). ### Faster Text-to-Image using SDXL + LCM (Latent Consistency Model) LoRA weights + [LCM-LoRA](https://arxiv.org/abs/2311.05556) produces good quality images in 4 to 8 denoising steps instead of 30+ needed base model. Note that we use LCM scheduler and disable classifier-free-guidance by setting `--guidance-scale` to 0. LoRA weights are fused into the ONNX and finalized TensorRT plan files in this example. ```bash @@ -200,6 +224,24 @@ python3 demo_img2vid.py --version svd-xt-1.1 --onnx-dir onnx-svd-xt-1-1 --engine NOTE: The min and max guidance scales are configured using --min-guidance-scale and --max-guidance-scale respectively. +### Generate an image using Stable Cascade guided by a text prompt + +Run the below command to generate an image using Stable Cascade +```bash +python3 demo_stable_cascade.py --onnx-opset=16 "Anthropomorphic cat dressed as a pilot" --onnx-dir onnx-sc --engine-dir engine-sc +``` + +The lite versions of the models are also supported using the command below +```bash +python3 demo_stable_cascade.py --onnx-opset=16 "Anthropomorphic cat dressed as a pilot" --onnx-dir onnx-sc-lite --engine-dir engine-sc-lite --lite +``` + +> NOTE: The pipeline is only enabled for the BF16 model weights + +> NOTE: The pipeline only supports ONNX export using Opset 16. + +> NOTE: The denoising steps and guidance scale for the Prior and Decoder models are configured using --prior-denoising-steps, --prior-guidance-scale, --decoder-denoising-steps, and --decoder-guidance-scale respectively. + ## Configuration options - Noise scheduler can be set using `--scheduler `. Note: not all schedulers are available for every version. - To accelerate engine building time use `--timing-cache `. The cache file will be created if it does not already exist. Note that performance may degrade if cache files are used across multiple GPU targets. It is recommended to use timing caches only during development. To achieve the best perfromance in deployment, please build engines without timing cache. diff --git a/demo/Diffusion/demo_stable_cascade.py b/demo/Diffusion/demo_stable_cascade.py new file mode 100644 index 00000000..e7f3bed0 --- /dev/null +++ b/demo/Diffusion/demo_stable_cascade.py @@ -0,0 +1,159 @@ +# +# SPDX-FileCopyrightText: Copyright (c) 1993-2024 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. +# + +import os +import torch +import argparse + +from cuda import cudart + +from stable_cascade_pipeline import StableCascadePipeline +from utilities import PIPELINE_TYPE, add_arguments, process_pipeline_args + +def parseArgs(): + parser = argparse.ArgumentParser(description="Options for Stable Cascade Txt2Img Demo", conflict_handler='resolve') + parser = add_arguments(parser) + parser.add_argument('--version', type=str, default="cascade", choices=["cascade"], help="Version of Stable Cascade") + parser.add_argument('--height', type=int, default=1024, help="Height of image to generate (must be multiple of 8)") + parser.add_argument('--width', type=int, default=1024, help="Width of image to generate (must be multiple of 8)") + parser.add_argument('--lite', action='store_true', help="Use the Lite Version of the Stage B and Stage C models") + parser.add_argument('--prior-guidance-scale', type=float, default=4.0, help="Value of classifier-free guidance scale for the prior") + parser.add_argument('--decoder-guidance-scale', type=float, default=0.0, help="Value of classifier-free guidance scale for the decoder") + parser.add_argument('--prior-denoising-steps', type=int, default=20, help="Number of denoising steps for the prior") + parser.add_argument('--decoder-denoising-steps', type=int, default=10, help="Number of denoising steps for the decoder") + return parser.parse_args() + + +class StableCascadeDemoPipeline(StableCascadePipeline): + def __init__(self, prior_denoising_steps, decoder_denoising_steps, prior_guidance_scale, decoder_guidance_scale, lite, **kwargs): + self.nvtx_profile = kwargs['nvtx_profile'] + self.prior = StableCascadePipeline( + pipeline_type=PIPELINE_TYPE.CASCADE_PRIOR, + denoising_steps=prior_denoising_steps, + guidance_scale=prior_guidance_scale, + return_latents=True, + lite=lite, + **kwargs, + ) + self.decoder = StableCascadePipeline( + pipeline_type=PIPELINE_TYPE.CASCADE_DECODER, + denoising_steps=decoder_denoising_steps, + guidance_scale=decoder_guidance_scale, + lite=lite, + **kwargs, + ) + + def loadEngines(self, framework_model_dir, onnx_dir, engine_dir, **kwargs): + prior_suffix = "prior_lite" if self.prior.lite else "prior" + decoder_suffix = "decoder_lite" if self.decoder.lite else "decoder" + self.prior.loadEngines( + os.path.join(engine_dir, prior_suffix), + framework_model_dir, + os.path.join(onnx_dir, prior_suffix), + **kwargs) + self.decoder.loadEngines( + os.path.join(engine_dir, decoder_suffix), + framework_model_dir, + os.path.join(onnx_dir, decoder_suffix), + **kwargs) + + def activateEngines(self, shared_device_memory=None): + self.prior.activateEngines(shared_device_memory) + self.decoder.activateEngines(shared_device_memory) + + def loadResources(self, image_height, image_width, batch_size, seed): + self.prior.loadResources(image_height, image_width, batch_size, seed) + # Use a different seed for decoder + self.decoder.loadResources(image_height, image_width, batch_size, ((seed+1) if seed is not None else None)) + + def get_max_device_memory(self): + max_device_memory = self.prior.calculateMaxDeviceMemory() + max_device_memory = max(max_device_memory, self.decoder.calculateMaxDeviceMemory()) + return max_device_memory + + def run(self, prompt, negative_prompt, height, width, batch_size, batch_count, num_warmup_runs, use_cuda_graph): + # Process prompt + if not isinstance(prompt, list): + raise ValueError(f"`prompt` must be of type `str` list, but is {type(prompt)}") + prompt = prompt * batch_size + + if not isinstance(negative_prompt, list): + raise ValueError(f"`--negative-prompt` must be of type `str` list, but is {type(negative_prompt)}") + if len(negative_prompt) == 1: + negative_prompt = negative_prompt * batch_size + + num_warmup_runs = max(1, num_warmup_runs) if use_cuda_graph else num_warmup_runs + if num_warmup_runs > 0: + print("[I] Warming up ..") + for _ in range(num_warmup_runs): + latents, _ = self.prior.infer(prompt, negative_prompt, height, width, warmup=True) + latents = latents.to(torch.float16) if self.decoder.fp16 else latents + images, _ = self.decoder.infer(prompt, negative_prompt, height, width, image_embeddings=latents, warmup=True) + + for _ in range(batch_count): + print("[I] Running Stable Cascade pipeline") + if self.nvtx_profile: + cudart.cudaProfilerStart() + latents, time_prior = self.prior.infer(prompt, negative_prompt, height, width, warmup=False) + latents = latents.to(torch.float16) if self.decoder.fp16 else latents + images, time_decoder = self.decoder.infer(prompt, negative_prompt, height, width, image_embeddings=latents, warmup=False) + + if self.nvtx_profile: + cudart.cudaProfilerStop() + print('|-----------------|--------------|') + print('| {:^15} | {:>9.2f} ms |'.format('e2e', time_prior + time_decoder)) + print('|-----------------|--------------|') + + def teardown(self): + self.prior.teardown() + self.decoder.teardown() + +if __name__ == "__main__": + print("[I] Initializing StableCascade txt2img demo using TensorRT") + args = parseArgs() + + kwargs_init_pipeline, kwargs_load_engine, args_run_demo = process_pipeline_args(args) + + # Initialize demo + _ = kwargs_init_pipeline.pop('guidance_scale') + _ = kwargs_init_pipeline.pop('denoising_steps') + demo = StableCascadeDemoPipeline( + args.prior_denoising_steps, + args.decoder_denoising_steps, + args.prior_guidance_scale, + args.decoder_guidance_scale, + args.lite, + **kwargs_init_pipeline + ) + + # Load TensorRT engines and pytorch modules + demo.loadEngines( + args.framework_model_dir, + args.onnx_dir, + args.engine_dir, + **kwargs_load_engine, + ) + + # Load resources + _, shared_device_memory = cudart.cudaMalloc(demo.get_max_device_memory()) + demo.activateEngines(shared_device_memory) + demo.loadResources(args.height, args.width, args.batch_size, args.seed) + + # Run inference + demo.run(*args_run_demo) + + demo.teardown() diff --git a/demo/Diffusion/demo_txt2img_sd3.py b/demo/Diffusion/demo_txt2img_sd3.py index 197de964..f61a2fed 100644 --- a/demo/Diffusion/demo_txt2img_sd3.py +++ b/demo/Diffusion/demo_txt2img_sd3.py @@ -20,16 +20,14 @@ from cuda import cudart from stable_diffusion_3_pipeline import StableDiffusion3Pipeline -from utilities import PIPELINE_TYPE +from utilities import PIPELINE_TYPE, add_arguments from utils_sd3.other_impls import preprocess_image_sd3 -def add_arguments(parser): - # Stable Diffusion configuration +def parseArgs(): + # Stable Diffusion 3 configuration + parser = argparse.ArgumentParser(description="Options for Stable Diffusion 3 Txt2Img Demo", conflict_handler='resolve') + parser = add_arguments(parser) parser.add_argument('--version', type=str, default="sd3", choices=["sd3"], help="Version of Stable Diffusion") - parser.add_argument('prompt', nargs = '*', help="Text prompt(s) to guide image generation") - parser.add_argument('--negative-prompt', nargs = '*', default=[''], help="The negative prompt(s) to guide the image generation.") - parser.add_argument('--batch-size', type=int, default=1, choices=[1, 2, 4], help="Batch size (repeat prompt)") - parser.add_argument('--batch-count', type=int, default=1, help="Number of images to generate in sequence, one at a time.") parser.add_argument('--height', type=int, default=1024, help="Height of image to generate (must be multiple of 8)") parser.add_argument('--width', type=int, default=1024, help="Height of image to generate (must be multiple of 8)") parser.add_argument('--shift', type=int, default=1.0, help="Shift parameter for SD3") @@ -38,31 +36,7 @@ def add_arguments(parser): parser.add_argument('--denoising-percentage', type=float, default=0.6, help="Percentage of denoising steps to run. This parameter is only used if input-image is provided") parser.add_argument('--input-image', type=str, default="", help="Path to the input image") - # ONNX export - parser.add_argument('--onnx-opset', type=int, default=19, choices=range(7,20), help="Select ONNX opset version to target for exported models") - parser.add_argument('--onnx-dir', default='onnx', help="Output directory for ONNX export") - - # Framework model ckpt - parser.add_argument('--framework-model-dir', default='pytorch_model', help="Directory for HF saved models") - - # TensorRT engine build - parser.add_argument('--engine-dir', default='engine', help="Output directory for TensorRT engines") - parser.add_argument('--build-static-batch', action='store_true', help="Build TensorRT engines with fixed batch size.") - parser.add_argument('--build-dynamic-shape', action='store_true', help="Build TensorRT engines with dynamic image shapes.") - parser.add_argument('--build-all-tactics', action='store_true', help="Build TensorRT engines using all tactic sources.") - parser.add_argument('--timing-cache', default=None, type=str, help="Path to the precached timing measurements to accelerate build.") - - # TensorRT inference - parser.add_argument('--num-warmup-runs', type=int, default=5, help="Number of warmup runs before benchmarking performance") - parser.add_argument('--use-cuda-graph', action='store_true', help="Enable cuda graph") - parser.add_argument('--nvtx-profile', action='store_true', help="Enable NVTX markers for performance profiling") - parser.add_argument('--torch-inference', default='', help="Run inference with PyTorch (using specified compilation mode) instead of TensorRT.") - - parser.add_argument('--seed', type=int, default=None, help="Seed for random generator to get consistent results") - parser.add_argument('--output-dir', default='output', help="Output directory for logs and image artifacts") - parser.add_argument('--hf-token', type=str, help="HuggingFace API access token for downloading model checkpoints") - parser.add_argument('-v', '--verbose', action='store_true', help="Show verbose output") - return parser + return parser.parse_args() def process_pipeline_args(args): if args.height % 8 != 0 or args.width % 8 != 0: @@ -119,11 +93,6 @@ def process_pipeline_args(args): return kwargs_init_pipeline, kwargs_load_engine, args_run_demo -def parseArgs(): - parser = argparse.ArgumentParser(description="Options for Stable Diffusion 3 Demo") - parser = add_arguments(parser) - return parser.parse_args() - if __name__ == "__main__": print("[I] Initializing Stable Diffusion 3 demo using TensorRT") args = parseArgs() diff --git a/demo/Diffusion/models.py b/demo/Diffusion/models.py index d9d82b69..cdd2300c 100644 --- a/demo/Diffusion/models.py +++ b/demo/Diffusion/models.py @@ -23,7 +23,9 @@ ControlNetModel, UNet2DConditionModel, UNetSpatioTemporalConditionModel, + StableCascadeUNet ) +from diffusers.pipelines.wuerstchen import PaellaVQModel import json import numpy as np import onnx @@ -48,6 +50,13 @@ from utils_sd3.sd3_impls import BaseModel as BaseModelSD3 from utils_sd3.sd3_impls import SDVAE from utils_sd3.other_impls import load_into, SDClipModel, SDXLClipG, T5XXLModel +from utils_modelopt import ( + convert_zp_fp8, + cast_resize_io, + convert_fp16_io, + cast_fp8_mha_io, +) +from onnxmltools.utils.float16_converter import convert_float_to_float16 class Optimizer(): def __init__( @@ -99,7 +108,7 @@ def infer_shapes(self, return_onnx=False): if return_onnx: return onnx_graph - def clip_add_hidden_states(self, return_onnx=False): + def clip_add_hidden_states(self, hidden_layer_offset, return_onnx=False): hidden_layers = -1 onnx_graph = gs.export_onnx(self.graph) for i in range(len(onnx_graph.graph.node)): @@ -109,10 +118,10 @@ def clip_add_hidden_states(self, return_onnx=False): hidden_layers = max(int(name.split(".")[1].split("/")[0]), hidden_layers) for i in range(len(onnx_graph.graph.node)): for j in range(len(onnx_graph.graph.node[i].output)): - if onnx_graph.graph.node[i].output[j] == "/text_model/encoder/layers.{}/Add_1_output_0".format(hidden_layers-1): + if onnx_graph.graph.node[i].output[j] == "/text_model/encoder/layers.{}/Add_1_output_0".format(hidden_layers+hidden_layer_offset): onnx_graph.graph.node[i].output[j] = "hidden_states" for j in range(len(onnx_graph.graph.node[i].input)): - if onnx_graph.graph.node[i].input[j] == "/text_model/encoder/layers.{}/Add_1_output_0".format(hidden_layers-1): + if onnx_graph.graph.node[i].input[j] == "/text_model/encoder/layers.{}/Add_1_output_0".format(hidden_layers+hidden_layer_offset): onnx_graph.graph.node[i].input[j] = "hidden_states" if return_onnx: return onnx_graph @@ -169,16 +178,30 @@ def fuse_mha_qkv_int8_sq(self): print(f"Removed {removed} QDQ nodes") return removed # expected 72 for L2.5 + def modify_fp8_graph(self): + onnx_graph = gs.export_onnx(self.graph) + # Convert INT8 Zero to FP8. + onnx_graph = convert_zp_fp8(onnx_graph) + # Convert weights and activations to FP16 and insert Cast nodes in FP8 MHA. + onnx_graph = convert_float_to_float16(onnx_graph, keep_io_types=True, disable_shape_infer=True) + self.graph = gs.import_onnx(onnx_graph) + # Add cast nodes to Resize I/O. + cast_resize_io(self.graph) + # Convert model inputs and outputs to fp16 I/O. + convert_fp16_io(self.graph) + # Add cast nodes to MHA's BMM1 and BMM2's I/O. + cast_fp8_mha_io(self.graph) + def get_path(version, pipeline, controlnets=None): if controlnets is not None: return ["lllyasviel/sd-controlnet-" + modality for modality in controlnets] - + if version in ("1.4", "1.5") and pipeline.is_inpaint(): - return "runwayml/stable-diffusion-inpainting" + return "benjamin-paine/stable-diffusion-v1-5-inpainting" elif version == "1.4": return "CompVis/stable-diffusion-v1-4" elif version == "1.5": - return "runwayml/stable-diffusion-v1-5" + return "benjamin-paine/stable-diffusion-v1-5" elif version == 'dreamshaper-7': return 'Lykon/dreamshaper-7' elif version in ("2.0-base", "2.0") and pipeline.is_inpaint(): @@ -202,6 +225,11 @@ def get_path(version, pipeline, controlnets=None): return "stabilityai/stable-diffusion-3-medium" elif version == 'svd-xt-1.1' and pipeline.is_img2vid(): return "stabilityai/stable-video-diffusion-img2vid-xt-1-1" + elif version == 'cascade': + if pipeline.is_cascade_decoder(): + return "stabilityai/stable-cascade" + else: + return "stabilityai/stable-cascade-prior" else: raise ValueError(f"Unsupported version {version} + pipeline {pipeline.name}") @@ -218,7 +246,7 @@ def get_clip_embedding_dim(version, pipeline): raise ValueError(f"Invalid version {version} + pipeline {pipeline}") def get_clipwithproj_embedding_dim(version, pipeline): - if version in ("xl-1.0", "xl-turbo"): + if version in ("xl-1.0", "xl-turbo", "cascade"): return 1280 else: raise ValueError(f"Invalid version {version} + pipeline {pipeline}") @@ -230,6 +258,8 @@ def get_unet_embedding_dim(version, pipeline): return 1024 elif version in ("xl-1.0", "xl-turbo") and pipeline.is_sd_xl_base(): return 2048 + elif version in ("cascade"): + return 1280 elif version in ("xl-1.0", "xl-turbo") and pipeline.is_sd_xl_refiner(): return 1280 elif pipeline.is_img2vid(): @@ -305,10 +335,13 @@ def __init__(self, verbose=True, framework_model_dir='pytorch_model', fp16=False, + bf16=False, int8=False, + fp8=False, max_batch_size=16, text_maxlen=77, embedding_dim=768, + compression_factor=8 ): self.name = self.__class__.__name__ @@ -322,23 +355,28 @@ def __init__(self, self.framework_model_dir = framework_model_dir self.fp16 = fp16 + self.bf16 = bf16 self.int8 = int8 + self.fp8 = fp8 + self.compression_factor = compression_factor self.min_batch = 1 self.max_batch = max_batch_size self.min_image_shape = 256 # min image resolution: 256x256 self.max_image_shape = 1024 # max image resolution: 1024x1024 - self.min_latent_shape = self.min_image_shape // 8 - self.max_latent_shape = self.max_image_shape // 8 + self.min_latent_shape = self.min_image_shape // self.compression_factor + self.max_latent_shape = self.max_image_shape // self.compression_factor self.text_maxlen = text_maxlen self.embedding_dim = embedding_dim self.extra_output_names = [] self.lora_dict = None + self.do_constant_folding = True def get_pipeline(self): model_opts = {'variant': 'fp16', 'torch_dtype': torch.float16} if self.fp16 else {} + model_opts = {'variant': 'bf16', 'torch_dtype': torch.bfloat16} if self.bf16 else model_opts return DiffusionPipeline.from_pretrained( self.path, use_safetensors=self.hf_safetensor, @@ -399,7 +437,7 @@ def export_onnx(model): onnx_path, export_params=True, opset_version=onnx_opset, - do_constant_folding=True, + do_constant_folding=self.do_constant_folding, input_names=self.get_input_names(), output_names=self.get_output_names(), dynamic_axes=self.get_dynamic_axes(), @@ -479,13 +517,17 @@ def optimize(self, onnx_graph, return_onnx=True, **kwargs): opt.info(self.name + ': original') opt.cleanup() opt.info(self.name + ': cleanup') - opt.fold_constants() - opt.info(self.name + ': fold constants') - opt.infer_shapes() - opt.info(self.name + ': shape inference') - if kwargs.get('fuse_mha_qkv_int8', False): - opt.fuse_mha_qkv_int8_sq() - opt.info(self.name + ': fuse QKV nodes') + if kwargs.get('modify_fp8_graph', False): + opt.modify_fp8_graph() + opt.info(self.name + ': modify fp8 graph') + else: + opt.fold_constants() + opt.info(self.name + ': fold constants') + opt.infer_shapes() + opt.info(self.name + ': shape inference') + if kwargs.get('fuse_mha_qkv_int8', False): + opt.fuse_mha_qkv_int8_sq() + opt.info(self.name + ': fuse QKV nodes') onnx_opt_graph = opt.cleanup(return_onnx=return_onnx) opt.info(self.name + ': finished') return onnx_opt_graph @@ -493,8 +535,8 @@ def optimize(self, onnx_graph, return_onnx=True, **kwargs): def check_dims(self, batch_size, image_height, image_width): assert batch_size >= self.min_batch and batch_size <= self.max_batch assert image_height % 8 == 0 or image_width % 8 == 0 - latent_height = image_height // 8 - latent_width = image_width // 8 + latent_height = image_height // self.compression_factor + latent_width = image_width // self.compression_factor assert latent_height >= self.min_latent_shape and latent_height <= self.max_latent_shape assert latent_width >= self.min_latent_shape and latent_width <= self.max_latent_shape return (latent_height, latent_width) @@ -502,8 +544,8 @@ def check_dims(self, batch_size, image_height, image_width): def get_minmax_dims(self, batch_size, image_height, image_width, static_batch, static_shape): min_batch = batch_size if static_batch else self.min_batch max_batch = batch_size if static_batch else self.max_batch - latent_height = image_height // 8 - latent_width = image_width // 8 + latent_height = image_height // self.compression_factor + latent_width = image_width // self.compression_factor min_image_height = image_height if static_shape else self.min_image_shape max_image_height = image_height if static_shape else self.max_image_shape min_image_width = image_width if static_shape else self.min_image_shape @@ -526,13 +568,15 @@ def __init__(self, max_batch_size, embedding_dim, fp16=False, + bf16=False, output_hidden_states=False, subfolder="text_encoder", lora_dict=None, lora_alphas=None, ): - super(CLIPModel, self).__init__(version, pipeline, device=device, hf_token=hf_token, verbose=verbose, framework_model_dir=framework_model_dir, fp16=fp16, max_batch_size=max_batch_size, embedding_dim=embedding_dim) + super(CLIPModel, self).__init__(version, pipeline, device=device, hf_token=hf_token, verbose=verbose, framework_model_dir=framework_model_dir, fp16=fp16, bf16=bf16, max_batch_size=max_batch_size, embedding_dim=embedding_dim) self.subfolder = subfolder + self.hidden_layer_offset = 0 if pipeline.is_cascade() else -1 # Output the final hidden state if output_hidden_states: @@ -599,7 +643,7 @@ def optimize(self, onnx_graph): opt.info(self.name + ': remove output[0]') opt_onnx_graph = opt.cleanup(return_onnx=True) if 'hidden_states' in self.extra_output_names: - opt_onnx_graph = opt.clip_add_hidden_states(return_onnx=True) + opt_onnx_graph = opt.clip_add_hidden_states(self.hidden_layer_offset, return_onnx=True) opt.info(self.name + ': added hidden_states') opt.info(self.name + ': finished') return opt_onnx_graph @@ -614,6 +658,7 @@ def __init__(self, verbose, framework_model_dir, fp16=False, + bf16=False, max_batch_size=16, output_hidden_states=False, subfolder="text_encoder_2", @@ -621,34 +666,64 @@ def __init__(self, lora_alphas=None, ): - super(CLIPWithProjModel, self).__init__(version, pipeline, device=device, hf_token=hf_token, verbose=verbose, framework_model_dir=framework_model_dir, fp16=fp16, max_batch_size=max_batch_size, embedding_dim=get_clipwithproj_embedding_dim(version, pipeline), output_hidden_states=output_hidden_states) + super(CLIPWithProjModel, self).__init__(version, pipeline, device=device, hf_token=hf_token, verbose=verbose, framework_model_dir=framework_model_dir, fp16=fp16, bf16=bf16, max_batch_size=max_batch_size, embedding_dim=get_clipwithproj_embedding_dim(version, pipeline), output_hidden_states=output_hidden_states) self.subfolder = subfolder def get_model(self, torch_inference=''): + model_opts = {'variant': 'bf16', 'torch_dtype': torch.bfloat16} if self.bf16 else {} clip_model_dir = get_checkpoint_dir(self.framework_model_dir, self.version, self.pipeline, self.subfolder) - if not os.path.exists(clip_model_dir): + clip_path = self.get_model_path(clip_model_dir, model_opts, model_name='model') + if not os.path.exists(clip_path): model = CLIPTextModelWithProjection.from_pretrained(self.path, subfolder=self.subfolder, use_safetensors=self.hf_safetensor, - use_auth_token=self.hf_token).to(self.device) - model.save_pretrained(clip_model_dir) + use_auth_token=self.hf_token, + **model_opts).to(self.device) + model.save_pretrained(clip_model_dir, **model_opts) else: - print(f"[I] Load CLIPTextModelWithProjection model from: {clip_model_dir}") - model = CLIPTextModelWithProjection.from_pretrained(clip_model_dir).to(self.device) + print(f"[I] Load CLIPTextModelWithProjection model from: {clip_path}") + model = CLIPTextModelWithProjection.from_pretrained(clip_model_dir, **model_opts).to(self.device) model = optimize_checkpoint(model, torch_inference) return model + def get_input_names(self): + return ['input_ids', 'attention_mask'] + + def get_output_names(self): + return ['text_embeddings'] + + def get_dynamic_axes(self): + return { + 'input_ids': {0: 'B'}, + 'attention_mask': {0: 'B'}, + 'text_embeddings': {0: 'B'} + } + + def get_input_profile(self, batch_size, image_height, image_width, static_batch, static_shape): + self.check_dims(batch_size, image_height, image_width) + min_batch, max_batch, _, _, _, _, _, _, _, _ = self.get_minmax_dims(batch_size, image_height, image_width, static_batch, static_shape) + return { + 'input_ids': [(min_batch, self.text_maxlen), (batch_size, self.text_maxlen), (max_batch, self.text_maxlen)], + 'attention_mask': [(min_batch, self.text_maxlen), (batch_size, self.text_maxlen), (max_batch, self.text_maxlen)] + } + def get_shape_dict(self, batch_size, image_height, image_width): self.check_dims(batch_size, image_height, image_width) output = { 'input_ids': (batch_size, self.text_maxlen), + 'attention_mask': (batch_size, self.text_maxlen), 'text_embeddings': (batch_size, self.embedding_dim) } if 'hidden_states' in self.extra_output_names: output["hidden_states"] = (batch_size, self.text_maxlen, self.embedding_dim) - return output + def get_sample_input(self, batch_size, image_height, image_width, static_shape): + self.check_dims(batch_size, image_height, image_width) + return ( + torch.zeros(batch_size, self.text_maxlen, dtype=torch.int32, device=self.device), + torch.zeros(batch_size, self.text_maxlen, dtype=torch.int32, device=self.device) + ) class SD3_CLIPGModel(CLIPModel): def __init__(self, @@ -914,6 +989,7 @@ def __init__(self, framework_model_dir, fp16 = False, int8 = False, + fp8 = False, max_batch_size = 16, text_maxlen = 77, controlnets = None, @@ -923,7 +999,7 @@ def __init__(self, do_classifier_free_guidance = False, ): - super(UNetModel, self).__init__(version, pipeline, device=device, hf_token=hf_token, verbose=verbose, framework_model_dir=framework_model_dir, fp16=fp16, max_batch_size=max_batch_size, text_maxlen=text_maxlen, embedding_dim=get_unet_embedding_dim(version, pipeline)) + super(UNetModel, self).__init__(version, pipeline, device=device, hf_token=hf_token, verbose=verbose, framework_model_dir=framework_model_dir, fp16=fp16, int8=int8, fp8=fp8, max_batch_size=max_batch_size, text_maxlen=text_maxlen, embedding_dim=get_unet_embedding_dim(version, pipeline)) self.subfolder = 'unet' self.controlnets = get_path(version, pipeline, controlnets) if controlnets else None self.unet_dim = (9 if pipeline.is_inpaint() else 4) @@ -1054,6 +1130,13 @@ def get_sample_input(self, batch_size, image_height, image_width, static_shape): torch.randn(len(self.controlnets), dtype=dtype, device=self.device) ) + def optimize(self, onnx_graph): + if self.fp8: + return super().optimize(onnx_graph, modify_fp8_graph=True) + if self.int8: + return super().optimize(onnx_graph, fuse_mha_qkv_int8=True) + return super().optimize(onnx_graph) + class UNetXLModel(BaseModel): def __init__(self, @@ -1065,6 +1148,7 @@ def __init__(self, framework_model_dir, fp16 = False, int8 = False, + fp8 = False, max_batch_size = 16, text_maxlen = 77, lora_scales = None, @@ -1072,7 +1156,7 @@ def __init__(self, lora_alphas = None, do_classifier_free_guidance = False, ): - super(UNetXLModel, self).__init__(version, pipeline, device=device, hf_token=hf_token, verbose=verbose, framework_model_dir=framework_model_dir, fp16=fp16, max_batch_size=max_batch_size, text_maxlen=text_maxlen, embedding_dim=get_unet_embedding_dim(version, pipeline)) + super(UNetXLModel, self).__init__(version, pipeline, device=device, hf_token=hf_token, verbose=verbose, framework_model_dir=framework_model_dir, fp16=fp16, int8=int8, fp8=fp8, max_batch_size=max_batch_size, text_maxlen=text_maxlen, embedding_dim=get_unet_embedding_dim(version, pipeline)) self.subfolder = 'unet' self.unet_dim = (9 if pipeline.is_inpaint() else 4) self.time_dim = (5 if pipeline.is_sd_xl_refiner() else 6) @@ -1164,7 +1248,11 @@ def get_sample_input(self, batch_size, image_height, image_width, static_shape): ) def optimize(self, onnx_graph): - return super().optimize(onnx_graph, fuse_mha_qkv_int8=True) + if self.fp8: + return super().optimize(onnx_graph, modify_fp8_graph=True) + if self.int8: + return super().optimize(onnx_graph, fuse_mha_qkv_int8=True) + return super().optimize(onnx_graph) class SD3_MMDiTModel(BaseModel): def __init__(self, @@ -1333,6 +1421,151 @@ def get_sample_input(self, batch_size, image_height, image_width): ) +class UNetCascadeModel(BaseModel): + def __init__(self, + version, + pipeline, + device, + hf_token, + verbose, + framework_model_dir, + fp16 = False, + bf16 = False, + max_batch_size = 16, + text_maxlen = 77, + do_classifier_free_guidance = False, + compression_factor=42, + latent_dim_scale=10.67, + image_embedding_dim=768, + lite=False + ): + super(UNetCascadeModel, self).__init__(version, pipeline, device=device, hf_token=hf_token, verbose=verbose, framework_model_dir=framework_model_dir, fp16=fp16, bf16=bf16, max_batch_size=max_batch_size, text_maxlen=text_maxlen, embedding_dim=get_unet_embedding_dim(version, pipeline), compression_factor=compression_factor) + self.is_prior = True if pipeline.is_cascade_prior() else False + self.subfolder = 'prior' if self.is_prior else 'decoder' + if lite: + self.subfolder += '_lite' + self.prior_dim = 16 + self.decoder_dim = 4 + self.xB = 2 if do_classifier_free_guidance else 1 # batch multiplier + self.latent_dim_scale = latent_dim_scale + self.min_latent_shape = self.min_image_shape // self.compression_factor + self.max_latent_shape = self.max_image_shape // self.compression_factor + self.do_constant_folding = False + self.image_embedding_dim = image_embedding_dim + + def get_model(self, torch_inference=''): + # FP16 variant doesn't exist + model_opts = {'torch_dtype': torch.float16} if self.fp16 else {} + model_opts = {'variant': 'bf16', 'torch_dtype': torch.bfloat16} if self.bf16 else model_opts + unet_model_dir = get_checkpoint_dir(self.framework_model_dir, self.version, self.pipeline, self.subfolder) + unet_path = self.get_model_path(unet_model_dir, model_opts) + if not os.path.exists(unet_path): + model = StableCascadeUNet.from_pretrained(self.path, + subfolder=self.subfolder, + use_safetensors=self.hf_safetensor, + use_auth_token=self.hf_token, + **model_opts).to(self.device) + model.save_pretrained(unet_model_dir, **model_opts) + else: + print(f"[I] Load Stable Cascade UNet pytorch model from: {unet_path}") + model = StableCascadeUNet.from_pretrained(unet_model_dir, **model_opts).to(self.device) + model = optimize_checkpoint(model, torch_inference) + return model + + def get_input_names(self): + if self.is_prior: + return ['sample', 'timestep_ratio', 'clip_text_pooled', 'clip_text', 'clip_img'] + else: + return ['sample', 'timestep_ratio', 'clip_text_pooled', 'effnet'] + + def get_output_names(self): + return ['latent'] + + def get_dynamic_axes(self): + xB = '2B' if self.xB == 2 else 'B' + if self.is_prior: + return { + 'sample': {0: xB, 2: 'H', 3: 'W'}, + 'timestep_ratio': {0: xB}, + 'clip_text_pooled': {0: xB}, + 'clip_text': {0: xB}, + 'clip_img': {0: xB}, + 'latent': {0: xB, 2: 'H', 3: 'W'} + } + else: + return { + 'sample': {0: xB, 2: 'H', 3: 'W'}, + 'timestep_ratio': {0: xB}, + 'clip_text_pooled': {0: xB}, + 'effnet': {0: xB, 2: 'H_effnet', 3: 'W_effnet'}, + 'latent': {0: xB, 2: 'H', 3: 'W'} + } + + def get_input_profile(self, batch_size, image_height, image_width, static_batch, static_shape): + latent_height, latent_width = self.check_dims(batch_size, image_height, image_width) + min_batch, max_batch, _, _, _, _, min_latent_height, max_latent_height, min_latent_width, max_latent_width = \ + self.get_minmax_dims(batch_size, image_height, image_width, static_batch, static_shape) + if self.is_prior: + return { + 'sample': [(self.xB*min_batch, self.prior_dim, min_latent_height, min_latent_width), (self.xB*batch_size, self.prior_dim, latent_height, latent_width), (self.xB*max_batch, self.prior_dim, max_latent_height, max_latent_width)], + 'timestep_ratio': [(self.xB*min_batch,), (self.xB*batch_size,), (self.xB*max_batch,)], + 'clip_text_pooled': [(self.xB*min_batch, 1, self.embedding_dim), (self.xB*batch_size, 1, self.embedding_dim), (self.xB*max_batch, 1, self.embedding_dim)], + 'clip_text': [(self.xB*min_batch, self.text_maxlen, self.embedding_dim), (self.xB*batch_size, self.text_maxlen, self.embedding_dim), (self.xB*max_batch, self.text_maxlen, self.embedding_dim)], + 'clip_img': [(self.xB*min_batch, 1, self.image_embedding_dim), (self.xB*batch_size, 1, self.image_embedding_dim), (self.xB*max_batch, 1, self.image_embedding_dim)], + } + else: + return { + 'sample': [(self.xB*min_batch, self.decoder_dim, int(min_latent_height * self.latent_dim_scale), int(min_latent_width * self.latent_dim_scale)), + (self.xB*batch_size, self.decoder_dim, int(latent_height * self.latent_dim_scale), int(latent_width * self.latent_dim_scale)), + (self.xB*max_batch, self.decoder_dim, int(max_latent_height * self.latent_dim_scale), int(max_latent_width * self.latent_dim_scale))], + 'timestep_ratio': [(self.xB*min_batch,), (self.xB*batch_size,), (self.xB*max_batch,)], + 'clip_text_pooled': [(self.xB*min_batch, 1, self.embedding_dim), (self.xB*batch_size, 1, self.embedding_dim), (self.xB*max_batch, 1, self.embedding_dim)], + 'effnet': [(self.xB*min_batch, self.prior_dim, min_latent_height, min_latent_width), (self.xB*batch_size, self.prior_dim, latent_height, latent_width), (self.xB*max_batch, self.prior_dim, max_latent_height, max_latent_width)] + } + + def get_shape_dict(self, batch_size, image_height, image_width): + latent_height, latent_width = self.check_dims(batch_size, image_height, image_width) + if self.is_prior: + return { + 'sample': (self.xB*batch_size, self.prior_dim, latent_height, latent_width), + 'timestep_ratio': (self.xB*batch_size,), + 'clip_text_pooled': (self.xB*batch_size, 1, self.embedding_dim), + 'clip_text': (self.xB*batch_size, self.text_maxlen, self.embedding_dim), + 'clip_img': (self.xB*batch_size, 1, self.image_embedding_dim), + 'latent': (self.xB*batch_size, self.prior_dim, latent_height, latent_width) + } + else: + return { + 'sample': (self.xB*batch_size, self.decoder_dim, int(latent_height * self.latent_dim_scale), int(latent_width * self.latent_dim_scale)), + 'timestep_ratio': (self.xB*batch_size,), + 'clip_text_pooled': (self.xB*batch_size, 1, self.embedding_dim), + 'effnet': (self.xB*batch_size, self.prior_dim, latent_height, latent_width), + 'latent': (self.xB*batch_size, self.decoder_dim, int(latent_height * self.latent_dim_scale), int(latent_width * self.latent_dim_scale)) + } + + def get_sample_input(self, batch_size, image_height, image_width, static_shape): + latent_height, latent_width = self.check_dims(batch_size, image_height, image_width) + dtype = torch.float16 if self.fp16 else torch.bfloat16 if self.bf16 else torch.float32 + if self.is_prior: + return ( + torch.randn(batch_size, self.prior_dim, latent_height, latent_width, dtype=dtype, device=self.device), + torch.tensor([1.]*batch_size, dtype=dtype, device=self.device), + torch.randn(batch_size, 1, self.embedding_dim, dtype=dtype, device=self.device), + { + 'clip_text': torch.randn(batch_size, self.text_maxlen, self.embedding_dim, dtype=dtype, device=self.device), + 'clip_img': torch.randn(batch_size, 1, self.image_embedding_dim, dtype=dtype, device=self.device), + } + ) + else: + return ( + torch.randn(batch_size, self.decoder_dim, int(latent_height * self.latent_dim_scale), int(latent_width * self.latent_dim_scale), dtype=dtype, device=self.device), + torch.tensor([1.]*batch_size, dtype=dtype, device=self.device), + torch.randn(batch_size, 1, self.embedding_dim, dtype=dtype, device=self.device), + { + 'effnet': torch.randn(batch_size, self.prior_dim, latent_height, latent_width, dtype=dtype, device=self.device), + } + ) + class VAEModel(BaseModel): def __init__(self, version, @@ -1633,6 +1866,90 @@ def get_sample_input(self, batch_size, image_height, image_width, static_shape): dtype = torch.float16 if self.fp16 else torch.float32 return torch.randn(batch_size, 3, image_height, image_width, dtype=dtype, device=self.device) +class VQGANModel(BaseModel): + def __init__(self, + version, + pipeline, + device, + hf_token, + verbose, + framework_model_dir, + fp16=False, + bf16=False, + max_batch_size=16, + compression_factor=42, + latent_dim_scale=10.67, + scale_factor=0.3764 + ): + super(VQGANModel, self).__init__(version, pipeline, device=device, hf_token=hf_token, verbose=verbose, framework_model_dir=framework_model_dir, fp16=fp16, bf16=bf16, max_batch_size=max_batch_size, compression_factor=compression_factor) + self.subfolder = 'vqgan' + self.latent_dim_scale = latent_dim_scale + self.scale_factor = scale_factor + + def get_model(self, torch_inference=''): + model_opts = {'variant': 'bf16', 'torch_dtype': torch.bfloat16} if self.bf16 else {} + vqgan_model_dir = get_checkpoint_dir(self.framework_model_dir, self.version, self.pipeline, self.subfolder) + vqgan_path = self.get_model_path(vqgan_model_dir, model_opts, model_name='model') + if not os.path.exists(vqgan_path): + model = PaellaVQModel.from_pretrained(self.path, + subfolder=self.subfolder, + use_safetensors=self.hf_safetensor, + use_auth_token=self.hf_token, + **model_opts).to(self.device) + model.save_pretrained(vqgan_model_dir, **model_opts) + else: + print(f"[I] Load VQGAN pytorch model from: {vqgan_path}") + model = PaellaVQModel.from_pretrained(vqgan_model_dir, **model_opts).to(self.device) + model.forward = model.decode + model = optimize_checkpoint(model, torch_inference) + return model + + def get_input_names(self): + return ['latent'] + + def get_output_names(self): + return ['images'] + + def get_dynamic_axes(self): + return { + 'latent': {0: 'B', 2: 'H', 3: 'W'}, + 'images': {0: 'B', 2: '8H', 3: '8W'} + } + + def get_input_profile(self, batch_size, image_height, image_width, static_batch, static_shape): + latent_height, latent_width = self.check_dims(batch_size, image_height, image_width) + min_batch, max_batch, _, _, _, _, min_latent_height, max_latent_height, min_latent_width, max_latent_width = \ + self.get_minmax_dims(batch_size, image_height, image_width, static_batch, static_shape) + return { + 'latent': [(min_batch, 4, min_latent_height, min_latent_width), (batch_size, 4, latent_height, latent_width), (max_batch, 4, max_latent_height, max_latent_width)] + } + + def get_shape_dict(self, batch_size, image_height, image_width): + latent_height, latent_width = self.check_dims(batch_size, image_height, image_width) + return { + 'latent': (batch_size, 4, latent_height, latent_width), + 'images': (batch_size, 3, image_height, image_width) + } + def get_sample_input(self, batch_size, image_height, image_width, static_shape): + latent_height, latent_width = self.check_dims(batch_size, image_height, image_width) + dtype = torch.float16 if self.fp16 else torch.bfloat16 if self.bf16 else torch.float32 + return torch.randn(batch_size, 4, latent_height, latent_width, dtype=dtype, device=self.device) + + def check_dims(self, batch_size, image_height, image_width): + latent_height, latent_width = super().check_dims(batch_size, image_height, image_width) + latent_height = int(latent_height * self.latent_dim_scale) + latent_width = int(latent_width * self.latent_dim_scale) + return (latent_height, latent_width) + + def get_minmax_dims(self, batch_size, image_height, image_width, static_batch, static_shape): + min_batch, max_batch, min_image_height, max_image_height, min_image_width, max_image_width, min_latent_height, max_latent_height, min_latent_width, max_latent_width = \ + super().get_minmax_dims(batch_size, image_height, image_width, static_batch, static_shape) + min_latent_height = int(min_latent_height * self.latent_dim_scale) + min_latent_width = int(min_latent_width * self.latent_dim_scale) + max_latent_height = int(max_latent_height * self.latent_dim_scale) + max_latent_width = int(max_latent_width * self.latent_dim_scale) + return (min_batch, max_batch, min_image_height, max_image_height, min_image_width, max_image_width, min_latent_height, max_latent_height, min_latent_width, max_latent_width) + def make_tokenizer(version, pipeline, hf_token, framework_model_dir, subfolder="tokenizer", **kwargs): tokenizer_model_dir = get_checkpoint_dir(framework_model_dir, version, pipeline.name, subfolder) if not os.path.exists(tokenizer_model_dir): diff --git a/demo/Diffusion/requirements.txt b/demo/Diffusion/requirements.txt index fc2979b5..280fe886 100755 --- a/demo/Diffusion/requirements.txt +++ b/demo/Diffusion/requirements.txt @@ -1,17 +1,17 @@ colored controlnet_aux==0.0.6 cuda-python -diffusers==0.26.3 +diffusers==0.29.2 ftfy matplotlib nvtx onnx==1.15.0 -onnxruntime==1.16.3 +onnxruntime==1.17.3 opencv-python==4.8.0.74 scipy transformers==4.36.2 --extra-index-url https://pypi.nvidia.com -nvidia-modelopt==0.11.2 +nvidia-modelopt[torch,onnx]==0.15.1 onnx-graphsurgeon polygraphy==0.49.9 sentencepiece diff --git a/demo/Diffusion/stable_cascade_pipeline.py b/demo/Diffusion/stable_cascade_pipeline.py new file mode 100644 index 00000000..2d9d639e --- /dev/null +++ b/demo/Diffusion/stable_cascade_pipeline.py @@ -0,0 +1,340 @@ +# +# SPDX-FileCopyrightText: Copyright (c) 1993-2024 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. +# + +from cuda import cudart +from diffusers import ( + DDPMWuerstchenScheduler +) +import inspect +from models import ( + make_tokenizer, + CLIPWithProjModel, + UNetCascadeModel, + VQGANModel +) +import tensorrt as trt +import time +import torch +from utilities import ( + PIPELINE_TYPE, + TRT_LOGGER, +) +from stable_diffusion_pipeline import StableDiffusionPipeline + +class StableCascadePipeline(StableDiffusionPipeline): + """ + Application showcasing the acceleration of Stable Cascade pipelines using NVidia TensorRT. + """ + def __init__( + self, + version='cascade', + pipeline_type=PIPELINE_TYPE.CASCADE_PRIOR, + latent_dim_scale=10.67, + lite=False, + **kwargs + ): + """ + Initializes the Stable Cascade pipeline. + + Args: + version (str): + The version of the pipeline. Should be one of [cascade] + pipeline_type (PIPELINE_TYPE): + Type of current pipeline. + latent_dim_scale (float): + Multiplier to determine the VQ latent space size from the image embeddings. If the image embeddings are + height=24 and width=24, the VQ latent shape needs to be height=int(24*10.67)=256 and + width=int(24*10.67)=256 in order to match the training conditions. + lite (bool): + Boolean indicating if the Lite Version of the Stage B and Stage C models is to be used + """ + super().__init__( + version=version, + pipeline_type=pipeline_type, + **kwargs + ) + self.config['clip_hidden_states'] = True + # from Diffusers: https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_cascade/pipeline_stable_cascade.py#L91C9-L91C41 + self.latent_dim_scale = latent_dim_scale + self.lite = lite + + def initializeModels(self, framework_model_dir, int8, fp8): + # Load text tokenizer(s) + self.tokenizer = make_tokenizer(self.version, self.pipeline_type, self.hf_token, framework_model_dir) + + # Load pipeline models + models_args = {'version': self.version, 'pipeline': self.pipeline_type, 'device': self.device, + 'hf_token': self.hf_token, 'verbose': self.verbose, 'framework_model_dir': framework_model_dir, + 'max_batch_size': self.max_batch_size} + + self.fp16 = False # TODO: enable FP16 mode for decoder model (requires strongly typed engine) + self.bf16 = True + if 'clip' in self.stages: + self.models['clip'] = CLIPWithProjModel(**models_args, fp16=self.fp16, bf16=self.bf16, output_hidden_states=self.config.get('clip_hidden_states', False), subfolder='text_encoder') + + if 'unet' in self.stages: + self.models['unet'] = UNetCascadeModel(**models_args, fp16=self.fp16, bf16=self.bf16, lite=self.lite, do_classifier_free_guidance=self.do_classifier_free_guidance) + + if 'vqgan' in self.stages: + self.models['vqgan'] = VQGANModel(**models_args, fp16=self.fp16, bf16=self.bf16, latent_dim_scale = self.latent_dim_scale) + + def encode_prompt(self, prompt, negative_prompt, encoder='clip', pooled_outputs=False, output_hidden_states=False): + self.profile_start('clip', color='green') + + tokenizer = self.tokenizer + + def tokenize(prompt, output_hidden_states): + text_inputs = tokenizer( + prompt, + padding="max_length", + max_length=tokenizer.model_max_length, + truncation=True, + return_tensors="pt", + ) + text_input_ids = text_inputs.input_ids.type(torch.int32).to(self.device) + attention_mask = text_inputs.attention_mask.type(torch.int32).to(self.device) + + text_hidden_states = None + if self.torch_inference: + outputs = self.torch_models[encoder](text_input_ids, attention_mask=attention_mask, output_hidden_states=output_hidden_states) + text_embeddings = outputs[0].clone() + if output_hidden_states: + hidden_state_layer = -1 + text_hidden_states = outputs['hidden_states'][hidden_state_layer].clone() + else: + # NOTE: output tensor for CLIP must be cloned because it will be overwritten when called again for negative prompt + outputs = self.runEngine(encoder, {'input_ids': text_input_ids, 'attention_mask': attention_mask}) + text_embeddings = outputs['text_embeddings'].clone() + if output_hidden_states: + text_hidden_states = outputs['hidden_states'].clone() + + return text_embeddings, text_hidden_states + + # Tokenize prompt + text_embeddings, text_hidden_states = tokenize(prompt, output_hidden_states) + + if self.do_classifier_free_guidance: + # Tokenize negative prompt + uncond_embeddings, uncond_hidden_states = tokenize(negative_prompt, output_hidden_states) + + # Concatenate the unconditional and text embeddings into a single batch to avoid doing two forward passes for classifier free guidance + text_embeddings = torch.cat([text_embeddings, uncond_embeddings]) + + if pooled_outputs: + pooled_output = text_embeddings + + if output_hidden_states: + text_embeddings = torch.cat([text_hidden_states, uncond_hidden_states]) if self.do_classifier_free_guidance else text_hidden_states + + self.profile_stop('clip') + if pooled_outputs: + return text_embeddings, pooled_output + return text_embeddings + + def denoise_latent(self, + latents, + pooled_embeddings, + text_embeddings=None, + image_embeds=None, + effnet=None, + denoiser='unet', + timesteps=None, + ): + + do_autocast = False + with torch.autocast('cuda', enabled=do_autocast): + self.profile_start('denoise', color='blue') + for step_index, timestep in enumerate(timesteps): + # ratio input required for stable cascade prior + timestep_ratio = timestep.expand(latents.size(0)).to(latents.dtype) + # Expand the latents and timestep_ratio if we are doing classifier free guidance + latent_model_input = torch.cat([latents] * 2) if self.do_classifier_free_guidance else latents + timestep_ratio_input = torch.cat([timestep_ratio] * 2) if self.do_classifier_free_guidance else timestep_ratio + + params = {"sample": latent_model_input, "timestep_ratio": timestep_ratio_input, "clip_text_pooled": pooled_embeddings} + if text_embeddings is not None: + params.update({'clip_text': text_embeddings}) + if image_embeds is not None: + params.update({'clip_img': image_embeds}) + if effnet is not None: + params.update({'effnet': effnet}) + + # Predict the noise residual + if self.torch_inference: + noise_pred = self.torch_models[denoiser](**params)['sample'] + else: + noise_pred = self.runEngine(denoiser, params)['latent'] + + # Perform guidance + if self.do_classifier_free_guidance: + noise_pred_text, noise_pred_uncond = noise_pred.chunk(2) + noise_pred = noise_pred_uncond + self.guidance_scale * (noise_pred_text - noise_pred_uncond) + + # from diffusers (prepare_extra_step_kwargs) + extra_step_kwargs = {} + if "eta" in set(inspect.signature(self.scheduler.step).parameters.keys()): + # TODO: configurable eta + eta = 0.0 + extra_step_kwargs["eta"] = eta + if "generator" in set(inspect.signature(self.scheduler.step).parameters.keys()): + extra_step_kwargs["generator"] = self.generator + + latents = self.scheduler.step(noise_pred, timestep_ratio, latents, **extra_step_kwargs, return_dict=False)[0] + + latents = latents.to(dtype=torch.bfloat16 if self.bf16 else torch.float32) + + self.profile_stop('denoise') + return latents + + def decode_latent(self, latents): + self.profile_start('vqgan', color='red') + latents = self.models['vqgan'].scale_factor * latents + if self.torch_inference: + images = self.torch_models['vqgan'](latents)['sample'] + else: + images = self.runEngine('vqgan', {'latent': latents})['images'] + self.profile_stop('vqgan') + return images + + def print_summary(self, denoising_steps, walltime_ms, batch_size): + print('|-----------------|--------------|') + print('| {:^15} | {:^12} |'.format('Module', 'Latency')) + print('|-----------------|--------------|') + print('| {:^15} | {:>9.2f} ms |'.format('CLIP', cudart.cudaEventElapsedTime(self.events['clip'][0], self.events['clip'][1])[1])) + print('| {:^15} | {:>9.2f} ms |'.format('UNet'+' x '+str(denoising_steps), cudart.cudaEventElapsedTime(self.events['denoise'][0], self.events['denoise'][1])[1])) + if 'vqgan' in self.stages: + print('| {:^15} | {:>9.2f} ms |'.format('VQGAN', cudart.cudaEventElapsedTime(self.events['vqgan'][0], self.events['vqgan'][1])[1])) + print('|-----------------|--------------|') + print('| {:^15} | {:>9.2f} ms |'.format('Pipeline', walltime_ms)) + print('|-----------------|--------------|') + print('Throughput: {:.2f} image/s'.format(batch_size*1000./walltime_ms)) + + def infer( + self, + prompt, + negative_prompt, + image_height, + image_width, + image_embeddings=None, + warmup=False, + verbose=False, + save_image=True, + ): + """ + Run the diffusion pipeline. + + Args: + prompt (str): + The text prompt to guide image generation. + negative_prompt (str): + The prompt not to guide the image generation. + image_height (int): + Height (in pixels) of the image to be generated. Must be a multiple of 8. + image_width (int): + Width (in pixels) of the image to be generated. Must be a multiple of 8. + image_embeddings (`torch.FloatTensor` or `List[torch.FloatTensor]`): + Image Embeddings either extracted from an image or generated by a Prior Model. + warmup (bool): + Indicate if this is a warmup run. + verbose (bool): + Verbose in logging + save_image (bool): + Save the generated image (if applicable) + """ + if self.pipeline_type.is_cascade_decoder(): + assert image_embeddings is not None, "Image Embeddings are required to run the decoder. Provided None" + assert len(prompt) == len(negative_prompt) + batch_size = len(prompt) + + # Spatial dimensions of latent tensor + latent_height = image_height // 42 + latent_width = image_width // 42 + + if image_embeddings is not None: + assert latent_height == image_embeddings.shape[-2] + assert latent_width == image_embeddings.shape[-1] + + if self.generator and self.seed: + self.generator.manual_seed(self.seed) + + num_inference_steps = self.denoising_steps + + with torch.inference_mode(), trt.Runtime(TRT_LOGGER): + torch.cuda.synchronize() + e2e_tic = time.perf_counter() + + denoise_kwargs = {} + # TODO: support custom timesteps + timesteps = None + if timesteps is not None: + if not ("timesteps" in set(inspect.signature(self.scheduler.set_timesteps).parameters.keys())): + raise ValueError( + f"The current scheduler class {self.scheduler.__class__}'s `set_timesteps` does not support custom" + f" timestep schedules. Please check whether you are using the correct scheduler." + ) + self.scheduler.set_timesteps(timesteps=timesteps, device=self.device) + assert self.denoising_steps == len(self.scheduler.timesteps) + else: + self.scheduler.set_timesteps(self.denoising_steps, device=self.device) + timesteps = self.scheduler.timesteps.to(self.device) + if isinstance(self.scheduler, DDPMWuerstchenScheduler): + timesteps = timesteps[:-1] + denoise_kwargs.update({'timesteps': timesteps}) + + # Initialize latents + latents_dtpye = torch.float16 if self.fp16 else torch.bfloat16 if self.bf16 else torch.float32 + latents = self.initialize_latents( + batch_size=batch_size, + unet_channels=16 if self.pipeline_type.is_cascade_prior() else 4, # TODO: can we query "in_channels" from config + latent_height=latent_height if self.pipeline_type.is_cascade_prior() else int(latent_height * self.latent_dim_scale), + latent_width=latent_width if self.pipeline_type.is_cascade_prior() else int(latent_width * self.latent_dim_scale), + latents_dtype=latents_dtpye + ) + + # CLIP text encoder(s) + text_embeddings, pooled_embeddings = self.encode_prompt(prompt, negative_prompt, + encoder='clip', pooled_outputs=True, output_hidden_states=True) + + if self.pipeline_type.is_cascade_prior(): + denoise_kwargs.update({'text_embeddings': text_embeddings}) + + # image embeds + image_embeds_pooled = torch.zeros(batch_size, 1, 768, device=self.device, dtype=latents_dtpye) + image_embeds = (torch.cat([image_embeds_pooled, torch.zeros_like(image_embeds_pooled)]) if self.do_classifier_free_guidance else image_embeddings) + denoise_kwargs.update({'image_embeds': image_embeds}) + else: + effnet = (torch.cat([image_embeddings, torch.zeros_like(image_embeddings)]) if self.do_classifier_free_guidance else image_embeddings) + denoise_kwargs.update({'effnet': effnet}) + + # UNet denoiser + latents = self.denoise_latent(latents, pooled_embeddings.unsqueeze(1), denoiser='unet', **denoise_kwargs) + + if not self.return_latents: + images = self.decode_latent(latents) + + torch.cuda.synchronize() + e2e_toc = time.perf_counter() + + walltime_ms = (e2e_toc - e2e_tic) * 1000. + if not warmup: + self.print_summary(num_inference_steps, walltime_ms, batch_size) + if not self.return_latents and save_image: + # post-process images + images = ((images) * 255).clamp(0, 255).detach().permute(0, 2, 3, 1).round().type(torch.uint8).cpu().numpy() + self.save_image(images, self.pipeline_type.name.lower(), prompt, self.seed) + + return (latents, walltime_ms) if self.return_latents else (images, walltime_ms) diff --git a/demo/Diffusion/stable_diffusion_3_pipeline.py b/demo/Diffusion/stable_diffusion_3_pipeline.py index ea691e96..8749354a 100644 --- a/demo/Diffusion/stable_diffusion_3_pipeline.py +++ b/demo/Diffusion/stable_diffusion_3_pipeline.py @@ -562,6 +562,8 @@ def infer( num_inference_steps = int(self.denoising_steps * self.denoising_percentage) self.print_summary(num_inference_steps, walltime_ms, batch_size) if save_image: + # post-process images + images = ((images + 1) * 255 / 2).clamp(0, 255).detach().permute(0, 2, 3, 1).round().type(torch.uint8).cpu().numpy() self.save_image(images, self.pipeline_type.name.lower(), prompt, self.seed) return images, walltime_ms diff --git a/demo/Diffusion/stable_diffusion_pipeline.py b/demo/Diffusion/stable_diffusion_pipeline.py index c1316c66..a9500f9d 100644 --- a/demo/Diffusion/stable_diffusion_pipeline.py +++ b/demo/Diffusion/stable_diffusion_pipeline.py @@ -26,6 +26,7 @@ LCMScheduler, LMSDiscreteScheduler, PNDMScheduler, UniPCMultistepScheduler, + DDPMWuerstchenScheduler ) from hashlib import md5 import inspect @@ -65,6 +66,11 @@ filter_func, quantize_lvl, get_int8_config, + check_lora, + set_fmha, + generate_fp8_scales, + SD_FP8_FP16_DEFAULT_CONFIG, + SD_FP8_FP32_DEFAULT_CONFIG, ) class StableDiffusionPipeline: @@ -171,6 +177,10 @@ def __init__( self.stages = ['clip2', 'unetxl', 'vae'] elif self.pipeline_type.is_img2vid(): self.stages = ['clip-vis', 'clip-imgfe', 'unet-temp', 'vae-temp'] + elif self.pipeline_type.is_cascade_prior(): + self.stages = ['clip', 'unet'] + elif self.pipeline_type.is_cascade_decoder(): + self.stages = ['clip', 'unet', 'vqgan'] else: raise ValueError(f"Unsupported pipeline {self.pipeline_type.name}.") self.return_latents = return_latents @@ -186,7 +196,8 @@ def __init__( '2.1': 'DDIM', 'xl-1.0' : 'Euler', 'xl-turbo': 'EulerA', - 'svd-xt-1.1': 'Euler' + 'svd-xt-1.1': 'Euler', + 'cascade': 'DDPMWuerstchen' } if not scheduler: @@ -212,6 +223,8 @@ def makeScheduler(cls, subfolder="scheduler", **kwargs): self.scheduler = makeScheduler(PNDMScheduler) elif scheduler == "UniPC": self.scheduler = makeScheduler(UniPCMultistepScheduler) + elif scheduler == "DDPMWuerstchen": + self.scheduler = makeScheduler(DDPMWuerstchenScheduler) else: raise ValueError(f"Unsupported scheduler {scheduler}. Should be either DDIM, DDPM, EulerA, Euler, LCM, LMSD, PNDM, or UniPC.") @@ -256,7 +269,7 @@ def loadResources(self, image_height, image_width, batch_size, seed): self.generator = torch.Generator(device="cuda").manual_seed(seed) # Create CUDA events and stream - for stage in ['clip', 'denoise', 'vae', 'vae_encoder']: + for stage in ['clip', 'denoise', 'vae', 'vae_encoder', 'vqgan']: self.events[stage] = [cudart.cudaEventCreate()[1], cudart.cudaEventCreate()[1]] self.stream = cudart.cudaStreamCreate()[1] @@ -310,6 +323,49 @@ def getStateDictPath(self, model_name, onnx_dir, suffix=''): os.makedirs(onnx_model_dir, exist_ok=True) return os.path.join(onnx_model_dir, 'state_dict.pt') + def initializeModels(self, framework_model_dir, int8, fp8): + # Load text tokenizer(s) + if not self.pipeline_type.is_sd_xl_refiner(): + self.tokenizer = make_tokenizer(self.version, self.pipeline_type, self.hf_token, framework_model_dir) + if self.pipeline_type.is_sd_xl(): + self.tokenizer2 = make_tokenizer(self.version, self.pipeline_type, self.hf_token, framework_model_dir, subfolder='tokenizer_2') + + # Load pipeline models + models_args = {'version': self.version, 'pipeline': self.pipeline_type, 'device': self.device, + 'hf_token': self.hf_token, 'verbose': self.verbose, 'framework_model_dir': framework_model_dir, + 'max_batch_size': self.max_batch_size} + + if 'clip' in self.stages: + subfolder = 'text_encoder' + self.models['clip'] = CLIPModel(**models_args, fp16=True, embedding_dim=get_clip_embedding_dim(self.version, self.pipeline_type), output_hidden_states=self.config.get('clip_hidden_states', False), subfolder=subfolder) + + if 'clip2' in self.stages: + subfolder = 'text_encoder_2' + self.models['clip2'] = CLIPWithProjModel(**models_args, fp16=True, output_hidden_states=self.config.get('clip_hidden_states', False), subfolder=subfolder) + + lora_dict, lora_alphas = (None, None) + if 'unet' in self.stages: + if self.lora_loader: + lora_dict, lora_alphas = self.lora_loader.get_dicts('unet') + assert len(lora_dict) == len(self.lora_scales) + self.models['unet'] = UNetModel(**models_args, fp16=True, int8=int8, fp8=fp8, controlnets=self.controlnets, + lora_scales=self.lora_scales, lora_dict=lora_dict, lora_alphas=lora_alphas, do_classifier_free_guidance=self.do_classifier_free_guidance) + + if 'unetxl' in self.stages: + if not self.pipeline_type.is_sd_xl_refiner() and self.lora_loader: + lora_dict, lora_alphas = self.lora_loader.get_dicts('unet') + assert len(lora_dict) == len(self.lora_scales) + self.models['unetxl'] = UNetXLModel(**models_args, fp16=True, int8=int8, fp8=fp8, + lora_scales=self.lora_scales, lora_dict=lora_dict, lora_alphas=lora_alphas, do_classifier_free_guidance=self.do_classifier_free_guidance) + + vae_fp16 = not self.pipeline_type.is_sd_xl() + + if 'vae' in self.stages: + self.models['vae'] = VAEModel(**models_args, fp16=vae_fp16) + + if 'vae_encoder' in self.stages: + self.models['vae_encoder'] = VAEEncoderModel(**models_args, fp16=vae_fp16) + def loadEngines( self, engine_dir, @@ -325,6 +381,7 @@ def loadEngines( enable_all_tactics=False, timing_cache=None, int8=False, + fp8=False, quantization_level=2.5, quantization_percentile=1.0, quantization_alpha=0.8, @@ -361,7 +418,9 @@ def loadEngines( timing_cache (str): Path to the timing cache to speed up TensorRT build. int8 (bool): - Whether to quantize to int8 format or not (SDXL only). + Whether to quantize to int8 format or not (SDXL, SD15 and SD21 only). + fp8 (bool): + Whether to quantize to fp8 format or not (SDXL, SD15 and SD21 only). quantization_level (float): Controls which layers to quantize. 1: CNN, 2: CNN+FFN, 2.5: CNN+FFN+QKV, 3: CNN+FC quantization_percentile (float): @@ -382,47 +441,8 @@ def loadEngines( print(f"[I] Create directory: {directory}") pathlib.Path(directory).mkdir(parents=True) - # Load text tokenizer(s) - if not self.pipeline_type.is_sd_xl_refiner(): - self.tokenizer = make_tokenizer(self.version, self.pipeline_type, self.hf_token, framework_model_dir) - if self.pipeline_type.is_sd_xl(): - self.tokenizer2 = make_tokenizer(self.version, self.pipeline_type, self.hf_token, framework_model_dir, subfolder='tokenizer_2') - - # Load pipeline models - models_args = {'version': self.version, 'pipeline': self.pipeline_type, 'device': self.device, - 'hf_token': self.hf_token, 'verbose': self.verbose, 'framework_model_dir': framework_model_dir, - 'max_batch_size': self.max_batch_size} - - if 'clip' in self.stages: - subfolder = 'text_encoder' - self.models['clip'] = CLIPModel(**models_args, fp16=True, embedding_dim=get_clip_embedding_dim(self.version, self.pipeline_type), output_hidden_states=self.config.get('clip_hidden_states', False), subfolder=subfolder) - - if 'clip2' in self.stages: - subfolder = 'text_encoder_2' - self.models['clip2'] = CLIPWithProjModel(**models_args, fp16=True, output_hidden_states=self.config.get('clip_hidden_states', False), subfolder=subfolder) - - lora_dict, lora_alphas = (None, None) - if 'unet' in self.stages: - if self.lora_loader: - lora_dict, lora_alphas = self.lora_loader.get_dicts('unet') - assert len(lora_dict) == len(self.lora_scales) - self.models['unet'] = UNetModel(**models_args, fp16=True, controlnets=self.controlnets, - lora_scales=self.lora_scales, lora_dict=lora_dict, lora_alphas=lora_alphas, do_classifier_free_guidance=self.do_classifier_free_guidance) - - if 'unetxl' in self.stages: - if not self.pipeline_type.is_sd_xl_refiner() and self.lora_loader: - lora_dict, lora_alphas = self.lora_loader.get_dicts('unet') - assert len(lora_dict) == len(self.lora_scales) - self.models['unetxl'] = UNetXLModel(**models_args, fp16=True, - lora_scales=self.lora_scales, lora_dict=lora_dict, lora_alphas=lora_alphas, do_classifier_free_guidance=self.do_classifier_free_guidance) - - vae_fp16 = not self.pipeline_type.is_sd_xl() - - if 'vae' in self.stages: - self.models['vae'] = VAEModel(**models_args, fp16=vae_fp16) - - if 'vae_encoder' in self.stages: - self.models['vae_encoder'] = VAEEncoderModel(**models_args, fp16=vae_fp16) + # Initialize models + self.initializeModels(framework_model_dir, int8, fp8) # Configure pipeline models to load model_names = self.models.keys() @@ -434,10 +454,17 @@ def loadEngines( torch_fallback = dict(zip(model_names, [self.torch_inference for model_name in model_names])) model_suffix = dict(zip(model_names, [lora_suffix if do_lora_merge[model_name] else '' for model_name in model_names])) use_int8 = dict.fromkeys(model_names, False) + use_fp8 = dict.fromkeys(model_names, False) if int8: - assert self.pipeline_type.is_sd_xl_base(), "int8 quantization only supported for SDXL pipeline" - use_int8['unetxl'] = True - model_suffix['unetxl'] += f"-int8.l{quantization_level}.bs2.s{self.denoising_steps}.c{calibration_size}.p{quantization_percentile}.a{quantization_alpha}" + assert self.pipeline_type.is_sd_xl_base() or self.version in ["1.5", "2.1", "2.1-base"], "int8 quantization only supported for SDXL, SD1.5 and SD2.1 pipeline" + model_name = 'unetxl' if self.pipeline_type.is_sd_xl() else 'unet' + use_int8[model_name] = True + model_suffix[model_name] += f"-int8.l{quantization_level}.bs2.s{self.denoising_steps}.c{calibration_size}.p{quantization_percentile}.a{quantization_alpha}" + elif fp8: + assert self.pipeline_type.is_sd_xl() or self.version in ["1.5", "2.1", "2.1-base"], "fp8 quantization only supported for SDXL, SD1.5 and SD2.1 pipeline" + model_name = 'unetxl' if self.pipeline_type.is_sd_xl() else 'unet' + use_fp8[model_name] = True + model_suffix[model_name] += f"-fp8.l{quantization_level}.bs2.s{self.denoising_steps}.c{calibration_size}.p{quantization_percentile}.a{quantization_alpha}" onnx_path = dict(zip(model_names, [self.getOnnxPath(model_name, onnx_dir, opt=False, suffix=model_suffix[model_name]) for model_name in model_names])) onnx_opt_path = dict(zip(model_names, [self.getOnnxPath(model_name, onnx_dir, suffix=model_suffix[model_name]) for model_name in model_names])) engine_path = dict(zip(model_names, [self.getEnginePath(model_name, engine_dir, do_engine_refit[model_name], suffix=model_suffix[model_name]) for model_name in model_names])) @@ -451,30 +478,25 @@ def loadEngines( do_export_weights_map = weights_map_path[model_name] and not os.path.exists(weights_map_path[model_name]) if do_export_onnx or do_export_weights_map: # Non-quantized ONNX export - if not use_int8[model_name]: + if not use_int8[model_name] and not use_fp8[model_name]: obj.export_onnx(onnx_path[model_name], onnx_opt_path[model_name], onnx_opset, opt_image_height, opt_image_width, enable_lora_merge=do_lora_merge[model_name], static_shape=static_shape) else: + pipeline = obj.get_pipeline() + model = pipeline.unet + if use_fp8[model_name] and quantization_level == 4.0: + set_fmha(model) + state_dict_path = self.getStateDictPath(model_name, onnx_dir, suffix=model_suffix[model_name]) if not os.path.exists(state_dict_path): print(f"[I] Calibrated weights not found, generating {state_dict_path}") - pipeline = obj.get_pipeline() - model = pipeline.unet calibration_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'calibration-prompts.txt') calibration_prompts = load_calib_prompts(calib_batch_size, calibration_file) # TODO check size > calibration_size - quant_config = get_int8_config( - model, - quantization_level, - quantization_alpha, - quantization_percentile, - self.denoising_steps - ) - - def do_calibrate(base, calibration_prompts, **kwargs): + def do_calibrate(pipeline, calibration_prompts, **kwargs): for i_th, prompts in enumerate(calibration_prompts): if i_th >= kwargs["calib_size"]: return - base( + pipeline( prompt=prompts, num_inference_steps=kwargs["n_steps"], negative_prompt=[ @@ -482,35 +504,43 @@ def do_calibrate(base, calibration_prompts, **kwargs): ] * len(prompts), ).images - - def calibration_loop(unet): - pipeline.model = unet + + def forward_loop(model): + pipeline.unet = model do_calibrate( - base=pipeline, + pipeline=pipeline, calibration_prompts=calibration_prompts, calib_size=calibration_size // calib_batch_size, n_steps=self.denoising_steps, ) - - print(f"[I] Performing int8 calibration for {calibration_size} steps.") - mtq.quantize(model, quant_config, forward_loop=calibration_loop) + + print(f"[I] Performing calibration for {calibration_size} steps.") + if use_int8[model_name]: + quant_config = get_int8_config( + model, + quantization_level, + quantization_alpha, + quantization_percentile, + self.denoising_steps + ) + elif use_fp8[model_name]: + check_lora(model) + quant_config = SD_FP8_FP32_DEFAULT_CONFIG if self.version == "2.1" else SD_FP8_FP16_DEFAULT_CONFIG + mtq.quantize(model, quant_config, forward_loop) mto.save(model, state_dict_path) + else: + mto.restore(model, state_dict_path) print(f"[I] Generating quantized ONNX model: {onnx_opt_path[model_name]}") if not os.path.exists(onnx_path[model_name]): - model = obj.get_model() - mto.restore(model, state_dict_path) - quantize_lvl(model, quantization_level) + quantize_lvl(model, quantization_level) mtq.disable_quantizer(model, filter_func) - model.to(torch.float32).to("cpu") # QDQ needs to be in FP32 - # WAR to enable ONNX export of quantized UNet - obj.device="cpu" - obj.fp16=False + if use_fp8[model_name]: + generate_fp8_scales(model) else: - model = None - obj.export_onnx(onnx_path[model_name], onnx_opt_path[model_name], onnx_opset, opt_image_height, opt_image_width, custom_model=model) - obj.fp16=True # Part of WAR, UNET obj.fp16 defaults to True so it is safe to reset this way - + model = None + obj.export_onnx(onnx_path[model_name], onnx_opt_path[model_name], onnx_opset, opt_image_height, opt_image_width, custom_model=model, static_shape=static_shape) + # FIXME do_export_weights_map needs ONNX graph if do_export_weights_map: print(f"[I] Saving weights map: {weights_map_path[model_name]}") @@ -523,14 +553,20 @@ def calibration_loop(unet): engine = Engine(engine_path[model_name]) if not os.path.exists(engine_path[model_name]): update_output_names = obj.get_output_names() + obj.extra_output_names if obj.extra_output_names else None + fp16amp = obj.fp16 if not use_fp8[model_name] else False + bf16amp = obj.bf16 if not use_fp8[model_name] else False + strongly_typed = False if not use_fp8[model_name] else True extra_build_args = {'verbose': self.verbose} if use_int8[model_name]: extra_build_args['int8'] = True extra_build_args['precision_constraints'] = 'prefer' extra_build_args['builder_optimization_level'] = 4 - fp16amp = obj.fp16 + elif use_fp8[model_name]: + extra_build_args['builder_optimization_level'] = 4 engine.build(onnx_opt_path[model_name], + strongly_typed=strongly_typed, fp16=fp16amp, + bf16=bf16amp, input_profile=obj.get_input_profile( opt_batch_size, opt_image_height, opt_image_width, static_batch=static_batch, static_shape=static_shape @@ -588,8 +624,8 @@ def runEngine(self, model_name, feed_dict): engine = self.engine[model_name] return engine.infer(feed_dict, self.stream, use_cuda_graph=self.use_cuda_graph) - def initialize_latents(self, batch_size, unet_channels, latent_height, latent_width): - latents_dtype = torch.float32 # text_embeddings.dtype + def initialize_latents(self, batch_size, unet_channels, latent_height, latent_width, latents_dtype=torch.float32): + latents_dtype = latents_dtype # text_embeddings.dtype latents_shape = (batch_size, unet_channels, latent_height, latent_width) latents = torch.randn(latents_shape, device=self.device, dtype=latents_dtype, generator=self.generator) # Scale the initial noise by the standard deviation required by the scheduler @@ -1002,6 +1038,8 @@ def _get_add_time_ids(original_size, crops_coords_top_left, target_size, dtype, if not warmup: self.print_summary(num_inference_steps, walltime_ms, batch_size) if not self.return_latents and save_image: + # post-process images + images = ((images + 1) * 255 / 2).clamp(0, 255).detach().permute(0, 2, 3, 1).round().type(torch.uint8).cpu().numpy() self.save_image(images, self.pipeline_type.name.lower(), prompt, self.seed) return (latents, walltime_ms) if self.return_latents else (images, walltime_ms) diff --git a/demo/Diffusion/utilities.py b/demo/Diffusion/utilities.py index 6dece14f..911139b6 100644 --- a/demo/Diffusion/utilities.py +++ b/demo/Diffusion/utilities.py @@ -19,7 +19,6 @@ from collections import OrderedDict from cuda import cudart from diffusers.models.lora import LoRACompatibleConv, LoRACompatibleLinear -from diffusers.utils.torch_utils import randn_tensor from enum import Enum, auto import gc from io import BytesIO @@ -50,26 +49,17 @@ def GiB(val): return val * 1 << 30 -# Map of numpy dtype -> torch dtype -numpy_to_torch_dtype_dict = { - np.uint8 : torch.uint8, - np.int8 : torch.int8, - np.int16 : torch.int16, - np.int32 : torch.int32, - np.int64 : torch.int64, - np.float16 : torch.float16, - np.float32 : torch.float32, - np.float64 : torch.float64, - np.complex64 : torch.complex64, - np.complex128 : torch.complex128 +# Map of TensorRT dtype -> torch dtype +trt_to_torch_dtype_dict = { + trt.DataType.BOOL : torch.bool, + trt.DataType.UINT8 : torch.uint8, + trt.DataType.INT8 : torch.int8, + trt.DataType.INT32 : torch.int32, + trt.DataType.INT64 : torch.int64, + trt.DataType.HALF : torch.float16, + trt.DataType.FLOAT : torch.float32, + trt.DataType.BF16 : torch.bfloat16 } -if np.version.full_version >= "1.24.0": - numpy_to_torch_dtype_dict[np.bool_] = torch.bool -else: - numpy_to_torch_dtype_dict[np.bool] = torch.bool - -# Map of torch dtype -> numpy dtype -torch_to_numpy_dtype_dict = {value : key for (key, value) in numpy_to_torch_dtype_dict.items()} def unload_model(model): if model: @@ -160,6 +150,8 @@ class PIPELINE_TYPE(Enum): CONTROLNET = auto() XL_BASE = auto() XL_REFINER = auto() + CASCADE_PRIOR = auto() + CASCADE_DECODER = auto() def is_txt2img(self): return self == self.TXT2IMG @@ -185,6 +177,15 @@ def is_sd_xl_refiner(self): def is_sd_xl(self): return self.is_sd_xl_base() or self.is_sd_xl_refiner() + def is_cascade_prior(self): + return self == self.CASCADE_PRIOR + + def is_cascade_decoder(self): + return self == self.CASCADE_DECODER + + def is_cascade(self): + return self.is_cascade_prior() or self.is_cascade_decoder() + class Engine(): def __init__( self, @@ -236,9 +237,12 @@ def refit(self, refit_weights, is_fp16): def build(self, onnx_path, + strongly_typed=False, fp16=True, + bf16=False, tf32=False, int8=False, + fp8=False, input_profile=None, enable_refit=False, enable_all_tactics=False, @@ -261,7 +265,11 @@ def build(self, flags = [] if native_instancenorm: flags.append(trt.OnnxParserFlag.NATIVE_INSTANCENORM) - network = network_from_onnx_path(onnx_path, flags=flags) + network = network_from_onnx_path( + onnx_path, + flags=flags, + strongly_typed=strongly_typed + ) if update_output_names: print(f"Updating network outputs to {update_output_names}") network = ModifyNetworkOutputs(network, update_output_names) @@ -269,8 +277,10 @@ def build(self, engine = engine_from_network( network, config=CreateConfig(fp16=fp16, + bf16=bf16, tf32=tf32, int8=int8, + fp8=fp8, refittable=enable_refit, profiles=[p], load_timing_cache=timing_cache, @@ -306,10 +316,10 @@ def allocate_buffers(self, shape_dict=None, device='cuda'): shape = shape_dict[name] else: shape = self.engine.get_tensor_shape(name) - dtype = trt.nptype(self.engine.get_tensor_dtype(name)) if self.engine.get_tensor_mode(name) == trt.TensorIOMode.INPUT: self.context.set_input_shape(name, shape) - tensor = torch.empty(tuple(shape), dtype=numpy_to_torch_dtype_dict[dtype]).to(device=device) + dtype=trt_to_torch_dtype_dict[self.engine.get_tensor_dtype(name)] + tensor = torch.empty(tuple(shape), dtype=dtype).to(device=device) self.tensors[name] = tensor @@ -350,7 +360,6 @@ def save_image(images, image_path_dir, image_name_prefix, image_name_suffix): """ Save the generated images to png files. """ - images = ((images + 1) * 255 / 2).clamp(0, 255).detach().permute(0, 2, 3, 1).round().type(torch.uint8).cpu().numpy() for i in range(images.shape[0]): image_path = os.path.join(image_path_dir, image_name_prefix+str(i+1)+'-'+str(random.randint(1000,9999))+'-'+image_name_suffix+'.png') print(f"Saving image {i+1} / {images.shape[0]} to: {image_path}") @@ -575,7 +584,7 @@ def append(self, item): def add_arguments(parser): # Stable Diffusion configuration - parser.add_argument('--version', type=str, default="1.5", choices=["1.4", "1.5", "dreamshaper-7", "2.0-base", "2.0", "2.1-base", "2.1", "xl-1.0", "xl-turbo"], help="Version of Stable Diffusion") + parser.add_argument('--version', type=str, default="1.5", choices=["1.4", "1.5", "dreamshaper-7", "2.0-base", "2.0", "2.1-base", "2.1", "xl-1.0", "xl-turbo", "svd-xt-1.1", "sd3", "cascade"], help="Version of Stable Diffusion") parser.add_argument('prompt', nargs = '*', help="Text prompt(s) to guide image generation") parser.add_argument('--negative-prompt', nargs = '*', default=[''], help="The negative prompt(s) to guide the image generation.") parser.add_argument('--batch-size', type=int, default=1, choices=[1, 2, 4], help="Batch size (repeat prompt)") @@ -598,7 +607,8 @@ def add_arguments(parser): # TensorRT engine build parser.add_argument('--engine-dir', default='engine', help="Output directory for TensorRT engines") parser.add_argument('--int8', action='store_true', help="Apply int8 quantization.") - parser.add_argument('--quantization-level', type=float, default=2.5, choices=[1.0, 2.0, 2.5, 3.0], help="int8/fp8 quantization level, 1: CNN, 2: CNN+FFN, 2.5: CNN+FFN+QKV, 3: CNN+FC") + parser.add_argument('--fp8', action='store_true', help="Apply fp8 quantization.") + parser.add_argument('--quantization-level', type=float, default=0.0, choices=[0.0, 1.0, 2.0, 2.5, 3.0, 4.0], help="int8/fp8 quantization level, 1: CNN, 2: CNN + FFN, 2.5: CNN + FFN + QKV, 3: CNN + Almost all Linear (Including FFN, QKV, Proj and others), 4: CNN + Almost all Linear + fMHA, 0: Default to 2.5 for int8 and 4.0 for fp8.") parser.add_argument('--build-static-batch', action='store_true', help="Build TensorRT engines with fixed batch size.") parser.add_argument('--build-dynamic-shape', action='store_true', help="Build TensorRT engines with dynamic image shapes.") parser.add_argument('--build-enable-refit', action='store_true', help="Enable Refit option in TensorRT engines during build.") @@ -628,8 +638,28 @@ def process_pipeline_args(args): if args.use_cuda_graph and (not args.build_static_batch or args.build_dynamic_shape): raise ValueError(f"Using CUDA graph requires static dimensions. Enable `--build-static-batch` and do not specify `--build-dynamic-shape`") - if args.int8 and not args.version.startswith('xl'): - raise ValueError(f"int8 quantization only supported for SDXL pipeline.") + if args.int8 and not any(args.version.startswith(prefix) for prefix in ['xl', '1.5', '2.1']): + raise ValueError(f"int8 quantization is only supported for SDXL, SD1.5 and SD2.1 pipelines.") + + if args.fp8 and not any(args.version.startswith(prefix) for prefix in ['xl', '1.5', '2.1']): + raise ValueError(f"fp8 quantization is only supported for SDXL, SD1.5 and SD2.1 pipelines.") + + if args.fp8 and args.int8: + raise ValueError(f"Cannot apply both int8 and fp8 quantization, please choose only one.") + + if args.fp8: + device_info = torch.cuda.get_device_properties(0) + version = device_info.major * 10 + device_info.minor + if version < 90: # if Ada or older + raise ValueError(f"Cannot apply FP8 quantization for GPU with compute capability {version / 10.0}. Only Hopper is supported.") + + if args.quantization_level == 0.0: + if args.fp8: + args.quantization_level = 4.0 + print("The default quantization level has been set to 4.0 for FP8.") + elif args.int8: + args.quantization_level = 2.5 + print("The default quantization level has been set to 2.5 for INT8.") if args.lora_scale: for lora_scale in (lora_scale for lora_scale in args.lora_scale if not 0 <= lora_scale <= 1): @@ -663,6 +693,7 @@ def process_pipeline_args(args): 'enable_refit': args.build_enable_refit, 'timing_cache': args.timing_cache, 'int8': args.int8, + 'fp8': args.fp8, 'quantization_level': args.quantization_level, } diff --git a/demo/Diffusion/utils_modelopt.py b/demo/Diffusion/utils_modelopt.py index b8735bfa..fbaaed97 100644 --- a/demo/Diffusion/utils_modelopt.py +++ b/demo/Diffusion/utils_modelopt.py @@ -17,12 +17,21 @@ import re import torch +import numpy as np +import onnx +import onnx_graphsurgeon as gs from modelopt.torch.quantization import utils as quant_utils from modelopt.torch.quantization.calib.max import MaxCalibrator -from diffusers.models.attention_processor import Attention +from diffusers.models.attention_processor import Attention, AttnProcessor from diffusers.models.lora import LoRACompatibleConv, LoRACompatibleLinear +USE_PEFT = True +try: + from peft.tuners.lora.layer import Conv2d as PEFTLoRAConv2d + from peft.tuners.lora.layer import Linear as PEFTLoRALinear +except ModuleNotFoundError: + USE_PEFT = False class PercentileCalibrator(MaxCalibrator): def __init__(self, num_bits=8, axis=None, unsigned=False, track_amax=False, **kwargs): @@ -94,12 +103,11 @@ def __repr__(self): def filter_func(name): pattern = re.compile( - r".*(time_emb_proj|time_embedding|conv_in|conv_out|conv_shortcut|add_embedding).*" + r".*(time_emb_proj|time_embedding|conv_in|conv_out|conv_shortcut|add_embedding|pos_embed|time_text_embed|context_embedder|norm_out|proj_out).*" ) return pattern.match(name) is not None - -def quantize_lvl(unet, quant_level=2.5): +def quantize_lvl(unet, quant_level=2.5, linear_only=False): """ We should disable the unwanted quantizer when exporting the onnx Because in the current modelopt setting, it will load the quantizer amax for all the layers even @@ -107,8 +115,12 @@ def quantize_lvl(unet, quant_level=2.5): """ for name, module in unet.named_modules(): if isinstance(module, (torch.nn.Conv2d, LoRACompatibleConv)): - module.input_quantizer.enable() - module.weight_quantizer.enable() + if linear_only: + module.input_quantizer.disable() + module.weight_quantizer.disable() + else: + module.input_quantizer.enable() + module.weight_quantizer.enable() elif isinstance(module, (torch.nn.Linear, LoRACompatibleLinear)): if ( (quant_level >= 2 and "ff.net" in name) @@ -121,18 +133,17 @@ def quantize_lvl(unet, quant_level=2.5): module.input_quantizer.disable() module.weight_quantizer.disable() elif isinstance(module, Attention): - if quant_level >= 4: + head_size = int(module.inner_dim / module.heads) + if quant_level >= 4 and head_size % 16 == 0: module.q_bmm_quantizer.enable() module.k_bmm_quantizer.enable() module.v_bmm_quantizer.enable() module.softmax_quantizer.enable() - module.bmm2_output_quantizer.enable() else: module.q_bmm_quantizer.disable() module.k_bmm_quantizer.disable() module.v_bmm_quantizer.disable() module.softmax_quantizer.disable() - module.bmm2_output_quantizer.disable() def get_int8_config( model, @@ -185,3 +196,279 @@ def get_int8_config( } return quant_config +SD_FP8_FP16_DEFAULT_CONFIG = { + "quant_cfg": { + "*weight_quantizer": {"num_bits": (4, 3), "axis": None, "trt_high_precision_dtype": "Half"}, + "*input_quantizer": {"num_bits": (4, 3), "axis": None, "trt_high_precision_dtype": "Half"}, + "*output_quantizer": {"enable": False}, + "*q_bmm_quantizer": {"num_bits": (4, 3), "axis": None, "trt_high_precision_dtype": "Half"}, + "*k_bmm_quantizer": {"num_bits": (4, 3), "axis": None, "trt_high_precision_dtype": "Half"}, + "*v_bmm_quantizer": {"num_bits": (4, 3), "axis": None, "trt_high_precision_dtype": "Half"}, + "*softmax_quantizer": { + "num_bits": (4, 3), + "axis": None, + "trt_high_precision_dtype": "Half", + }, + "default": {"enable": False}, + }, + "algorithm": "max", +} + +SD_FP8_FP32_DEFAULT_CONFIG = { + "quant_cfg": { + "*weight_quantizer": {"num_bits": (4, 3), "axis": None, "trt_high_precision_dtype": "Float"}, + "*input_quantizer": {"num_bits": (4, 3), "axis": None, "trt_high_precision_dtype": "Float"}, + "*output_quantizer": {"enable": False}, + "*q_bmm_quantizer": {"num_bits": (4, 3), "axis": None, "trt_high_precision_dtype": "Float"}, + "*k_bmm_quantizer": {"num_bits": (4, 3), "axis": None, "trt_high_precision_dtype": "Float"}, + "*v_bmm_quantizer": {"num_bits": (4, 3), "axis": None, "trt_high_precision_dtype": "Float"}, + "*softmax_quantizer": { + "num_bits": (4, 3), + "axis": None, + "trt_high_precision_dtype": "Float", + }, + "default": {"enable": False}, + }, + "algorithm": "max", +} + +def set_fmha(unet): + for name, module in unet.named_modules(): + if isinstance(module, Attention): + module.set_processor(AttnProcessor()) + +def check_lora(unet): + for name, module in unet.named_modules(): + if isinstance(module, (LoRACompatibleConv, LoRACompatibleLinear)): + assert ( + module.lora_layer is None + ), f"To quantize {name}, LoRA layer should be fused/merged. Please fuse the LoRA layer before quantization." + elif USE_PEFT and isinstance(module, (PEFTLoRAConv2d, PEFTLoRALinear)): + assert ( + module.merged + ), f"To quantize {name}, LoRA layer should be fused/merged. Please fuse the LoRA layer before quantization." + +def generate_fp8_scales(unet): + # temporary solution due to a known bug in torch.onnx._dynamo_export + for _, module in unet.named_modules(): + if isinstance(module, (torch.nn.Linear, torch.nn.Conv2d)) and ( + hasattr(module.input_quantizer, "_amax") and module.input_quantizer is not None + ): + module.input_quantizer._num_bits = 8 + module.weight_quantizer._num_bits = 8 + module.input_quantizer._amax = module.input_quantizer._amax * (127 / 448.0) + module.weight_quantizer._amax = module.weight_quantizer._amax * (127 / 448.0) + elif isinstance(module, Attention) and ( + hasattr(module.q_bmm_quantizer, "_amax") and module.q_bmm_quantizer is not None + ): + module.q_bmm_quantizer._num_bits = 8 + module.q_bmm_quantizer._amax = module.q_bmm_quantizer._amax * (127 / 448.0) + module.k_bmm_quantizer._num_bits = 8 + module.k_bmm_quantizer._amax = module.k_bmm_quantizer._amax * (127 / 448.0) + module.v_bmm_quantizer._num_bits = 8 + module.v_bmm_quantizer._amax = module.v_bmm_quantizer._amax * (127 / 448.0) + module.softmax_quantizer._num_bits = 8 + module.softmax_quantizer._amax = module.softmax_quantizer._amax * (127 / 448.0) + +def get_parent_nodes(node): + """ + Returns list of input producer nodes for the given node. + """ + parents = [] + for tensor in node.inputs: + # If the tensor is not a constant or graph input and has a producer, + # the producer is a parent of node `node` + if len(tensor.inputs) == 1: + parents.append(tensor.inputs[0]) + return parents + +def get_child_nodes(node): + """ + Returns list of output consumer nodes for the given node. + """ + children = [] + for tensor in node.outputs: + for consumer in tensor.outputs: # Traverse all consumer of the tensor + children.append(consumer) + return children + +def has_path_type(node, graph, path_type, is_forward, wild_card_types, path_nodes): + """ + Return pattern nodes for the given path_type. + """ + if not path_type: + # All types matched + return True + + # Check if current non-wild node type does not match the expected path type + node_type = node.op + is_match = node_type == path_type[0] + is_wild_match = node_type in wild_card_types + if not is_match and not is_wild_match: + return False + + if is_match: + path_nodes.append(node) + next_path_type = path_type[1:] + else: + next_path_type = path_type[:] + + if is_forward: + next_level_nodes = get_child_nodes(node) + else: + next_level_nodes = get_parent_nodes(node) + + # Check if any child (forward path) or parent (backward path) can match the remaining path types + for next_node in next_level_nodes: + sub_path = [] + if has_path_type(next_node, graph, next_path_type, is_forward, wild_card_types, sub_path): + path_nodes.extend(sub_path) + return True + + # Path type matches if there is no remaining types to match + return not next_path_type + +def insert_cast(graph, input_tensor, attrs): + """ + Create a cast layer using tensor as input. + """ + output_tensor = gs.Variable(name=f"{input_tensor.name}/Cast_output", dtype=attrs["to"]) + next_node_list = input_tensor.outputs.copy() + graph.layer( + op="Cast", + name=f"{input_tensor.name}/Cast", + inputs=[input_tensor], + outputs=[output_tensor], + attrs=attrs, + ) + + # use cast output as input to next node + for next_node in next_node_list: + for idx, next_input in enumerate(next_node.inputs): + if next_input.name == input_tensor.name: + next_node.inputs[idx] = output_tensor + +def convert_zp_fp8(onnx_graph): + """ + Convert Q/DQ zero datatype from INT8 to FP8. + """ + # Find all zero constant nodes + qdq_zero_nodes = set() + for node in onnx_graph.graph.node: + if node.op_type == "QuantizeLinear": + if len(node.input) > 2: + qdq_zero_nodes.add(node.input[2]) + + print(f"Found {len(qdq_zero_nodes)} QDQ pairs") + + # Convert zero point datatype from INT8 to FP8. + for node in onnx_graph.graph.node: + if node.output[0] in qdq_zero_nodes: + node.attribute[0].t.data_type = onnx.TensorProto.FLOAT8E4M3FN + + return onnx_graph + +def cast_resize_io(graph): + """ + After all activations and weights are converted to fp16, we will + add cast nodes to Resize nodes I/O because Resize need to be run in fp32. + """ + nodes = graph.nodes + up_block_resize_regex = r"\/up_blocks.[0-2]\/upsamplers.0\/Resize" + up_block_resize_nodes = [_n for _n in nodes if re.match(up_block_resize_regex, _n.name)] + + print(f"Found {len(up_block_resize_nodes)} Resize nodes to fix") + for resize_node in up_block_resize_nodes: + for input_tensor in resize_node.inputs: + if input_tensor.name: + insert_cast(graph, input_tensor=input_tensor, attrs={"to": np.float32}) + for output_tensor in resize_node.outputs: + if output_tensor.name: + insert_cast(graph, input_tensor=output_tensor, attrs={"to": np.float16}) + +def cast_fp8_mha_io(graph): + r""" + Insert three cast ops. + The first cast will be added before the input0 of MatMul to cast fp16 to fp32. + The second cast will be added before the input1 of MatMul to cast fp16 to fp32. + The third cast will be added after the output of MatMul to cast fp32 back to fp16. + Q Q + | | + DQ DQ + | | + Cast Cast + (fp16 to fp32) (fp16 to fp32) + \ / + \ / + \ / + MatMul + | + Cast (fp32 to fp16) + | + Q + | + DQ + The insertion of Cast ops in the FP8 MHA part actually forbids the MHAs to run + with FP16 accumulation because TensorRT only has FP32 accumulation kernels for FP8 MHAs. + """ + # Find FP8 MHA pattern. + # Match FP8 MHA: Q -> DQ -> BMM1 -> (Mul/Div) -> (Add) -> Softmax -> (Cast) -> Q -> DQ -> BMM2 -> Q -> DQ + softmax_bmm1_chain_type = ["Softmax", "MatMul", "DequantizeLinear", "QuantizeLinear"] + softmax_bmm2_chain_type = [ + "Softmax", + "QuantizeLinear", + "DequantizeLinear", + "MatMul", + "QuantizeLinear", + "DequantizeLinear", + ] + wild_card_types = [ + "Div", + "Mul", + "ConstMul", + "Add", + "BiasAdd", + "Reshape", + "Transpose", + "Flatten", + "Cast", + ] + + fp8_mha_partitions = [] + for node in graph.nodes: + if node.op == "Softmax": + fp8_mha_partition = [] + if has_path_type( + node, graph, softmax_bmm1_chain_type, False, wild_card_types, fp8_mha_partition + ) and has_path_type( + node, graph, softmax_bmm2_chain_type, True, wild_card_types, fp8_mha_partition + ): + if ( + len(fp8_mha_partition) == 10 + and fp8_mha_partition[1].op == "MatMul" + and fp8_mha_partition[7].op == "MatMul" + ): + fp8_mha_partitions.append(fp8_mha_partition) + + print(f"Found {len(fp8_mha_partitions)} FP8 attentions") + + # Insert Cast nodes for BMM1 and BMM2. + for fp8_mha_partition in fp8_mha_partitions: + bmm1_node = fp8_mha_partition[1] + insert_cast(graph, input_tensor=bmm1_node.inputs[0], attrs={"to": np.float32}) + insert_cast(graph, input_tensor=bmm1_node.inputs[1], attrs={"to": np.float32}) + insert_cast(graph, input_tensor=bmm1_node.outputs[0], attrs={"to": np.float16}) + + bmm2_node = fp8_mha_partition[7] + insert_cast(graph, input_tensor=bmm2_node.inputs[0], attrs={"to": np.float32}) + insert_cast(graph, input_tensor=bmm2_node.inputs[1], attrs={"to": np.float32}) + insert_cast(graph, input_tensor=bmm2_node.outputs[0], attrs={"to": np.float16}) + +def convert_fp16_io(graph): + """ + Convert graph I/O to FP16. + """ + for input_tensor in graph.inputs: + input_tensor.dtype = onnx.TensorProto.FLOAT16 + for output_tensor in graph.outputs: + output_tensor.dtype = onnx.TensorProto.FLOAT16 diff --git a/docker/rockylinux8.Dockerfile b/docker/rockylinux8.Dockerfile index 2ad1caf9..24cd4bce 100644 --- a/docker/rockylinux8.Dockerfile +++ b/docker/rockylinux8.Dockerfile @@ -15,7 +15,7 @@ # limitations under the License. # -ARG CUDA_VERSION=12.5.0 +ARG CUDA_VERSION=12.6.0 FROM nvidia/cuda:${CUDA_VERSION}-devel-rockylinux8 LABEL maintainer="NVIDIA CORPORATION" @@ -25,7 +25,7 @@ ENV NV_CUDNN_VERSION 8.9.6.50-1 ENV NV_CUDNN_PACKAGE libcudnn8-${NV_CUDNN_VERSION}.cuda12.2 ENV NV_CUDNN_PACKAGE_DEV libcudnn8-devel-${NV_CUDNN_VERSION}.cuda12.2 -ENV TRT_VERSION 10.3.0.26 +ENV TRT_VERSION 10.4.0.26 SHELL ["/bin/bash", "-c"] RUN dnf install -y \ @@ -62,15 +62,15 @@ RUN dnf install -y python38 python38-devel &&\ # Install TensorRT RUN if [ "${CUDA_VERSION:0:2}" = "11" ]; then \ - wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/tars/TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ - && tar -xf TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ - && cp -a TensorRT-10.3.0.26/lib/*.so* /usr/lib64 \ - && pip install TensorRT-10.3.0.26/python/tensorrt-10.3.0-cp38-none-linux_x86_64.whl ;\ + wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.4.0/tars/TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ + && tar -xf TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ + && cp -a TensorRT-10.4.0.26/lib/*.so* /usr/lib64 \ + && pip install TensorRT-10.4.0.26/python/tensorrt-10.4.0-cp38-none-linux_x86_64.whl ;\ elif [ "${CUDA_VERSION:0:2}" = "12" ]; then \ - wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/tars/TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-12.5.tar.gz \ - && tar -xf TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-12.5.tar.gz \ - && cp -a TensorRT-10.3.0.26/lib/*.so* /usr/lib64 \ - && pip install TensorRT-10.3.0.26/python/tensorrt-10.3.0-cp38-none-linux_x86_64.whl ;\ + wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.4.0/tars/TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-12.6.tar.gz \ + && tar -xf TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-12.6.tar.gz \ + && cp -a TensorRT-10.4.0.26/lib/*.so* /usr/lib64 \ + && pip install TensorRT-10.4.0.26/python/tensorrt-10.4.0-cp38-none-linux_x86_64.whl ;\ else \ echo "Invalid CUDA_VERSION"; \ exit 1; \ @@ -97,7 +97,7 @@ RUN ln -s /usr/bin/python3 /usr/bin/python # Set environment and working directory ENV TRT_LIBPATH /usr/lib64 ENV TRT_OSSPATH /workspace/TensorRT -ENV PATH="${PATH}:/usr/local/bin/ngc-cli" +ENV PATH="/workspace/TensorRT/build/out:${PATH}:/usr/local/bin/ngc-cli" ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${TRT_OSSPATH}/build/out:${TRT_LIBPATH}" WORKDIR /workspace diff --git a/docker/rockylinux9.Dockerfile b/docker/rockylinux9.Dockerfile index 8741977b..95a87cce 100644 --- a/docker/rockylinux9.Dockerfile +++ b/docker/rockylinux9.Dockerfile @@ -15,7 +15,7 @@ # limitations under the License. # -ARG CUDA_VERSION=12.5.0 +ARG CUDA_VERSION=12.6.0 FROM nvidia/cuda:${CUDA_VERSION}-devel-rockylinux9 LABEL maintainer="NVIDIA CORPORATION" @@ -25,7 +25,7 @@ ENV NV_CUDNN_VERSION 8.9.6.50-1 ENV NV_CUDNN_PACKAGE libcudnn8-${NV_CUDNN_VERSION}.cuda12.2 ENV NV_CUDNN_PACKAGE_DEV libcudnn8-devel-${NV_CUDNN_VERSION}.cuda12.2 -ENV TRT_VERSION 10.3.0.26 +ENV TRT_VERSION 10.4.0.26 SHELL ["/bin/bash", "-c"] RUN dnf install -y \ @@ -67,15 +67,15 @@ RUN dnf -y install \ # Install TensorRT RUN if [ "${CUDA_VERSION:0:2}" = "11" ]; then \ - wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/tars/TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ - && tar -xf TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ - && cp -a TensorRT-10.3.0.26/lib/*.so* /usr/lib64 \ - && pip install TensorRT-10.3.0.26/python/tensorrt-10.3.0-cp39-none-linux_x86_64.whl ;\ + wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.4.0/tars/TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ + && tar -xf TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ + && cp -a TensorRT-10.4.0.26/lib/*.so* /usr/lib64 \ + && pip install TensorRT-10.4.0.26/python/tensorrt-10.4.0-cp39-none-linux_x86_64.whl ;\ elif [ "${CUDA_VERSION:0:2}" = "12" ]; then \ - wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/tars/TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-12.5.tar.gz \ - && tar -xf TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-12.5.tar.gz \ - && cp -a TensorRT-10.3.0.26/lib/*.so* /usr/lib64 \ - && pip install TensorRT-10.3.0.26/python/tensorrt-10.3.0-cp39-none-linux_x86_64.whl ;\ + wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.4.0/tars/TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-12.6.tar.gz \ + && tar -xf TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-12.6.tar.gz \ + && cp -a TensorRT-10.4.0.26/lib/*.so* /usr/lib64 \ + && pip install TensorRT-10.4.0.26/python/tensorrt-10.4.0-cp39-none-linux_x86_64.whl ;\ else \ echo "Invalid CUDA_VERSION"; \ exit 1; \ @@ -96,7 +96,7 @@ RUN ln -s /usr/bin/python3 /usr/bin/python # Set environment and working directory ENV TRT_LIBPATH /usr/lib64 ENV TRT_OSSPATH /workspace/TensorRT -ENV PATH="${PATH}:/usr/local/bin/ngc-cli" +ENV PATH="/workspace/TensorRT/build/out:${PATH}:/usr/local/bin/ngc-cli" ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${TRT_OSSPATH}/build/out:${TRT_LIBPATH}" WORKDIR /workspace diff --git a/docker/ubuntu-20.04.Dockerfile b/docker/ubuntu-20.04.Dockerfile index b481d945..88e504f4 100644 --- a/docker/ubuntu-20.04.Dockerfile +++ b/docker/ubuntu-20.04.Dockerfile @@ -15,7 +15,7 @@ # limitations under the License. # -ARG CUDA_VERSION=12.5.0 +ARG CUDA_VERSION=12.6.0 FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu20.04 LABEL maintainer="NVIDIA CORPORATION" @@ -28,7 +28,7 @@ ENV CUDA_VERSION_MAJOR_MINOR=12.2 ENV NV_CUDNN_PACKAGE "libcudnn8=$NV_CUDNN_VERSION-1+cuda${CUDA_VERSION_MAJOR_MINOR}" ENV NV_CUDNN_PACKAGE_DEV "libcudnn8-dev=$NV_CUDNN_VERSION-1+cuda${CUDA_VERSION_MAJOR_MINOR}" -ENV TRT_VERSION 10.3.0.26 +ENV TRT_VERSION 10.4.0.26 SHELL ["/bin/bash", "-c"] RUN apt-get update && apt-get install -y --no-install-recommends \ @@ -84,15 +84,15 @@ RUN apt-get install -y --no-install-recommends \ # Install TensorRT RUN if [ "${CUDA_VERSION:0:2}" = "11" ]; then \ - wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/tars/TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ - && tar -xf TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ - && cp -a TensorRT-10.3.0.26/lib/*.so* /usr/lib/x86_64-linux-gnu \ - && pip install TensorRT-10.3.0.26/python/tensorrt-10.3.0-cp38-none-linux_x86_64.whl ;\ + wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.4.0/tars/TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ + && tar -xf TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ + && cp -a TensorRT-10.4.0.26/lib/*.so* /usr/lib/x86_64-linux-gnu \ + && pip install TensorRT-10.4.0.26/python/tensorrt-10.4.0-cp38-none-linux_x86_64.whl ;\ elif [ "${CUDA_VERSION:0:2}" = "12" ]; then \ - wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/tars/TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-12.5.tar.gz \ - && tar -xf TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-12.5.tar.gz \ - && cp -a TensorRT-10.3.0.26/lib/*.so* /usr/lib/x86_64-linux-gnu \ - && pip install TensorRT-10.3.0.26/python/tensorrt-10.3.0-cp38-none-linux_x86_64.whl ;\ + wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.4.0/tars/TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-12.6.tar.gz \ + && tar -xf TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-12.6.tar.gz \ + && cp -a TensorRT-10.4.0.26/lib/*.so* /usr/lib/x86_64-linux-gnu \ + && pip install TensorRT-10.4.0.26/python/tensorrt-10.4.0-cp38-none-linux_x86_64.whl ;\ else \ echo "Invalid CUDA_VERSION"; \ exit 1; \ @@ -120,7 +120,7 @@ RUN cd /usr/local/bin && wget https://ngc.nvidia.com/downloads/ngccli_cat_linux. # Set environment and working directory ENV TRT_LIBPATH /usr/lib/x86_64-linux-gnu ENV TRT_OSSPATH /workspace/TensorRT -ENV PATH="${PATH}:/usr/local/bin/ngc-cli" +ENV PATH="/workspace/TensorRT/build/out:${PATH}:/usr/local/bin/ngc-cli" ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${TRT_OSSPATH}/build/out:${TRT_LIBPATH}" WORKDIR /workspace diff --git a/docker/ubuntu-22.04-aarch64.Dockerfile b/docker/ubuntu-22.04-aarch64.Dockerfile index e6991c4c..47836ddf 100644 --- a/docker/ubuntu-22.04-aarch64.Dockerfile +++ b/docker/ubuntu-22.04-aarch64.Dockerfile @@ -15,12 +15,12 @@ # limitations under the License. # -ARG CUDA_VERSION=12.5.0 +ARG CUDA_VERSION=12.6.0 # Multi-arch container support available in non-cudnn containers. FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu22.04 -ENV TRT_VERSION 10.3.0.26 +ENV TRT_VERSION 10.4.0.26 SHELL ["/bin/bash", "-c"] # Setup user account @@ -71,7 +71,7 @@ RUN apt-get install -y --no-install-recommends \ # Install TensorRT. This will also pull in CUDNN RUN ver="${CUDA_VERSION%.*}" &&\ if [ "${ver%.*}" = "12" ] ; then \ - ver="12.5"; \ + ver="12.6"; \ fi &&\ v="${TRT_VERSION}-1+cuda${ver}" &&\ apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/sbsa/3bf863cc.pub &&\ @@ -104,7 +104,7 @@ RUN cd /usr/local/bin && wget https://ngc.nvidia.com/downloads/ngccli_arm64.zip # Set environment and working directory ENV TRT_LIBPATH /usr/lib/aarch64-linux-gnu/ ENV TRT_OSSPATH /workspace/TensorRT -ENV PATH="${PATH}:/usr/local/bin/ngc-cli" +ENV PATH="/workspace/TensorRT/build/out:${PATH}:/usr/local/bin/ngc-cli" ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${TRT_OSSPATH}/build/out:${TRT_LIBPATH}" WORKDIR /workspace diff --git a/docker/ubuntu-22.04.Dockerfile b/docker/ubuntu-22.04.Dockerfile index 43f872a6..c218693d 100644 --- a/docker/ubuntu-22.04.Dockerfile +++ b/docker/ubuntu-22.04.Dockerfile @@ -15,7 +15,7 @@ # limitations under the License. # -ARG CUDA_VERSION=12.5.0 +ARG CUDA_VERSION=12.6.0 FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu22.04 LABEL maintainer="NVIDIA CORPORATION" @@ -28,7 +28,7 @@ ENV CUDA_VERSION_MAJOR_MINOR=12.2 ENV NV_CUDNN_PACKAGE "libcudnn8=$NV_CUDNN_VERSION-1+cuda${CUDA_VERSION_MAJOR_MINOR}" ENV NV_CUDNN_PACKAGE_DEV "libcudnn8-dev=$NV_CUDNN_VERSION-1+cuda${CUDA_VERSION_MAJOR_MINOR}" -ENV TRT_VERSION 10.3.0.26 +ENV TRT_VERSION 10.4.0.26 SHELL ["/bin/bash", "-c"] RUN apt-get update && apt-get install -y --no-install-recommends \ @@ -84,15 +84,15 @@ RUN apt-get install -y --no-install-recommends \ # Install TensorRT RUN if [ "${CUDA_VERSION:0:2}" = "11" ]; then \ - wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/tars/TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ - && tar -xf TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ - && cp -a TensorRT-10.3.0.26/lib/*.so* /usr/lib/x86_64-linux-gnu \ - && pip install TensorRT-10.3.0.26/python/tensorrt-10.3.0-cp310-none-linux_x86_64.whl ;\ + wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.4.0/tars/TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ + && tar -xf TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-11.8.tar.gz \ + && cp -a TensorRT-10.4.0.26/lib/*.so* /usr/lib/x86_64-linux-gnu \ + && pip install TensorRT-10.4.0.26/python/tensorrt-10.4.0-cp310-none-linux_x86_64.whl ;\ elif [ "${CUDA_VERSION:0:2}" = "12" ]; then \ - wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/tars/TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-12.5.tar.gz \ - && tar -xf TensorRT-10.3.0.26.Linux.x86_64-gnu.cuda-12.5.tar.gz \ - && cp -a TensorRT-10.3.0.26/lib/*.so* /usr/lib/x86_64-linux-gnu \ - && pip install TensorRT-10.3.0.26/python/tensorrt-10.3.0-cp310-none-linux_x86_64.whl ;\ + wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.4.0/tars/TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-12.6.tar.gz \ + && tar -xf TensorRT-10.4.0.26.Linux.x86_64-gnu.cuda-12.6.tar.gz \ + && cp -a TensorRT-10.4.0.26/lib/*.so* /usr/lib/x86_64-linux-gnu \ + && pip install TensorRT-10.4.0.26/python/tensorrt-10.4.0-cp310-none-linux_x86_64.whl ;\ else \ echo "Invalid CUDA_VERSION"; \ exit 1; \ @@ -120,7 +120,7 @@ RUN cd /usr/local/bin && wget https://ngc.nvidia.com/downloads/ngccli_cat_linux. # Set environment and working directory ENV TRT_LIBPATH /usr/lib/x86_64-linux-gnu ENV TRT_OSSPATH /workspace/TensorRT -ENV PATH="${PATH}:/usr/local/bin/ngc-cli" +ENV PATH="/workspace/TensorRT/build/out:${PATH}:/usr/local/bin/ngc-cli" ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${TRT_OSSPATH}/build/out:${TRT_LIBPATH}" WORKDIR /workspace diff --git a/docker/ubuntu-cross-aarch64.Dockerfile b/docker/ubuntu-cross-aarch64.Dockerfile index 6a03c874..7a105f69 100644 --- a/docker/ubuntu-cross-aarch64.Dockerfile +++ b/docker/ubuntu-cross-aarch64.Dockerfile @@ -15,13 +15,13 @@ # limitations under the License. # -ARG CUDA_VERSION=12.5.0 +ARG CUDA_VERSION=12.6.0 ARG OS_VERSION=22.04 FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${OS_VERSION} LABEL maintainer="NVIDIA CORPORATION" -ENV TRT_VERSION 10.3.0.26 +ENV TRT_VERSION 10.4.0.26 ENV DEBIAN_FRONTEND=noninteractive ARG uid=1000 diff --git a/include/NvInfer.h b/include/NvInfer.h index fc8d4ec8..18e10be4 100644 --- a/include/NvInfer.h +++ b/include/NvInfer.h @@ -2536,7 +2536,6 @@ constexpr inline int32_t EnumMax() noexcept //! * GatherMode::kDEFAULT: s = q + r - 1 - nbElementwiseDims //! * GatherMode::kND: s = q + r - indices.d[q-1] - 1 - nbElementwiseDims //! * GatherMode::kELEMENT: s = q = r. -//! The output can be a shape tensor only if the mode is GatherMode::kDEFAULT. //! //! The dimensions of the output likewise depends on the mode: //! @@ -3037,7 +3036,7 @@ struct Permutation //! This layer shuffles data by applying in sequence: a transpose operation, a reshape operation //! and a second transpose operation. The dimension types of the output are those of the reshape dimension. //! -//! The layer has an optional second input. If present, it must be a 1D Int32 shape tensor, +//! The layer has an optional second input. If present, it must be a 1D tensor of type Int32 or Int64, //! and the reshape dimensions are taken from it. //! //! \warning Do not inherit from this class, as doing so will break forward-compatibility of the API and ABI. @@ -3126,7 +3125,7 @@ class IShuffleLayer : public ILayer //! The indices in the dynamic case are as follows: //! //! - 0: Data or Shape tensor to be shuffled. - //! - 1: The dimensions for the reshape operation, as a 1D Int32 shape tensor. + //! - 1: The dimensions for the reshape operation, as a 1D tensor of type Int32 or Int64. //! //! If this function is called with the value 1, then the function getNbInputs() changes //! from returning 1 to 2. @@ -3247,7 +3246,7 @@ constexpr inline int32_t EnumMax() noexcept //! //! The slice layer selects for each dimension a start location from within the input tensor, and //! copies elements to the output tensor using the specified stride across the input tensor. -//! Start, size, and stride tensors must be 1D Int32 shape tensors if not specified via Dims. +//! Start, size, and stride tensors must be 1D tensors of type Int32 or Int64 if not specified via Dims. //! //! An example of using slice on a tensor: //! input = {{0, 2, 4}, {1, 3, 5}} @@ -3285,10 +3284,12 @@ constexpr inline int32_t EnumMax() noexcept //! The following constraints must be satisfied to execute this layer on DLA: //! * start, size, and stride are build time constants, either as static Dims or as constant input tensors. //! * axes, if provided, are build time constants, either as static Dims or as a constant input tensor. -//! * sampleMode is kSTRICT_BOUNDS. +//! * sampleMode is kDEFAULT, kWRAP, or kFILL. //! * Strides are 1 for all dimensions. -//! * Slicing is not performed on the first dimension -//! * The input tensor has four dimensions +//! * Slicing is not performed on the first dimension. +//! * The input tensor has four dimensions. +//! * For kFILL sliceMode, the fill value input is a scalar output of an IConstantLayer with value 0 that is not +//! consumed by any other layer. //! //! \warning Do not inherit from this class, as doing so will break forward-compatibility of the API and ABI. //! @@ -3412,15 +3413,15 @@ class ISliceLayer : public ILayer //! The indices are as follows: //! //! - 0: Tensor to be sliced. - //! - 1: The start tensor to begin slicing, as a 1D Int32 shape tensor. - //! - 2: The size tensor of the resulting slice, as a 1D Int32 shape tensor. - //! - 3: The stride of the slicing operation, as a 1D Int32 shape tensor. + //! - 1: The start tensor to begin slicing, as a 1D tensor of type Int32 or Int64. + //! - 2: The size tensor of the resulting slice, as a 1D tensor of type Int32 or Int64. + //! - 3: The stride of the slicing operation, as a 1D tensor of type Int32 or Int64. //! - 4: Value for the kFILL slice mode. The fill value data type should either be the same //! or be implicitly convertible to the input data type. //! Implicit data type conversion is supported among kFLOAT, kHALF, kINT8, and kFP8 data types. //! This input is disallowed for other modes. //! - 5: The axes tensor indicating the corresponding axes that start, size, and stride - //! should apply to, as a 1D Int32 shape tensor. Negative values for axes + //! should apply to, as a 1D tensor or type Int32 or Int64. Negative values for axes //! indicate indexing from the back of the input tensor. Values must be unique and be //! within the interval of [-rank(input), rank(input)-1]. //! @@ -4208,7 +4209,7 @@ class IResizeLayer : public ILayer //! The indices in the dynamic case are as follows: //! //! - 0: Execution tensor to be resized. - //! - 1: The output dimensions, as a 1D Int32 shape tensor. + //! - 1: The output dimensions, as a 1D tensor of type Int32 or Int64. //! //! If this function is called with the value 1, then the function getNbInputs() changes //! from returning 1 to 2. @@ -4467,7 +4468,9 @@ class IConditionLayer : public IIfConditionalBoundaryLayer //! //! \brief This layer represents an output of an IIfConditional. //! -//! An IIfConditionalOutputLayer has exactly one output. +//! An IIfConditionalOutputLayer has two inputs and one output. +//! +//! \see IIfConditional::addOutput //! class IIfConditionalOutputLayer : public IIfConditionalBoundaryLayer { @@ -4539,6 +4542,8 @@ class IIfConditional : public INoCopy //! Each output layer of an IIfConditional represents a single output of either the true-subgraph or the //! false-subgraph of an IIfConditional, depending on which subgraph was executed. //! + //! The shapes of the two tensors must be equal unless the condition is a build-time constant. + //! //! \see IIfConditionalOutputLayer //! IIfConditionalOutputLayer* addOutput(ITensor& trueSubgraphOutput, ITensor& falseSubgraphOutput) noexcept @@ -4693,7 +4698,7 @@ class ILoopOutputLayer : public ILoopBoundaryLayer //! The indices in the kCONCATENATE or kREVERSE cases are as follows: //! //! - 0: Contribution to the output tensor. The contribution must come from inside the loop. - //! - 1: The concatenation length scalar value, must come from outside the loop, as a 0D Int32 or Int64 shape tensor. + //! - 1: The concatenation length scalar value, must come from outside the loop, as a 0D shape tensor of type Int32 or Int64. //! //! If this function is called with the value 1, then the function getNbInputs() changes //! from returning 1 to 2. @@ -5775,8 +5780,8 @@ class IScatterLayer : public ILayer //! Output, and an axis attribute. //! * Indices is an Int32 tensor that determines which locations in Output to set as on_value. //! * Values is a two-element (rank=1) tensor that consists of [off_value, on_value] -//! * Depth is an Int32 shape tensor of rank 0, which contains the depth (number of classes) of the one-hot encoding. -//! The depth tensor must be a build-time constant, and its value should be positive. +//! * Depth is an 0D tensor of type Int32 or Int64, which contains the depth (number of classes) of the one-hot encoding. +//! The depth tensor must be a positive build-time constant. //! * Output is a tensor with rank = rank(indices)+1, where the added dimension contains the one-hot encoding. //! The data types of Output is equal to the Values data type. //! * Axis is a scalar specifying to which dimension of the output one-hot encoding is added. @@ -7046,7 +7051,7 @@ class INetworkDefinition : public INoCopy //! //! \see IParametricReLULayer //! - //! \warning Int32 tensors are not valid input tensors. + //! \warning Tensors of type Int32, Int64, Bool, or UInt8 are not allowed as inputs. //! //! \return The new parametric ReLU layer, or nullptr if it could not be created. //! @@ -9585,6 +9590,30 @@ class IBuilderConfig : public INoCopy return mImpl->getRuntimePlatform(); } + //! + //! \brief Set the maximum number of tactics to time when there is a choice of tactics. + //! + //! This function controls the number of tactics timed when there are multiple tactics to choose from. + //! + //! \see getMaxNbTactics() + //! + void setMaxNbTactics(int32_t maxNbTactics) noexcept + { + mImpl->setMaxNbTactics(maxNbTactics); + } + + //! + //! \brief Query the maximum number of tactics timed when there is a choice. + //! + //! By default the value is -1, indicating TensorRT can determine the number of tactics based on its own heuristic. + //! + //! \see setMaxNbTactics() + //! + int32_t getMaxNbTactics() const noexcept + { + return mImpl->getMaxNbTactics(); + } + protected: apiv::VBuilderConfig* mImpl; }; diff --git a/include/NvInferConsistency.h b/include/NvInferConsistency.h index 32bca28b..0d1b8b40 100644 --- a/include/NvInferConsistency.h +++ b/include/NvInferConsistency.h @@ -41,7 +41,9 @@ namespace consistency //! //! \warning Do not inherit from this class, as doing so will break forward-compatibility of the API and ABI. //! -class IConsistencyChecker +//! \deprecated Deprecated in TensorRT 10.4. +//! +class TRT_DEPRECATED IConsistencyChecker { public: //! @@ -80,7 +82,9 @@ class IConsistencyChecker //! //! Supported IPlugin inferfaces are limited to IPluginV2IOExt only. //! -class IPluginChecker : public IPluginCreator +//! \deprecated Deprecated in TensorRT 10.4. +//! +class TRT_DEPRECATED IPluginChecker : public IPluginCreator { public: //! @@ -114,6 +118,9 @@ class IPluginChecker : public IPluginCreator } // namespace nvinfer1 +//! +//! \deprecated Deprecated in TensorRT 10.4. +//! extern "C" TENSORRTAPI void* createConsistencyChecker_INTERNAL(void* logger, void const* blob, size_t size, int32_t version); //!< Internal C entry point for creating IConsistencyChecker. @@ -132,7 +139,10 @@ namespace consistency namespace // anonymous { -inline IConsistencyChecker* createConsistencyChecker(ILogger& logger, void const* blob, size_t size) +//! +//! \deprecated Deprecated in TensorRT 10.4. +//! +TRT_DEPRECATED inline IConsistencyChecker* createConsistencyChecker(ILogger& logger, void const* blob, size_t size) { return static_cast( createConsistencyChecker_INTERNAL(&logger, blob, size, NV_TENSORRT_VERSION)); diff --git a/include/NvInferConsistencyImpl.h b/include/NvInferConsistencyImpl.h index b0626a26..0b4e8dd3 100644 --- a/include/NvInferConsistencyImpl.h +++ b/include/NvInferConsistencyImpl.h @@ -32,7 +32,10 @@ namespace nvinfer1 namespace apiv { -class VConsistencyChecker +//! +//! \deprecated Deprecated in TensorRT 10.4. +//! +class TRT_DEPRECATED VConsistencyChecker { public: virtual ~VConsistencyChecker() noexcept = default; diff --git a/include/NvInferImpl.h b/include/NvInferImpl.h index d202c3d1..2c7df74a 100644 --- a/include/NvInferImpl.h +++ b/include/NvInferImpl.h @@ -1170,6 +1170,8 @@ class VBuilderConfig : public VRoot virtual IProgressMonitor* getProgressMonitor() const noexcept = 0; virtual void setRuntimePlatform(RuntimePlatform runtimePlatform) noexcept = 0; virtual RuntimePlatform getRuntimePlatform() const noexcept = 0; + virtual void setMaxNbTactics(int32_t maxTactics) noexcept = 0; + virtual int32_t getMaxNbTactics() const noexcept = 0; }; class VSerializationConfig : public VRoot diff --git a/include/NvInferVersion.h b/include/NvInferVersion.h index 11b9cc6d..477c5719 100644 --- a/include/NvInferVersion.h +++ b/include/NvInferVersion.h @@ -24,9 +24,9 @@ #define NV_INFER_VERSION_H #define NV_TENSORRT_MAJOR 10 //!< TensorRT major version. -#define NV_TENSORRT_MINOR 3 //!< TensorRT minor version. -#define NV_TENSORRT_PATCH 0 //!< TensorRT patch version. -#define NV_TENSORRT_BUILD 26 //!< TensorRT build number. +#define NV_TENSORRT_MINOR 4 //!< TensorRT minor version. +#define NV_TENSORRT_PATCH 0 //!< TensorRT patch version. +#define NV_TENSORRT_BUILD 26 //!< TensorRT build number. #define NV_TENSORRT_LWS_MAJOR 0 //!< TensorRT LWS major version. #define NV_TENSORRT_LWS_MINOR 0 //!< TensorRT LWS minor version. diff --git a/parsers/onnx b/parsers/onnx index 62bdde2a..3775e499 160000 --- a/parsers/onnx +++ b/parsers/onnx @@ -1 +1 @@ -Subproject commit 62bdde2a04fcd53c2409cb895ee18db445b7e755 +Subproject commit 3775e499322eee17c837e27bff6d07af4261767a diff --git a/plugin/CMakeLists.txt b/plugin/CMakeLists.txt index 112d45f7..32ec4ed5 100644 --- a/plugin/CMakeLists.txt +++ b/plugin/CMakeLists.txt @@ -127,7 +127,7 @@ if (CUDA_VERSION VERSION_LESS 11.0) endif() set_target_properties(${SHARED_TARGET} PROPERTIES - CXX_STANDARD "14" + CXX_STANDARD "17" CXX_STANDARD_REQUIRED "YES" CXX_EXTENSIONS "NO" ARCHIVE_OUTPUT_DIRECTORY "${TRT_OUT_DIR}" @@ -173,7 +173,7 @@ target_include_directories(${STATIC_TARGET} ) set_target_properties(${STATIC_TARGET} PROPERTIES - CXX_STANDARD "14" + CXX_STANDARD "17" CXX_STANDARD_REQUIRED "YES" CXX_EXTENSIONS "NO" ARCHIVE_OUTPUT_DIRECTORY "${TRT_OUT_DIR}" @@ -206,7 +206,7 @@ target_include_directories(${VFC_SHARED_TARGET} ) set_target_properties(${VFC_SHARED_TARGET} PROPERTIES - CXX_STANDARD "14" + CXX_STANDARD "17" CXX_STANDARD_REQUIRED "YES" CXX_EXTENSIONS "NO" ARCHIVE_OUTPUT_DIRECTORY "${TRT_OUT_DIR}" diff --git a/plugin/README.md b/plugin/README.md index 0416ecc0..1a826743 100644 --- a/plugin/README.md +++ b/plugin/README.md @@ -17,7 +17,8 @@ | [disentangledAttentionPlugin](disentangledAttentionPlugin) | DisentangledAttention_TRT | 1 | | [efficientNMSPlugin](efficientNMSPlugin) | EfficientNMS_TRT | 1 | | [efficientNMSONNXPlugin](efficientNMSPlugin) [DEPRECATED] | EfficientNMS_ONNX_TRT | 1 | -| [embLayerNormPlugin](embLayerNormPlugin) | CustomEmbLayerNormPluginDynamic | 1, 2 | +| [embLayerNormPlugin](embLayerNormPlugin) [DEPRECATED]| CustomEmbLayerNormPluginDynamic | 1, 2, 3 | +| [embLayerNormPlugin](embLayerNormPlugin) | CustomEmbLayerNormPluginDynamic | 4, 5 | | [fcPlugin](fcPlugin) | CustomFCPluginDynamic | 1 | | [flattenConcat](flattenConcat) | FlattenConcat_TRT | 1 | | [geluPlugin](geluPlugin) [DEPRECATED] | CustomGeluPluginDynamic | 1 | @@ -50,7 +51,8 @@ | [scatterElementsPlugin](scatterElementsPlugin) [DEPRECATED] | ScatterElements | 1 | | [scatterElementsPlugin](scatterElementsPlugin) | ScatterElements | 2 | | [scatterPlugin](scatterPlugin) | ScatterND | 1 | -| [skipLayerNormPlugin](skipLayerNormPlugin) | CustomSkipLayerNormPluginDynamic | 1, 2, 3 | +| [skipLayerNormPlugin](skipLayerNormPlugin) [DEPRECATED] | CustomSkipLayerNormPluginDynamic | 1, 2, 3, 4 | +| [skipLayerNormPlugin](skipLayerNormPlugin) | CustomSkipLayerNormPluginDynamic | 5, 6, 7, 8 | | [specialSlicePlugin](specialSlicePlugin) [DEPRECATED] | SpecialSlice_TRT | 1 | | [splitPlugin](splitPlugin) [DEPRECATED] | Split | 1 | | [voxelGeneratorPlugin](voxelGeneratorPlugin) | VoxelGeneratorPlugin | 1 | diff --git a/plugin/bertQKVToContextPlugin/qkvToContext.cu b/plugin/bertQKVToContextPlugin/qkvToContext.cu index cd5c69e7..2b89d428 100644 --- a/plugin/bertQKVToContextPlugin/qkvToContext.cu +++ b/plugin/bertQKVToContextPlugin/qkvToContext.cu @@ -630,9 +630,9 @@ static inline void set_alpha(uint32_t& alpha, float norm, Data_type dtype) class FusedMHARunnerFP16::mhaImpl { public: - mhaImpl(FusedMHARunnerFP16* interface) - : interface(interface) - , sm(interface->mSm) + mhaImpl(FusedMHARunnerFP16* mhaInterface) + : mhaInterface(mhaInterface) + , sm(mhaInterface->mSm) , xmmaKernel(getXMMAKernels(DATA_TYPE_FP16, sm)) , xmmas_m(0U) , xmmas_n(0U) @@ -647,8 +647,8 @@ public: // check that we initialized assert(xmmas_m > 0); assert(threads_per_cta > 0); - assert(interface->mB > 0); - return interface->mB * xmmas_m * threads_per_cta * sizeof(uint32_t); + assert(mhaInterface->mB > 0); + return mhaInterface->mB * xmmas_m * threads_per_cta * sizeof(uint32_t); } void setup(int32_t S, int32_t B, int32_t headSize) @@ -679,7 +679,7 @@ public: // The number of xmmas in the N dimension. xmmas_n = (S + 16 * warps_n - 1) / (16 * warps_n); - const float scale_bmm1 = interface->mRsqrtHeadSize; + const float scale_bmm1 = mhaInterface->mRsqrtHeadSize; const float scale_softmax = 1.f; // Seems to be only required for int8 const float scale_bmm2 = 1.f; @@ -689,13 +689,13 @@ public: set_alpha(params.scale_bmm2, scale_bmm2, scale_type); params.b = B; - params.h = interface->mNumHeads; + params.h = mhaInterface->mNumHeads; params.s = S; - params.d = interface->mHeadSize; + params.d = mhaInterface->mHeadSize; - params.qkv_stride_in_bytes = get_size_in_bytes(interface->mLdQKV, DATA_TYPE_FP16); + params.qkv_stride_in_bytes = get_size_in_bytes(mhaInterface->mLdQKV, DATA_TYPE_FP16); params.packed_mask_stride_in_bytes = xmmas_m * threads_per_cta * sizeof(uint32_t); - params.o_stride_in_bytes = get_size_in_bytes(interface->mLdOut, DATA_TYPE_FP16); + params.o_stride_in_bytes = get_size_in_bytes(mhaInterface->mLdOut, DATA_TYPE_FP16); } void run(const PluginTensorDesc& inputDesc, const PluginTensorDesc& outputDesc, const void* qkvPtr, @@ -718,7 +718,7 @@ public: } private: - FusedMHARunnerFP16* interface; + FusedMHARunnerFP16* mhaInterface; Fused_multihead_attention_params params; int sm; const FusedMultiHeadAttentionXMMAKernel* xmmaKernel; @@ -774,11 +774,11 @@ class FusedMHARunnerInt8::mhaImpl { public: - mhaImpl(FusedMHARunnerInt8* interface) - : interface(interface) - , sm(interface->mSm) + mhaImpl(FusedMHARunnerInt8* mhaInterface) + : mhaInterface(mhaInterface) + , sm(mhaInterface->mSm) , xmmaKernel(getXMMAKernels(DATA_TYPE_INT8, sm)) - , mDqProbs(interface->mDqProbs) + , mDqProbs(mhaInterface->mDqProbs) , xmmas_m(0U) , xmmas_n(0U) , threads_per_cta(1U) @@ -791,8 +791,8 @@ public: { assert(xmmas_m > 0); assert(threads_per_cta > 0); - assert(interface->mB > 0); - return interface->mB * xmmas_m * threads_per_cta * sizeof(uint32_t); + assert(mhaInterface->mB > 0); + return mhaInterface->mB * xmmas_m * threads_per_cta * sizeof(uint32_t); } void setup(int32_t S, int32_t B, int32_t headSize) @@ -823,13 +823,13 @@ public: params.b = B; - params.h = interface->mNumHeads; + params.h = mhaInterface->mNumHeads; params.s = S; - params.d = interface->mHeadSize; + params.d = mhaInterface->mHeadSize; - params.qkv_stride_in_bytes = get_size_in_bytes(interface->mLdQKV, DATA_TYPE_INT8); + params.qkv_stride_in_bytes = get_size_in_bytes(mhaInterface->mLdQKV, DATA_TYPE_INT8); params.packed_mask_stride_in_bytes = xmmas_m * threads_per_cta * sizeof(uint32_t); - params.o_stride_in_bytes = get_size_in_bytes(interface->mLdOut, DATA_TYPE_INT8); + params.o_stride_in_bytes = get_size_in_bytes(mhaInterface->mLdOut, DATA_TYPE_INT8); } void run(const PluginTensorDesc& inputDesc, const PluginTensorDesc& outputDesc, const void* qkvPtr, @@ -838,7 +838,7 @@ public: float scaleQkv = inputDesc.scale; float scaleCtx = outputDesc.scale; - float scaleBmm1 = scaleQkv * scaleQkv * interface->mRsqrtHeadSize; + float scaleBmm1 = scaleQkv * scaleQkv * mhaInterface->mRsqrtHeadSize; float scaleBmm2 = mDqProbs * scaleQkv / scaleCtx; float scaleSoftmax = 1.f / mDqProbs; @@ -866,7 +866,7 @@ public: private: float mDqProbs; - FusedMHARunnerInt8* interface; + FusedMHARunnerInt8* mhaInterface; Fused_multihead_attention_params params; int sm; const FusedMultiHeadAttentionXMMAKernel* xmmaKernel; @@ -920,9 +920,9 @@ bool FusedMHARunnerInt8::isValid(int32_t headSize, int32_t s) const class FusedMHARunnerFP16v2::mhaImpl { public: - mhaImpl(FusedMHARunnerFP16v2* interface) - : interface(interface) - , sm(interface->mSm) + mhaImpl(FusedMHARunnerFP16v2* mhaInterface) + : mhaInterface(mhaInterface) + , sm(mhaInterface->mSm) , xmmaKernel(getXMMAKernelsV2(DATA_TYPE_FP16, sm)) { assert((sm == kSM_72 || sm == kSM_75 || sm == kSM_80 || sm == kSM_86 || sm == kSM_87 || sm == kSM_89 || sm == kSM_90) @@ -937,8 +937,8 @@ public: // check that we initialized assert(xmmas_m > 0); assert(threads_per_cta > 0); - assert(interface->mB > 0); - return interface->mB * xmmas_m * threads_per_cta * sizeof(uint32_t); + assert(mhaInterface->mB > 0); + return mhaInterface->mB * xmmas_m * threads_per_cta * sizeof(uint32_t); } void setup(int32_t S, int32_t B, int32_t headSize) @@ -986,7 +986,7 @@ public: // The number of xmmas in the N dimension. xmmas_n = (S + 16 * warps_n - 1) / (16 * warps_n); - const float scale_bmm1 = interface->mRsqrtHeadSize; + const float scale_bmm1 = mhaInterface->mRsqrtHeadSize; const float scale_softmax = 1.f; // Seems to be only required for int8 const float scale_bmm2 = 1.f; @@ -996,16 +996,16 @@ public: set_alpha(params.scale_bmm2, scale_bmm2, scale_type); params.b = B; - params.h = interface->mNumHeads; + params.h = mhaInterface->mNumHeads; params.s = S; - params.d = interface->mHeadSize; + params.d = mhaInterface->mHeadSize; // mLdQKV = 3 * B * mNumHeads * mHeadSize; // mLdOut = B * mNumHeads * mHeadSize; - params.qkv_stride_in_bytes = 3 * interface->mNumHeads * interface->mHeadSize * sizeof(half); + params.qkv_stride_in_bytes = 3 * mhaInterface->mNumHeads * mhaInterface->mHeadSize * sizeof(half); params.packed_mask_stride_in_bytes = xmmas_m * threads_per_cta * sizeof(uint32_t); - params.o_stride_in_bytes = interface->mNumHeads * interface->mHeadSize * sizeof(half); + params.o_stride_in_bytes = mhaInterface->mNumHeads * mhaInterface->mHeadSize * sizeof(half); } void run(const PluginTensorDesc& inputDesc, const PluginTensorDesc& outputDesc, const void* qkvPtr, @@ -1030,7 +1030,7 @@ public: } private: - FusedMHARunnerFP16v2* interface; + FusedMHARunnerFP16v2* mhaInterface; Fused_multihead_attention_params_v2 params; int sm; const FusedMultiHeadAttentionXMMAKernelV2* xmmaKernel; @@ -1087,11 +1087,11 @@ class FusedMHARunnerInt8v2::mhaImpl { public: - mhaImpl(FusedMHARunnerInt8v2* interface) - : interface(interface) - , sm(interface->mSm) + mhaImpl(FusedMHARunnerInt8v2* mhaInterface) + : mhaInterface(mhaInterface) + , sm(mhaInterface->mSm) , xmmaKernel(getXMMAKernelsV2(DATA_TYPE_INT8, sm)) - , mDqProbs(interface->mDqProbs) + , mDqProbs(mhaInterface->mDqProbs) , xmmas_m(0U) , xmmas_n(0U) , threads_per_cta(1U) @@ -1107,8 +1107,8 @@ public: { assert(xmmas_m > 0); assert(threads_per_cta > 0); - assert(interface->mB > 0); - return interface->mB * xmmas_m * threads_per_cta * sizeof(uint32_t); + assert(mhaInterface->mB > 0); + return mhaInterface->mB * xmmas_m * threads_per_cta * sizeof(uint32_t); } void setup(int32_t S, int32_t B, int32_t headSize) @@ -1163,13 +1163,13 @@ public: xmmas_n = (S + 16 * warps_n - 1) / (16 * warps_n); params.b = B; - params.h = interface->mNumHeads; + params.h = mhaInterface->mNumHeads; params.s = S; - params.d = interface->mHeadSize; - params.use_int8_scale_max = interface->mUseInt8ScaleMax; + params.d = mhaInterface->mHeadSize; + params.use_int8_scale_max = mhaInterface->mUseInt8ScaleMax; params.packed_mask_stride_in_bytes = xmmas_m * threads_per_cta * sizeof(uint32_t); - params.qkv_stride_in_bytes = 3 * interface->mNumHeads * interface->mHeadSize * sizeof(int8_t); - params.o_stride_in_bytes = interface->mNumHeads * interface->mHeadSize * sizeof(int8_t); + params.qkv_stride_in_bytes = 3 * mhaInterface->mNumHeads * mhaInterface->mHeadSize * sizeof(int8_t); + params.o_stride_in_bytes = mhaInterface->mNumHeads * mhaInterface->mHeadSize * sizeof(int8_t); } void run(const PluginTensorDesc& inputDesc, const PluginTensorDesc& outputDesc, const void* qkvPtr, @@ -1178,7 +1178,7 @@ public: float scaleQkv = inputDesc.scale; float scaleCtx = outputDesc.scale; - float scaleBmm1 = scaleQkv * scaleQkv * interface->mRsqrtHeadSize; + float scaleBmm1 = scaleQkv * scaleQkv * mhaInterface->mRsqrtHeadSize; float scaleBmm2 = mDqProbs * scaleQkv / scaleCtx; float scaleSoftmax = 1.f / mDqProbs; @@ -1194,7 +1194,7 @@ public: // dummy input in V2/V3 because now we use cu_seqlens params.packed_mask_ptr = nullptr; - params.use_int8_scale_max = interface->mUseInt8ScaleMax; + params.use_int8_scale_max = mhaInterface->mUseInt8ScaleMax; params.o_ptr = output; @@ -1211,7 +1211,7 @@ public: private: float mDqProbs; - FusedMHARunnerInt8v2* interface; + FusedMHARunnerInt8v2* mhaInterface; Fused_multihead_attention_params_v2 params; int sm; const FusedMultiHeadAttentionXMMAKernelV2* xmmaKernel; diff --git a/plugin/common/common.cuh b/plugin/common/common.cuh index 4fff6d49..4a7620cd 100644 --- a/plugin/common/common.cuh +++ b/plugin/common/common.cuh @@ -24,18 +24,6 @@ #include #endif // CUDA_VERSION -#if CUDA_VERSION >= 12050 -#include -#undef _CCCL_FORCEINLINE - -#if defined(_CCCL_CUDA_COMPILER) -# define _CCCL_FORCEINLINE __forceinline__ -#else // ^^^ _CCCL_CUDA_COMPILER ^^^ / vvv !_CCCL_CUDA_COMPILER vvv -# define _CCCL_FORCEINLINE inline -#endif // !_CCCL_CUDA_COMPILER - -#endif // CUDA_VERSION >= 12050 - #include "common/cublasWrapper.h" #include #include diff --git a/plugin/common/cub_helper.h b/plugin/common/cub_helper.h index 7c947b2f..28c5cbdb 100644 --- a/plugin/common/cub_helper.h +++ b/plugin/common/cub_helper.h @@ -21,18 +21,6 @@ #include #endif // CUDA_VERSION -#if CUDA_VERSION >= 12050 -#include -#undef _CCCL_FORCEINLINE - -#if defined(_CCCL_CUDA_COMPILER) -# define _CCCL_FORCEINLINE __forceinline__ -#else // ^^^ _CCCL_CUDA_COMPILER ^^^ / vvv !_CCCL_CUDA_COMPILER vvv -# define _CCCL_FORCEINLINE inline -#endif // !_CCCL_CUDA_COMPILER - -#endif // CUDA_VERSION >= 12050 - #include "common/kernels/kernel.h" #include template diff --git a/plugin/common/plugin.cpp b/plugin/common/plugin.cpp index b685528a..a4b228ff 100644 --- a/plugin/common/plugin.cpp +++ b/plugin/common/plugin.cpp @@ -149,5 +149,20 @@ int32_t dimToInt32(int64_t d) return static_cast(d); } +bool supportsMemPoolsHelper() +{ + int32_t device; + PLUGIN_CUASSERT(cudaGetDevice(&device)); + int32_t value; + PLUGIN_CUASSERT(cudaDeviceGetAttribute(&value, cudaDevAttrMemoryPoolsSupported, device)); + return value != 0; +} + +bool supportsMemPools() +{ + static bool sResult = supportsMemPoolsHelper(); + return sResult; +} + } // namespace plugin } // namespace nvinfer1 diff --git a/plugin/common/plugin.h b/plugin/common/plugin.h index 833ebb22..450259f6 100644 --- a/plugin/common/plugin.h +++ b/plugin/common/plugin.h @@ -141,6 +141,11 @@ struct CudaBind // Throw exception if it doesn't fit. int32_t dimToInt32(int64_t); +// Helper function to determine whether memory pool support is available on the device. +bool supportsMemPoolsHelper(); + +// Wrapper function around the helper to keep the result in a static variable to avoid mulitple calls to CUDA APIs. +bool supportsMemPools(); } // namespace plugin } // namespace nvinfer1 diff --git a/plugin/embLayerNormPlugin/CustomEmbLayerNormPluginDynamic_PluginConfig.yaml b/plugin/embLayerNormPlugin/CustomEmbLayerNormPluginDynamic_PluginConfig.yaml index a942508c..6d8d1125 100644 --- a/plugin/embLayerNormPlugin/CustomEmbLayerNormPluginDynamic_PluginConfig.yaml +++ b/plugin/embLayerNormPlugin/CustomEmbLayerNormPluginDynamic_PluginConfig.yaml @@ -82,13 +82,13 @@ versions: bert_embeddings_token_type_embeddings: 2 bert_embeddings_position_embeddings: 2 attribute_dim_range: - output_fp16: + output_fp16: - min: "=1" - max: "=1" - full_mask: + full_mask: - min: "=1" - max: "=1" - mha_type_id: + mha_type_id: - min: "=1" - max: "=1" bert_embeddings_layernorm_beta: @@ -107,29 +107,29 @@ versions: - min: "=1, =1" - max: "=pinf, =pinf" attribute_options: - output_fp16: + output_fp16: - 0 - 1 - full_mask: + full_mask: - 0 - 1 - mha_type_id: + mha_type_id: - 0 - 1 - 2 - bert_embeddings_layernorm_beta: + bert_embeddings_layernorm_beta: min: "=ninf" max: "=pinf" - bert_embeddings_layernorm_gamma: + bert_embeddings_layernorm_gamma: min: "=ninf" max: "=pinf" - bert_embeddings_word_embeddings: + bert_embeddings_word_embeddings: min: "=ninf" max: "=pinf" - bert_embeddings_token_type_embeddings: + bert_embeddings_token_type_embeddings: min: "=ninf" max: "=pinf" - bert_embeddings_position_embeddings: + bert_embeddings_position_embeddings: min: "=ninf" max: "=pinf" attributes_required: @@ -148,23 +148,23 @@ versions: segment_id: int32 input_mask: int32 attribute_options: - output_fp16: + output_fp16: value: 0 shape: "1" - full_mask: + full_mask: value: 0 shape: "1" - mha_type_id: + mha_type_id: value: 0 shape: "1" - bert_embeddings_layernorm_beta: + bert_embeddings_layernorm_beta: shape: "128" - bert_embeddings_layernorm_gamma: + bert_embeddings_layernorm_gamma: shape: "128" - bert_embeddings_word_embeddings: + bert_embeddings_word_embeddings: shape: "100, 128" - bert_embeddings_token_type_embeddings: + bert_embeddings_token_type_embeddings: shape: "2, 128" - bert_embeddings_position_embeddings: + bert_embeddings_position_embeddings: shape: "20, 128" ... diff --git a/plugin/embLayerNormPlugin/README.md b/plugin/embLayerNormPlugin/README.md index bd767ef3..ca0ed259 100644 --- a/plugin/embLayerNormPlugin/README.md +++ b/plugin/embLayerNormPlugin/README.md @@ -15,45 +15,78 @@ The plugin performs the following two tasks: 1. Embeds an input sequence consisting of token ids and segment ids. This consists of token embedding lookup, segment embedding lookup, adding positional embeddings and finally, layer normalization. -2. Preprocesses input masks, that are used to mark valid input tokens in sequences that are padded to the target sequence length. +2. For version 1 of the plugin only, preprocesses input masks, that are used to mark valid input tokens in sequences that are padded to the target sequence length. Assuming contiguous input masks, encodes the masks as a single number denoting the number of valid elements, e.g.: -``` -111100 => 4 -110000 => 2 -110100: Invalid mask, because it is not contiguous -``` + ``` + 111100 => 4 + 110000 => 2 + 110100: Invalid mask, because it is not contiguous + ``` + For subsequent versions (2,3,4,5), the input mask is returned after casting to `half` and reshaping to the shape of the embedded output. ### Structure -The `embLayerNormPlugin` takes three inputs; `token_id`, `segmend_id`, and `input_mask`. +The version 1 `embLayerNormPlugin` takes three inputs; `token_id`, `segment_id`, and `input_mask`. +The subsequent versions 2,3,4,5 (variable seqlen) take four inputs; `token_id`, `segment_id`, `cu_seqlen`, and `max_seqlen`. -`token_id` -An input sequence containing token ids. token_id is an `int32` tensor with shape `[S, B]` where `S` is the sequence length and `B` is the batch size. +### Version 1 +Inputs: +- `token_id` +An input sequence containing token ids. token_id is an `int32` tensor with shape `[S, B,]` where `S` is the sequence length and `B` is the batch size. Tokens typically identify words or word pieces that were obtained by preprocessing the input text. -`segment_id` +- `segment_id` An input sequence containing segment ids. segment_id is an `int32` tensor with shape `[S, B]` where `S` is the sequence length and `B` is the batch size. The segment id is used to distinguish between different parts of the input sequence that might serve different purposes. E.g. in a squad task, the input sequence might consist of a segment representing the knowledge base (i.e. a paragraph of text) and a segment representing the question. -`input_mask` +- `input_mask` input_mask is an `int32` tensor with shape `[S, B]` where `S` is the sequence length and `B` is the batch size. The input mask denotes valid elements in a sequence that was padded to the sequence length `S`. +Outputs: -The `embLayerNormPlugin` generates the following two outputs: - -`embedded_input` -embedded_input is an floating point tensor with shape `[S, B, E]` where `S` is sequence length, `B` is batch size, and `E` is hidden size. +- `embedded_output` +embedded_output is a floating point tensor with shape `[S, B, E]` where `S` is sequence length, `B` is batch size, and `E` is hidden size. The final output embedding is the sum of embeddings for the token, the segment and the position in the sequence. -`maskIdx` +- `maskIdx` The `maskIdx` is a more compact representation of the input mask, consisting of the number of valid elements, assuming that the original mask was contiguous. For fixed sequence length version 1, the `maskIdx` is an `int32` tensor with shape `[B, packSize]` where `B` is batch size, `packSize` is the packed mask size that depends on the sequence length. -For huggingface style variable sequence length version 2, the `maskIdx` is an `int32` empty tensor. -For megatron style variable sequence length version 3, the `maskIdx` is a `half` tensor with shape `[B, S, 1, 1]` where `B` is batch size, `S` is the sequence length. + +### Version >= 2 + +Inputs: +- `token_id` +An input sequence containing token ids. token_id is a 1-D, `int32` tensor with shape `[SxB]` where `S` is the sequence length and `B` is the batch size. +Tokens typically identify words or word pieces that were obtained by preprocessing the input text. + +- `segment_id` +An input sequence containing segment ids. segment_id is also a 1-D, `int32` tensor with shape `[SxB]` where `S` is the sequence length and `B` is the batch size. +The segment id is used to distinguish between different parts of the input sequence that might serve different purposes. E.g. in a squad task, the input sequence might consist of a segment representing the knowledge base (i.e. a paragraph of text) and a segment representing the question. + +- `input_mask` +input_mask is also a 1-D, `int32` tensor with shape `[SxB]` where `S` is the sequence length and `B` is the batch size. +The input mask denotes valid elements in a sequence that was padded to the sequence length `S`. + +- `cu_seqlen` (Version 2,3,4,5 only) +An input sequence containing the "cumulative sequence lengths", used to index into the right sequence when sequences have variable lengths. `cu_seqlen` is a 1-D, `int32` tensor with shape `[B+1]` where `B` is the batch size. + +- `max_seqlen` (Version 2,3,4,5 only) +Scalar `int32` value that specifies the maximum sequence length. + +Outputs: + +- `embedded_output` +embedded_output is a floating point tensor with shape `[SxB, E, 1, 1]` where `S` is sequence length, `B` is batch size, and `E` is hidden size. +The final output embedding is the sum of embeddings for the token, the segment and the position in the sequence. + +- `maskIdx` +(1) Huggingface variant (versions 2,4): An empty tensor (for backwards compatibility) +(2) Megatron variant (versions 3,5): The inputs masks returned as a `half` tensor with the same shape as `embedded_output` - `[SxB, E, 1, 1]`. + ## Parameters @@ -62,16 +95,16 @@ For megatron style variable sequence length version 3, the `maskIdx` is a `half` The parameters are defined below and consists of the following attributes: -| Type | Parameter | Version | Description -|----------|----------------------------------------|----------|-------------------------------------------------------- -|`int` |`output_fp16` | 1, 2 |Integer encoding the DataType, set 0 when build FP32 network and set 1 when build FP32/INT8 network (0: FP32, 1: FP16) -|`int` |`full_mask` | 1 |Whether to output the full mask that works with the specialized multi-head-attention plugin kernels (this is deprecated, please use mha_type_id) -|`int` |`mha_type_id` | 1 |Integer encoding the multi-head-attention plugin DataType (0: FP32, 1: FP16, 2: INT8) -|`Weights` |`bert_embeddings_layernorm_beta` | 1, 2 |Beta parameter for layer norm. Shape: `[E,]` where `E` is hidden size -|`Weights` |`bert_embeddings_layernorm_gamma` | 1, 2 |Gamma parameter for layer norm. Shape: `[E,]` where `E` is hidden size -|`Weights` |`bert_embeddings_word_embeddings` | 1, 2 |Token embedding matrix. Shape: `[word_vocab_size, E]` where `E` is hidden size -|`Weights` |`bert_embeddings_token_type_embeddings` | 1, 2 |Token type embedding matrix. Shape: `[type_vocab_size, E]` where `E` is hidden size -|`Weights` |`bert_embeddings_position_embeddings` | 1, 2 |Positional embedding matrix. Shape: `[S, E]` where `S` is the maximum sequence length and `E` is hidden size +| Type | Parameter | Version | Description +|----------|----------------------------------------|----------------|-------------------------------------------------------- +|`int` |`output_fp16` | 1, 2, 3, 4, 5 |Integer encoding the DataType, set 0 when build FP32 network and set 1 when build FP32/INT8 network (0: FP32, 1: FP16) +|`int` |`full_mask` | 1 |Whether to output the full mask that works with the specialized multi-head-attention plugin kernels (this is deprecated, please use mha_type_id) +|`int` |`mha_type_id` | 1 |Integer encoding the multi-head-attention plugin DataType (0: FP32, 1: FP16, 2: INT8) +|`Weights` |`bert_embeddings_layernorm_beta` | 1, 2, 3, 4, 5 |Beta parameter for layer norm. Shape: `[E,]` where `E` is hidden size +|`Weights` |`bert_embeddings_layernorm_gamma` | 1, 2, 3, 4, 5 |Gamma parameter for layer norm. Shape: `[E,]` where `E` is hidden size +|`Weights` |`bert_embeddings_word_embeddings` | 1, 2, 3, 4, 5 |Token embedding matrix. Shape: `[word_vocab_size, E]` where `E` is hidden size +|`Weights` |`bert_embeddings_token_type_embeddings` | 1, 2, 3, 4, 5 |Token type embedding matrix. Shape: `[type_vocab_size, E]` where `E` is hidden size +|`Weights` |`bert_embeddings_position_embeddings` | 1, 2, 3, 4, 5 |Positional embedding matrix. Shape: `[S, E]` where `S` is the maximum sequence length and `E` is hidden size ## Additional resources @@ -90,10 +123,14 @@ documentation. ## Changelog -October 2020 +July 2024: +Add `EmbLayerNormPlugin` versions 3 & 4 that duplicate the behavior of v2 and v3 plugins respectively, but implement the `IPluginV3` interface instead of the deprecated `IPluginV2DynamicExt` interface. +Update this README with updated description of I/O and structure. + +October 2020: Add V2 plugin that supports variable sequence length. -November 2019 +November 2019: This is the first release of this `README.md` file. diff --git a/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPlugin.cpp b/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPlugin.cpp index 4313faa7..6b9a61ad 100644 --- a/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPlugin.cpp +++ b/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPlugin.cpp @@ -30,9 +30,99 @@ using namespace nvinfer1::plugin::bert; namespace { -char const* EMB_LAYER_NORM_VAR_SEQLEN_VERSION_HFACE{"2"}; -char const* EMB_LAYER_NORM_VAR_SEQLEN_VERSION_MTRON{"3"}; -char const* EMB_LAYER_NORM_VAR_SEQLEN_NAME{"CustomEmbLayerNormPluginDynamic"}; +constexpr char const* kEMB_LAYER_NORM_VAR_SEQLEN_VERSION_HFACE{"4"}; +constexpr char const* kEMB_LAYER_NORM_VAR_SEQLEN_VERSION_MTRON{"5"}; +constexpr char const* kEMB_LAYER_NORM_VAR_SEQLEN_NAME{"CustomEmbLayerNormPluginDynamic"}; + +void checkConfigurationInputs( + PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) noexcept +{ + // Validate input arguments + PLUGIN_ASSERT(nbInputs == 4); + PLUGIN_ASSERT(nbOutputs == 2); + + PLUGIN_ASSERT(inputs[0].dims.nbDims == 1); + PLUGIN_ASSERT(inputs[1].dims.nbDims == 1); + + PLUGIN_ASSERT(inputs[1].dims.d[0] == inputs[0].dims.d[0]); + + PLUGIN_ASSERT(inputs[2].dims.nbDims == 1); + + PLUGIN_ASSERT(outputs[0].dims.nbDims == 4); + PLUGIN_ASSERT(static_cast(outputs[0].dims.d[0]) == static_cast(inputs[0].dims.d[0])); + PLUGIN_ASSERT(outputs[0].dims.d[2] == 1); + PLUGIN_ASSERT(outputs[0].dims.d[3] == 1); + + PLUGIN_ASSERT(inputs[0].type == DataType::kINT32); + PLUGIN_ASSERT(inputs[1].type == DataType::kINT32); + PLUGIN_ASSERT(inputs[2].type == DataType::kINT32); +} + +bool initializeFields(char const* name, PluginFieldCollection const* fc, Weights& beta, Weights& gamma, + Weights& word_emb, Weights& pos_emb, Weights& tok_emb) +{ + bool output_fp16 = false; + std::set const requiredAttributes{ + "bert_embeddings_layernorm_beta", + "bert_embeddings_layernorm_gamma", + "bert_embeddings_word_embeddings", + "bert_embeddings_token_type_embeddings", + "bert_embeddings_position_embeddings", + }; + plugin::validateRequiredAttributesExist(requiredAttributes, fc); + + for (int32_t i = 0; i < fc->nbFields; i++) + { + std::string field_name(fc->fields[i].name); + if (field_name.compare("bert_embeddings_layernorm_beta") == 0) + { + BERT_DEBUG_MSG("Building bert_embeddings_layernorm_beta..."); + beta.values = fc->fields[i].data; + beta.count = fc->fields[i].length; + beta.type = fieldTypeToDataType(fc->fields[i].type); + } + + else if (field_name.compare("bert_embeddings_layernorm_gamma") == 0) + { + BERT_DEBUG_MSG("Building bert_embeddings_layernorm_gamma..."); + gamma.values = fc->fields[i].data; + gamma.count = fc->fields[i].length; + gamma.type = fieldTypeToDataType(fc->fields[i].type); + } + + else if (field_name.compare("bert_embeddings_word_embeddings") == 0) + { + BERT_DEBUG_MSG("Building bert_embeddings_word_embeddings..."); + word_emb.values = fc->fields[i].data; + word_emb.count = fc->fields[i].length; + word_emb.type = fieldTypeToDataType(fc->fields[i].type); + } + + else if (field_name.compare("bert_embeddings_token_type_embeddings") == 0) + { + BERT_DEBUG_MSG("Building bert_embeddings_token_type_embeddings..."); + tok_emb.values = fc->fields[i].data; + tok_emb.count = fc->fields[i].length; + tok_emb.type = fieldTypeToDataType(fc->fields[i].type); + } + + else if (field_name.compare("bert_embeddings_position_embeddings") == 0) + { + BERT_DEBUG_MSG("Building bert_embeddings_position_embeddings..."); + pos_emb.values = fc->fields[i].data; + pos_emb.count = fc->fields[i].length; + pos_emb.type = fieldTypeToDataType(fc->fields[i].type); + } + else if (field_name.compare("output_fp16") == 0) + { + BERT_DEBUG_MSG("Building output_fp16..."); + PLUGIN_VALIDATE(fc->fields[i].type == PluginFieldType::kINT32); + output_fp16 = static_cast(fc->fields[i].data)[0] != 0; + } + } + return output_fp16; +} + } // namespace // Static class fields initialization @@ -75,67 +165,76 @@ EmbLayerNormVarSeqlenPluginBase::EmbLayerNormVarSeqlenPluginBase(std::string con copyToDevice(mTokEmb, getWeightsSize(mTokEmb, mType), mTokEmbDev); } -EmbLayerNormVarSeqlenPluginBase::EmbLayerNormVarSeqlenPluginBase( - std::string const& name, void const* data, size_t length) - : mLayerName(name) - , mGammaDev(nullptr) - , mBetaDev(nullptr) - , mWordEmbDev(nullptr) - , mTokEmbDev(nullptr) - , mPosEmbDev(nullptr) -{ - // Deserialize in the same order as serialization - deserialize_value(&data, &length, &mType); - deserialize_value(&data, &length, &mLd); - deserialize_value(&data, &length, &mWordVocabSize); - deserialize_value(&data, &length, &mPosVocabSize); - deserialize_value(&data, &length, &mTokVocabSize); - deserialize_value(&data, &length, &mMaskType); - - char const* d = static_cast(data); - mBeta.convertAndCopy(d, mLd, nvinfer1::DataType::kFLOAT); - mGamma.convertAndCopy(d, mLd, nvinfer1::DataType::kFLOAT); - - mWordEmb.convertAndCopy(d, mLd * mWordVocabSize, mType); - mPosEmb.convertAndCopy(d, mLd * mPosVocabSize, mType); - mTokEmb.convertAndCopy(d, mLd * mTokVocabSize, mType); - - copyToDevice(mGamma, sizeof(float) * mGamma.count, mGammaDev); - copyToDevice(mBeta, sizeof(float) * mBeta.count, mBetaDev); - - copyToDevice(mWordEmb, getWeightsSize(mWordEmb, mType), mWordEmbDev); - copyToDevice(mPosEmb, getWeightsSize(mPosEmb, mType), mPosEmbDev); - copyToDevice(mTokEmb, getWeightsSize(mTokEmb, mType), mTokEmbDev); -} - EmbLayerNormVarSeqlenPluginHFace::EmbLayerNormVarSeqlenPluginHFace(std::string const& name, DataType const type, Weights const& beta, Weights const& gamma, Weights const& wordEmb, Weights const& posEmb, Weights const& tokEmb) : EmbLayerNormVarSeqlenPluginBase(name, type, beta, gamma, wordEmb, posEmb, tokEmb, DataType::kINT32) { -} - -EmbLayerNormVarSeqlenPluginHFace::EmbLayerNormVarSeqlenPluginHFace( - std::string const& name, void const* data, size_t length) - : EmbLayerNormVarSeqlenPluginBase(name, data, length) -{ - BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginHFace deserialize"); + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginHFace creation"); } EmbLayerNormVarSeqlenPluginMTron::EmbLayerNormVarSeqlenPluginMTron(std::string const& name, DataType const type, Weights const& beta, Weights const& gamma, Weights const& wordEmb, Weights const& posEmb, Weights const& tokEmb) : EmbLayerNormVarSeqlenPluginBase(name, type, beta, gamma, wordEmb, posEmb, tokEmb, type) { + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginMTron creation"); } -EmbLayerNormVarSeqlenPluginMTron::EmbLayerNormVarSeqlenPluginMTron( - std::string const& name, void const* data, size_t length) - : EmbLayerNormVarSeqlenPluginBase(name, data, length) +EmbLayerNormVarSeqlenPluginBase::~EmbLayerNormVarSeqlenPluginBase() { - BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginMTron deserialize"); + try + { + // This gets called when the network containing plugin is destroyed + mGammaDev.reset(nullptr); + mBetaDev.reset(nullptr); + mWordEmbDev.reset(nullptr); + mPosEmbDev.reset(nullptr); + mTokEmbDev.reset(nullptr); + // delete this; (TRT will delete this plugin object) + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +EmbLayerNormVarSeqlenPluginHFace::~EmbLayerNormVarSeqlenPluginHFace() +{ + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginHFace destruction"); +} + +EmbLayerNormVarSeqlenPluginMTron::~EmbLayerNormVarSeqlenPluginMTron() +{ + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginMTron destruction"); +} + +////// +// IPluginV3 method definitions: +// - getCapabilityInterface() (Base) +// - clone() (HFace, MTron) +////// +IPluginCapability* EmbLayerNormVarSeqlenPluginBase::getCapabilityInterface(PluginCapabilityType type) noexcept +{ + try + { + if (type == PluginCapabilityType::kBUILD) + { + return static_cast(this); + } + if (type == PluginCapabilityType::kRUNTIME) + { + return static_cast(this); + } + PLUGIN_ASSERT(type == PluginCapabilityType::kCORE); + return static_cast(this); + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; } -// IPluginV2DynamicExt Methods -IPluginV2DynamicExt* EmbLayerNormVarSeqlenPluginHFace::clone() const noexcept +IPluginV3* EmbLayerNormVarSeqlenPluginHFace::clone() noexcept { try { @@ -143,7 +242,6 @@ IPluginV2DynamicExt* EmbLayerNormVarSeqlenPluginHFace::clone() const noexcept auto p = new EmbLayerNormVarSeqlenPluginHFace(mLayerName, mType, mBeta, mGamma, mWordEmb, mPosEmb, mTokEmb); p->setPluginNamespace(mNamespace.c_str()); - return p; } catch (std::exception const& e) @@ -153,7 +251,7 @@ IPluginV2DynamicExt* EmbLayerNormVarSeqlenPluginHFace::clone() const noexcept return nullptr; } -IPluginV2DynamicExt* EmbLayerNormVarSeqlenPluginMTron::clone() const noexcept +IPluginV3* EmbLayerNormVarSeqlenPluginMTron::clone() noexcept { try { @@ -171,158 +269,101 @@ IPluginV2DynamicExt* EmbLayerNormVarSeqlenPluginMTron::clone() const noexcept return nullptr; } -DimsExprs EmbLayerNormVarSeqlenPluginHFace::getOutputDimensions( - int32_t outputIndex, DimsExprs const* inputs, int32_t nbInputs, IExprBuilder& exprBuilder) noexcept -{ - // Input should be input ids and token ids and cumulative seqlens - // Output should be the embeddings tensor and mask indices - PLUGIN_ASSERT(nbInputs == 4); - - PLUGIN_ASSERT(inputs[0].nbDims == 1); // sum of all s - PLUGIN_ASSERT(inputs[0].nbDims == inputs[1].nbDims); +// End IPluginV3 method definitions - PLUGIN_ASSERT(inputs[2].nbDims == 1); // B+1 +////// +// IPluginV3OneRuntime method definitions: +// - getFieldsToSerialize() (Base) +// - onShapeChange() (Base) +// - attachToContext() (Base) +// - enqueue() (HFace, MTron) +///// - PLUGIN_ASSERT(outputIndex == 0 || outputIndex == 1); - - if (outputIndex == 0) +PluginFieldCollection const* EmbLayerNormVarSeqlenPluginBase::getFieldsToSerialize() noexcept +{ + mDataToSerialize.clear(); + bool output_fp16 = mType == DataType::kHALF; + mDataToSerialize.emplace_back("output_fp16", &output_fp16, PluginFieldType::kINT32, 1); + mDataToSerialize.emplace_back("bert_embeddings_layernorm_beta", static_cast(mBeta.values), + PluginFieldType::kFLOAT32, mBeta.count); + mDataToSerialize.emplace_back("bert_embeddings_layernorm_gamma", static_cast(mGamma.values), + PluginFieldType::kFLOAT32, mGamma.count); + if (output_fp16) { - DimsExprs ret; - ret.nbDims = 4; - ret.d[0] = inputs[0].d[0]; - ret.d[1] = exprBuilder.constant(mLd); - ret.d[2] = exprBuilder.constant(1); - ret.d[3] = exprBuilder.constant(1); - return ret; + mDataToSerialize.emplace_back("bert_embeddings_word_embeddings", static_cast(mWordEmb.values), + PluginFieldType::kFLOAT16, mWordEmb.count); + mDataToSerialize.emplace_back("bert_embeddings_token_type_embeddings", static_cast(mTokEmb.values), + PluginFieldType::kFLOAT16, mTokEmb.count); + mDataToSerialize.emplace_back("bert_embeddings_position_embeddings", static_cast(mPosEmb.values), + PluginFieldType::kFLOAT16, mPosEmb.count); } - - // Return empty tensor since this is dummy output, we do not delete it for backward compatibility. - DimsExprs ret{}; - ret.nbDims = 0; - return ret; -} - -DimsExprs EmbLayerNormVarSeqlenPluginMTron::getOutputDimensions( - int32_t outputIndex, DimsExprs const* inputs, int32_t nbInputs, IExprBuilder& exprBuilder) noexcept -{ - // Input should be input ids and token ids and cumulative seqlens - // Output should be the embeddings tensor and mask indices - PLUGIN_ASSERT(nbInputs == 4); - - PLUGIN_ASSERT(inputs[0].nbDims == 1); // sum of all s - PLUGIN_ASSERT(inputs[0].nbDims == inputs[1].nbDims); - - PLUGIN_ASSERT(inputs[2].nbDims == 1); // B+1 - - PLUGIN_ASSERT(outputIndex == 0 || outputIndex == 1); - - DimsExprs ret; - ret.nbDims = 4; - ret.d[0] = inputs[0].d[0]; - ret.d[1] = exprBuilder.constant(mLd); - ret.d[2] = exprBuilder.constant(1); - ret.d[3] = exprBuilder.constant(1); - return ret; + else + { + mDataToSerialize.emplace_back("bert_embeddings_word_embeddings", static_cast(mWordEmb.values), + PluginFieldType::kFLOAT32, mWordEmb.count); + mDataToSerialize.emplace_back("bert_embeddings_token_type_embeddings", + static_cast(mTokEmb.values), PluginFieldType::kFLOAT32, mTokEmb.count); + mDataToSerialize.emplace_back("bert_embeddings_position_embeddings", static_cast(mPosEmb.values), + PluginFieldType::kFLOAT32, mPosEmb.count); + } + mFCToSerialize.nbFields = mDataToSerialize.size(); + mFCToSerialize.fields = mDataToSerialize.data(); + return &mFCToSerialize; } -bool EmbLayerNormVarSeqlenPluginBase::supportsFormatCombination( - int32_t pos, PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept +int32_t EmbLayerNormVarSeqlenPluginHFace::onShapeChange( + PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) noexcept { - // The four inputs to this plugin input_ids, segment_ids, cu_seqlens and a dummy input with the - // size of the max seq length in that order - PLUGIN_ASSERT(nbInputs == 4); - // The two outputs of the plugin are embedding and the mask - PLUGIN_ASSERT(nbOutputs == 2); - - PluginTensorDesc const& desc = inOut[pos]; - if (desc.format != TensorFormat::kLINEAR) - { - return false; - } - if (pos == 0 || pos == 2) // input_ids and cu_seqlens + try { - return desc.type == DataType::kINT32 && desc.dims.nbDims == 1; + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginHFace onShapeChange"); + checkConfigurationInputs(inputs, nbInputs, outputs, nbOutputs); + + // output 0 is the embedding + PLUGIN_ASSERT(static_cast(outputs[0].dims.d[1]) == static_cast(mLd)); + PLUGIN_ASSERT(outputs[0].type == mType); + // output 1 is the mask indices (empty for HFace variant) + PLUGIN_ASSERT(outputs[1].dims.nbDims == 0); + PLUGIN_ASSERT(outputs[1].type == mMaskType); + return pluginStatus_t::STATUS_SUCCESS; } - - PluginTensorDesc const& prev = inOut[pos - 1]; - if (pos == 1) // segment ids: check it's the same as input_ids + catch (std::exception const& e) { - return desc.type == DataType::kINT32 && desc.dims.nbDims == 1 && desc.dims.d[0] == prev.dims.d[0]; + caughtError(e); } + return pluginStatus_t::STATUS_FAILURE; +} - if (pos == 3) +int32_t EmbLayerNormVarSeqlenPluginMTron::onShapeChange( + PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) noexcept +{ + try { - return desc.dims.nbDims == 1; + // Validate input arguments + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginMTron onShapeChange"); + checkConfigurationInputs(inputs, nbInputs, outputs, nbOutputs); + PLUGIN_ASSERT(static_cast(outputs[0].dims.d[1]) == static_cast(mLd)); + + PLUGIN_ASSERT(outputs[1].dims.nbDims == 4); + PLUGIN_ASSERT(static_cast(outputs[1].dims.d[0]) == static_cast(inputs[0].dims.d[0])); + PLUGIN_ASSERT(static_cast(outputs[1].dims.d[1]) == static_cast(mLd)); + PLUGIN_ASSERT(outputs[1].dims.d[2] == 1); + PLUGIN_ASSERT(outputs[1].dims.d[3] == 1); + + PLUGIN_ASSERT(outputs[0].type == mType); + PLUGIN_ASSERT(outputs[1].type == mMaskType); + return pluginStatus_t::STATUS_SUCCESS; } - - // embedded sequence - if (pos == nbInputs) + catch (std::exception const& e) { - return desc.type == mType && desc.dims.nbDims == 4 && desc.dims.d[0] == inOut[0].dims.d[0] - && desc.dims.d[2] == 1 && desc.dims.d[3] == 1; + caughtError(e); } - // mask - return desc.type == mMaskType; -} - -void checkConfigurationInputs(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, - DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept -{ - // Validate input arguments - PLUGIN_ASSERT(nbInputs == 4); - PLUGIN_ASSERT(nbOutputs == 2); - - PLUGIN_ASSERT(inputs[0].desc.dims.nbDims == 1); - PLUGIN_ASSERT(inputs[1].desc.dims.nbDims == 1); - - PLUGIN_ASSERT(inputs[1].desc.dims.d[0] == inputs[0].desc.dims.d[0]); - - PLUGIN_ASSERT(inputs[2].desc.dims.nbDims == 1); - - PLUGIN_ASSERT(outputs[0].desc.dims.nbDims == 4); - PLUGIN_ASSERT(static_cast(outputs[0].desc.dims.d[0]) == static_cast(inputs[0].desc.dims.d[0])); - PLUGIN_ASSERT(outputs[0].desc.dims.d[2] == 1); - PLUGIN_ASSERT(outputs[0].desc.dims.d[3] == 1); - - PLUGIN_ASSERT(inputs[0].desc.type == DataType::kINT32); - PLUGIN_ASSERT(inputs[1].desc.type == DataType::kINT32); - PLUGIN_ASSERT(inputs[2].desc.type == DataType::kINT32); -} - -void EmbLayerNormVarSeqlenPluginHFace::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, - DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept -{ - BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginHFace configurePlugin"); - checkConfigurationInputs(inputs, nbInputs, outputs, nbOutputs); - PLUGIN_ASSERT(static_cast(outputs[0].desc.dims.d[1]) == static_cast(mLd)); - - // check mask - PLUGIN_ASSERT(outputs[1].desc.dims.nbDims == 0); - PLUGIN_ASSERT(outputs[0].desc.type == mType); - PLUGIN_ASSERT(outputs[1].desc.type == mMaskType); -} - -void EmbLayerNormVarSeqlenPluginMTron::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, - DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept -{ - BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginMTron configurePlugin"); - checkConfigurationInputs(inputs, nbInputs, outputs, nbOutputs); - PLUGIN_ASSERT(static_cast(outputs[0].desc.dims.d[1]) == static_cast(mLd)); - - PLUGIN_ASSERT(outputs[1].desc.dims.nbDims == 4); - PLUGIN_ASSERT(static_cast(outputs[1].desc.dims.d[0]) == static_cast(inputs[0].desc.dims.d[0])); - PLUGIN_ASSERT(static_cast(outputs[1].desc.dims.d[1]) == static_cast(mLd)); - PLUGIN_ASSERT(outputs[1].desc.dims.d[2] == 1); - PLUGIN_ASSERT(outputs[1].desc.dims.d[3] == 1); - - PLUGIN_ASSERT(outputs[0].desc.type == mType); - PLUGIN_ASSERT(outputs[1].desc.type == mMaskType); + return pluginStatus_t::STATUS_FAILURE; } -size_t EmbLayerNormVarSeqlenPluginBase::getWorkspaceSize( - PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept +IPluginV3* EmbLayerNormVarSeqlenPluginBase::attachToContext(IPluginResourceContext* context) noexcept { - return 0; + return clone(); } int32_t EmbLayerNormVarSeqlenPluginHFace::enqueue(PluginTensorDesc const* inputDesc, @@ -471,126 +512,191 @@ int32_t EmbLayerNormVarSeqlenPluginMTron::enqueue(PluginTensorDesc const* inputD return STATUS_FAILURE; } -// IPluginV2Ext Methods -DataType EmbLayerNormVarSeqlenPluginBase::getOutputDataType( - int32_t index, DataType const* inputTypes, int32_t nbInputs) const noexcept -{ - PLUGIN_ASSERT(index == 0 || index == 1); - PLUGIN_ASSERT(mType == DataType::kHALF || mType == DataType::kFLOAT); - return index == 0 ? mType : mMaskType; -} +// end IPluginV3OneRuntime method definitions -// IPluginV2 Methods -char const* EmbLayerNormVarSeqlenPluginBase::getPluginType() const noexcept -{ - return EMB_LAYER_NORM_VAR_SEQLEN_NAME; -} - -char const* EmbLayerNormVarSeqlenPluginHFace::getPluginVersion() const noexcept -{ - return EMB_LAYER_NORM_VAR_SEQLEN_VERSION_HFACE; -} - -char const* EmbLayerNormVarSeqlenPluginMTron::getPluginVersion() const noexcept -{ - return EMB_LAYER_NORM_VAR_SEQLEN_VERSION_MTRON; -} +/////// +// IPluginV3OneBuild method definitions +// - getNbOutputs() (Base) +// - supportsFormatCombination() (Base) +// - getOutputShapes (HFace, MTron) +// - getOutputDataTypes() (Base) +// - configurePlugin() (Base) +// - getWorkSpaceSize() (Base) +////// int32_t EmbLayerNormVarSeqlenPluginBase::getNbOutputs() const noexcept { return 2; } -int32_t EmbLayerNormVarSeqlenPluginHFace::initialize() noexcept +bool EmbLayerNormVarSeqlenPluginBase::supportsFormatCombination( + int32_t pos, DynamicPluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept { - BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginHFace initialize"); - return 0; -} + // The four inputs to this plugin input_ids, segment_ids, cu_seqlens and a dummy input with the + // size of the max seq length in that order + PLUGIN_ASSERT(nbInputs == 4); + // The two outputs of the plugin are embedding and the mask + PLUGIN_ASSERT(nbOutputs == 2); -int32_t EmbLayerNormVarSeqlenPluginMTron::initialize() noexcept -{ - BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginMTron initialize"); - return 0; + PluginTensorDesc const& desc = inOut[pos].desc; + if (desc.format != TensorFormat::kLINEAR) + { + return false; + } + if (pos == 0 || pos == 2) // input_ids and cu_seqlens + { + return desc.type == DataType::kINT32 && desc.dims.nbDims == 1; + } + + PluginTensorDesc const& prev = inOut[pos - 1].desc; + if (pos == 1) // segment ids: check it's the same as input_ids + { + return desc.type == DataType::kINT32 && desc.dims.nbDims == 1 && desc.dims.d[0] == prev.dims.d[0]; + } + + if (pos == 3) + { + return desc.dims.nbDims == 1; + } + + // embedded sequence + if (pos == nbInputs) + { + return desc.type == mType && desc.dims.nbDims == 4 && desc.dims.d[0] == inOut[0].desc.dims.d[0] + && desc.dims.d[2] == 1 && desc.dims.d[3] == 1; + } + // mask + return desc.type == mMaskType; } -void EmbLayerNormVarSeqlenPluginHFace::terminate() noexcept +int32_t EmbLayerNormVarSeqlenPluginHFace::getOutputShapes(DimsExprs const* inputs, int32_t nbInputs, + DimsExprs const* shapeInputs, int32_t nbShapeInputs, DimsExprs* outputs, int32_t nbOutputs, + IExprBuilder& exprBuilder) noexcept { - BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginHFace terminate"); + try + { + PLUGIN_VALIDATE(inputs != nullptr); + PLUGIN_VALIDATE(outputs != nullptr); + + // Input should be input ids and token ids and cumulative seqlens + // Output should be the embeddings tensor and mask indices + PLUGIN_ASSERT(nbInputs == 4); + PLUGIN_ASSERT(nbOutputs == 2); + + PLUGIN_ASSERT(inputs[0].nbDims == 1); // sum of all s + PLUGIN_ASSERT(inputs[0].nbDims == inputs[1].nbDims); + + PLUGIN_ASSERT(inputs[2].nbDims == 1); // B+1 + + // output 0 : embedded input + outputs[0].nbDims = 4; + outputs[0].d[0] = inputs[0].d[0]; + outputs[0].d[1] = exprBuilder.constant(mLd); + outputs[0].d[2] = exprBuilder.constant(1); + outputs[0].d[3] = exprBuilder.constant(1); + + // Output 1 : maskIdx + // Return empty tensor since this is dummy output, we do not delete it for backward compatibility. + outputs[1].nbDims = 0; + return pluginStatus_t::STATUS_SUCCESS; + } + catch (const std::exception& e) + { + caughtError(e); + } + return pluginStatus_t::STATUS_FAILURE; } -void EmbLayerNormVarSeqlenPluginMTron::terminate() noexcept +int32_t EmbLayerNormVarSeqlenPluginMTron::getOutputShapes(DimsExprs const* inputs, int32_t nbInputs, + DimsExprs const* shapeInputs, int32_t nbShapeInputs, DimsExprs* outputs, int32_t nbOutputs, + IExprBuilder& exprBuilder) noexcept { - BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginMTron terminate"); + try + { + PLUGIN_VALIDATE(inputs != nullptr); + PLUGIN_VALIDATE(outputs != nullptr); + // Input should be input ids and token ids and cumulative seqlens + // Output should be the embeddings tensor and mask indices + PLUGIN_ASSERT(nbInputs == 4); + PLUGIN_ASSERT(nbOutputs == 2); + + PLUGIN_ASSERT(inputs[0].nbDims == 1); // sum of all s + PLUGIN_ASSERT(inputs[0].nbDims == inputs[1].nbDims); + PLUGIN_ASSERT(inputs[2].nbDims == 1); // B+1 + + // Output 0 : embedded input + outputs[0].nbDims = 4; + outputs[0].d[0] = inputs[0].d[0]; + outputs[0].d[1] = exprBuilder.constant(mLd); + outputs[0].d[2] = exprBuilder.constant(1); + outputs[0].d[3] = exprBuilder.constant(1); + + // Output 1 : maskIdx + outputs[1].nbDims = 4; + outputs[1].d[0] = inputs[0].d[0]; + outputs[1].d[1] = exprBuilder.constant(mLd); + outputs[1].d[2] = exprBuilder.constant(1); + outputs[1].d[3] = exprBuilder.constant(1); + + return pluginStatus_t::STATUS_SUCCESS; + } + catch (const std::exception& e) + { + caughtError(e); + } + return pluginStatus_t::STATUS_FAILURE; } -size_t EmbLayerNormVarSeqlenPluginBase::getSerializationSize() const noexcept +int32_t EmbLayerNormVarSeqlenPluginBase::getOutputDataTypes( + DataType* outputTypes, int32_t nbOutputs, DataType const* inputTypes, int32_t nbInputs) const noexcept { - size_t const wordSize = getElementSize(mType); - return 2 * sizeof(float) * mLd // beta + gamma - + sizeof(mType) // - + sizeof(mLd) // - + sizeof(mWordVocabSize) // - + sizeof(mPosVocabSize) // - + sizeof(mTokVocabSize) // - + wordSize * mLd * mWordVocabSize // word emb - + wordSize * mLd * mPosVocabSize // pos emb - + wordSize * mLd * mTokVocabSize // tok emb - + sizeof(mMaskType) // mask type - ; + try + { + PLUGIN_ASSERT(mType == DataType::kHALF || mType == DataType::kFLOAT); + outputTypes[0] = mType; + outputTypes[1] = mMaskType; + return pluginStatus_t::STATUS_SUCCESS; + } + catch (std::exception const& e) + { + caughtError(e); + } + return pluginStatus_t::STATUS_FAILURE; } -void EmbLayerNormVarSeqlenPluginBase::serialize(void* buffer) const noexcept +int32_t EmbLayerNormVarSeqlenPluginBase::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept { - serialize_value(&buffer, mType); - serialize_value(&buffer, mLd); - serialize_value(&buffer, mWordVocabSize); - serialize_value(&buffer, mPosVocabSize); - serialize_value(&buffer, mTokVocabSize); - serialize_value(&buffer, mMaskType); - - char* d = static_cast(buffer); - size_t const wordSize = getElementSize(mType); - - serFromDev(d, mBetaDev.get(), mLd); - serFromDev(d, mGammaDev.get(), mLd); - serFromDev(d, static_cast(mWordEmbDev.get()), mLd * mWordVocabSize * wordSize); - serFromDev(d, static_cast(mPosEmbDev.get()), mLd * mPosVocabSize * wordSize); - serFromDev(d, static_cast(mTokEmbDev.get()), mLd * mTokVocabSize * wordSize); + return pluginStatus_t::STATUS_SUCCESS; } -void EmbLayerNormVarSeqlenPluginBase::destroy() noexcept +size_t EmbLayerNormVarSeqlenPluginBase::getWorkspaceSize(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept { - // This gets called when the network containing plugin is destroyed - mGammaDev.reset(nullptr); - mBetaDev.reset(nullptr); - mWordEmbDev.reset(nullptr); - mPosEmbDev.reset(nullptr); - mTokEmbDev.reset(nullptr); - delete this; + return 0; } +// End IPluginV3OneBuild method definitions -void EmbLayerNormVarSeqlenPluginHFace::destroy() noexcept +////// +// IPluginV3OneCore method definitions +// - getPluginVersion() (MTron, HFace) +// - getPluginName() (Base) +// - getPluginNamespace() (Base) +// - setPluginNamespace() (Base) +////// +char const* EmbLayerNormVarSeqlenPluginHFace::getPluginVersion() const noexcept { - BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginHFace destroy"); - EmbLayerNormVarSeqlenPluginBase::destroy(); + return kEMB_LAYER_NORM_VAR_SEQLEN_VERSION_HFACE; } -void EmbLayerNormVarSeqlenPluginMTron::destroy() noexcept +char const* EmbLayerNormVarSeqlenPluginMTron::getPluginVersion() const noexcept { - BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginMTron destroy"); - EmbLayerNormVarSeqlenPluginBase::destroy(); + return kEMB_LAYER_NORM_VAR_SEQLEN_VERSION_MTRON; } -void EmbLayerNormVarSeqlenPluginBase::setPluginNamespace(char const* libNamespace) noexcept +char const* EmbLayerNormVarSeqlenPluginBase::getPluginName() const noexcept { - try - { - mNamespace = libNamespace; - } - catch (std::exception const& e) - { - caughtError(e); - } + return kEMB_LAYER_NORM_VAR_SEQLEN_NAME; } char const* EmbLayerNormVarSeqlenPluginBase::getPluginNamespace() const noexcept @@ -598,34 +704,46 @@ char const* EmbLayerNormVarSeqlenPluginBase::getPluginNamespace() const noexcept return mNamespace.c_str(); } -/////////////////////// +void EmbLayerNormVarSeqlenPluginBase::setPluginNamespace(char const* libNamespace) noexcept +{ + mNamespace = libNamespace; +} +// End IPluginV3OneCore method definitions + +//////////////////////////// Plugin Creator member definitions ///////////////////////////// EmbLayerNormVarSeqlenPluginBaseCreator::EmbLayerNormVarSeqlenPluginBaseCreator() { + static std::mutex sMutex; + std::lock_guard lock(sMutex); mPluginAttributes.clear(); - mPluginAttributes.emplace_back(PluginField("bert_embeddings_layernorm_beta")); - mPluginAttributes.emplace_back(PluginField("bert_embeddings_layernorm_gamma")); - mPluginAttributes.emplace_back(PluginField("bert_embeddings_word_embeddings")); - mPluginAttributes.emplace_back(PluginField("bert_embeddings_token_type_embeddings")); - mPluginAttributes.emplace_back(PluginField("bert_embeddings_position_embeddings")); - mPluginAttributes.emplace_back(PluginField("output_fp16")); + mPluginAttributes.emplace_back(PluginField("output_fp16", nullptr, PluginFieldType::kINT32, 1)); + // the length of beta, gamma, word_emb, pos_emb, and tok_emb will only be known at the time of plugin creation + // so we set it to 0 here + mPluginAttributes.emplace_back(PluginField("bert_embeddings_layernorm_beta", nullptr, PluginFieldType::kFLOAT32, 0)); + mPluginAttributes.emplace_back(PluginField("bert_embeddings_layernorm_gamma", nullptr, PluginFieldType::kFLOAT32, 0)); + // the embeddings datatype is determined by the output_fp16 attribute known at runtime + // so we set it to kUNKNOWN here + mPluginAttributes.emplace_back(PluginField("bert_embeddings_word_embeddings", nullptr, PluginFieldType::kUNKNOWN, 0)); + mPluginAttributes.emplace_back(PluginField("bert_embeddings_token_type_embeddings", nullptr, PluginFieldType::kUNKNOWN, 0)); + mPluginAttributes.emplace_back(PluginField("bert_embeddings_position_embeddings", nullptr, PluginFieldType::kUNKNOWN, 0)); mFC.nbFields = mPluginAttributes.size(); mFC.fields = mPluginAttributes.data(); } char const* EmbLayerNormVarSeqlenPluginBaseCreator::getPluginName() const noexcept { - return EMB_LAYER_NORM_VAR_SEQLEN_NAME; + return kEMB_LAYER_NORM_VAR_SEQLEN_NAME; } char const* EmbLayerNormVarSeqlenPluginHFaceCreator::getPluginVersion() const noexcept { - return EMB_LAYER_NORM_VAR_SEQLEN_VERSION_HFACE; + return kEMB_LAYER_NORM_VAR_SEQLEN_VERSION_HFACE; } char const* EmbLayerNormVarSeqlenPluginMTronCreator::getPluginVersion() const noexcept { - return EMB_LAYER_NORM_VAR_SEQLEN_VERSION_MTRON; + return kEMB_LAYER_NORM_VAR_SEQLEN_VERSION_MTRON; } PluginFieldCollection const* EmbLayerNormVarSeqlenPluginBaseCreator::getFieldNames() noexcept @@ -633,73 +751,8 @@ PluginFieldCollection const* EmbLayerNormVarSeqlenPluginBaseCreator::getFieldNam return &mFC; } -bool initializeFields(char const* name, PluginFieldCollection const* fc, Weights& beta, Weights& gamma, - Weights& word_emb, Weights& pos_emb, Weights& tok_emb) -{ - bool output_fp16 = false; - std::set const requiredAttributes{ - "bert_embeddings_layernorm_beta", - "bert_embeddings_layernorm_gamma", - "bert_embeddings_word_embeddings", - "bert_embeddings_token_type_embeddings", - "bert_embeddings_position_embeddings", - }; - plugin::validateRequiredAttributesExist(requiredAttributes, fc); - - for (int32_t i = 0; i < fc->nbFields; i++) - { - std::string field_name(fc->fields[i].name); - if (field_name.compare("bert_embeddings_layernorm_beta") == 0) - { - BERT_DEBUG_MSG("Building bert_embeddings_layernorm_beta..."); - beta.values = fc->fields[i].data; - beta.count = fc->fields[i].length; - beta.type = fieldTypeToDataType(fc->fields[i].type); - } - - if (field_name.compare("bert_embeddings_layernorm_gamma") == 0) - { - BERT_DEBUG_MSG("Building bert_embeddings_layernorm_gamma..."); - gamma.values = fc->fields[i].data; - gamma.count = fc->fields[i].length; - gamma.type = fieldTypeToDataType(fc->fields[i].type); - } - - if (field_name.compare("bert_embeddings_word_embeddings") == 0) - { - BERT_DEBUG_MSG("Building bert_embeddings_word_embeddings..."); - word_emb.values = fc->fields[i].data; - word_emb.count = fc->fields[i].length; - word_emb.type = fieldTypeToDataType(fc->fields[i].type); - } - - if (field_name.compare("bert_embeddings_token_type_embeddings") == 0) - { - BERT_DEBUG_MSG("Building bert_embeddings_token_type_embeddings..."); - tok_emb.values = fc->fields[i].data; - tok_emb.count = fc->fields[i].length; - tok_emb.type = fieldTypeToDataType(fc->fields[i].type); - } - - if (field_name.compare("bert_embeddings_position_embeddings") == 0) - { - BERT_DEBUG_MSG("Building bert_embeddings_position_embeddings..."); - pos_emb.values = fc->fields[i].data; - pos_emb.count = fc->fields[i].length; - pos_emb.type = fieldTypeToDataType(fc->fields[i].type); - } - if (field_name.compare("output_fp16") == 0) - { - BERT_DEBUG_MSG("Building output_fp16..."); - PLUGIN_VALIDATE(fc->fields[i].type == PluginFieldType::kINT32); - output_fp16 = static_cast(fc->fields[i].data)[0] != 0; - } - } - return output_fp16; -} - -IPluginV2* EmbLayerNormVarSeqlenPluginHFaceCreator::createPlugin( - char const* name, PluginFieldCollection const* fc) noexcept +IPluginV3* EmbLayerNormVarSeqlenPluginHFaceCreator::createPlugin( + char const* name, PluginFieldCollection const* fc, TensorRTPhase phase) noexcept { try { @@ -729,8 +782,8 @@ IPluginV2* EmbLayerNormVarSeqlenPluginHFaceCreator::createPlugin( return nullptr; } -IPluginV2* EmbLayerNormVarSeqlenPluginMTronCreator::createPlugin( - char const* name, PluginFieldCollection const* fc) noexcept +IPluginV3* EmbLayerNormVarSeqlenPluginMTronCreator::createPlugin( + char const* name, PluginFieldCollection const* fc, TensorRTPhase phase) noexcept { try { @@ -760,38 +813,6 @@ IPluginV2* EmbLayerNormVarSeqlenPluginMTronCreator::createPlugin( return nullptr; } -IPluginV2* EmbLayerNormVarSeqlenPluginHFaceCreator::deserializePlugin( - char const* name, void const* serialData, size_t serialLength) noexcept -{ - try - { - // This object will be deleted when the network is destroyed, which will - // call EmbLayerNormVarSeqlen::destroy() - return new EmbLayerNormVarSeqlenPluginHFace(name, serialData, serialLength); - } - catch (std::exception const& e) - { - caughtError(e); - } - return nullptr; -} - -IPluginV2* EmbLayerNormVarSeqlenPluginMTronCreator::deserializePlugin( - char const* name, void const* serialData, size_t serialLength) noexcept -{ - try - { - // This object will be deleted when the network is destroyed, which will - // call EmbLayerNormVarSeqlen::destroy() - return new EmbLayerNormVarSeqlenPluginMTron(name, serialData, serialLength); - } - catch (std::exception const& e) - { - caughtError(e); - } - return nullptr; -} - void EmbLayerNormVarSeqlenPluginBaseCreator::setPluginNamespace(char const* libNamespace) noexcept { try diff --git a/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPlugin.h b/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPlugin.h index d3141a6b..57612d06 100644 --- a/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPlugin.h +++ b/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPlugin.h @@ -43,41 +43,63 @@ int32_t embSkipLayerNormMTron(cudaStream_t stream, int32_t ld, int32_t B, int32_ int32_t const* tokenIds, int32_t const* cuSeqlens, float const* beta, float const* gamma, T const* wordEmb, T const* posEmb, T const* tokEmb, int32_t const wordSize, int32_t const tokSize, T* output, T* skip); -class EmbLayerNormVarSeqlenPluginBase : public nvinfer1::IPluginV2DynamicExt +class EmbLayerNormVarSeqlenPluginBase : public IPluginV3, + public IPluginV3OneCore, + public IPluginV3OneBuild, + public IPluginV3OneRuntime { public: EmbLayerNormVarSeqlenPluginBase(std::string const& name, DataType type, Weights const& beta, Weights const& gamma, Weights const& word_emb, Weights const& pos_emb, Weights const& tok_emb, DataType maskType); - EmbLayerNormVarSeqlenPluginBase(std::string const& name, void const* data, size_t length); - // It doesn't make sense to make EmbLayerNormVarSeqlenPlugin without arguments, so we // delete default constructor. EmbLayerNormVarSeqlenPluginBase() = delete; - // IPluginV2DynamicExt Methods + ~EmbLayerNormVarSeqlenPluginBase() override; + + // IPluginV3 Methods + // NOTE: since this is itself is an abstract class, the rest of virtual methods defined in its children classes + IPluginCapability* getCapabilityInterface(PluginCapabilityType type) noexcept override; + // end of IPluginV3 Methods + + // IPluginV3OneCore Methods + char const* getPluginName() const noexcept override; + + char const* getPluginNamespace() const noexcept override; + + void setPluginNamespace(char const* pluginNamespace) noexcept; + // end of IPluginV3OneCore Methods + + // IPluginV3Build Methods bool supportsFormatCombination( - int32_t pos, nvinfer1::PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept override; - size_t getWorkspaceSize(nvinfer1::PluginTensorDesc const* inputs, int32_t nbInputs, - nvinfer1::PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept override; + int32_t pos, DynamicPluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept override; + + int32_t configurePlugin(DynamicPluginTensorDesc const* in, int32_t nbInputs, DynamicPluginTensorDesc const* out, + int32_t nbOutputs) noexcept override; + + size_t getWorkspaceSize(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept override; - // IPluginV2Ext Methods - nvinfer1::DataType getOutputDataType( - int32_t index, nvinfer1::DataType const* inputTypes, int32_t nbInputs) const noexcept override; + int32_t getOutputDataTypes( + DataType* outputTypes, int32_t nbOutputs, DataType const* inputTypes, int32_t nbInputs) const noexcept override; - // IPluginV2 Methods - char const* getPluginType() const noexcept override; int32_t getNbOutputs() const noexcept override; - size_t getSerializationSize() const noexcept override; - void serialize(void* buffer) const noexcept override; - void destroy() noexcept override; - char const* getPluginNamespace() const noexcept override; - void setPluginNamespace(char const* pluginNamespace) noexcept override; + // end IPluginV3Build Methods + + // IPluginV3Runtime Methods + + IPluginV3* attachToContext(IPluginResourceContext* context) noexcept override; + + PluginFieldCollection const* getFieldsToSerialize() noexcept override; + // end IPluginV3Runtime Methods protected: + // metadata fields std::string const mLayerName; std::string mNamespace; + // device-side bert::cuda_unique_ptr mGammaDev; bert::cuda_unique_ptr mBetaDev; bert::cuda_unique_ptr mWordEmbDev; @@ -87,6 +109,8 @@ class EmbLayerNormVarSeqlenPluginBase : public nvinfer1::IPluginV2DynamicExt size_t mWordVocabSize; size_t mPosVocabSize; size_t mTokVocabSize; + + // members that partcipate in ser/deserialization bert::WeightsWithOwnership mBeta; bert::WeightsWithOwnership mGamma; bert::WeightsWithOwnership mWordEmb; @@ -94,6 +118,10 @@ class EmbLayerNormVarSeqlenPluginBase : public nvinfer1::IPluginV2DynamicExt bert::WeightsWithOwnership mPosEmb; DataType mType{}; DataType mMaskType{}; + + // IPluginV3 serialization related + std::vector mDataToSerialize; + nvinfer1::PluginFieldCollection mFCToSerialize; }; class EmbLayerNormVarSeqlenPluginHFace : public EmbLayerNormVarSeqlenPluginBase @@ -103,26 +131,27 @@ class EmbLayerNormVarSeqlenPluginHFace : public EmbLayerNormVarSeqlenPluginBase nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma, nvinfer1::Weights const& word_emb, nvinfer1::Weights const& pos_emb, nvinfer1::Weights const& tok_emb); - EmbLayerNormVarSeqlenPluginHFace(std::string const& name, void const* data, size_t length); - // It doesn't make sense to make EmbLayerNormVarSeqlenPlugin without arguments, so we // delete default constructor. EmbLayerNormVarSeqlenPluginHFace() = delete; - // IPluginV2DynamicExt Methods - nvinfer1::IPluginV2DynamicExt* clone() const noexcept override; - nvinfer1::DimsExprs getOutputDimensions(int32_t outputIndex, nvinfer1::DimsExprs const* inputs, int32_t nbInputs, - nvinfer1::IExprBuilder& exprBuilder) noexcept override; - void configurePlugin(nvinfer1::DynamicPluginTensorDesc const* in, int32_t nbInputs, - nvinfer1::DynamicPluginTensorDesc const* out, int32_t nbOutputs) noexcept override; + ~EmbLayerNormVarSeqlenPluginHFace() override; + + // IPluginV3Runtime overrides + IPluginV3* clone() noexcept; + + int32_t onShapeChange( + PluginTensorDesc const* in, int32_t nbInputs, PluginTensorDesc const* out, int32_t nbOutputs) noexcept override; + int32_t enqueue(nvinfer1::PluginTensorDesc const* inputDesc, nvinfer1::PluginTensorDesc const* outputDesc, void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override; - // IPluginV2 Methods - int32_t initialize() noexcept override; - void terminate() noexcept override; - void destroy() noexcept override; + // IPluginV3OneCore override char const* getPluginVersion() const noexcept override; + + // IPluginV3OneBuild override + int32_t getOutputShapes(DimsExprs const* inputs, int32_t nbInputs, DimsExprs const* shapeInputs, + int32_t nbShapeInputs, DimsExprs* outputs, int32_t nbOutputs, IExprBuilder& exprBuilder) noexcept override; }; class EmbLayerNormVarSeqlenPluginMTron : public EmbLayerNormVarSeqlenPluginBase @@ -132,29 +161,30 @@ class EmbLayerNormVarSeqlenPluginMTron : public EmbLayerNormVarSeqlenPluginBase nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma, nvinfer1::Weights const& word_emb, nvinfer1::Weights const& pos_emb, nvinfer1::Weights const& tok_emb); - EmbLayerNormVarSeqlenPluginMTron(std::string const& name, void const* data, size_t length); - // It doesn't make sense to make EmbLayerNormVarSeqlenPlugin without arguments, so we // delete default constructor. EmbLayerNormVarSeqlenPluginMTron() = delete; - // IPluginV2DynamicExt Methods - nvinfer1::IPluginV2DynamicExt* clone() const noexcept override; - nvinfer1::DimsExprs getOutputDimensions(int32_t outputIndex, nvinfer1::DimsExprs const* inputs, int32_t nbInputs, - nvinfer1::IExprBuilder& exprBuilder) noexcept override; - void configurePlugin(nvinfer1::DynamicPluginTensorDesc const* in, int32_t nbInputs, - nvinfer1::DynamicPluginTensorDesc const* out, int32_t nbOutputs) noexcept override; + ~EmbLayerNormVarSeqlenPluginMTron() override; + + // IPluginV3Runtime overrides + IPluginV3* clone() noexcept; + + int32_t onShapeChange( + PluginTensorDesc const* in, int32_t nbInputs, PluginTensorDesc const* out, int32_t nbOutputs) noexcept override; + int32_t enqueue(nvinfer1::PluginTensorDesc const* inputDesc, nvinfer1::PluginTensorDesc const* outputDesc, void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override; - // IPluginV2 Methods - int32_t initialize() noexcept override; - void terminate() noexcept override; - void destroy() noexcept override; + // IPluginV3OneCore override char const* getPluginVersion() const noexcept override; + + // IPluginV3OneBuild override + int32_t getOutputShapes(DimsExprs const* inputs, int32_t nbInputs, DimsExprs const* shapeInputs, + int32_t nbShapeInputs, DimsExprs* outputs, int32_t nbOutputs, IExprBuilder& exprBuilder) noexcept override; }; -class EmbLayerNormVarSeqlenPluginBaseCreator : public nvinfer1::IPluginCreator +class EmbLayerNormVarSeqlenPluginBaseCreator : public nvinfer1::IPluginCreatorV3One { public: EmbLayerNormVarSeqlenPluginBaseCreator(); @@ -163,7 +193,7 @@ class EmbLayerNormVarSeqlenPluginBaseCreator : public nvinfer1::IPluginCreator nvinfer1::PluginFieldCollection const* getFieldNames() noexcept override; - void setPluginNamespace(char const* pluginNamespace) noexcept override; + void setPluginNamespace(char const* libNamespace) noexcept; char const* getPluginNamespace() const noexcept override; @@ -176,19 +206,15 @@ class EmbLayerNormVarSeqlenPluginBaseCreator : public nvinfer1::IPluginCreator class EmbLayerNormVarSeqlenPluginHFaceCreator : public EmbLayerNormVarSeqlenPluginBaseCreator { public: - nvinfer1::IPluginV2* createPlugin(char const* name, nvinfer1::PluginFieldCollection const* fc) noexcept override; + IPluginV3* createPlugin(char const* name, PluginFieldCollection const* fc, TensorRTPhase phase) noexcept override; char const* getPluginVersion() const noexcept override; - nvinfer1::IPluginV2* deserializePlugin( - char const* name, void const* serialData, size_t serialLength) noexcept override; }; class EmbLayerNormVarSeqlenPluginMTronCreator : public EmbLayerNormVarSeqlenPluginBaseCreator { public: - nvinfer1::IPluginV2* createPlugin(char const* name, nvinfer1::PluginFieldCollection const* fc) noexcept override; + IPluginV3* createPlugin(char const* name, PluginFieldCollection const* fc, TensorRTPhase phase) noexcept override; char const* getPluginVersion() const noexcept override; - nvinfer1::IPluginV2* deserializePlugin( - char const* name, void const* serialData, size_t serialLength) noexcept override; }; } // namespace bert diff --git a/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPluginLegacy.cpp b/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPluginLegacy.cpp new file mode 100644 index 00000000..f86700fd --- /dev/null +++ b/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPluginLegacy.cpp @@ -0,0 +1,814 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 1993-2024 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. + */ + +#include +#include +#include +#include + +#include "NvInfer.h" +#include "common/serialize.hpp" +#include "embLayerNormVarSeqlenPluginLegacy.h" + +using namespace nvinfer1; +using namespace nvinfer1::plugin; +using namespace nvinfer1::plugin::bert; + +namespace +{ +constexpr char const* kEMB_LAYER_NORM_VAR_SEQLEN_VERSION_HFACE{"2"}; +constexpr char const* kEMB_LAYER_NORM_VAR_SEQLEN_VERSION_MTRON{"3"}; +constexpr char const* kEMB_LAYER_NORM_VAR_SEQLEN_NAME{"CustomEmbLayerNormPluginDynamic"}; +} // namespace + +// Static class fields initialization +PluginFieldCollection EmbLayerNormVarSeqlenPluginLegacyBaseCreator::mFC{}; +std::vector EmbLayerNormVarSeqlenPluginLegacyBaseCreator::mPluginAttributes; + +REGISTER_TENSORRT_PLUGIN(EmbLayerNormVarSeqlenPluginLegacyHFaceCreator); +REGISTER_TENSORRT_PLUGIN(EmbLayerNormVarSeqlenPluginLegacyMTronCreator); + +EmbLayerNormVarSeqlenPluginLegacyBase::EmbLayerNormVarSeqlenPluginLegacyBase(std::string const& name, DataType type, + Weights const& beta, Weights const& gamma, Weights const& wordEmb, Weights const& posEmb, Weights const& tokEmb, + DataType maskType) + : mLayerName(name) + , mLd(beta.count) + , mType(type) + , mMaskType(maskType) +{ + // Assuming Weights.count is the number of elements and not bytes + PLUGIN_VALIDATE(beta.count == gamma.count); + PLUGIN_VALIDATE(mLd > 0U); + PLUGIN_VALIDATE(wordEmb.count % mLd == 0); + PLUGIN_VALIDATE(posEmb.count % mLd == 0); + PLUGIN_VALIDATE(tokEmb.count % mLd == 0); + mWordVocabSize = wordEmb.count / mLd; + mPosVocabSize = posEmb.count / mLd; + mTokVocabSize = tokEmb.count / mLd; + + mBeta.convertAndCopy(beta, nvinfer1::DataType::kFLOAT); + mGamma.convertAndCopy(gamma, nvinfer1::DataType::kFLOAT); + + mWordEmb.convertAndCopy(wordEmb, mType); + mTokEmb.convertAndCopy(tokEmb, mType); + mPosEmb.convertAndCopy(posEmb, mType); + + copyToDevice(mGamma, sizeof(float) * mGamma.count, mGammaDev); + copyToDevice(mBeta, sizeof(float) * mBeta.count, mBetaDev); + + copyToDevice(mWordEmb, getWeightsSize(mWordEmb, mType), mWordEmbDev); + copyToDevice(mPosEmb, getWeightsSize(mPosEmb, mType), mPosEmbDev); + copyToDevice(mTokEmb, getWeightsSize(mTokEmb, mType), mTokEmbDev); +} + +EmbLayerNormVarSeqlenPluginLegacyBase::EmbLayerNormVarSeqlenPluginLegacyBase( + std::string const& name, void const* data, size_t length) + : mLayerName(name) + , mGammaDev(nullptr) + , mBetaDev(nullptr) + , mWordEmbDev(nullptr) + , mTokEmbDev(nullptr) + , mPosEmbDev(nullptr) +{ + // Deserialize in the same order as serialization + deserialize_value(&data, &length, &mType); + deserialize_value(&data, &length, &mLd); + deserialize_value(&data, &length, &mWordVocabSize); + deserialize_value(&data, &length, &mPosVocabSize); + deserialize_value(&data, &length, &mTokVocabSize); + deserialize_value(&data, &length, &mMaskType); + + char const* d = static_cast(data); + mBeta.convertAndCopy(d, mLd, nvinfer1::DataType::kFLOAT); + mGamma.convertAndCopy(d, mLd, nvinfer1::DataType::kFLOAT); + + mWordEmb.convertAndCopy(d, mLd * mWordVocabSize, mType); + mPosEmb.convertAndCopy(d, mLd * mPosVocabSize, mType); + mTokEmb.convertAndCopy(d, mLd * mTokVocabSize, mType); + + copyToDevice(mGamma, sizeof(float) * mGamma.count, mGammaDev); + copyToDevice(mBeta, sizeof(float) * mBeta.count, mBetaDev); + + copyToDevice(mWordEmb, getWeightsSize(mWordEmb, mType), mWordEmbDev); + copyToDevice(mPosEmb, getWeightsSize(mPosEmb, mType), mPosEmbDev); + copyToDevice(mTokEmb, getWeightsSize(mTokEmb, mType), mTokEmbDev); +} + +EmbLayerNormVarSeqlenPluginLegacyHFace::EmbLayerNormVarSeqlenPluginLegacyHFace(std::string const& name, + DataType const type, Weights const& beta, Weights const& gamma, Weights const& wordEmb, Weights const& posEmb, + Weights const& tokEmb) + : EmbLayerNormVarSeqlenPluginLegacyBase(name, type, beta, gamma, wordEmb, posEmb, tokEmb, DataType::kINT32) +{ +} + +EmbLayerNormVarSeqlenPluginLegacyHFace::EmbLayerNormVarSeqlenPluginLegacyHFace( + std::string const& name, void const* data, size_t length) + : EmbLayerNormVarSeqlenPluginLegacyBase(name, data, length) +{ + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginLegacyHFace deserialize"); +} + +EmbLayerNormVarSeqlenPluginLegacyMTron::EmbLayerNormVarSeqlenPluginLegacyMTron(std::string const& name, + DataType const type, Weights const& beta, Weights const& gamma, Weights const& wordEmb, Weights const& posEmb, + Weights const& tokEmb) + : EmbLayerNormVarSeqlenPluginLegacyBase(name, type, beta, gamma, wordEmb, posEmb, tokEmb, type) +{ +} + +EmbLayerNormVarSeqlenPluginLegacyMTron::EmbLayerNormVarSeqlenPluginLegacyMTron( + std::string const& name, void const* data, size_t length) + : EmbLayerNormVarSeqlenPluginLegacyBase(name, data, length) +{ + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginLegacyMTron deserialize"); +} + +// IPluginV2DynamicExt Methods +IPluginV2DynamicExt* EmbLayerNormVarSeqlenPluginLegacyHFace::clone() const noexcept +{ + try + { + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginLegacyHFace clone"); + + auto p + = new EmbLayerNormVarSeqlenPluginLegacyHFace(mLayerName, mType, mBeta, mGamma, mWordEmb, mPosEmb, mTokEmb); + p->setPluginNamespace(mNamespace.c_str()); + + return p; + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +IPluginV2DynamicExt* EmbLayerNormVarSeqlenPluginLegacyMTron::clone() const noexcept +{ + try + { + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginLegacyMTron clone"); + + auto p + = new EmbLayerNormVarSeqlenPluginLegacyMTron(mLayerName, mType, mBeta, mGamma, mWordEmb, mPosEmb, mTokEmb); + p->setPluginNamespace(mNamespace.c_str()); + + return p; + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +DimsExprs EmbLayerNormVarSeqlenPluginLegacyHFace::getOutputDimensions( + int32_t outputIndex, DimsExprs const* inputs, int32_t nbInputs, IExprBuilder& exprBuilder) noexcept +{ + // Input should be input ids and token ids and cumulative seqlens + // Output should be the embeddings tensor and mask indices + PLUGIN_ASSERT(nbInputs == 4); + + PLUGIN_ASSERT(inputs[0].nbDims == 1); // sum of all s + PLUGIN_ASSERT(inputs[0].nbDims == inputs[1].nbDims); + + PLUGIN_ASSERT(inputs[2].nbDims == 1); // B+1 + + PLUGIN_ASSERT(outputIndex == 0 || outputIndex == 1); + + if (outputIndex == 0) + { + DimsExprs ret; + ret.nbDims = 4; + ret.d[0] = inputs[0].d[0]; + ret.d[1] = exprBuilder.constant(mLd); + ret.d[2] = exprBuilder.constant(1); + ret.d[3] = exprBuilder.constant(1); + return ret; + } + + // Return empty tensor since this is dummy output, we do not delete it for backward compatibility. + DimsExprs ret{}; + ret.nbDims = 0; + return ret; +} + +DimsExprs EmbLayerNormVarSeqlenPluginLegacyMTron::getOutputDimensions( + int32_t outputIndex, DimsExprs const* inputs, int32_t nbInputs, IExprBuilder& exprBuilder) noexcept +{ + // Input should be input ids and token ids and cumulative seqlens + // Output should be the embeddings tensor and mask indices + PLUGIN_ASSERT(nbInputs == 4); + + PLUGIN_ASSERT(inputs[0].nbDims == 1); // sum of all s + PLUGIN_ASSERT(inputs[0].nbDims == inputs[1].nbDims); + + PLUGIN_ASSERT(inputs[2].nbDims == 1); // B+1 + + PLUGIN_ASSERT(outputIndex == 0 || outputIndex == 1); + + DimsExprs ret; + ret.nbDims = 4; + ret.d[0] = inputs[0].d[0]; + ret.d[1] = exprBuilder.constant(mLd); + ret.d[2] = exprBuilder.constant(1); + ret.d[3] = exprBuilder.constant(1); + return ret; +} + +bool EmbLayerNormVarSeqlenPluginLegacyBase::supportsFormatCombination( + int32_t pos, PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept +{ + // The four inputs to this plugin input_ids, segment_ids, cu_seqlens and a dummy input with the + // size of the max seq length in that order + PLUGIN_ASSERT(nbInputs == 4); + // The two outputs of the plugin are embedding and the mask + PLUGIN_ASSERT(nbOutputs == 2); + + PluginTensorDesc const& desc = inOut[pos]; + if (desc.format != TensorFormat::kLINEAR) + { + return false; + } + if (pos == 0 || pos == 2) // input_ids and cu_seqlens + { + return desc.type == DataType::kINT32 && desc.dims.nbDims == 1; + } + + PluginTensorDesc const& prev = inOut[pos - 1]; + if (pos == 1) // segment ids: check it's the same as input_ids + { + return desc.type == DataType::kINT32 && desc.dims.nbDims == 1 && desc.dims.d[0] == prev.dims.d[0]; + } + + if (pos == 3) + { + return desc.dims.nbDims == 1; + } + + // embedded sequence + if (pos == nbInputs) + { + return desc.type == mType && desc.dims.nbDims == 4 && desc.dims.d[0] == inOut[0].dims.d[0] + && desc.dims.d[2] == 1 && desc.dims.d[3] == 1; + } + // mask + return desc.type == mMaskType; +} + +void checkConfigurationInputs(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept +{ + // Validate input arguments + PLUGIN_ASSERT(nbInputs == 4); + PLUGIN_ASSERT(nbOutputs == 2); + + PLUGIN_ASSERT(inputs[0].desc.dims.nbDims == 1); + PLUGIN_ASSERT(inputs[1].desc.dims.nbDims == 1); + + PLUGIN_ASSERT(inputs[1].desc.dims.d[0] == inputs[0].desc.dims.d[0]); + + PLUGIN_ASSERT(inputs[2].desc.dims.nbDims == 1); + + PLUGIN_ASSERT(outputs[0].desc.dims.nbDims == 4); + PLUGIN_ASSERT(static_cast(outputs[0].desc.dims.d[0]) == static_cast(inputs[0].desc.dims.d[0])); + PLUGIN_ASSERT(outputs[0].desc.dims.d[2] == 1); + PLUGIN_ASSERT(outputs[0].desc.dims.d[3] == 1); + + PLUGIN_ASSERT(inputs[0].desc.type == DataType::kINT32); + PLUGIN_ASSERT(inputs[1].desc.type == DataType::kINT32); + PLUGIN_ASSERT(inputs[2].desc.type == DataType::kINT32); +} + +void EmbLayerNormVarSeqlenPluginLegacyHFace::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept +{ + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginLegacyHFace configurePlugin"); + checkConfigurationInputs(inputs, nbInputs, outputs, nbOutputs); + PLUGIN_ASSERT(static_cast(outputs[0].desc.dims.d[1]) == static_cast(mLd)); + + // check mask + PLUGIN_ASSERT(outputs[1].desc.dims.nbDims == 0); + PLUGIN_ASSERT(outputs[0].desc.type == mType); + PLUGIN_ASSERT(outputs[1].desc.type == mMaskType); +} + +void EmbLayerNormVarSeqlenPluginLegacyMTron::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept +{ + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginLegacyMTron configurePlugin"); + checkConfigurationInputs(inputs, nbInputs, outputs, nbOutputs); + PLUGIN_ASSERT(static_cast(outputs[0].desc.dims.d[1]) == static_cast(mLd)); + + PLUGIN_ASSERT(outputs[1].desc.dims.nbDims == 4); + PLUGIN_ASSERT(static_cast(outputs[1].desc.dims.d[0]) == static_cast(inputs[0].desc.dims.d[0])); + PLUGIN_ASSERT(static_cast(outputs[1].desc.dims.d[1]) == static_cast(mLd)); + PLUGIN_ASSERT(outputs[1].desc.dims.d[2] == 1); + PLUGIN_ASSERT(outputs[1].desc.dims.d[3] == 1); + + PLUGIN_ASSERT(outputs[0].desc.type == mType); + PLUGIN_ASSERT(outputs[1].desc.type == mMaskType); +} + +size_t EmbLayerNormVarSeqlenPluginLegacyBase::getWorkspaceSize( + PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept +{ + return 0; +} + +int32_t EmbLayerNormVarSeqlenPluginLegacyHFace::enqueue(PluginTensorDesc const* inputDesc, + PluginTensorDesc const* /* outputDesc */, void const* const* inputs, void* const* outputs, void* /* workspace */, + cudaStream_t stream) noexcept +{ + try + { + PLUGIN_VALIDATE(inputDesc != nullptr && inputs != nullptr && outputs != nullptr); + + int32_t const batchSize = inputDesc[2].dims.d[0] - 1; + // read out the maximum sequence length from the dummy input + int32_t const maxSeqlen = inputDesc[3].dims.d[0]; + + // There are four versions of the kernel which are optimized for sequence lengths 384, 256, 192 and 128. + // Find the closest sequence length bigger than the max seq length in this batch. + int32_t S = 384; + if (maxSeqlen <= 128) + { + S = 128; + } + else if (maxSeqlen <= 192) + { + S = 192; + } + else if (maxSeqlen <= 256) + { + S = 256; + } + + // Our plugin outputs only one tensor + auto const inputIds = static_cast(inputs[0]); + auto const segmentIds = static_cast(inputs[1]); + int32_t const* cuSeqlens = static_cast(inputs[2]); + + float const* beta = mBetaDev.get(); + float const* gamma = mGammaDev.get(); + if (mType == DataType::kFLOAT) + { + auto output = static_cast(outputs[0]); + auto const wordEmb = static_cast(mWordEmbDev.get()); + auto const tokEmb = static_cast(mTokEmbDev.get()); + auto const posEmb = static_cast(mPosEmbDev.get()); + + return embSkipLayerNormHFace(stream, static_cast(mLd), batchSize, S, inputIds, segmentIds, + cuSeqlens, beta, gamma, wordEmb, posEmb, tokEmb, mWordVocabSize, mTokVocabSize, output); + } + if (mType == DataType::kHALF) + { + auto output = static_cast(outputs[0]); + auto const wordEmb = static_cast(mWordEmbDev.get()); + auto const tokEmb = static_cast(mTokEmbDev.get()); + auto const posEmb = static_cast(mPosEmbDev.get()); + + return embSkipLayerNormHFace(stream, static_cast(mLd), batchSize, S, inputIds, segmentIds, + cuSeqlens, beta, gamma, wordEmb, posEmb, tokEmb, mWordVocabSize, mTokVocabSize, output); + } + else + { + gLogError << "Unsupported type error, expected [kHALF,kFLOAT], but received " << static_cast(mType) + << std::endl; + + return STATUS_NOT_SUPPORTED; + } + + return STATUS_SUCCESS; + } + catch (std::exception const& e) + { + caughtError(e); + } + return STATUS_FAILURE; +} + +int32_t EmbLayerNormVarSeqlenPluginLegacyMTron::enqueue(PluginTensorDesc const* inputDesc, + PluginTensorDesc const* /* outputDesc */, void const* const* inputs, void* const* outputs, void* /* workspace */, + cudaStream_t stream) noexcept +{ + try + { + PLUGIN_VALIDATE(inputDesc != nullptr && inputs != nullptr && outputs != nullptr); + + int32_t const batchSize = inputDesc[2].dims.d[0] - 1; + // read out the maximum sequence length from the dummy input + int32_t const maxSeqlen = inputDesc[3].dims.d[0]; + + // There are four versions of the kernel which are optimized for sequence lengths 384, 256, 192 and 128. + // Find the closest sequence length bigger than the max seq length in this batch. + int32_t S = 384; + if (maxSeqlen <= 128) + { + S = 128; + } + else if (maxSeqlen <= 192) + { + S = 192; + } + else if (maxSeqlen <= 256) + { + S = 256; + } + + // Our plugin outputs only one tensor + auto const inputIds = static_cast(inputs[0]); + auto const segmentIds = static_cast(inputs[1]); + int32_t const* cuSeqlens = static_cast(inputs[2]); + + float const* beta = mBetaDev.get(); + float const* gamma = mGammaDev.get(); + if (mType == DataType::kFLOAT) + { + auto output = static_cast(outputs[0]); + auto skip = static_cast(outputs[1]); + auto const wordEmb = static_cast(mWordEmbDev.get()); + auto const tokEmb = static_cast(mTokEmbDev.get()); + auto const posEmb = static_cast(mPosEmbDev.get()); + + return embSkipLayerNormMTron(stream, static_cast(mLd), batchSize, S, inputIds, segmentIds, + cuSeqlens, beta, gamma, wordEmb, posEmb, tokEmb, mWordVocabSize, mTokVocabSize, output, skip); + } + if (mType == DataType::kHALF) + { + auto output = static_cast(outputs[0]); + auto skip = static_cast(outputs[1]); + auto const wordEmb = static_cast(mWordEmbDev.get()); + auto const tokEmb = static_cast(mTokEmbDev.get()); + auto const posEmb = static_cast(mPosEmbDev.get()); + + return embSkipLayerNormMTron(stream, static_cast(mLd), batchSize, S, inputIds, segmentIds, + cuSeqlens, beta, gamma, wordEmb, posEmb, tokEmb, mWordVocabSize, mTokVocabSize, output, skip); + } + else + { + gLogError << "Unsupported type error, expected [kHALF,kFLOAT], but received " << static_cast(mType) + << std::endl; + + return STATUS_NOT_SUPPORTED; + } + + return STATUS_SUCCESS; + } + catch (std::exception const& e) + { + caughtError(e); + } + return STATUS_FAILURE; +} + +// IPluginV2Ext Methods +DataType EmbLayerNormVarSeqlenPluginLegacyBase::getOutputDataType( + int32_t index, DataType const* inputTypes, int32_t nbInputs) const noexcept +{ + PLUGIN_ASSERT(index == 0 || index == 1); + PLUGIN_ASSERT(mType == DataType::kHALF || mType == DataType::kFLOAT); + return index == 0 ? mType : mMaskType; +} + +// IPluginV2 Methods +char const* EmbLayerNormVarSeqlenPluginLegacyBase::getPluginType() const noexcept +{ + return kEMB_LAYER_NORM_VAR_SEQLEN_NAME; +} + +char const* EmbLayerNormVarSeqlenPluginLegacyHFace::getPluginVersion() const noexcept +{ + return kEMB_LAYER_NORM_VAR_SEQLEN_VERSION_HFACE; +} + +char const* EmbLayerNormVarSeqlenPluginLegacyMTron::getPluginVersion() const noexcept +{ + return kEMB_LAYER_NORM_VAR_SEQLEN_VERSION_MTRON; +} + +int32_t EmbLayerNormVarSeqlenPluginLegacyBase::getNbOutputs() const noexcept +{ + return 2; +} + +int32_t EmbLayerNormVarSeqlenPluginLegacyHFace::initialize() noexcept +{ + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginLegacyHFace initialize"); + return 0; +} + +int32_t EmbLayerNormVarSeqlenPluginLegacyMTron::initialize() noexcept +{ + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginLegacyMTron initialize"); + return 0; +} + +void EmbLayerNormVarSeqlenPluginLegacyHFace::terminate() noexcept +{ + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginLegacyHFace terminate"); +} + +void EmbLayerNormVarSeqlenPluginLegacyMTron::terminate() noexcept +{ + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginLegacyMTron terminate"); +} + +size_t EmbLayerNormVarSeqlenPluginLegacyBase::getSerializationSize() const noexcept +{ + size_t const wordSize = getElementSize(mType); + return 2 * sizeof(float) * mLd // beta + gamma + + sizeof(mType) // + + sizeof(mLd) // + + sizeof(mWordVocabSize) // + + sizeof(mPosVocabSize) // + + sizeof(mTokVocabSize) // + + wordSize * mLd * mWordVocabSize // word emb + + wordSize * mLd * mPosVocabSize // pos emb + + wordSize * mLd * mTokVocabSize // tok emb + + sizeof(mMaskType) // mask type + ; +} + +void EmbLayerNormVarSeqlenPluginLegacyBase::serialize(void* buffer) const noexcept +{ + serialize_value(&buffer, mType); + serialize_value(&buffer, mLd); + serialize_value(&buffer, mWordVocabSize); + serialize_value(&buffer, mPosVocabSize); + serialize_value(&buffer, mTokVocabSize); + serialize_value(&buffer, mMaskType); + + char* d = static_cast(buffer); + size_t const wordSize = getElementSize(mType); + + serFromDev(d, mBetaDev.get(), mLd); + serFromDev(d, mGammaDev.get(), mLd); + serFromDev(d, static_cast(mWordEmbDev.get()), mLd * mWordVocabSize * wordSize); + serFromDev(d, static_cast(mPosEmbDev.get()), mLd * mPosVocabSize * wordSize); + serFromDev(d, static_cast(mTokEmbDev.get()), mLd * mTokVocabSize * wordSize); +} + +void EmbLayerNormVarSeqlenPluginLegacyBase::destroy() noexcept +{ + // This gets called when the network containing plugin is destroyed + mGammaDev.reset(nullptr); + mBetaDev.reset(nullptr); + mWordEmbDev.reset(nullptr); + mPosEmbDev.reset(nullptr); + mTokEmbDev.reset(nullptr); + delete this; +} + +void EmbLayerNormVarSeqlenPluginLegacyHFace::destroy() noexcept +{ + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginLegacyHFace destroy"); + EmbLayerNormVarSeqlenPluginLegacyBase::destroy(); +} + +void EmbLayerNormVarSeqlenPluginLegacyMTron::destroy() noexcept +{ + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenPluginLegacyMTron destroy"); + EmbLayerNormVarSeqlenPluginLegacyBase::destroy(); +} + +void EmbLayerNormVarSeqlenPluginLegacyBase::setPluginNamespace(char const* libNamespace) noexcept +{ + try + { + mNamespace = libNamespace; + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +char const* EmbLayerNormVarSeqlenPluginLegacyBase::getPluginNamespace() const noexcept +{ + return mNamespace.c_str(); +} + +/////////////////////// + +EmbLayerNormVarSeqlenPluginLegacyBaseCreator::EmbLayerNormVarSeqlenPluginLegacyBaseCreator() +{ + mPluginAttributes.clear(); + mPluginAttributes.emplace_back(PluginField("bert_embeddings_layernorm_beta")); + mPluginAttributes.emplace_back(PluginField("bert_embeddings_layernorm_gamma")); + mPluginAttributes.emplace_back(PluginField("bert_embeddings_word_embeddings")); + mPluginAttributes.emplace_back(PluginField("bert_embeddings_token_type_embeddings")); + mPluginAttributes.emplace_back(PluginField("bert_embeddings_position_embeddings")); + mPluginAttributes.emplace_back(PluginField("output_fp16")); + mFC.nbFields = mPluginAttributes.size(); + mFC.fields = mPluginAttributes.data(); +} + +char const* EmbLayerNormVarSeqlenPluginLegacyBaseCreator::getPluginName() const noexcept +{ + return kEMB_LAYER_NORM_VAR_SEQLEN_NAME; +} + +char const* EmbLayerNormVarSeqlenPluginLegacyHFaceCreator::getPluginVersion() const noexcept +{ + return kEMB_LAYER_NORM_VAR_SEQLEN_VERSION_HFACE; +} + +char const* EmbLayerNormVarSeqlenPluginLegacyMTronCreator::getPluginVersion() const noexcept +{ + return kEMB_LAYER_NORM_VAR_SEQLEN_VERSION_MTRON; +} + +PluginFieldCollection const* EmbLayerNormVarSeqlenPluginLegacyBaseCreator::getFieldNames() noexcept +{ + return &mFC; +} + +bool initializeFields(char const* name, PluginFieldCollection const* fc, Weights& beta, Weights& gamma, + Weights& word_emb, Weights& pos_emb, Weights& tok_emb) +{ + bool output_fp16 = false; + std::set const requiredAttributes{ + "bert_embeddings_layernorm_beta", + "bert_embeddings_layernorm_gamma", + "bert_embeddings_word_embeddings", + "bert_embeddings_token_type_embeddings", + "bert_embeddings_position_embeddings", + }; + plugin::validateRequiredAttributesExist(requiredAttributes, fc); + + for (int32_t i = 0; i < fc->nbFields; i++) + { + std::string field_name(fc->fields[i].name); + if (field_name.compare("bert_embeddings_layernorm_beta") == 0) + { + BERT_DEBUG_MSG("Building bert_embeddings_layernorm_beta..."); + beta.values = fc->fields[i].data; + beta.count = fc->fields[i].length; + beta.type = fieldTypeToDataType(fc->fields[i].type); + } + + if (field_name.compare("bert_embeddings_layernorm_gamma") == 0) + { + BERT_DEBUG_MSG("Building bert_embeddings_layernorm_gamma..."); + gamma.values = fc->fields[i].data; + gamma.count = fc->fields[i].length; + gamma.type = fieldTypeToDataType(fc->fields[i].type); + } + + if (field_name.compare("bert_embeddings_word_embeddings") == 0) + { + BERT_DEBUG_MSG("Building bert_embeddings_word_embeddings..."); + word_emb.values = fc->fields[i].data; + word_emb.count = fc->fields[i].length; + word_emb.type = fieldTypeToDataType(fc->fields[i].type); + } + + if (field_name.compare("bert_embeddings_token_type_embeddings") == 0) + { + BERT_DEBUG_MSG("Building bert_embeddings_token_type_embeddings..."); + tok_emb.values = fc->fields[i].data; + tok_emb.count = fc->fields[i].length; + tok_emb.type = fieldTypeToDataType(fc->fields[i].type); + } + + if (field_name.compare("bert_embeddings_position_embeddings") == 0) + { + BERT_DEBUG_MSG("Building bert_embeddings_position_embeddings..."); + pos_emb.values = fc->fields[i].data; + pos_emb.count = fc->fields[i].length; + pos_emb.type = fieldTypeToDataType(fc->fields[i].type); + } + if (field_name.compare("output_fp16") == 0) + { + BERT_DEBUG_MSG("Building output_fp16..."); + PLUGIN_VALIDATE(fc->fields[i].type == PluginFieldType::kINT32); + output_fp16 = static_cast(fc->fields[i].data)[0] != 0; + } + } + return output_fp16; +} + +IPluginV2* EmbLayerNormVarSeqlenPluginLegacyHFaceCreator::createPlugin( + char const* name, PluginFieldCollection const* fc) noexcept +{ + try + { + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenHFace createPlugin"); + + Weights beta{}; // required attribute: validateRequiredAttributesExist() call in initializeFields() will verify + // existence + Weights gamma{}; // required attribute: validateRequiredAttributesExist() call in initializeFields() will verify + // existence + Weights word_emb{}; // required attribute: validateRequiredAttributesExist() call in initializeFields() will + // verify existence + Weights pos_emb{}; // required attribute: validateRequiredAttributesExist() call in initializeFields() will + // verify existence + Weights tok_emb{}; // required attribute: validateRequiredAttributesExist() call in initializeFields() will + // verify existence + bool output_fp16 = initializeFields(name, fc, beta, gamma, word_emb, pos_emb, tok_emb); + + BERT_DEBUG_MSG("Building the Plugin..."); + EmbLayerNormVarSeqlenPluginLegacyHFace* p = new EmbLayerNormVarSeqlenPluginLegacyHFace( + name, output_fp16 ? DataType::kHALF : DataType::kFLOAT, beta, gamma, word_emb, pos_emb, tok_emb); + return p; + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +IPluginV2* EmbLayerNormVarSeqlenPluginLegacyMTronCreator::createPlugin( + char const* name, PluginFieldCollection const* fc) noexcept +{ + try + { + BERT_DEBUG_MSG("EmbLayerNormVarSeqlenMTron createPlugin"); + + Weights beta{}; // required attribute: validateRequiredAttributesExist() call in initializeFields() will verify + // existence + Weights gamma{}; // required attribute: validateRequiredAttributesExist() call in initializeFields() will verify + // existence + Weights word_emb{}; // required attribute: validateRequiredAttributesExist() call in initializeFields() will + // verify existence + Weights pos_emb{}; // required attribute: validateRequiredAttributesExist() call in initializeFields() will + // verify existence + Weights tok_emb{}; // required attribute: validateRequiredAttributesExist() call in initializeFields() will + // verify existence + bool output_fp16 = initializeFields(name, fc, beta, gamma, word_emb, pos_emb, tok_emb); + + BERT_DEBUG_MSG("Building the Plugin..."); + EmbLayerNormVarSeqlenPluginLegacyMTron* p = new EmbLayerNormVarSeqlenPluginLegacyMTron( + name, output_fp16 ? DataType::kHALF : DataType::kFLOAT, beta, gamma, word_emb, pos_emb, tok_emb); + return p; + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +IPluginV2* EmbLayerNormVarSeqlenPluginLegacyHFaceCreator::deserializePlugin( + char const* name, void const* serialData, size_t serialLength) noexcept +{ + try + { + // This object will be deleted when the network is destroyed, which will + // call EmbLayerNormVarSeqlen::destroy() + return new EmbLayerNormVarSeqlenPluginLegacyHFace(name, serialData, serialLength); + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +IPluginV2* EmbLayerNormVarSeqlenPluginLegacyMTronCreator::deserializePlugin( + char const* name, void const* serialData, size_t serialLength) noexcept +{ + try + { + // This object will be deleted when the network is destroyed, which will + // call EmbLayerNormVarSeqlen::destroy() + return new EmbLayerNormVarSeqlenPluginLegacyMTron(name, serialData, serialLength); + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +void EmbLayerNormVarSeqlenPluginLegacyBaseCreator::setPluginNamespace(char const* libNamespace) noexcept +{ + try + { + mNamespace = libNamespace; + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +char const* EmbLayerNormVarSeqlenPluginLegacyBaseCreator::getPluginNamespace() const noexcept +{ + return mNamespace.c_str(); +} diff --git a/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPluginLegacy.h b/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPluginLegacy.h new file mode 100644 index 00000000..a42a2b87 --- /dev/null +++ b/plugin/embLayerNormPlugin/embLayerNormVarSeqlenPluginLegacy.h @@ -0,0 +1,198 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 1993-2024 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 TRT_EMB_LAYER_NORM_VARSEQ_PLUGIN_LEGACY_H +#define TRT_EMB_LAYER_NORM_VARSEQ_PLUGIN_LEGACY_H + +#include + +#include "NvInferPlugin.h" +#include "NvInferRuntime.h" + +#include "common/bertCommon.h" +#include +#include + +namespace nvinfer1 +{ +namespace plugin +{ +namespace bert +{ + +template +int32_t embSkipLayerNormHFace(cudaStream_t stream, int32_t ld, int32_t B, int32_t S, int32_t const* inputIds, + int32_t const* tokenIds, int32_t const* cuSeqlens, float const* beta, float const* gamma, T const* wordEmb, + T const* posEmb, T const* tokEmb, int32_t const wordSize, int32_t const tokSize, T* output); + +template +int32_t embSkipLayerNormMTron(cudaStream_t stream, int32_t ld, int32_t B, int32_t S, int32_t const* inputIds, + int32_t const* tokenIds, int32_t const* cuSeqlens, float const* beta, float const* gamma, T const* wordEmb, + T const* posEmb, T const* tokEmb, int32_t const wordSize, int32_t const tokSize, T* output, T* skip); + +class EmbLayerNormVarSeqlenPluginLegacyBase : public nvinfer1::IPluginV2DynamicExt +{ +public: + EmbLayerNormVarSeqlenPluginLegacyBase(std::string const& name, DataType type, Weights const& beta, + Weights const& gamma, Weights const& word_emb, Weights const& pos_emb, Weights const& tok_emb, + DataType maskType); + + EmbLayerNormVarSeqlenPluginLegacyBase(std::string const& name, void const* data, size_t length); + + // It doesn't make sense to make EmbLayerNormVarSeqlenPluginLegacy without arguments, so we + // delete default constructor. + EmbLayerNormVarSeqlenPluginLegacyBase() = delete; + + // IPluginV2DynamicExt Methods + bool supportsFormatCombination( + int32_t pos, nvinfer1::PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept override; + size_t getWorkspaceSize(nvinfer1::PluginTensorDesc const* inputs, int32_t nbInputs, + nvinfer1::PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept override; + + // IPluginV2Ext Methods + nvinfer1::DataType getOutputDataType( + int32_t index, nvinfer1::DataType const* inputTypes, int32_t nbInputs) const noexcept override; + + // IPluginV2 Methods + char const* getPluginType() const noexcept override; + int32_t getNbOutputs() const noexcept override; + size_t getSerializationSize() const noexcept override; + void serialize(void* buffer) const noexcept override; + void destroy() noexcept override; + char const* getPluginNamespace() const noexcept override; + void setPluginNamespace(char const* pluginNamespace) noexcept override; + +protected: + std::string const mLayerName; + std::string mNamespace; + + bert::cuda_unique_ptr mGammaDev; + bert::cuda_unique_ptr mBetaDev; + bert::cuda_unique_ptr mWordEmbDev; + bert::cuda_unique_ptr mTokEmbDev; + bert::cuda_unique_ptr mPosEmbDev; + size_t mLd; // leading dim = hidden size + size_t mWordVocabSize; + size_t mPosVocabSize; + size_t mTokVocabSize; + bert::WeightsWithOwnership mBeta; + bert::WeightsWithOwnership mGamma; + bert::WeightsWithOwnership mWordEmb; + bert::WeightsWithOwnership mTokEmb; + bert::WeightsWithOwnership mPosEmb; + DataType mType{}; + DataType mMaskType{}; +}; + +class EmbLayerNormVarSeqlenPluginLegacyHFace : public EmbLayerNormVarSeqlenPluginLegacyBase +{ +public: + EmbLayerNormVarSeqlenPluginLegacyHFace(std::string const& name, nvinfer1::DataType const type, + nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma, nvinfer1::Weights const& word_emb, + nvinfer1::Weights const& pos_emb, nvinfer1::Weights const& tok_emb); + + EmbLayerNormVarSeqlenPluginLegacyHFace(std::string const& name, void const* data, size_t length); + + // It doesn't make sense to make EmbLayerNormVarSeqlenPluginLegacy without arguments, so we + // delete default constructor. + EmbLayerNormVarSeqlenPluginLegacyHFace() = delete; + + // IPluginV2DynamicExt Methods + nvinfer1::IPluginV2DynamicExt* clone() const noexcept override; + nvinfer1::DimsExprs getOutputDimensions(int32_t outputIndex, nvinfer1::DimsExprs const* inputs, int32_t nbInputs, + nvinfer1::IExprBuilder& exprBuilder) noexcept override; + void configurePlugin(nvinfer1::DynamicPluginTensorDesc const* in, int32_t nbInputs, + nvinfer1::DynamicPluginTensorDesc const* out, int32_t nbOutputs) noexcept override; + int32_t enqueue(nvinfer1::PluginTensorDesc const* inputDesc, nvinfer1::PluginTensorDesc const* outputDesc, + void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override; + + // IPluginV2 Methods + int32_t initialize() noexcept override; + void terminate() noexcept override; + void destroy() noexcept override; + char const* getPluginVersion() const noexcept override; +}; + +class EmbLayerNormVarSeqlenPluginLegacyMTron : public EmbLayerNormVarSeqlenPluginLegacyBase +{ +public: + EmbLayerNormVarSeqlenPluginLegacyMTron(std::string const& name, nvinfer1::DataType const type, + nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma, nvinfer1::Weights const& word_emb, + nvinfer1::Weights const& pos_emb, nvinfer1::Weights const& tok_emb); + + EmbLayerNormVarSeqlenPluginLegacyMTron(std::string const& name, void const* data, size_t length); + + // It doesn't make sense to make EmbLayerNormVarSeqlenPluginLegacy without arguments, so we + // delete default constructor. + EmbLayerNormVarSeqlenPluginLegacyMTron() = delete; + + // IPluginV2DynamicExt Methods + nvinfer1::IPluginV2DynamicExt* clone() const noexcept override; + nvinfer1::DimsExprs getOutputDimensions(int32_t outputIndex, nvinfer1::DimsExprs const* inputs, int32_t nbInputs, + nvinfer1::IExprBuilder& exprBuilder) noexcept override; + void configurePlugin(nvinfer1::DynamicPluginTensorDesc const* in, int32_t nbInputs, + nvinfer1::DynamicPluginTensorDesc const* out, int32_t nbOutputs) noexcept override; + int32_t enqueue(nvinfer1::PluginTensorDesc const* inputDesc, nvinfer1::PluginTensorDesc const* outputDesc, + void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override; + + // IPluginV2 Methods + int32_t initialize() noexcept override; + void terminate() noexcept override; + void destroy() noexcept override; + char const* getPluginVersion() const noexcept override; +}; + +class EmbLayerNormVarSeqlenPluginLegacyBaseCreator : public nvinfer1::IPluginCreator +{ +public: + EmbLayerNormVarSeqlenPluginLegacyBaseCreator(); + + char const* getPluginName() const noexcept override; + + nvinfer1::PluginFieldCollection const* getFieldNames() noexcept override; + + void setPluginNamespace(char const* pluginNamespace) noexcept override; + + char const* getPluginNamespace() const noexcept override; + +protected: + static nvinfer1::PluginFieldCollection mFC; + static std::vector mPluginAttributes; + std::string mNamespace; +}; + +class EmbLayerNormVarSeqlenPluginLegacyHFaceCreator : public EmbLayerNormVarSeqlenPluginLegacyBaseCreator +{ +public: + nvinfer1::IPluginV2* createPlugin(char const* name, nvinfer1::PluginFieldCollection const* fc) noexcept override; + char const* getPluginVersion() const noexcept override; + nvinfer1::IPluginV2* deserializePlugin( + char const* name, void const* serialData, size_t serialLength) noexcept override; +}; + +class EmbLayerNormVarSeqlenPluginLegacyMTronCreator : public EmbLayerNormVarSeqlenPluginLegacyBaseCreator +{ +public: + nvinfer1::IPluginV2* createPlugin(char const* name, nvinfer1::PluginFieldCollection const* fc) noexcept override; + char const* getPluginVersion() const noexcept override; + nvinfer1::IPluginV2* deserializePlugin( + char const* name, void const* serialData, size_t serialLength) noexcept override; +}; + +} // namespace bert +} // namespace plugin +} // namespace nvinfer1 +#endif // TRT_EMB_LAYER_NORM_VARSEQ_PLUGIN_LEGACY_H diff --git a/plugin/fcPlugin/fcPlugin.h b/plugin/fcPlugin/fcPlugin.h index 855ce96d..458d4dc3 100644 --- a/plugin/fcPlugin/fcPlugin.h +++ b/plugin/fcPlugin/fcPlugin.h @@ -451,12 +451,18 @@ nvinfer1::pluginInternal::cublasLtMatmulAlgo_t gemmSearch(int32_t const m, int32 Gemm g(m, n, k, false, false); std::vector perfResults(kNB_ALGO_COMBINATIONS); - PLUGIN_CUASSERT(cudaMallocAsync(reinterpret_cast(&g.A), g.bytesA, stream)); - PLUGIN_CUASSERT(cudaMallocAsync(reinterpret_cast(&g.B), g.bytesB, stream)); - PLUGIN_CUASSERT(cudaMallocAsync(reinterpret_cast(&g.C), g.bytesC, stream)); + bool const useAsync = supportsMemPools(); + + PLUGIN_CUASSERT(useAsync ? cudaMallocAsync(reinterpret_cast(&g.A), g.bytesA, stream) + : cudaMalloc(reinterpret_cast(&g.A), g.bytesA)); + PLUGIN_CUASSERT(useAsync ? cudaMallocAsync(reinterpret_cast(&g.B), g.bytesB, stream) + : cudaMalloc(reinterpret_cast(&g.B), g.bytesB)); + PLUGIN_CUASSERT(useAsync ? cudaMallocAsync(reinterpret_cast(&g.C), g.bytesC, stream) + : cudaMalloc(reinterpret_cast(&g.C), g.bytesC)); void* workspace; - PLUGIN_CUASSERT(cudaMallocAsync(&workspace, workspaceSize, stream)); + PLUGIN_CUASSERT( + useAsync ? cudaMallocAsync(&workspace, workspaceSize, stream) : cudaMalloc(&workspace, workspaceSize)); nvinfer1::pluginInternal::cublasLtHandle_t lt; nvinfer1::pluginInternal::CublasLtWrapper& cublasLtWrapper = nvinfer1::pluginInternal::getCublasLtWrapper(); PLUGIN_CUBLASASSERT(cublasLtWrapper.cublasLtCreate(<)); @@ -464,11 +470,11 @@ nvinfer1::pluginInternal::cublasLtMatmulAlgo_t gemmSearch(int32_t const m, int32 LtGemmSearch(lt, g, workspace, workspaceSize, perfResults, stream); PLUGIN_CUASSERT(cudaStreamSynchronize(stream)); PLUGIN_CUBLASASSERT(cublasLtWrapper.cublasLtDestroy(lt)); - PLUGIN_CUASSERT(cudaFreeAsync(workspace, stream)); + PLUGIN_CUASSERT(useAsync ? cudaFreeAsync(workspace, stream) : cudaFree(workspace)); - PLUGIN_CUASSERT(cudaFreeAsync(g.A, stream)); - PLUGIN_CUASSERT(cudaFreeAsync(g.B, stream)); - PLUGIN_CUASSERT(cudaFreeAsync(g.C, stream)); + PLUGIN_CUASSERT(useAsync ? cudaFreeAsync(g.A, stream) : cudaFree(g.A)); + PLUGIN_CUASSERT(useAsync ? cudaFreeAsync(g.B, stream) : cudaFree(g.B)); + PLUGIN_CUASSERT(useAsync ? cudaFreeAsync(g.C, stream) : cudaFree(g.C)); actualWorkspace = perfResults[0].workspaceSize; return perfResults[0].algo; @@ -480,12 +486,18 @@ nvinfer1::pluginInternal::cublasLtMatmulAlgo_t gemmSearch( { std::vector perfResults(kNB_ALGO_COMBINATIONS); - PLUGIN_CUASSERT(cudaMallocAsync(&g.A, g.bytesA, stream)); - PLUGIN_CUASSERT(cudaMallocAsync(&g.B, g.bytesB, stream)); - PLUGIN_CUASSERT(cudaMallocAsync(&g.C, g.bytesC, stream)); + bool const useAsync = supportsMemPools(); + + PLUGIN_CUASSERT(useAsync ? cudaMallocAsync(reinterpret_cast(&g.A), g.bytesA, stream) + : cudaMalloc(reinterpret_cast(&g.A), g.bytesA)); + PLUGIN_CUASSERT(useAsync ? cudaMallocAsync(reinterpret_cast(&g.B), g.bytesB, stream) + : cudaMalloc(reinterpret_cast(&g.B), g.bytesB)); + PLUGIN_CUASSERT(useAsync ? cudaMallocAsync(reinterpret_cast(&g.C), g.bytesC, stream) + : cudaMalloc(reinterpret_cast(&g.C), g.bytesC)); void* workspace; - PLUGIN_CUASSERT(cudaMallocAsync(&workspace, workspaceSize, stream)); + PLUGIN_CUASSERT( + useAsync ? cudaMallocAsync(&workspace, workspaceSize, stream) : cudaMalloc(&workspace, workspaceSize)); nvinfer1::pluginInternal::cublasLtHandle_t lt; nvinfer1::pluginInternal::CublasLtWrapper& cublasLtWrapper = nvinfer1::pluginInternal::getCublasLtWrapper(); PLUGIN_CUBLASASSERT(cublasLtWrapper.cublasLtCreate(<)); @@ -493,11 +505,11 @@ nvinfer1::pluginInternal::cublasLtMatmulAlgo_t gemmSearch( LtGemmSearch(lt, g, workspace, workspaceSize, perfResults, stream); PLUGIN_CUASSERT(cudaStreamSynchronize(stream)); PLUGIN_CUBLASASSERT(cublasLtWrapper.cublasLtDestroy(lt)); - PLUGIN_CUASSERT(cudaFreeAsync(workspace, stream)); + PLUGIN_CUASSERT(useAsync ? cudaFreeAsync(workspace, stream) : cudaFree(workspace)); - PLUGIN_CUASSERT(cudaFreeAsync(g.A, stream)); - PLUGIN_CUASSERT(cudaFreeAsync(g.B, stream)); - PLUGIN_CUASSERT(cudaFreeAsync(g.C, stream)); + PLUGIN_CUASSERT(useAsync ? cudaFreeAsync(g.A, stream) : cudaFree(g.A)); + PLUGIN_CUASSERT(useAsync ? cudaFreeAsync(g.B, stream) : cudaFree(g.B)); + PLUGIN_CUASSERT(useAsync ? cudaFreeAsync(g.C, stream) : cudaFree(g.C)); actualWorkspace = perfResults[0].workspaceSize; return perfResults[0].algo; diff --git a/plugin/skipLayerNormPlugin/CustomSkipLayerNormPluginDynamic_PluginConfig.yaml b/plugin/skipLayerNormPlugin/CustomSkipLayerNormPluginDynamic_PluginConfig.yaml index a39fd9bc..117fcbf1 100644 --- a/plugin/skipLayerNormPlugin/CustomSkipLayerNormPluginDynamic_PluginConfig.yaml +++ b/plugin/skipLayerNormPlugin/CustomSkipLayerNormPluginDynamic_PluginConfig.yaml @@ -16,9 +16,9 @@ # --- name: CustomSkipLayerNormPluginDynamic -interface: "IPluginV2DynamicExt" +interface: "IPluginV3" versions: - "1": + "5": # SkipLayerNormPluginV3 inputs: - input - skip @@ -115,13 +115,13 @@ versions: attribute_options: type_id: value: 0 - ld: + ld: value: 128 - beta: + beta: shape: "1, 1, 128" - gamma: + gamma: shape: "1, 1, 128" - bias: + bias: shape: "1, 1, 128" config2: input_types: @@ -130,12 +130,118 @@ versions: attribute_options: type_id: value: 1 - ld: + ld: value: 768 - beta: + beta: shape: "1, 1, 768" - gamma: + gamma: shape: "1, 1, 768" - bias: + bias: + shape: "1, 1, 768" + "6": # SkipLayerNormVarSeqlenPluginV3 + inputs: + - input + - skip + outputs: + - output + input_dims: + input: 5 + skip: 5 + input_dim_constraints: + - "input_2 == bias_2" + - "skip_0 == input_0" + - "skip_1 == input_1" + - "skip_2 == input_2" + input_dim_range: + input: + min: "=1, =1, =1, =1, =1" + max: "=pinf, =pinf, =pinf, =1, =1" + skip: + min: "=1, =1, =1, =1, =1" + max: "=pinf, =pinf, =pinf, =1, =1" + supported_input_types: + - combination1: + input: float32 + skip: float32 + - combination2: + input: float16 + skip: float16 + output_dims: + output: "input_0, input_1, input_2, input_3, input_4" + attributes: + - type_id + - beta + - gamma + - bias + attribute_types: + type_id: int32 + beta: float32 + gamma: float32 + bias: float32 + attribute_dims: + type_id: 1 + beta: 3 + gamma: 3 + bias: 3 + attribute_dim_range: + type_id: + min: "=1" + max: "=1" + beta: + min: "=1, =1, =1" + max: "=1, =1, =pinf" + gamma: + min: "=1, =1, =1" + max: "=1, =1, =pinf" + bias: + min: "=1, =1, =1" + max: "=1, =1, =pinf" + attribute_options: + type_id: + - 0 + - 1 + - 2 + beta: + min: "=ninf" + max: "=pinf" + gamma: + min: "=ninf" + max: "=pinf" + bias: + min: "=ninf" + max: "=pinf" + attributes_required: + - type_id + - beta + - gamma + golden_reference_script: "plugin/skipLayerNormPlugin/CustomSkipLayerNormPluginDynamic_PluginReference.py" + abs_tol: 1e-2 + rel_tol: 1e-2 + configs: + config1: + input_types: + input: float32 + skip: float32 + attribute_options: + type_id: + value: 0 + beta: + shape: "1, 1, 128" + gamma: + shape: "1, 1, 128" + bias: + shape: "1, 1, 128" + config2: + input_types: + input: float16 + skip: float16 + attribute_options: + type_id: + value: 1 + beta: + shape: "1, 1, 768" + gamma: + shape: "1, 1, 768" + bias: shape: "1, 1, 768" ... diff --git a/plugin/skipLayerNormPlugin/README.md b/plugin/skipLayerNormPlugin/README.md index 5b5ffbda..e80a846b 100644 --- a/plugin/skipLayerNormPlugin/README.md +++ b/plugin/skipLayerNormPlugin/README.md @@ -21,7 +21,7 @@ Optionally, adds a bias vector before layer-normalization. The `skipLayerNormPlugin` takes two inputs; `input` and `skip`. `input` -For V1 and V2, input is a tensor with shape `[S, B, E, 1, 1]` where `S` is the sequence length, `B` is the batch size, `E` is the hidden size, and the last two dimensions are of size 1. +For V1, V2, V5, V6, input is a tensor with shape `[S, B, E, 1, 1]` where `S` is the sequence length, `B` is the batch size, `E` is the hidden size, and the last two dimensions are of size 1. For V3 and V4, input is a tensor with shape `[1, E, S', 1]` where `S'` is the accumulated sequence length, `E` is the hidden size, and the first and last dimensions are of size 1. `skip` @@ -41,13 +41,13 @@ output is a tensor with the same shape as the input. The parameters are defined below and consists of the following attributes: -| Type | Parameter | Version | Description -|----------|-----------------------------------------|------------|------------------------------------------------------------------- -|`int` |`type_id` | 1, 2 |Integer encoding the DataType (0: FP32, 1: FP16, 2: INT8) -|`int` |`ld` | 1 |The leading dimension of the input tensor, corresponding to the hidden size, denoted by `E` above. -|`Weights` |`beta` | 1, 2, 3, 4|The mean to normalize to. Shape: `[1, 1, E]` -|`Weights` |`gamma` | 1, 2, 3, 4|The standard deviation to normalize to. Shape: `[1, 1, E]` -|`Weights` |`bias` | 1, 2 |An optional bias vector to add before normalization. Shape: `[1, 1, E]` +| Type | Parameter | Version | Description +|----------|-----------------------------------------|-------------------------|------------------------------------------------------------------- +|`int` |`type_id` | 1, 2, 5, 6 |Integer encoding the DataType (0: FP32, 1: FP16, 2: INT8) +|`int` |`ld` | 1, 5 |The leading dimension of the input tensor, corresponding to the hidden size, denoted by `E` above. +|`Weights` |`beta` | 1, 2, 3, 4, 5, 6, 7, 8 |The mean to normalize to. Shape: `[1, 1, E]` +|`Weights` |`gamma` | 1, 2, 3, 4, 5, 6, 7, 8 |The standard deviation to normalize to. Shape: `[1, 1, E]` +|`Weights` |`bias` | 1, 2, 5, 6 |An optional bias vector to add before normalization. Shape: `[1, 1, E]` ## Additional resources @@ -63,6 +63,9 @@ documentation. ## Changelog +July 2024 +Add v5, v6, v7 and v8 plugins that duplicate the behavior of v1, v3, v3 and v4 plugins respectively, but implement the `IPluginV3` interface instead of the deprecated `IPluginV2DynamicExt` interface. + February 2024 Add epsilon to avoid divide by zero. diff --git a/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPlugin.cpp b/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPlugin.cpp index 1b74f944..266ba76c 100644 --- a/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPlugin.cpp +++ b/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPlugin.cpp @@ -18,6 +18,7 @@ #include "skipLayerNormInt8InterleavedPlugin.h" #include "NvInfer.h" #include "common/serialize.hpp" + #include #include @@ -30,9 +31,59 @@ using namespace nvinfer1::plugin::bert; // Clip plugin specific constants namespace { -char const* kSKIP_LAYER_NORM_INTERLEAVED_VERSION_HFACE{"3"}; -char const* kSKIP_LAYER_NORM_INTERLEAVED_VERSION_MTRON{"4"}; -char const* kSKIP_LAYER_NORM_INTERLEAVED_NAME{"CustomSkipLayerNormPluginDynamic"}; +constexpr char const* kSKIP_LAYER_NORM_INTERLEAVED_VERSION_HFACE{"7"}; +constexpr char const* kSKIP_LAYER_NORM_INTERLEAVED_VERSION_MTRON{"8"}; +constexpr char const* kSKIP_LAYER_NORM_INTERLEAVED_NAME{"CustomSkipLayerNormPluginDynamic"}; + +void checkDescs(PluginTensorDesc const& iDesc, PluginTensorDesc const& sDesc, PluginTensorDesc const& oDesc) +{ + PLUGIN_VALIDATE(iDesc.dims.nbDims == 4); + PLUGIN_VALIDATE(iDesc.dims.nbDims == sDesc.dims.nbDims); + PLUGIN_VALIDATE(std::equal(iDesc.dims.d, iDesc.dims.d + iDesc.dims.nbDims, sDesc.dims.d)); + PLUGIN_VALIDATE(std::equal(iDesc.dims.d, iDesc.dims.d + iDesc.dims.nbDims, oDesc.dims.d)); + PLUGIN_VALIDATE(iDesc.dims.d[0] == 1); + PLUGIN_VALIDATE(iDesc.dims.d[3] == 1); + PLUGIN_VALIDATE(iDesc.format == TensorFormat::kCHW32); + PLUGIN_VALIDATE(iDesc.type == DataType::kINT8); + PLUGIN_VALIDATE(iDesc.format == sDesc.format); + PLUGIN_VALIDATE(iDesc.format == oDesc.format); + PLUGIN_VALIDATE(iDesc.type == sDesc.type); + PLUGIN_VALIDATE(iDesc.type == oDesc.type); +} + +void buildBetaAndGamma(PluginFieldCollection const* fc, Weights& beta, Weights& gamma) +{ + PLUGIN_VALIDATE(fc != nullptr, "SkipLayerNorm: Plugin Field collection is null"); + PLUGIN_VALIDATE(fc->fields != nullptr, "SkipLayerNorm: Plugin Fields are null"); + plugin::validateRequiredAttributesExist({"beta", "gamma"}, fc); + + for (int32_t i = 0; i < fc->nbFields; i++) + { + std::string fieldName(fc->fields[i].name); + + if (fieldName.compare("beta") == 0) + { + BERT_DEBUG_MSG("Building beta..."); + beta.values = fc->fields[i].data; + beta.count = fc->fields[i].length; + beta.type = fieldTypeToDataType(fc->fields[i].type); + } + + if (fieldName.compare("gamma") == 0) + { + BERT_DEBUG_MSG("Building gamma..."); + gamma.values = fc->fields[i].data; + gamma.count = fc->fields[i].length; + gamma.type = fieldTypeToDataType(fc->fields[i].type); + } + } + + PLUGIN_VALIDATE(beta.values != nullptr, "SkipLayerNorm: invalid beta"); + PLUGIN_VALIDATE(beta.count > 0, "SkipLayerNorm: invalid beta"); + + PLUGIN_VALIDATE(gamma.values != nullptr, "SkipLayerNorm: invalid gamma"); + PLUGIN_VALIDATE(gamma.count > 0, "SkipLayerNorm: invalid gamma"); +} } // namespace // Static class fields initialization @@ -42,17 +93,7 @@ std::vector SkipLayerNormInterleavedPluginBaseCreator::mPluginAttri REGISTER_TENSORRT_PLUGIN(SkipLayerNormInterleavedPluginHFaceCreator); REGISTER_TENSORRT_PLUGIN(SkipLayerNormInterleavedPluginMTronCreator); -constexpr auto param_type = DataType::kHALF; - -static inline DataType getParamWordType(DataType cfgType) -{ - if (cfgType == DataType::kINT8) - { - return DataType::kHALF; - } - - return cfgType; -} +constexpr auto kPARAM_TYPE = DataType::kHALF; SkipLayerNormInterleavedPluginBase::SkipLayerNormInterleavedPluginBase( std::string const& name, Weights const& beta, Weights const& gamma) @@ -66,10 +107,10 @@ SkipLayerNormInterleavedPluginBase::SkipLayerNormInterleavedPluginBase( PLUGIN_VALIDATE(beta.count == gamma.count); // dataType for beta, gamma weights is always fp16 - mParamWordsize = getElementSize(param_type); + mParamWordsize = getElementSize(kPARAM_TYPE); - mBeta.convertAndCopy(beta, param_type); - mGamma.convertAndCopy(gamma, param_type); + mBeta.convertAndCopy(beta, kPARAM_TYPE); + mGamma.convertAndCopy(gamma, kPARAM_TYPE); } SkipLayerNormInterleavedPluginHFace::SkipLayerNormInterleavedPluginHFace( @@ -84,48 +125,48 @@ SkipLayerNormInterleavedPluginMTron::SkipLayerNormInterleavedPluginMTron( { } -SkipLayerNormInterleavedPluginBase::SkipLayerNormInterleavedPluginBase( - std::string const& name, void const* data, size_t length) - : mLayerName(name) - , mGammaDev(nullptr) - , mBetaDev(nullptr) - , mParamsOnDevice(false) +SkipLayerNormInterleavedPluginBase::~SkipLayerNormInterleavedPluginBase() { - // Deserialize in the same order as serialization - deserialize_value(&data, &length, &mLd); - - mParamWordsize = getElementSize(param_type); - - char const* d = static_cast(data); - mBeta.convertAndCopy(d, mLd, param_type); - mGamma.convertAndCopy(d, mLd, param_type); + try + { + mGammaDev.reset(nullptr); + mBetaDev.reset(nullptr); + } + catch (std::exception const& e) + { + caughtError(e); + } } -SkipLayerNormInterleavedPluginHFace::SkipLayerNormInterleavedPluginHFace( - std::string const& name, void const* data, size_t length) - : SkipLayerNormInterleavedPluginBase(name, data, length) +SkipLayerNormInterleavedPluginHFace::~SkipLayerNormInterleavedPluginHFace() { - BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFace deserialize"); + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFace destructor"); } -SkipLayerNormInterleavedPluginMTron::SkipLayerNormInterleavedPluginMTron( - std::string const& name, void const* data, size_t length) - : SkipLayerNormInterleavedPluginBase(name, data, length) +SkipLayerNormInterleavedPluginMTron::~SkipLayerNormInterleavedPluginMTron() { - BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTron deserialize"); + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTron destructor"); } -// IPluginV2DynamicExt Methods -IPluginV2DynamicExt* SkipLayerNormInterleavedPluginHFace::clone() const noexcept +////// +// IPluginV3 method definitions: +// - getCapabilityInterface() (Base) +// - clone() (HFace, MTron) +////// +IPluginCapability* SkipLayerNormInterleavedPluginBase::getCapabilityInterface(PluginCapabilityType type) noexcept { try { - BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFace clone"); - - auto* p = new SkipLayerNormInterleavedPluginHFace(mLayerName, mBeta, mGamma); - p->initialize(); - p->setPluginNamespace(mNamespace.c_str()); - return p; + if (type == PluginCapabilityType::kBUILD) + { + return static_cast(this); + } + if (type == PluginCapabilityType::kRUNTIME) + { + return static_cast(this); + } + PLUGIN_ASSERT(type == PluginCapabilityType::kCORE); + return static_cast(this); } catch (std::exception const& e) { @@ -134,14 +175,13 @@ IPluginV2DynamicExt* SkipLayerNormInterleavedPluginHFace::clone() const noexcept return nullptr; } -IPluginV2DynamicExt* SkipLayerNormInterleavedPluginMTron::clone() const noexcept +IPluginV3* SkipLayerNormInterleavedPluginHFace::clone() noexcept { try { - BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTron clone"); + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFace clone"); - auto* p = new SkipLayerNormInterleavedPluginMTron(mLayerName, mBeta, mGamma); - p->initialize(); + auto* p = new SkipLayerNormInterleavedPluginHFace(mLayerName, mBeta, mGamma); p->setPluginNamespace(mNamespace.c_str()); return p; } @@ -152,46 +192,48 @@ IPluginV2DynamicExt* SkipLayerNormInterleavedPluginMTron::clone() const noexcept return nullptr; } -DimsExprs SkipLayerNormInterleavedPluginBase::getOutputDimensions( - int32_t outputIndex, DimsExprs const* inputs, int32_t nbInputs, IExprBuilder& exprBuilder) noexcept +IPluginV3* SkipLayerNormInterleavedPluginMTron::clone() noexcept { try { - PLUGIN_VALIDATE(inputs != nullptr); - PLUGIN_VALIDATE(nbInputs == 2); - PLUGIN_VALIDATE(outputIndex >= 0 && outputIndex < getNbOutputs()); - PLUGIN_VALIDATE(inputs[0].nbDims == inputs[1].nbDims); - return inputs[0]; + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTron clone"); + + auto* p = new SkipLayerNormInterleavedPluginMTron(mLayerName, mBeta, mGamma); + p->setPluginNamespace(mNamespace.c_str()); + return p; } catch (std::exception const& e) { caughtError(e); } - return DimsExprs{}; + return nullptr; } -bool SkipLayerNormInterleavedPluginBase::supportsFormatCombination( - int32_t pos, PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept -{ - try - { - PLUGIN_VALIDATE(inOut != nullptr); - PLUGIN_VALIDATE(nbInputs == 2); - PLUGIN_VALIDATE(nbOutputs == getNbOutputs()); - PLUGIN_VALIDATE(pos >= 0 && pos < (nbInputs + nbOutputs)); +// End IPluginV3 method definitions - PluginTensorDesc const& desc = inOut[pos]; - return desc.type == DataType::kINT8 && desc.format == TensorFormat::kCHW32; - } - catch (std::exception const& e) - { - caughtError(e); - } - return false; +////// +// IPluginV3OneRuntime method definitions: +// - getFieldsToSerialize() (Base) +// - onShapeChange() (Base) +// - attachToContext() (HFace, MTron) +// - execute() (HFace, MTron) +///// +PluginFieldCollection const* SkipLayerNormInterleavedPluginBase::getFieldsToSerialize() noexcept +{ + mDataToSerialize.clear(); + mDataToSerialize.emplace_back( + "beta", static_cast(mBeta.values), PluginFieldType::kFLOAT16, mBeta.count); + PLUGIN_ASSERT(mBeta.type == kPARAM_TYPE); + mDataToSerialize.emplace_back( + "gamma", static_cast(mGamma.values), PluginFieldType::kFLOAT16, mGamma.count); + PLUGIN_ASSERT(mGamma.type == kPARAM_TYPE); + mFCToSerialize.nbFields = mDataToSerialize.size(); + mFCToSerialize.fields = mDataToSerialize.data(); + return &mFCToSerialize; } -void SkipLayerNormInterleavedPluginBase::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, - DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept +int32_t SkipLayerNormInterleavedPluginBase::onShapeChange( + PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) noexcept { try { @@ -200,51 +242,36 @@ void SkipLayerNormInterleavedPluginBase::configurePlugin(DynamicPluginTensorDesc PLUGIN_VALIDATE(outputs != nullptr); PLUGIN_VALIDATE(nbOutputs == getNbOutputs()); PLUGIN_VALIDATE(nbInputs == 2); - PLUGIN_VALIDATE(DataType::kINT8 == inputs[0].desc.type); - PLUGIN_VALIDATE(DataType::kINT8 == inputs[1].desc.type); + PLUGIN_VALIDATE(DataType::kINT8 == inputs[0].type); + PLUGIN_VALIDATE(DataType::kINT8 == inputs[1].type); - auto const& inDims0 = inputs[0].desc.dims; - auto const& inDims1 = inputs[1].desc.dims; + auto const& inDims0 = inputs[0].dims; + auto const& inDims1 = inputs[1].dims; TRT_UNUSED inDims1; PLUGIN_VALIDATE(inDims0.nbDims == inDims1.nbDims); PLUGIN_VALIDATE(std::equal(inDims0.d, inDims0.d + inDims0.nbDims, inDims1.d)); - mParamWordsize = getElementSize(param_type); + mParamWordsize = getElementSize(kPARAM_TYPE); if (!mParamsOnDevice) { - copyToDevice(mGamma, getWeightsSize(mGamma, param_type), mGammaDev); - copyToDevice(mBeta, getWeightsSize(mBeta, param_type), mBetaDev); + copyToDevice(mGamma, getWeightsSize(mGamma, kPARAM_TYPE), mGammaDev); + copyToDevice(mBeta, getWeightsSize(mBeta, kPARAM_TYPE), mBetaDev); mParamsOnDevice = true; } + return pluginStatus_t::STATUS_SUCCESS; } catch (std::exception const& e) { caughtError(e); } + return pluginStatus_t::STATUS_FAILURE; } -size_t SkipLayerNormInterleavedPluginBase::getWorkspaceSize( - PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept +IPluginV3* SkipLayerNormInterleavedPluginBase::attachToContext(IPluginResourceContext* context) noexcept { - return 0; -} - -void checkDescs(PluginTensorDesc const& iDesc, PluginTensorDesc const& sDesc, PluginTensorDesc const& oDesc) -{ - PLUGIN_VALIDATE(iDesc.dims.nbDims == 4); - PLUGIN_VALIDATE(iDesc.dims.nbDims == sDesc.dims.nbDims); - PLUGIN_VALIDATE(std::equal(iDesc.dims.d, iDesc.dims.d + iDesc.dims.nbDims, sDesc.dims.d)); - PLUGIN_VALIDATE(std::equal(iDesc.dims.d, iDesc.dims.d + iDesc.dims.nbDims, oDesc.dims.d)); - PLUGIN_VALIDATE(iDesc.dims.d[0] == 1); - PLUGIN_VALIDATE(iDesc.dims.d[3] == 1); - PLUGIN_VALIDATE(iDesc.format == TensorFormat::kCHW32); - PLUGIN_VALIDATE(iDesc.type == DataType::kINT8); - PLUGIN_VALIDATE(iDesc.format == sDesc.format); - PLUGIN_VALIDATE(iDesc.format == oDesc.format); - PLUGIN_VALIDATE(iDesc.type == sDesc.type); - PLUGIN_VALIDATE(iDesc.type == oDesc.type); + return clone(); } int32_t SkipLayerNormInterleavedPluginHFace::enqueue(PluginTensorDesc const* inputDesc, @@ -331,41 +358,17 @@ int32_t SkipLayerNormInterleavedPluginMTron::enqueue(PluginTensorDesc const* inp } return -1; } - -// IPluginV2Ext Methods -DataType SkipLayerNormInterleavedPluginBase::getOutputDataType( - int32_t index, DataType const* inputTypes, int32_t nbInputs) const noexcept -{ - try - { - PLUGIN_VALIDATE(inputTypes != nullptr); - PLUGIN_VALIDATE(index >= 0 && index < getNbOutputs()); - PLUGIN_VALIDATE(nbInputs == 2); - return inputTypes[0]; - } - catch (std::exception const& e) - { - caughtError(e); - } - return DataType{}; -} - -// IPluginV2 Methods -char const* SkipLayerNormInterleavedPluginBase::getPluginType() const noexcept -{ - return kSKIP_LAYER_NORM_INTERLEAVED_NAME; -} - -char const* SkipLayerNormInterleavedPluginHFace::getPluginVersion() const noexcept -{ - return kSKIP_LAYER_NORM_INTERLEAVED_VERSION_HFACE; -} - -char const* SkipLayerNormInterleavedPluginMTron::getPluginVersion() const noexcept -{ - return kSKIP_LAYER_NORM_INTERLEAVED_VERSION_MTRON; -} - +// end IPluginV3OneRuntime method definitions + +/////// +// IPluginV3OneBuild method definitions +// - getNbOutputs() (MTron, HFace) +// - supportsFormatCombination() (Base) +// - getOutputShapes (Base) +// - getOutputDataType() (Base) +// - configurePlugin() (Base) +// - getWorkSpaceSize() (Base) +////// int32_t SkipLayerNormInterleavedPluginHFace::getNbOutputs() const noexcept { return 1; @@ -376,79 +379,102 @@ int32_t SkipLayerNormInterleavedPluginMTron::getNbOutputs() const noexcept return 2; } -int32_t SkipLayerNormInterleavedPluginHFace::initialize() noexcept -{ - BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFace initialize"); - return 0; -} - -int32_t SkipLayerNormInterleavedPluginMTron::initialize() noexcept -{ - BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTron initialize"); - return 0; -} - -void SkipLayerNormInterleavedPluginHFace::terminate() noexcept -{ - BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFace terminate"); -} - -void SkipLayerNormInterleavedPluginMTron::terminate() noexcept -{ - BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTron terminate"); -} - -size_t SkipLayerNormInterleavedPluginBase::getSerializationSize() const noexcept +bool SkipLayerNormInterleavedPluginBase::supportsFormatCombination( + int32_t pos, DynamicPluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept { - return 2 * mParamWordsize * mLd + sizeof(mLd); + try + { + PLUGIN_VALIDATE(inOut != nullptr); + PLUGIN_VALIDATE(nbInputs == 2); + PLUGIN_VALIDATE(nbOutputs == getNbOutputs()); + PLUGIN_VALIDATE(pos >= 0 && pos < (nbInputs + nbOutputs)); + PluginTensorDesc const& desc = inOut[pos].desc; + return desc.type == DataType::kINT8 && desc.format == TensorFormat::kCHW32; + } + catch (std::exception const& e) + { + caughtError(e); + } + return false; } -void SkipLayerNormInterleavedPluginBase::serialize(void* buffer) const noexcept +int32_t SkipLayerNormInterleavedPluginBase::getOutputShapes(DimsExprs const* inputs, int32_t nbInputs, + DimsExprs const* shapeInputs, int32_t nbShapeInputs, DimsExprs* outputs, int32_t nbOutputs, + IExprBuilder& exprBuilder) noexcept { try { - serialize_value(&buffer, mLd); - - char* d = static_cast(buffer); - serFromDev(d, static_cast(mBetaDev.get()), mLd * mParamWordsize); - serFromDev(d, static_cast(mGammaDev.get()), mLd * mParamWordsize); + PLUGIN_VALIDATE(inputs != nullptr); + PLUGIN_VALIDATE(nbInputs == 2); + PLUGIN_VALIDATE(nbOutputs == getNbOutputs()); + PLUGIN_VALIDATE(inputs[0].nbDims == inputs[1].nbDims); + for (int32_t i = 0; i < nbOutputs; ++i) + { + outputs[i] = inputs[0]; + } + return pluginStatus_t::STATUS_SUCCESS; } catch (std::exception const& e) { caughtError(e); } + return pluginStatus_t::STATUS_FAILURE; } -void SkipLayerNormInterleavedPluginBase::destroy() noexcept +int32_t SkipLayerNormInterleavedPluginBase::getOutputDataTypes( + DataType* outputTypes, int32_t nbOutputs, DataType const* inputTypes, int32_t nbInputs) const noexcept { try { - // This gets called when the network containing plugin is destroyed - mGammaDev.reset(nullptr); - mBetaDev.reset(nullptr); - delete this; + PLUGIN_VALIDATE(inputTypes != nullptr); + PLUGIN_VALIDATE(nbOutputs == getNbOutputs()); + PLUGIN_VALIDATE(nbInputs == 2); + for (int32_t i = 0; i < nbOutputs; ++i) + { + outputTypes[i] = inputTypes[0]; + } + return pluginStatus_t::STATUS_SUCCESS; } catch (std::exception const& e) { caughtError(e); } + return pluginStatus_t::STATUS_FAILURE; } -void SkipLayerNormInterleavedPluginHFace::destroy() noexcept +int32_t SkipLayerNormInterleavedPluginBase::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept { - BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFace destroy"); - SkipLayerNormInterleavedPluginBase::destroy(); + return pluginStatus_t::STATUS_SUCCESS; } -void SkipLayerNormInterleavedPluginMTron::destroy() noexcept +size_t SkipLayerNormInterleavedPluginBase::getWorkspaceSize(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept { - BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTron destroy"); - SkipLayerNormInterleavedPluginBase::destroy(); + return 0; } +// End IPluginV3OneBuild method definitions -void SkipLayerNormInterleavedPluginBase::setPluginNamespace(char const* libNamespace) noexcept +////// +// IPluginV3OneCore method definitions +// - getPluginVersion() (MTron, HFace) +// - getPluginName() (Base) +// - getPluginNamespace() (Base) +// - setPluginNamespace() (Base) +////// +char const* SkipLayerNormInterleavedPluginHFace::getPluginVersion() const noexcept { - mNamespace = libNamespace; + return kSKIP_LAYER_NORM_INTERLEAVED_VERSION_HFACE; +} + +char const* SkipLayerNormInterleavedPluginMTron::getPluginVersion() const noexcept +{ + return kSKIP_LAYER_NORM_INTERLEAVED_VERSION_MTRON; +} + +char const* SkipLayerNormInterleavedPluginBase::getPluginName() const noexcept +{ + return kSKIP_LAYER_NORM_INTERLEAVED_NAME; } char const* SkipLayerNormInterleavedPluginBase::getPluginNamespace() const noexcept @@ -456,10 +482,18 @@ char const* SkipLayerNormInterleavedPluginBase::getPluginNamespace() const noexc return mNamespace.c_str(); } -///////////////////////////////////////////////////////// +void SkipLayerNormInterleavedPluginBase::setPluginNamespace(char const* libNamespace) noexcept +{ + mNamespace = libNamespace; +} +// End IPluginV3OneCore method definitions + +//////////////////////////// Plugin Creator member definitions ///////////////////////////// SkipLayerNormInterleavedPluginBaseCreator::SkipLayerNormInterleavedPluginBaseCreator() { + static std::mutex sMutex; + std::lock_guard lock(sMutex); mPluginAttributes.clear(); mPluginAttributes.emplace_back(PluginField("beta")); mPluginAttributes.emplace_back(PluginField("gamma")); @@ -497,40 +531,8 @@ PluginFieldCollection const* SkipLayerNormInterleavedPluginBaseCreator::getField return &mFC; } -void buildBetaAndGamma(PluginFieldCollection const* fc, Weights& beta, Weights& gamma) -{ - plugin::validateRequiredAttributesExist({"beta", "gamma"}, fc); - - for (int32_t i = 0; i < fc->nbFields; i++) - { - std::string field_name(fc->fields[i].name); - - if (field_name.compare("beta") == 0) - { - BERT_DEBUG_MSG("Building beta..."); - beta.values = fc->fields[i].data; - beta.count = fc->fields[i].length; - beta.type = fieldTypeToDataType(fc->fields[i].type); - } - - if (field_name.compare("gamma") == 0) - { - BERT_DEBUG_MSG("Building gamma..."); - gamma.values = fc->fields[i].data; - gamma.count = fc->fields[i].length; - gamma.type = fieldTypeToDataType(fc->fields[i].type); - } - } - - PLUGIN_VALIDATE(beta.values != nullptr, "SkipLayerNorm: invalid beta"); - PLUGIN_VALIDATE(beta.count > 0, "SkipLayerNorm: invalid beta"); - - PLUGIN_VALIDATE(gamma.values != nullptr, "SkipLayerNorm: invalid gamma"); - PLUGIN_VALIDATE(gamma.count > 0, "SkipLayerNorm: invalid gamma"); -} - -IPluginV2* SkipLayerNormInterleavedPluginHFaceCreator::createPlugin( - char const* name, PluginFieldCollection const* fc) noexcept +IPluginV3* SkipLayerNormInterleavedPluginHFaceCreator::createPlugin( + char const* name, PluginFieldCollection const* fc, TensorRTPhase phase) noexcept { try { @@ -549,8 +551,8 @@ IPluginV2* SkipLayerNormInterleavedPluginHFaceCreator::createPlugin( return nullptr; } -IPluginV2* SkipLayerNormInterleavedPluginMTronCreator::createPlugin( - char const* name, PluginFieldCollection const* fc) noexcept +IPluginV3* SkipLayerNormInterleavedPluginMTronCreator::createPlugin( + char const* name, PluginFieldCollection const* fc, TensorRTPhase phase) noexcept { try { @@ -571,40 +573,6 @@ IPluginV2* SkipLayerNormInterleavedPluginMTronCreator::createPlugin( return nullptr; } -IPluginV2* SkipLayerNormInterleavedPluginHFaceCreator::deserializePlugin( - char const* name, void const* serialData, size_t serialLength) noexcept -{ - // This object will be deleted when the network is destroyed, which will - // call SkipLayerNormInterleavedPlugin::destroy() - try - { - BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFaceCreator deserializePlugin"); - return new SkipLayerNormInterleavedPluginHFace(name, serialData, serialLength); - } - catch (std::exception const& e) - { - caughtError(e); - } - return nullptr; -} - -IPluginV2* SkipLayerNormInterleavedPluginMTronCreator::deserializePlugin( - char const* name, void const* serialData, size_t serialLength) noexcept -{ - // This object will be deleted when the network is destroyed, which will - // call SkipLayerNormInterleavedPlugin::destroy() - try - { - BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTronCreator deserializePlugin"); - return new SkipLayerNormInterleavedPluginMTron(name, serialData, serialLength); - } - catch (std::exception const& e) - { - caughtError(e); - } - return nullptr; -} - void SkipLayerNormInterleavedPluginBaseCreator::setPluginNamespace(char const* libNamespace) noexcept { mNamespace = libNamespace; @@ -614,3 +582,4 @@ char const* SkipLayerNormInterleavedPluginBaseCreator::getPluginNamespace() cons { return mNamespace.c_str(); } +// End Plugin Creator member definitions diff --git a/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPlugin.h b/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPlugin.h index e858919b..3f675232 100644 --- a/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPlugin.h +++ b/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPlugin.h @@ -48,50 +48,77 @@ int32_t launch_large_mtron(cudaStream_t stream, int32_t const ld, int32_t const int8_t const* skip, half const* beta, half const* gamma, int8_t* output, int8_t* preln, float const dqScaleIn, float const dqScaleSkip, float const qScale, float const qSkipScale); -class SkipLayerNormInterleavedPluginBase : public nvinfer1::IPluginV2DynamicExt +class SkipLayerNormInterleavedPluginBase : public IPluginV3, + public IPluginV3OneCore, + public IPluginV3OneBuild, + public IPluginV3OneRuntime { public: SkipLayerNormInterleavedPluginBase( std::string const& name, nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma); - SkipLayerNormInterleavedPluginBase(std::string const& name, void const* data, size_t length); - // It doesn't make sense to make SkipLayerNormInterleavedPlugin without // arguments, so we delete default constructor. SkipLayerNormInterleavedPluginBase() = delete; - // IPluginV2DynamicExt Methods - nvinfer1::DimsExprs getOutputDimensions(int32_t outputIndex, nvinfer1::DimsExprs const* inputs, int32_t nbInputs, - nvinfer1::IExprBuilder& exprBuilder) noexcept override; - bool supportsFormatCombination( - int32_t pos, nvinfer1::PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept override; - void configurePlugin(nvinfer1::DynamicPluginTensorDesc const* in, int32_t nbInputs, - nvinfer1::DynamicPluginTensorDesc const* out, int32_t nbOutputs) noexcept override; - size_t getWorkspaceSize(nvinfer1::PluginTensorDesc const* inputs, int32_t nbInputs, - nvinfer1::PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept override; - - // IPluginV2Ext Methods - nvinfer1::DataType getOutputDataType( - int32_t index, nvinfer1::DataType const* inputTypes, int32_t nbInputs) const noexcept override; - - // IPluginV2 Methods - char const* getPluginType() const noexcept override; - size_t getSerializationSize() const noexcept override; - void serialize(void* buffer) const noexcept override; - void destroy() noexcept override; - void setPluginNamespace(char const* pluginNamespace) noexcept override; + ~SkipLayerNormInterleavedPluginBase() override; + + // IPluginV3 Methods + // NOTE: since this is itself is an abstract class, the rest of virtual methods defined in its children classes + IPluginCapability* getCapabilityInterface(PluginCapabilityType type) noexcept override; + // end of IPluginV3 Methods + + // IPluginV3OneCore Methods + char const* getPluginName() const noexcept override; + char const* getPluginNamespace() const noexcept override; + void setPluginNamespace(char const* pluginNamespace) noexcept; + // end of IPluginV3OneCore Methods + + // IPluginV3Build Methods + bool supportsFormatCombination( + int32_t pos, DynamicPluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept override; + + int32_t getOutputShapes(DimsExprs const* inputs, int32_t nbInputs, DimsExprs const* shapeInputs, + int32_t nbShapeInputs, DimsExprs* outputs, int32_t nbOutputs, IExprBuilder& exprBuilder) noexcept override; + + int32_t configurePlugin(DynamicPluginTensorDesc const* in, int32_t nbInputs, DynamicPluginTensorDesc const* out, + int32_t nbOutputs) noexcept override; + + size_t getWorkspaceSize(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept override; + + int32_t getOutputDataTypes( + DataType* outputTypes, int32_t nbOutputs, DataType const* inputTypes, int32_t nbInputs) const noexcept override; + // end IPluginV3Build Methods + + // IPluginV3Runtime Methods + int32_t onShapeChange( + PluginTensorDesc const* in, int32_t nbInputs, PluginTensorDesc const* out, int32_t nbOutputs) noexcept override; + + IPluginV3* attachToContext(IPluginResourceContext* context) noexcept override; + + PluginFieldCollection const* getFieldsToSerialize() noexcept override; + // end IPluginV3Runtime Methods + protected: + // metadata fields std::string const& mLayerName; std::string mNamespace; + std::vector mDataToSerialize; + nvinfer1::PluginFieldCollection mFCToSerialize; - bert::cuda_unique_ptr mGammaDev; - bert::cuda_unique_ptr mBetaDev; - size_t mLd{}; // leading dim + // members that participate in ser/deserialization bert::WeightsWithOwnership mGamma; bert::WeightsWithOwnership mBeta; + // device-side + bert::cuda_unique_ptr mGammaDev; + bert::cuda_unique_ptr mBetaDev; + + // derived members + size_t mLd{}; // leading dim size_t mParamWordsize{}; bool mParamsOnDevice{}; }; @@ -102,22 +129,22 @@ class SkipLayerNormInterleavedPluginHFace : public SkipLayerNormInterleavedPlugi SkipLayerNormInterleavedPluginHFace( std::string const& name, nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma); - SkipLayerNormInterleavedPluginHFace(std::string const& name, void const* data, size_t length); - // It doesn't make sense to make SkipLayerNormInterleavedPlugin without // arguments, so we delete default constructor. SkipLayerNormInterleavedPluginHFace() = delete; - // IPluginV2DynamicExt Methods - nvinfer1::IPluginV2DynamicExt* clone() const noexcept override; + ~SkipLayerNormInterleavedPluginHFace() override; + + // IPluginV3Runtime overrides + IPluginV3* clone() noexcept; + int32_t enqueue(nvinfer1::PluginTensorDesc const* inputDesc, nvinfer1::PluginTensorDesc const* outputDesc, void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override; - // IPluginV2 Methods - int32_t initialize() noexcept override; - void terminate() noexcept override; - void destroy() noexcept override; + // IPluginV3OneCore override char const* getPluginVersion() const noexcept override; + + // IPluginV3OneBuild override int32_t getNbOutputs() const noexcept override; }; @@ -127,35 +154,36 @@ class SkipLayerNormInterleavedPluginMTron : public SkipLayerNormInterleavedPlugi SkipLayerNormInterleavedPluginMTron( std::string const& name, nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma); - SkipLayerNormInterleavedPluginMTron(std::string const& name, void const* data, size_t length); - // It doesn't make sense to make SkipLayerNormInterleavedPlugin without // arguments, so we delete default constructor. SkipLayerNormInterleavedPluginMTron() = delete; - // IPluginV2DynamicExt Methods - nvinfer1::IPluginV2DynamicExt* clone() const noexcept override; + ~SkipLayerNormInterleavedPluginMTron() override; + + // IPluginV3Runtime overrides + IPluginV3* clone() noexcept; + int32_t enqueue(nvinfer1::PluginTensorDesc const* inputDesc, nvinfer1::PluginTensorDesc const* outputDesc, void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override; - // IPluginV2 Methods - int32_t initialize() noexcept override; - void terminate() noexcept override; - void destroy() noexcept override; + // IPluginV3OneCore override char const* getPluginVersion() const noexcept override; + + // IPluginV3OneBuild override int32_t getNbOutputs() const noexcept override; }; -class SkipLayerNormInterleavedPluginBaseCreator : public nvinfer1::IPluginCreator +class SkipLayerNormInterleavedPluginBaseCreator : public nvinfer1::IPluginCreatorV3One { public: SkipLayerNormInterleavedPluginBaseCreator(); + ~SkipLayerNormInterleavedPluginBaseCreator() override = default; char const* getPluginName() const noexcept override; nvinfer1::PluginFieldCollection const* getFieldNames() noexcept override; - void setPluginNamespace(char const* pluginNamespace) noexcept override; + void setPluginNamespace(char const* pluginNamespace) noexcept; char const* getPluginNamespace() const noexcept override; @@ -170,11 +198,11 @@ class SkipLayerNormInterleavedPluginHFaceCreator : public SkipLayerNormInterleav public: SkipLayerNormInterleavedPluginHFaceCreator(); + ~SkipLayerNormInterleavedPluginHFaceCreator() override = default; + char const* getPluginVersion() const noexcept override; - nvinfer1::IPluginV2* createPlugin(char const* name, nvinfer1::PluginFieldCollection const* fc) noexcept override; - nvinfer1::IPluginV2* deserializePlugin( - char const* name, void const* serialData, size_t serialLength) noexcept override; + IPluginV3* createPlugin(char const* name, PluginFieldCollection const* fc, TensorRTPhase phase) noexcept override; }; class SkipLayerNormInterleavedPluginMTronCreator : public SkipLayerNormInterleavedPluginBaseCreator @@ -182,11 +210,11 @@ class SkipLayerNormInterleavedPluginMTronCreator : public SkipLayerNormInterleav public: SkipLayerNormInterleavedPluginMTronCreator(); + ~SkipLayerNormInterleavedPluginMTronCreator() override = default; + char const* getPluginVersion() const noexcept override; - nvinfer1::IPluginV2* createPlugin(char const* name, nvinfer1::PluginFieldCollection const* fc) noexcept override; - nvinfer1::IPluginV2* deserializePlugin( - char const* name, void const* serialData, size_t serialLength) noexcept override; + IPluginV3* createPlugin(char const* name, PluginFieldCollection const* fc, TensorRTPhase phase) noexcept override; }; } // namespace bert diff --git a/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPluginLegacy.cpp b/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPluginLegacy.cpp new file mode 100644 index 00000000..6a6100db --- /dev/null +++ b/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPluginLegacy.cpp @@ -0,0 +1,606 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 1993-2024 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. + */ + +#include "skipLayerNormInt8InterleavedPluginLegacy.h" +#include "NvInfer.h" +#include "common/serialize.hpp" +#include + +#include +#include + +using namespace nvinfer1; +using namespace nvinfer1::plugin; +using namespace nvinfer1::plugin::bert; + +// Clip plugin specific constants +namespace +{ +constexpr char const* kSKIP_LAYER_NORM_INTERLEAVED_VERSION_HFACE_LEGACY{"3"}; +constexpr char const* kSKIP_LAYER_NORM_INTERLEAVED_VERSION_MTRON_LEGACY{"4"}; +constexpr char const* kSKIP_LAYER_NORM_INTERLEAVED_NAME{"CustomSkipLayerNormPluginDynamic"}; + +void buildBetaAndGamma(PluginFieldCollection const* fc, Weights& beta, Weights& gamma) +{ + plugin::validateRequiredAttributesExist({"beta", "gamma"}, fc); + + for (int32_t i = 0; i < fc->nbFields; i++) + { + std::string field_name(fc->fields[i].name); + + if (field_name.compare("beta") == 0) + { + BERT_DEBUG_MSG("Building beta..."); + beta.values = fc->fields[i].data; + beta.count = fc->fields[i].length; + beta.type = fieldTypeToDataType(fc->fields[i].type); + } + + if (field_name.compare("gamma") == 0) + { + BERT_DEBUG_MSG("Building gamma..."); + gamma.values = fc->fields[i].data; + gamma.count = fc->fields[i].length; + gamma.type = fieldTypeToDataType(fc->fields[i].type); + } + } + + PLUGIN_VALIDATE(beta.values != nullptr, "SkipLayerNorm: invalid beta"); + PLUGIN_VALIDATE(beta.count > 0, "SkipLayerNorm: invalid beta"); + + PLUGIN_VALIDATE(gamma.values != nullptr, "SkipLayerNorm: invalid gamma"); + PLUGIN_VALIDATE(gamma.count > 0, "SkipLayerNorm: invalid gamma"); +} + +void checkDescs(PluginTensorDesc const& iDesc, PluginTensorDesc const& sDesc, PluginTensorDesc const& oDesc) +{ + PLUGIN_VALIDATE(iDesc.dims.nbDims == 4); + PLUGIN_VALIDATE(iDesc.dims.nbDims == sDesc.dims.nbDims); + PLUGIN_VALIDATE(std::equal(iDesc.dims.d, iDesc.dims.d + iDesc.dims.nbDims, sDesc.dims.d)); + PLUGIN_VALIDATE(std::equal(iDesc.dims.d, iDesc.dims.d + iDesc.dims.nbDims, oDesc.dims.d)); + PLUGIN_VALIDATE(iDesc.dims.d[0] == 1); + PLUGIN_VALIDATE(iDesc.dims.d[3] == 1); + PLUGIN_VALIDATE(iDesc.format == TensorFormat::kCHW32); + PLUGIN_VALIDATE(iDesc.type == DataType::kINT8); + PLUGIN_VALIDATE(iDesc.format == sDesc.format); + PLUGIN_VALIDATE(iDesc.format == oDesc.format); + PLUGIN_VALIDATE(iDesc.type == sDesc.type); + PLUGIN_VALIDATE(iDesc.type == oDesc.type); +} +} // namespace + +// Static class fields initialization +PluginFieldCollection SkipLayerNormInterleavedPluginBaseLegacyCreator::mFC{}; +std::vector SkipLayerNormInterleavedPluginBaseLegacyCreator::mPluginAttributes; + +REGISTER_TENSORRT_PLUGIN(SkipLayerNormInterleavedPluginHFaceLegacyCreator); +REGISTER_TENSORRT_PLUGIN(SkipLayerNormInterleavedPluginMTronLegacyCreator); + +constexpr auto kPARAM_TYPE = DataType::kHALF; + +SkipLayerNormInterleavedPluginBaseLegacy::SkipLayerNormInterleavedPluginBaseLegacy( + std::string const& name, Weights const& beta, Weights const& gamma) + : mLayerName(name) + , mGammaDev(nullptr) + , mBetaDev(nullptr) + , mLd(beta.count) + , mParamsOnDevice(false) +{ + PLUGIN_VALIDATE(mLd > 0); + PLUGIN_VALIDATE(beta.count == gamma.count); + // dataType for beta, gamma weights is always fp16 + + mParamWordsize = getElementSize(kPARAM_TYPE); + + mBeta.convertAndCopy(beta, kPARAM_TYPE); + mGamma.convertAndCopy(gamma, kPARAM_TYPE); +} + +SkipLayerNormInterleavedPluginHFaceLegacy::SkipLayerNormInterleavedPluginHFaceLegacy( + std::string const& name, Weights const& beta, Weights const& gamma) + : SkipLayerNormInterleavedPluginBaseLegacy(name, beta, gamma) +{ +} + +SkipLayerNormInterleavedPluginMTronLegacy::SkipLayerNormInterleavedPluginMTronLegacy( + std::string const& name, Weights const& beta, Weights const& gamma) + : SkipLayerNormInterleavedPluginBaseLegacy(name, beta, gamma) +{ +} + +SkipLayerNormInterleavedPluginBaseLegacy::SkipLayerNormInterleavedPluginBaseLegacy( + std::string const& name, void const* data, size_t length) + : mLayerName(name) + , mGammaDev(nullptr) + , mBetaDev(nullptr) + , mParamsOnDevice(false) +{ + // Deserialize in the same order as serialization + deserialize_value(&data, &length, &mLd); + + mParamWordsize = getElementSize(kPARAM_TYPE); + + char const* d = static_cast(data); + mBeta.convertAndCopy(d, mLd, kPARAM_TYPE); + mGamma.convertAndCopy(d, mLd, kPARAM_TYPE); +} + +SkipLayerNormInterleavedPluginHFaceLegacy::SkipLayerNormInterleavedPluginHFaceLegacy( + std::string const& name, void const* data, size_t length) + : SkipLayerNormInterleavedPluginBaseLegacy(name, data, length) +{ + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFaceLegacy deserialize"); +} + +SkipLayerNormInterleavedPluginMTronLegacy::SkipLayerNormInterleavedPluginMTronLegacy( + std::string const& name, void const* data, size_t length) + : SkipLayerNormInterleavedPluginBaseLegacy(name, data, length) +{ + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTronLegacy deserialize"); +} + +// IPluginV2DynamicExt Methods +IPluginV2DynamicExt* SkipLayerNormInterleavedPluginHFaceLegacy::clone() const noexcept +{ + try + { + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFaceLegacy clone"); + + auto* p = new SkipLayerNormInterleavedPluginHFaceLegacy(mLayerName, mBeta, mGamma); + p->initialize(); + p->setPluginNamespace(mNamespace.c_str()); + return p; + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +IPluginV2DynamicExt* SkipLayerNormInterleavedPluginMTronLegacy::clone() const noexcept +{ + try + { + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTronLegacy clone"); + + auto* p = new SkipLayerNormInterleavedPluginMTronLegacy(mLayerName, mBeta, mGamma); + p->initialize(); + p->setPluginNamespace(mNamespace.c_str()); + return p; + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +DimsExprs SkipLayerNormInterleavedPluginBaseLegacy::getOutputDimensions( + int32_t outputIndex, DimsExprs const* inputs, int32_t nbInputs, IExprBuilder& exprBuilder) noexcept +{ + try + { + PLUGIN_VALIDATE(inputs != nullptr); + PLUGIN_VALIDATE(nbInputs == 2); + PLUGIN_VALIDATE(outputIndex >= 0 && outputIndex < getNbOutputs()); + PLUGIN_VALIDATE(inputs[0].nbDims == inputs[1].nbDims); + return inputs[0]; + } + catch (std::exception const& e) + { + caughtError(e); + } + return DimsExprs{}; +} + +bool SkipLayerNormInterleavedPluginBaseLegacy::supportsFormatCombination( + int32_t pos, PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept +{ + try + { + PLUGIN_VALIDATE(inOut != nullptr); + PLUGIN_VALIDATE(nbInputs == 2); + PLUGIN_VALIDATE(nbOutputs == getNbOutputs()); + PLUGIN_VALIDATE(pos >= 0 && pos < (nbInputs + nbOutputs)); + + PluginTensorDesc const& desc = inOut[pos]; + return desc.type == DataType::kINT8 && desc.format == TensorFormat::kCHW32; + } + catch (std::exception const& e) + { + caughtError(e); + } + return false; +} + +void SkipLayerNormInterleavedPluginBaseLegacy::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept +{ + try + { + // Validate input arguments + PLUGIN_VALIDATE(inputs != nullptr); + PLUGIN_VALIDATE(outputs != nullptr); + PLUGIN_VALIDATE(nbOutputs == getNbOutputs()); + PLUGIN_VALIDATE(nbInputs == 2); + PLUGIN_VALIDATE(DataType::kINT8 == inputs[0].desc.type); + PLUGIN_VALIDATE(DataType::kINT8 == inputs[1].desc.type); + + auto const& inDims0 = inputs[0].desc.dims; + auto const& inDims1 = inputs[1].desc.dims; + TRT_UNUSED inDims1; + + PLUGIN_VALIDATE(inDims0.nbDims == inDims1.nbDims); + PLUGIN_VALIDATE(std::equal(inDims0.d, inDims0.d + inDims0.nbDims, inDims1.d)); + + mParamWordsize = getElementSize(kPARAM_TYPE); + + if (!mParamsOnDevice) + { + copyToDevice(mGamma, getWeightsSize(mGamma, kPARAM_TYPE), mGammaDev); + copyToDevice(mBeta, getWeightsSize(mBeta, kPARAM_TYPE), mBetaDev); + mParamsOnDevice = true; + } + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +size_t SkipLayerNormInterleavedPluginBaseLegacy::getWorkspaceSize( + PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept +{ + return 0; +} + +int32_t SkipLayerNormInterleavedPluginHFaceLegacy::enqueue(PluginTensorDesc const* inputDesc, + PluginTensorDesc const* outputDesc, void const* const* inputs, void* const* outputs, void* /* workspace */, + cudaStream_t stream) noexcept +{ + try + { + PLUGIN_VALIDATE(inputDesc != nullptr && outputDesc != nullptr && inputs != nullptr && outputs != nullptr); + + // Input shape: 1x(hxd)xtotalx1 + auto const iDesc = inputDesc[0]; + auto const sDesc = inputDesc[1]; + auto const oDesc = outputDesc[0]; + checkDescs(iDesc, sDesc, oDesc); + + int32_t const ld = iDesc.dims.d[1]; + int32_t const total = iDesc.dims.d[2]; + float const dqScaleIn = iDesc.scale; + float const dqScaleSkip = sDesc.scale; + float const qScale = 1.F / oDesc.scale; + int8_t const* input = static_cast(inputs[0]); + int8_t const* skip = static_cast(inputs[1]); + int8_t* output = static_cast(outputs[0]); + half const* gamma = static_cast(mGammaDev.get()); + half const* beta = static_cast(mBetaDev.get()); + + if (total < 4096) + { + return launch_small_hface( + stream, ld, total, input, skip, beta, gamma, output, dqScaleIn, dqScaleSkip, qScale); + } + + return launch_large_hface(stream, ld, total, input, skip, beta, gamma, output, dqScaleIn, dqScaleSkip, qScale); + } + catch (std::exception const& e) + { + caughtError(e); + } + return -1; +} + +int32_t SkipLayerNormInterleavedPluginMTronLegacy::enqueue(PluginTensorDesc const* inputDesc, + PluginTensorDesc const* outputDesc, void const* const* inputs, void* const* outputs, void* /* workspace */, + cudaStream_t stream) noexcept +{ + try + { + PLUGIN_VALIDATE(inputDesc != nullptr && outputDesc != nullptr && inputs != nullptr && outputs != nullptr); + + // Input shape: 1x(hxd)xtotalx1 + auto const iDesc = inputDesc[0]; + auto const sDesc = inputDesc[1]; + auto const oDesc = outputDesc[0]; + auto const pDesc = outputDesc[1]; + checkDescs(iDesc, sDesc, oDesc); + PLUGIN_VALIDATE(std::equal(iDesc.dims.d, iDesc.dims.d + iDesc.dims.nbDims, pDesc.dims.d)); + + int32_t const ld = iDesc.dims.d[1]; + int32_t const total = iDesc.dims.d[2]; + float const dqScaleIn = iDesc.scale; + float const dqScaleSkip = sDesc.scale; + float const qScale = 1.F / oDesc.scale; + float const qSkipScale = 1.F / pDesc.scale; + int8_t const* input = static_cast(inputs[0]); + int8_t const* skip = static_cast(inputs[1]); + int8_t* output = static_cast(outputs[0]); + int8_t* preln = static_cast(outputs[1]); + half const* gamma = static_cast(mGammaDev.get()); + half const* beta = static_cast(mBetaDev.get()); + + if (total < 4096) + { + return launch_small_mtron( + stream, ld, total, input, skip, beta, gamma, output, preln, dqScaleIn, dqScaleSkip, qScale, qSkipScale); + } + + return launch_large_mtron( + stream, ld, total, input, skip, beta, gamma, output, preln, dqScaleIn, dqScaleSkip, qScale, qSkipScale); + } + catch (std::exception const& e) + { + caughtError(e); + } + return -1; +} + +// IPluginV2Ext Methods +DataType SkipLayerNormInterleavedPluginBaseLegacy::getOutputDataType( + int32_t index, DataType const* inputTypes, int32_t nbInputs) const noexcept +{ + try + { + PLUGIN_VALIDATE(inputTypes != nullptr); + PLUGIN_VALIDATE(index >= 0 && index < getNbOutputs()); + PLUGIN_VALIDATE(nbInputs == 2); + return inputTypes[0]; + } + catch (std::exception const& e) + { + caughtError(e); + } + return DataType{}; +} + +// IPluginV2 Methods +char const* SkipLayerNormInterleavedPluginBaseLegacy::getPluginType() const noexcept +{ + return kSKIP_LAYER_NORM_INTERLEAVED_NAME; +} + +char const* SkipLayerNormInterleavedPluginHFaceLegacy::getPluginVersion() const noexcept +{ + return kSKIP_LAYER_NORM_INTERLEAVED_VERSION_HFACE_LEGACY; +} + +char const* SkipLayerNormInterleavedPluginMTronLegacy::getPluginVersion() const noexcept +{ + return kSKIP_LAYER_NORM_INTERLEAVED_VERSION_MTRON_LEGACY; +} + +int32_t SkipLayerNormInterleavedPluginHFaceLegacy::getNbOutputs() const noexcept +{ + return 1; +} + +int32_t SkipLayerNormInterleavedPluginMTronLegacy::getNbOutputs() const noexcept +{ + return 2; +} + +int32_t SkipLayerNormInterleavedPluginHFaceLegacy::initialize() noexcept +{ + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFaceLegacy initialize"); + return 0; +} + +int32_t SkipLayerNormInterleavedPluginMTronLegacy::initialize() noexcept +{ + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTronLegacy initialize"); + return 0; +} + +void SkipLayerNormInterleavedPluginHFaceLegacy::terminate() noexcept +{ + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFaceLegacy terminate"); +} + +void SkipLayerNormInterleavedPluginMTronLegacy::terminate() noexcept +{ + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTronLegacy terminate"); +} + +size_t SkipLayerNormInterleavedPluginBaseLegacy::getSerializationSize() const noexcept +{ + return 2 * mParamWordsize * mLd + sizeof(mLd); +} + +void SkipLayerNormInterleavedPluginBaseLegacy::serialize(void* buffer) const noexcept +{ + try + { + serialize_value(&buffer, mLd); + + char* d = static_cast(buffer); + serFromDev(d, static_cast(mBetaDev.get()), mLd * mParamWordsize); + serFromDev(d, static_cast(mGammaDev.get()), mLd * mParamWordsize); + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +void SkipLayerNormInterleavedPluginBaseLegacy::destroy() noexcept +{ + try + { + // This gets called when the network containing plugin is destroyed + mGammaDev.reset(nullptr); + mBetaDev.reset(nullptr); + delete this; + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +void SkipLayerNormInterleavedPluginHFaceLegacy::destroy() noexcept +{ + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFaceLegacy destroy"); + SkipLayerNormInterleavedPluginBaseLegacy::destroy(); +} + +void SkipLayerNormInterleavedPluginMTronLegacy::destroy() noexcept +{ + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTronLegacy destroy"); + SkipLayerNormInterleavedPluginBaseLegacy::destroy(); +} + +void SkipLayerNormInterleavedPluginBaseLegacy::setPluginNamespace(char const* libNamespace) noexcept +{ + mNamespace = libNamespace; +} + +char const* SkipLayerNormInterleavedPluginBaseLegacy::getPluginNamespace() const noexcept +{ + return mNamespace.c_str(); +} + +///////////////////////////////////////////////////////// + +SkipLayerNormInterleavedPluginBaseLegacyCreator::SkipLayerNormInterleavedPluginBaseLegacyCreator() +{ + mPluginAttributes.clear(); + mPluginAttributes.emplace_back(PluginField("beta")); + mPluginAttributes.emplace_back(PluginField("gamma")); + mFC.nbFields = mPluginAttributes.size(); + mFC.fields = mPluginAttributes.data(); +} + +SkipLayerNormInterleavedPluginHFaceLegacyCreator::SkipLayerNormInterleavedPluginHFaceLegacyCreator() + : SkipLayerNormInterleavedPluginBaseLegacyCreator() +{ +} + +SkipLayerNormInterleavedPluginMTronLegacyCreator::SkipLayerNormInterleavedPluginMTronLegacyCreator() + : SkipLayerNormInterleavedPluginBaseLegacyCreator() +{ +} + +char const* SkipLayerNormInterleavedPluginBaseLegacyCreator::getPluginName() const noexcept +{ + return kSKIP_LAYER_NORM_INTERLEAVED_NAME; +} + +char const* SkipLayerNormInterleavedPluginHFaceLegacyCreator::getPluginVersion() const noexcept +{ + return kSKIP_LAYER_NORM_INTERLEAVED_VERSION_HFACE_LEGACY; +} + +char const* SkipLayerNormInterleavedPluginMTronLegacyCreator::getPluginVersion() const noexcept +{ + return kSKIP_LAYER_NORM_INTERLEAVED_VERSION_MTRON_LEGACY; +} + +PluginFieldCollection const* SkipLayerNormInterleavedPluginBaseLegacyCreator::getFieldNames() noexcept +{ + return &mFC; +} + +IPluginV2* SkipLayerNormInterleavedPluginHFaceLegacyCreator::createPlugin( + char const* name, PluginFieldCollection const* fc) noexcept +{ + try + { + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFaceLegacyCreator createPlugin"); + + Weights beta{DataType::kFLOAT, nullptr, 0}; + Weights gamma{DataType::kFLOAT, nullptr, 0}; + buildBetaAndGamma(fc, beta, gamma); + + return new SkipLayerNormInterleavedPluginHFaceLegacy(name, beta, gamma); + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +IPluginV2* SkipLayerNormInterleavedPluginMTronLegacyCreator::createPlugin( + char const* name, PluginFieldCollection const* fc) noexcept +{ + try + { + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTronLegacyCreator createPlugin"); + + PLUGIN_VALIDATE(fc != nullptr); + + Weights beta{DataType::kFLOAT, nullptr, 0}; + Weights gamma{DataType::kFLOAT, nullptr, 0}; + buildBetaAndGamma(fc, beta, gamma); + + return new SkipLayerNormInterleavedPluginMTronLegacy(name, beta, gamma); + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +IPluginV2* SkipLayerNormInterleavedPluginHFaceLegacyCreator::deserializePlugin( + char const* name, void const* serialData, size_t serialLength) noexcept +{ + // This object will be deleted when the network is destroyed, which will + // call SkipLayerNormInterleavedPlugin::destroy() + try + { + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginHFaceLegacyCreator deserializePlugin"); + return new SkipLayerNormInterleavedPluginHFaceLegacy(name, serialData, serialLength); + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +IPluginV2* SkipLayerNormInterleavedPluginMTronLegacyCreator::deserializePlugin( + char const* name, void const* serialData, size_t serialLength) noexcept +{ + // This object will be deleted when the network is destroyed, which will + // call SkipLayerNormInterleavedPlugin::destroy() + try + { + BERT_DEBUG_MSG("SkipLayerNormInterleavedPluginMTronLegacyCreator deserializePlugin"); + return new SkipLayerNormInterleavedPluginMTronLegacy(name, serialData, serialLength); + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +void SkipLayerNormInterleavedPluginBaseLegacyCreator::setPluginNamespace(char const* libNamespace) noexcept +{ + mNamespace = libNamespace; +} + +char const* SkipLayerNormInterleavedPluginBaseLegacyCreator::getPluginNamespace() const noexcept +{ + return mNamespace.c_str(); +} diff --git a/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPluginLegacy.h b/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPluginLegacy.h new file mode 100644 index 00000000..b5b56b38 --- /dev/null +++ b/plugin/skipLayerNormPlugin/skipLayerNormInt8InterleavedPluginLegacy.h @@ -0,0 +1,195 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 1993-2024 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 TRT_SKIP_LAYER_NORM_INTERLEAVED_PLUGIN_LEGACY_H +#define TRT_SKIP_LAYER_NORM_INTERLEAVED_PLUGIN_LEGACY_H +#include "NvInferPlugin.h" +#include + +#include "common/bertCommon.h" +#include +#include +#include + +namespace nvinfer1 +{ +namespace plugin +{ +namespace bert +{ + +int32_t launch_small_hface(cudaStream_t stream, int32_t const ld, int32_t const total, int8_t const* input, + int8_t const* skip, half const* beta, half const* gamma, int8_t* output, float const dqScaleIn, + float const dqScaleSkip, float const qScale); + +int32_t launch_large_hface(cudaStream_t stream, int32_t const ld, int32_t const total, int8_t const* input, + int8_t const* skip, half const* beta, half const* gamma, int8_t* output, float const dqScaleIn, + float const dqScaleSkip, float const qScale); + +int32_t launch_small_mtron(cudaStream_t stream, int32_t const ld, int32_t const total, int8_t const* input, + int8_t const* skip, half const* beta, half const* gamma, int8_t* output, int8_t* preln, float const dqScaleIn, + float const dqScaleSkip, float const qScale, float const qSkipScale); + +int32_t launch_large_mtron(cudaStream_t stream, int32_t const ld, int32_t const total, int8_t const* input, + int8_t const* skip, half const* beta, half const* gamma, int8_t* output, int8_t* preln, float const dqScaleIn, + float const dqScaleSkip, float const qScale, float const qSkipScale); + +class SkipLayerNormInterleavedPluginBaseLegacy : public nvinfer1::IPluginV2DynamicExt +{ +public: + SkipLayerNormInterleavedPluginBaseLegacy( + std::string const& name, nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma); + + SkipLayerNormInterleavedPluginBaseLegacy(std::string const& name, void const* data, size_t length); + + // It doesn't make sense to make SkipLayerNormInterleavedPlugin without + // arguments, so we delete default constructor. + SkipLayerNormInterleavedPluginBaseLegacy() = delete; + + // IPluginV2DynamicExt Methods + nvinfer1::DimsExprs getOutputDimensions(int32_t outputIndex, nvinfer1::DimsExprs const* inputs, int32_t nbInputs, + nvinfer1::IExprBuilder& exprBuilder) noexcept override; + bool supportsFormatCombination( + int32_t pos, nvinfer1::PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept override; + void configurePlugin(nvinfer1::DynamicPluginTensorDesc const* in, int32_t nbInputs, + nvinfer1::DynamicPluginTensorDesc const* out, int32_t nbOutputs) noexcept override; + size_t getWorkspaceSize(nvinfer1::PluginTensorDesc const* inputs, int32_t nbInputs, + nvinfer1::PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept override; + + // IPluginV2Ext Methods + nvinfer1::DataType getOutputDataType( + int32_t index, nvinfer1::DataType const* inputTypes, int32_t nbInputs) const noexcept override; + + // IPluginV2 Methods + char const* getPluginType() const noexcept override; + size_t getSerializationSize() const noexcept override; + void serialize(void* buffer) const noexcept override; + void destroy() noexcept override; + void setPluginNamespace(char const* pluginNamespace) noexcept override; + char const* getPluginNamespace() const noexcept override; + +protected: + std::string const& mLayerName; + std::string mNamespace; + + bert::cuda_unique_ptr mGammaDev; + bert::cuda_unique_ptr mBetaDev; + size_t mLd{}; // leading dim + bert::WeightsWithOwnership mGamma; + bert::WeightsWithOwnership mBeta; + + size_t mParamWordsize{}; + bool mParamsOnDevice{}; +}; + +class SkipLayerNormInterleavedPluginHFaceLegacy : public SkipLayerNormInterleavedPluginBaseLegacy +{ +public: + SkipLayerNormInterleavedPluginHFaceLegacy( + std::string const& name, nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma); + + SkipLayerNormInterleavedPluginHFaceLegacy(std::string const& name, void const* data, size_t length); + + // It doesn't make sense to make SkipLayerNormInterleavedPlugin without + // arguments, so we delete default constructor. + SkipLayerNormInterleavedPluginHFaceLegacy() = delete; + + // IPluginV2DynamicExt Methods + nvinfer1::IPluginV2DynamicExt* clone() const noexcept override; + int32_t enqueue(nvinfer1::PluginTensorDesc const* inputDesc, nvinfer1::PluginTensorDesc const* outputDesc, + void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override; + + // IPluginV2 Methods + int32_t initialize() noexcept override; + void terminate() noexcept override; + void destroy() noexcept override; + char const* getPluginVersion() const noexcept override; + int32_t getNbOutputs() const noexcept override; +}; + +class SkipLayerNormInterleavedPluginMTronLegacy : public SkipLayerNormInterleavedPluginBaseLegacy +{ +public: + SkipLayerNormInterleavedPluginMTronLegacy( + std::string const& name, nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma); + + SkipLayerNormInterleavedPluginMTronLegacy(std::string const& name, void const* data, size_t length); + + // It doesn't make sense to make SkipLayerNormInterleavedPlugin without + // arguments, so we delete default constructor. + SkipLayerNormInterleavedPluginMTronLegacy() = delete; + + // IPluginV2DynamicExt Methods + nvinfer1::IPluginV2DynamicExt* clone() const noexcept override; + int32_t enqueue(nvinfer1::PluginTensorDesc const* inputDesc, nvinfer1::PluginTensorDesc const* outputDesc, + void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override; + + // IPluginV2 Methods + int32_t initialize() noexcept override; + void terminate() noexcept override; + void destroy() noexcept override; + char const* getPluginVersion() const noexcept override; + int32_t getNbOutputs() const noexcept override; +}; + +class SkipLayerNormInterleavedPluginBaseLegacyCreator : public nvinfer1::IPluginCreator +{ +public: + SkipLayerNormInterleavedPluginBaseLegacyCreator(); + + char const* getPluginName() const noexcept override; + + nvinfer1::PluginFieldCollection const* getFieldNames() noexcept override; + + void setPluginNamespace(char const* pluginNamespace) noexcept override; + + char const* getPluginNamespace() const noexcept override; + +private: + static nvinfer1::PluginFieldCollection mFC; + static std::vector mPluginAttributes; + std::string mNamespace; +}; + +class SkipLayerNormInterleavedPluginHFaceLegacyCreator : public SkipLayerNormInterleavedPluginBaseLegacyCreator +{ +public: + SkipLayerNormInterleavedPluginHFaceLegacyCreator(); + + char const* getPluginVersion() const noexcept override; + + nvinfer1::IPluginV2* createPlugin(char const* name, nvinfer1::PluginFieldCollection const* fc) noexcept override; + nvinfer1::IPluginV2* deserializePlugin( + char const* name, void const* serialData, size_t serialLength) noexcept override; +}; + +class SkipLayerNormInterleavedPluginMTronLegacyCreator : public SkipLayerNormInterleavedPluginBaseLegacyCreator +{ +public: + SkipLayerNormInterleavedPluginMTronLegacyCreator(); + + char const* getPluginVersion() const noexcept override; + + nvinfer1::IPluginV2* createPlugin(char const* name, nvinfer1::PluginFieldCollection const* fc) noexcept override; + nvinfer1::IPluginV2* deserializePlugin( + char const* name, void const* serialData, size_t serialLength) noexcept override; +}; + +} // namespace bert +} // namespace plugin +} // namespace nvinfer1 +#endif // TRT_SKIP_LAYER_NORM_INTERLEAVED_PLUGIN_LEGACY_H diff --git a/plugin/skipLayerNormPlugin/skipLayerNormKernel.cu b/plugin/skipLayerNormPlugin/skipLayerNormKernel.cu index da0cee19..b107a824 100644 --- a/plugin/skipLayerNormPlugin/skipLayerNormKernel.cu +++ b/plugin/skipLayerNormPlugin/skipLayerNormKernel.cu @@ -23,6 +23,7 @@ #include "common/common.cuh" #include "common/serialize.hpp" #include "skipLayerNormPlugin.h" +#include "skipLayerNormPluginLegacy.h" #include #include diff --git a/plugin/skipLayerNormPlugin/skipLayerNormPlugin.cpp b/plugin/skipLayerNormPlugin/skipLayerNormPlugin.cpp index c792486b..6d3daa82 100644 --- a/plugin/skipLayerNormPlugin/skipLayerNormPlugin.cpp +++ b/plugin/skipLayerNormPlugin/skipLayerNormPlugin.cpp @@ -32,38 +32,28 @@ using namespace nvinfer1::plugin::bert; // Clip plugin specific constants namespace { -char const* kSKIP_LAYER_NORM_VERSION{"1"}; -char const* kSKIP_LAYER_NORM_NAME{"CustomSkipLayerNormPluginDynamic"}; -char const* kSKIP_LAYER_NORM_VAR_SEQLEN_VERSION{"2"}; +constexpr char const* kSKIP_LAYER_NORM_VERSION{"5"}; +constexpr char const* kSKIP_LAYER_NORM_NAME{"CustomSkipLayerNormPluginDynamic"}; +constexpr char const* kSKIP_LAYER_NORM_VAR_SEQLEN_VERSION{"6"}; } // namespace // Static class fields initialization -PluginFieldCollection SkipLayerNormPluginDynamicCreator::mFC{}; -std::vector SkipLayerNormPluginDynamicCreator::mPluginAttributes; +PluginFieldCollection SkipLayerNormPluginV3Creator::mFC{}; +std::vector SkipLayerNormPluginV3Creator::mPluginAttributes; -PluginFieldCollection SkipLayerNormVarSeqlenPluginCreator::mFC{}; -std::vector SkipLayerNormVarSeqlenPluginCreator::mPluginAttributes; +PluginFieldCollection SkipLayerNormVarSeqlenPluginV3Creator::mFC{}; +std::vector SkipLayerNormVarSeqlenPluginV3Creator::mPluginAttributes; -REGISTER_TENSORRT_PLUGIN(SkipLayerNormPluginDynamicCreator); -REGISTER_TENSORRT_PLUGIN(SkipLayerNormVarSeqlenPluginCreator); +REGISTER_TENSORRT_PLUGIN(SkipLayerNormPluginV3Creator); +REGISTER_TENSORRT_PLUGIN(SkipLayerNormVarSeqlenPluginV3Creator); -static inline DataType getParamWordType(DataType cfgType) noexcept -{ - if (cfgType == DataType::kINT8) - { - return DataType::kHALF; - } - - return cfgType; -} - -SkipLayerNormPluginDynamic::SkipLayerNormPluginDynamic(const std::string name, const DataType type, int32_t const ld, +SkipLayerNormPluginV3::SkipLayerNormPluginV3(const std::string name, const DataType type, int32_t const ld, Weights const& beta, Weights const& gamma, Weights const& bias) : mLayerName(name) + , mType(type) + , mLd(ld) , mGammaDev(nullptr) , mBetaDev(nullptr) - , mLd(ld) - , mType(type) , mBiasDev(nullptr) { PLUGIN_VALIDATE(mType == nvinfer1::DataType::kFLOAT || mType == nvinfer1::DataType::kHALF @@ -88,50 +78,32 @@ SkipLayerNormPluginDynamic::SkipLayerNormPluginDynamic(const std::string name, c { copyToDevice(mBias, getWeightsSize(mBias, mCfgType), mBiasDev); } + BERT_DEBUG_MSG("SkipLayerNormPluginV3 initialize"); } -SkipLayerNormPluginDynamic::SkipLayerNormPluginDynamic(const std::string name, void const* data, size_t length) - : mLayerName(name) - , mGammaDev(nullptr) - , mBetaDev(nullptr) - , mBiasDev(nullptr) +SkipLayerNormPluginV3::~SkipLayerNormPluginV3() { - BERT_DEBUG_MSG("SkipLayerNormPluginDynamic deserialize"); - - // Deserialize in the same order as serialization - deserialize_value(&data, &length, &mType); - deserialize_value(&data, &length, &mCfgType); - deserialize_value(&data, &length, &mLd); - deserialize_value(&data, &length, &mHasBias); - - PLUGIN_VALIDATE(mCfgType == nvinfer1::DataType::kFLOAT || mCfgType == nvinfer1::DataType::kHALF); - mParamWordsize = getElementSize(mCfgType); - - char const* d = static_cast(data); - mBeta.convertAndCopy(d, mLd, mCfgType); - mGamma.convertAndCopy(d, mLd, mCfgType); - if (mHasBias) + BERT_DEBUG_MSG("SkipLayerNormPluginV3 terminate"); + try { - mBias.convertAndCopy(d, mLd, mCfgType); + BERT_DEBUG_MSG("SkipLayerNormPluginV3 destroy"); + mGammaDev.reset(nullptr); + mBetaDev.reset(nullptr); + mBiasDev.reset(nullptr); } - - copyToDevice(mGamma, getWeightsSize(mGamma, mCfgType), mGammaDev); - copyToDevice(mBeta, getWeightsSize(mBeta, mCfgType), mBetaDev); - if (mHasBias) + catch (std::exception const& e) { - copyToDevice(mBias, getWeightsSize(mBias, mCfgType), mBiasDev); + caughtError(e); } } -// IPluginV2DynamicExt Methods -IPluginV2DynamicExt* SkipLayerNormPluginDynamic::clone() const noexcept +IPluginV3* SkipLayerNormPluginV3::clone() noexcept { try { - BERT_DEBUG_MSG("SkipLayerNormPluginDynamic clone"); + BERT_DEBUG_MSG("SkipLayerNormPluginV3 clone"); - auto* p = new SkipLayerNormPluginDynamic(mLayerName, mType, mLd, mBeta, mGamma, mBias); - p->initialize(); + auto* p = new SkipLayerNormPluginV3(mLayerName, mType, mLd, mBeta, mGamma, mBias); p->setPluginNamespace(mNamespace.c_str()); return p; } @@ -142,26 +114,26 @@ IPluginV2DynamicExt* SkipLayerNormPluginDynamic::clone() const noexcept return nullptr; } -DimsExprs SkipLayerNormPluginDynamic::getOutputDimensions( - int32_t outputIndex, DimsExprs const* inputs, int32_t nbInputs, IExprBuilder& exprBuilder) noexcept +int32_t SkipLayerNormPluginV3::getOutputShapes(DimsExprs const* inputs, int32_t nbInputs, DimsExprs const* shapeInputs, + int32_t nbShapeInputs, DimsExprs* outputs, int32_t nbOutputs, IExprBuilder& exprBuilder) noexcept { try { PLUGIN_VALIDATE(inputs != nullptr); PLUGIN_VALIDATE(nbInputs == 2); - PLUGIN_VALIDATE(outputIndex == 0); PLUGIN_VALIDATE(inputs[0].nbDims == inputs[1].nbDims); - return inputs[0]; + outputs[0] = inputs[0]; + return pluginStatus_t::STATUS_SUCCESS; } catch (std::exception const& e) { caughtError(e); } - return DimsExprs{}; + return pluginStatus_t::STATUS_FAILURE; } -bool SkipLayerNormPluginDynamic::supportsFormatCombination( - int32_t pos, PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept +bool SkipLayerNormPluginV3::supportsFormatCombination( + int32_t pos, DynamicPluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept { try { @@ -170,7 +142,7 @@ bool SkipLayerNormPluginDynamic::supportsFormatCombination( PLUGIN_VALIDATE(nbOutputs == 1); PLUGIN_VALIDATE(pos >= 0 && pos < (nbInputs + nbOutputs)); - PluginTensorDesc const& in = inOut[pos]; + PluginTensorDesc const& in = inOut[pos].desc; if (pos == 0) { // Since H = W = 1, we can report CHWx for any x @@ -192,7 +164,7 @@ bool SkipLayerNormPluginDynamic::supportsFormatCombination( } return (in.type == mType) && (in.format == TensorFormat::kLINEAR); } - PluginTensorDesc const& prev = inOut[pos - 1]; + PluginTensorDesc const& prev = inOut[pos - 1].desc; return in.type == prev.type && in.format == prev.format; } @@ -203,59 +175,21 @@ bool SkipLayerNormPluginDynamic::supportsFormatCombination( return false; } -void SkipLayerNormPluginDynamic::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, +int32_t SkipLayerNormPluginV3::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept { - try - { - BERT_DEBUG_MSG("SkipLayerNormPluginDynamic configurePlugin"); - - // Validate input arguments - PLUGIN_VALIDATE(inputs != nullptr); - PLUGIN_VALIDATE(outputs != nullptr); - PLUGIN_VALIDATE(nbOutputs == 1); - PLUGIN_VALIDATE(nbInputs == 2); - if (mType == DataType::kFLOAT || mType == DataType::kHALF) - { - PLUGIN_VALIDATE(mType == inputs[0].desc.type); - PLUGIN_VALIDATE(mType == inputs[1].desc.type); - } - else - { - PLUGIN_VALIDATE(mType == inputs[0].desc.type || DataType::kFLOAT == inputs[0].desc.type); - PLUGIN_VALIDATE(mType == inputs[1].desc.type || DataType::kFLOAT == inputs[1].desc.type); - } - auto const& inDims0 = inputs[0].desc.dims; - auto const& inDims1 = inputs[1].desc.dims; - PLUGIN_VALIDATE(inDims0.nbDims == inDims1.nbDims); - - PLUGIN_VALIDATE(std::equal(inDims0.d, inDims0.d + inDims0.nbDims, inDims1.d)); - - PLUGIN_VALIDATE(inDims0.nbDims == 5); - mLd = inDims0.d[HDIM]; // hiddensize - PLUGIN_VALIDATE(mLd != 0U); - PLUGIN_VALIDATE(inDims0.d[3] == 1); - PLUGIN_VALIDATE(inDims0.d[4] == 1); - - mCfgType = inputs[0].desc.type == DataType::kINT8 ? DataType::kHALF : inputs[0].desc.type; - - auto const paramType = getParamWordType(mCfgType); - mParamWordsize = getElementSize(paramType); - } - catch (std::exception const& e) - { - caughtError(e); - } + return pluginStatus_t::STATUS_SUCCESS; } -size_t SkipLayerNormPluginDynamic::getWorkspaceSize( - PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept +size_t SkipLayerNormPluginV3::getWorkspaceSize(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept { return 0; } -int32_t SkipLayerNormPluginDynamic::enqueue(PluginTensorDesc const* inputDesc, PluginTensorDesc const* outputDesc, - void const* const* inputs, void* const* outputs, void* /* workspace */, cudaStream_t stream) noexcept +int32_t SkipLayerNormPluginV3::enqueue(nvinfer1::PluginTensorDesc const* inputDesc, + nvinfer1::PluginTensorDesc const* outputDesc, void const* const* inputs, void* const* outputs, void* workspace, + cudaStream_t stream) noexcept { int32_t status = -1; try @@ -342,120 +276,181 @@ int32_t SkipLayerNormPluginDynamic::enqueue(PluginTensorDesc const* inputDesc, P return status; } -// IPluginV2Ext Methods -DataType SkipLayerNormPluginDynamic::getOutputDataType( - int32_t index, DataType const* inputTypes, int32_t nbInputs) const noexcept +int32_t SkipLayerNormPluginV3::getOutputDataTypes( + DataType* outputTypes, int32_t nbOutputs, DataType const* inputTypes, int32_t nbInputs) const noexcept { try { + PLUGIN_VALIDATE(outputTypes != nullptr); + PLUGIN_VALIDATE(nbOutputs == 1); PLUGIN_VALIDATE(inputTypes != nullptr); - PLUGIN_VALIDATE(index == 0); PLUGIN_VALIDATE(nbInputs == 2); - return inputTypes[0]; + outputTypes[0] = inputTypes[0]; + return pluginStatus_t::STATUS_SUCCESS; } catch (std::exception const& e) { caughtError(e); } - return DataType{}; + return pluginStatus_t::STATUS_FAILURE; } -// IPluginV2 Methods -char const* SkipLayerNormPluginDynamic::getPluginType() const noexcept +char const* SkipLayerNormPluginV3::getPluginVersion() const noexcept { - return kSKIP_LAYER_NORM_NAME; + return kSKIP_LAYER_NORM_VERSION; } -char const* SkipLayerNormPluginDynamic::getPluginVersion() const noexcept +int32_t SkipLayerNormPluginV3::getNbOutputs() const noexcept { - return kSKIP_LAYER_NORM_VERSION; + return 1; } -int32_t SkipLayerNormPluginDynamic::getNbOutputs() const noexcept +PluginFieldCollection const* SkipLayerNormPluginV3::getFieldsToSerialize() noexcept { - return 1; + mDataToSerialize.clear(); + mDataToSerialize.emplace_back("type_id", &mType, PluginFieldType::kINT32, 1); + mDataToSerialize.emplace_back("ld", &mLd, PluginFieldType::kINT32, 1); + if (mCfgType == DataType::kHALF) + { + mDataToSerialize.emplace_back( + "beta", static_cast(mBeta.values), PluginFieldType::kFLOAT16, mBeta.count); + PLUGIN_ASSERT(mBeta.type == mCfgType); + mDataToSerialize.emplace_back( + "gamma", static_cast(mGamma.values), PluginFieldType::kFLOAT16, mGamma.count); + PLUGIN_ASSERT(mGamma.type == mCfgType); + if (mHasBias) + { + mDataToSerialize.emplace_back( + "bias", static_cast(mBias.values), PluginFieldType::kFLOAT16, mBias.count); + PLUGIN_ASSERT(mBias.type == mCfgType); + } + } + else + { + PLUGIN_ASSERT(mCfgType == DataType::kFLOAT); + mDataToSerialize.emplace_back( + "beta", static_cast(mBeta.values), PluginFieldType::kFLOAT32, mBeta.count); + PLUGIN_ASSERT(mBeta.type == mCfgType); + mDataToSerialize.emplace_back( + "gamma", static_cast(mGamma.values), PluginFieldType::kFLOAT32, mGamma.count); + PLUGIN_ASSERT(mGamma.type == mCfgType); + if (mHasBias) + { + mDataToSerialize.emplace_back( + "bias", static_cast(mBias.values), PluginFieldType::kFLOAT32, mBias.count); + PLUGIN_ASSERT(mBias.type == mCfgType); + } + } + + mFCToSerialize.nbFields = mDataToSerialize.size(); + mFCToSerialize.fields = mDataToSerialize.data(); + + return &mFCToSerialize; } -int32_t SkipLayerNormPluginDynamic::initialize() noexcept +void SkipLayerNormPluginV3::setPluginNamespace(char const* libNamespace) noexcept { - BERT_DEBUG_MSG("SkipLayerNormPluginDynamic initialize"); - return 0; + try + { + mNamespace = libNamespace; + } + catch (std::exception const& e) + { + caughtError(e); + } } -void SkipLayerNormPluginDynamic::terminate() noexcept +char const* SkipLayerNormPluginV3::getPluginNamespace() const noexcept { - BERT_DEBUG_MSG("SkipLayerNormPluginDynamic terminate"); + return mNamespace.c_str(); } -size_t SkipLayerNormPluginDynamic::getSerializationSize() const noexcept +char const* SkipLayerNormPluginV3::getPluginName() const noexcept { - const size_t biasSize = mHasBias ? (mLd * mParamWordsize) : 0; - return 2 * mParamWordsize * mLd + 2 * sizeof(DataType) + sizeof(mLd) + biasSize + sizeof(mHasBias); + return kSKIP_LAYER_NORM_NAME; } -void SkipLayerNormPluginDynamic::serialize(void* buffer) const noexcept +int32_t SkipLayerNormPluginV3::onShapeChange( + PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) noexcept { try { - serialize_value(&buffer, mType); - serialize_value(&buffer, mCfgType); - serialize_value(&buffer, mLd); - serialize_value(&buffer, mHasBias); - - char* d = static_cast(buffer); - serFromDev(d, static_cast(mBetaDev.get()), mLd * mParamWordsize); - serFromDev(d, static_cast(mGammaDev.get()), mLd * mParamWordsize); - if (mHasBias) + BERT_DEBUG_MSG("SkipLayerNormPluginV3 onShapeChange"); + + // Validate input arguments + PLUGIN_VALIDATE(inputs != nullptr); + PLUGIN_VALIDATE(outputs != nullptr); + PLUGIN_VALIDATE(nbOutputs == 1); + PLUGIN_VALIDATE(nbInputs == 2); + if (mType == DataType::kFLOAT || mType == DataType::kHALF) + { + PLUGIN_VALIDATE(mType == inputs[0].type); + PLUGIN_VALIDATE(mType == inputs[1].type); + } + else { - serFromDev(d, static_cast(mBiasDev.get()), mLd * mParamWordsize); + PLUGIN_VALIDATE(mType == inputs[0].type || DataType::kFLOAT == inputs[0].type); + PLUGIN_VALIDATE(mType == inputs[1].type || DataType::kFLOAT == inputs[1].type); } + auto const& inDims0 = inputs[0].dims; + auto const& inDims1 = inputs[1].dims; + PLUGIN_VALIDATE(inDims0.nbDims == inDims1.nbDims); + + PLUGIN_VALIDATE(std::equal(inDims0.d, inDims0.d + inDims0.nbDims, inDims1.d)); + + PLUGIN_VALIDATE(inDims0.nbDims == 5); + mLd = inDims0.d[HDIM]; // hiddensize + PLUGIN_VALIDATE(mLd != 0); + PLUGIN_VALIDATE(inDims0.d[3] == 1); + PLUGIN_VALIDATE(inDims0.d[4] == 1); + + mCfgType = inputs[0].type == DataType::kINT8 ? DataType::kHALF : inputs[0].type; + + mParamWordsize = getElementSize(mCfgType); + return pluginStatus_t::STATUS_SUCCESS; } catch (std::exception const& e) { caughtError(e); } + return pluginStatus_t::STATUS_FAILURE; } -void SkipLayerNormPluginDynamic::destroy() noexcept +IPluginV3* SkipLayerNormPluginV3::attachToContext(IPluginResourceContext* context) noexcept { - try - { - BERT_DEBUG_MSG("SkipLayerNormPluginDynamic destroy"); - // This gets called when the network containing plugin is destroyed - mGammaDev.reset(nullptr); - mBetaDev.reset(nullptr); - mBiasDev.reset(nullptr); - delete this; - } - catch (std::exception const& e) - { - caughtError(e); - } + return clone(); } -void SkipLayerNormPluginDynamic::setPluginNamespace(char const* libNamespace) noexcept +IPluginCapability* SkipLayerNormPluginV3::getCapabilityInterface(PluginCapabilityType type) noexcept { try { - mNamespace = libNamespace; + if (type == PluginCapabilityType::kBUILD) + { + return static_cast(this); + } + if (type == PluginCapabilityType::kRUNTIME) + { + return static_cast(this); + } + PLUGIN_ASSERT(type == PluginCapabilityType::kCORE); + return static_cast(this); } catch (std::exception const& e) { caughtError(e); } + return nullptr; } -char const* SkipLayerNormPluginDynamic::getPluginNamespace() const noexcept -{ - return mNamespace.c_str(); -} - -///////////////////////////////////////////////////////// +////////////////////////// SkipLayerNormPluginV3 (version:5) Creator /////////////////////////////// -SkipLayerNormPluginDynamicCreator::SkipLayerNormPluginDynamicCreator() +SkipLayerNormPluginV3Creator::SkipLayerNormPluginV3Creator() { + static std::mutex sMutex; + std::lock_guard guard(sMutex); mPluginAttributes.clear(); - mPluginAttributes.emplace_back(PluginField("ld")); mPluginAttributes.emplace_back(PluginField("type_id")); + mPluginAttributes.emplace_back(PluginField("ld")); mPluginAttributes.emplace_back(PluginField("beta")); mPluginAttributes.emplace_back(PluginField("gamma")); mPluginAttributes.emplace_back(PluginField("bias")); @@ -463,26 +458,27 @@ SkipLayerNormPluginDynamicCreator::SkipLayerNormPluginDynamicCreator() mFC.fields = mPluginAttributes.data(); } -char const* SkipLayerNormPluginDynamicCreator::getPluginName() const noexcept +char const* SkipLayerNormPluginV3Creator::getPluginName() const noexcept { return kSKIP_LAYER_NORM_NAME; } -char const* SkipLayerNormPluginDynamicCreator::getPluginVersion() const noexcept +char const* SkipLayerNormPluginV3Creator::getPluginVersion() const noexcept { return kSKIP_LAYER_NORM_VERSION; } -PluginFieldCollection const* SkipLayerNormPluginDynamicCreator::getFieldNames() noexcept +PluginFieldCollection const* SkipLayerNormPluginV3Creator::getFieldNames() noexcept { return &mFC; } -IPluginV2* SkipLayerNormPluginDynamicCreator::createPlugin(char const* name, PluginFieldCollection const* fc) noexcept +IPluginV3* SkipLayerNormPluginV3Creator::createPlugin( + char const* name, PluginFieldCollection const* fc, TensorRTPhase phase) noexcept { try { - BERT_DEBUG_MSG("SkipLayerNormPluginDynamicCreator createPlugin"); + BERT_DEBUG_MSG("SkipLayerNormPluginV3Creator createPlugin"); int32_t ld = 0; Weights beta{DataType::kFLOAT, nullptr, 0}; @@ -491,46 +487,32 @@ IPluginV2* SkipLayerNormPluginDynamicCreator::createPlugin(char const* name, Plu int32_t typeId = -1; PLUGIN_VALIDATE(fc != nullptr); + PLUGIN_VALIDATE(fc->fields != nullptr); plugin::validateRequiredAttributesExist({"type_id", "beta", "ld", "gamma"}, fc); for (int32_t i = 0; i < fc->nbFields; i++) { - std::string field_name(fc->fields[i].name); - if (field_name.compare("ld") == 0) - { - ld = *static_cast(fc->fields[i].data); - BERT_DEBUG_VALUE("Building ld: ", ld); - } - - if (field_name.compare("type_id") == 0) + std::string fieldName(fc->fields[i].name); + if (fieldName == "type_id") { typeId = *static_cast(fc->fields[i].data); BERT_DEBUG_VALUE("Building typeId: ", typeId); } - - if (field_name.compare("beta") == 0) + else if (fieldName == "ld") { - BERT_DEBUG_MSG("Building beta..."); - beta.values = fc->fields[i].data; - beta.count = fc->fields[i].length; - beta.type = fieldTypeToDataType(fc->fields[i].type); + ld = *static_cast(fc->fields[i].data); + BERT_DEBUG_VALUE("Building ld: ", ld); } - - if (field_name.compare("gamma") == 0) + // process the weight tensors beta, gamma, bias + else if (fieldName == "beta" || fieldName == "gamma" || fieldName == "bias") { - BERT_DEBUG_MSG("Building gamma..."); - gamma.values = fc->fields[i].data; - gamma.count = fc->fields[i].length; - gamma.type = fieldTypeToDataType(fc->fields[i].type); - } + Weights* weightPtr = (fieldName == "beta") ? &beta : (fieldName == "gamma") ? &gamma : &bias; - if (field_name.compare("bias") == 0) - { - BERT_DEBUG_MSG("Building bias..."); - bias.values = fc->fields[i].data; - bias.count = fc->fields[i].length; - bias.type = fieldTypeToDataType(fc->fields[i].type); + BERT_DEBUG_MSG(("Building " + fieldName + "...").c_str()); + weightPtr->type = fieldTypeToDataType(fc->fields[i].type); + weightPtr->values = fc->fields[i].data; + weightPtr->count = fc->fields[i].length; } } BERT_DEBUG_VALUE("Type ", typeId); @@ -540,27 +522,14 @@ IPluginV2* SkipLayerNormPluginDynamicCreator::createPlugin(char const* name, Plu PLUGIN_VALIDATE(beta.values != nullptr, "SkipLayerNorm: invalid beta"); PLUGIN_VALIDATE(beta.count > 0, "SkipLayerNorm: invalid beta"); - PLUGIN_VALIDATE(gamma.values != nullptr, "SkipLayerNorm: invalid gamma"); PLUGIN_VALIDATE(gamma.count > 0, "SkipLayerNorm: invalid gamma"); + if (bias.values != nullptr) + { + PLUGIN_VALIDATE(bias.count > 0, "SkipLayerNorm: invalid bias"); + } - return new SkipLayerNormPluginDynamic(name, static_cast(typeId), ld, beta, gamma, bias); - } - catch (std::exception const& e) - { - caughtError(e); - } - return nullptr; -} - -IPluginV2* SkipLayerNormPluginDynamicCreator::deserializePlugin( - char const* name, void const* serialData, size_t serialLength) noexcept -{ - // This object will be deleted when the network is destroyed, which will - // call SkipLayerNormPluginDynamic::destroy() - try - { - return new SkipLayerNormPluginDynamic(name, serialData, serialLength); + return new SkipLayerNormPluginV3(name, static_cast(typeId), ld, beta, gamma, bias); } catch (std::exception const& e) { @@ -569,7 +538,7 @@ IPluginV2* SkipLayerNormPluginDynamicCreator::deserializePlugin( return nullptr; } -void SkipLayerNormPluginDynamicCreator::setPluginNamespace(char const* libNamespace) noexcept +void SkipLayerNormPluginV3Creator::setPluginNamespace(char const* libNamespace) noexcept { try { @@ -581,12 +550,14 @@ void SkipLayerNormPluginDynamicCreator::setPluginNamespace(char const* libNamesp } } -char const* SkipLayerNormPluginDynamicCreator::getPluginNamespace() const noexcept +char const* SkipLayerNormPluginV3Creator::getPluginNamespace() const noexcept { return mNamespace.c_str(); } -SkipLayerNormVarSeqlenPlugin::SkipLayerNormVarSeqlenPlugin( +////////////////////////// SkipLayerNormVarSeqlenPluginV3 (skipLayerNorm version: 6) /////////////////////////////// + +SkipLayerNormVarSeqlenPluginV3::SkipLayerNormVarSeqlenPluginV3( const std::string name, const DataType type, Weights const& beta, Weights const& gamma, Weights const& bias) : mLayerName(name) , mGammaDev(nullptr) @@ -621,48 +592,27 @@ SkipLayerNormVarSeqlenPlugin::SkipLayerNormVarSeqlenPlugin( } } -SkipLayerNormVarSeqlenPlugin::SkipLayerNormVarSeqlenPlugin(const std::string name, void const* data, size_t length) - : mLayerName(name) - , mGammaDev(nullptr) - , mBetaDev(nullptr) - , mBiasDev(nullptr) +SkipLayerNormVarSeqlenPluginV3::~SkipLayerNormVarSeqlenPluginV3() { - BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPlugin deserialize"); - - // Deserialize in the same order as serialization - deserialize_value(&data, &length, &mType); - deserialize_value(&data, &length, &mCfgType); - deserialize_value(&data, &length, &mLd); - deserialize_value(&data, &length, &mHasBias); - - PLUGIN_VALIDATE(mCfgType == nvinfer1::DataType::kFLOAT || mCfgType == nvinfer1::DataType::kHALF); - mParamWordsize = getElementSize(mCfgType); - - char const* d = static_cast(data); - mBeta.convertAndCopy(d, mLd, mCfgType); - mGamma.convertAndCopy(d, mLd, mCfgType); - if (mHasBias) + try { - mBias.convertAndCopy(d, mLd, mCfgType); + BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPluginV3 destroy"); + mGammaDev.reset(nullptr); + mBetaDev.reset(nullptr); + mBiasDev.reset(nullptr); } - - copyToDevice(mGamma, getWeightsSize(mGamma, mCfgType), mGammaDev); - copyToDevice(mBeta, getWeightsSize(mBeta, mCfgType), mBetaDev); - if (mHasBias) + catch (std::exception const& e) { - copyToDevice(mBias, getWeightsSize(mBias, mCfgType), mBiasDev); + caughtError(e); } } -// IPluginV2DynamicExt Methods -IPluginV2DynamicExt* SkipLayerNormVarSeqlenPlugin::clone() const noexcept +IPluginV3* SkipLayerNormVarSeqlenPluginV3::clone() noexcept { try { - BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPlugin clone"); - - auto* p = new SkipLayerNormVarSeqlenPlugin(mLayerName, mType, mBeta, mGamma, mBias); - p->initialize(); + BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPluginV3 clone"); + auto* p = new SkipLayerNormVarSeqlenPluginV3(mLayerName, mType, mBeta, mGamma, mBias); p->setPluginNamespace(mNamespace.c_str()); return p; } @@ -673,26 +623,28 @@ IPluginV2DynamicExt* SkipLayerNormVarSeqlenPlugin::clone() const noexcept return nullptr; } -DimsExprs SkipLayerNormVarSeqlenPlugin::getOutputDimensions( - int32_t outputIndex, DimsExprs const* inputs, int32_t nbInputs, IExprBuilder& exprBuilder) noexcept +int32_t SkipLayerNormVarSeqlenPluginV3::getOutputShapes(DimsExprs const* inputs, int32_t nbInputs, + DimsExprs const* shapeInputs, int32_t nbShapeInputs, DimsExprs* outputs, int32_t nbOutputs, + IExprBuilder& exprBuilder) noexcept { try { PLUGIN_VALIDATE(inputs != nullptr); PLUGIN_VALIDATE(nbInputs == 2); - PLUGIN_VALIDATE(outputIndex == 0); + PLUGIN_VALIDATE(nbOutputs == 1); PLUGIN_VALIDATE(inputs[0].nbDims == inputs[1].nbDims); - return inputs[0]; + outputs[0] = inputs[0]; + return pluginStatus_t::STATUS_SUCCESS; } catch (std::exception const& e) { caughtError(e); } - return DimsExprs{}; + return pluginStatus_t::STATUS_FAILURE; } -bool SkipLayerNormVarSeqlenPlugin::supportsFormatCombination( - int32_t pos, PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept +bool SkipLayerNormVarSeqlenPluginV3::supportsFormatCombination( + int32_t pos, DynamicPluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept { try { @@ -701,7 +653,7 @@ bool SkipLayerNormVarSeqlenPlugin::supportsFormatCombination( PLUGIN_VALIDATE(nbOutputs == 1); PLUGIN_VALIDATE(pos >= 0 && pos < (nbInputs + nbOutputs)); - PluginTensorDesc const& in = inOut[pos]; + PluginTensorDesc const& in = inOut[pos].desc; if (mType != in.type) return false; @@ -726,7 +678,7 @@ bool SkipLayerNormVarSeqlenPlugin::supportsFormatCombination( } return in.format == TensorFormat::kLINEAR; } - PluginTensorDesc const& prev = inOut[pos - 1]; + PluginTensorDesc const& prev = inOut[pos - 1].desc; return in.format == prev.format; } @@ -737,52 +689,21 @@ bool SkipLayerNormVarSeqlenPlugin::supportsFormatCombination( return false; } -void SkipLayerNormVarSeqlenPlugin::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, +int32_t SkipLayerNormVarSeqlenPluginV3::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept { - try - { - // Validate input arguments - PLUGIN_VALIDATE(inputs != nullptr); - PLUGIN_VALIDATE(outputs != nullptr); - PLUGIN_VALIDATE(nbOutputs == 1); - PLUGIN_VALIDATE(nbInputs == 2); - - if (mType == DataType::kFLOAT || mType == DataType::kHALF) - { - PLUGIN_VALIDATE(mType == inputs[0].desc.type); - PLUGIN_VALIDATE(mType == inputs[1].desc.type); - } - else - { - PLUGIN_VALIDATE(mType == inputs[0].desc.type || DataType::kFLOAT == inputs[0].desc.type); - PLUGIN_VALIDATE(mType == inputs[1].desc.type || DataType::kFLOAT == inputs[1].desc.type); - } - auto const& inDims0 = inputs[0].desc.dims; - auto const& inDims1 = inputs[1].desc.dims; - PLUGIN_VALIDATE(inDims0.nbDims == inDims1.nbDims); - - PLUGIN_VALIDATE(std::equal(inDims0.d, inDims0.d + inDims0.nbDims, inDims1.d)); - - mCfgType = inputs[0].desc.type == DataType::kINT8 ? DataType::kHALF : inputs[0].desc.type; - - auto const paramType = getParamWordType(mCfgType); - mParamWordsize = getElementSize(paramType); - } - catch (std::exception const& e) - { - caughtError(e); - } + return pluginStatus_t::STATUS_SUCCESS; } -size_t SkipLayerNormVarSeqlenPlugin::getWorkspaceSize( - PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept +size_t SkipLayerNormVarSeqlenPluginV3::getWorkspaceSize(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept { return 0; } -int32_t SkipLayerNormVarSeqlenPlugin::enqueue(PluginTensorDesc const* inputDesc, PluginTensorDesc const* outputDesc, - void const* const* inputs, void* const* outputs, void* /* workspace */, cudaStream_t stream) noexcept +int32_t SkipLayerNormVarSeqlenPluginV3::enqueue(nvinfer1::PluginTensorDesc const* inputDesc, + nvinfer1::PluginTensorDesc const* outputDesc, void const* const* inputs, void* const* outputs, void* workspace, + cudaStream_t stream) noexcept { int32_t status = -1; try @@ -870,102 +791,165 @@ int32_t SkipLayerNormVarSeqlenPlugin::enqueue(PluginTensorDesc const* inputDesc, return status; } -// IPluginV2Ext Methods -DataType SkipLayerNormVarSeqlenPlugin::getOutputDataType( - int32_t index, DataType const* inputTypes, int32_t nbInputs) const noexcept -{ - PLUGIN_VALIDATE(inputTypes != nullptr); - PLUGIN_VALIDATE(index == 0); - PLUGIN_VALIDATE(nbInputs == 2); - return inputTypes[0]; -} - -// IPluginV2 Methods -char const* SkipLayerNormVarSeqlenPlugin::getPluginType() const noexcept +int32_t SkipLayerNormVarSeqlenPluginV3::getOutputDataTypes( + DataType* outputTypes, int32_t nbOutputs, DataType const* inputTypes, int32_t nbInputs) const noexcept { - return kSKIP_LAYER_NORM_NAME; + try + { + PLUGIN_VALIDATE(outputTypes != nullptr); + PLUGIN_VALIDATE(nbOutputs == 1); + PLUGIN_VALIDATE(inputTypes != nullptr); + PLUGIN_VALIDATE(nbInputs == 2); + outputTypes[0] = inputTypes[0]; + return pluginStatus_t::STATUS_SUCCESS; + } + catch (std::exception const& e) + { + caughtError(e); + } + return pluginStatus_t::STATUS_FAILURE; } -char const* SkipLayerNormVarSeqlenPlugin::getPluginVersion() const noexcept +char const* SkipLayerNormVarSeqlenPluginV3::getPluginVersion() const noexcept { return kSKIP_LAYER_NORM_VAR_SEQLEN_VERSION; } -int32_t SkipLayerNormVarSeqlenPlugin::getNbOutputs() const noexcept +int32_t SkipLayerNormVarSeqlenPluginV3::getNbOutputs() const noexcept { return 1; } -int32_t SkipLayerNormVarSeqlenPlugin::initialize() noexcept +PluginFieldCollection const* SkipLayerNormVarSeqlenPluginV3::getFieldsToSerialize() noexcept { - BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPlugin initialize"); - return 0; + mDataToSerialize.clear(); + mDataToSerialize.emplace_back("type_id", &mType, PluginFieldType::kINT32, 1); + mDataToSerialize.emplace_back("ld", &mLd, PluginFieldType::kINT32, 1); + if (mCfgType == DataType::kHALF) + { + mDataToSerialize.emplace_back( + "beta", static_cast(mBeta.values), PluginFieldType::kFLOAT16, mBeta.count); + PLUGIN_ASSERT(mBeta.type == mCfgType); + mDataToSerialize.emplace_back( + "gamma", static_cast(mGamma.values), PluginFieldType::kFLOAT16, mGamma.count); + PLUGIN_ASSERT(mGamma.type == mCfgType); + if (mHasBias) + { + mDataToSerialize.emplace_back( + "bias", static_cast(mBias.values), PluginFieldType::kFLOAT16, mBias.count); + PLUGIN_ASSERT(mBias.type == mCfgType); + } + } + else + { + PLUGIN_ASSERT(mCfgType == DataType::kFLOAT); + mDataToSerialize.emplace_back( + "beta", static_cast(mBeta.values), PluginFieldType::kFLOAT32, mBeta.count); + PLUGIN_ASSERT(mBeta.type == mCfgType); + mDataToSerialize.emplace_back( + "gamma", static_cast(mGamma.values), PluginFieldType::kFLOAT32, mGamma.count); + PLUGIN_ASSERT(mGamma.type == mCfgType); + if (mHasBias) + { + mDataToSerialize.emplace_back( + "bias", static_cast(mBias.values), PluginFieldType::kFLOAT32, mBias.count); + PLUGIN_ASSERT(mBias.type == mCfgType); + } + } + + mFCToSerialize.nbFields = mDataToSerialize.size(); + mFCToSerialize.fields = mDataToSerialize.data(); + + return &mFCToSerialize; +} + +void SkipLayerNormVarSeqlenPluginV3::setPluginNamespace(char const* libNamespace) noexcept +{ + mNamespace = libNamespace; } -void SkipLayerNormVarSeqlenPlugin::terminate() noexcept +char const* SkipLayerNormVarSeqlenPluginV3::getPluginNamespace() const noexcept { - BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPlugin terminate"); + return mNamespace.c_str(); } -size_t SkipLayerNormVarSeqlenPlugin::getSerializationSize() const noexcept +char const* SkipLayerNormVarSeqlenPluginV3::getPluginName() const noexcept { - const size_t biasSize = mHasBias ? (mLd * mParamWordsize) : 0; - return 2 * mParamWordsize * mLd + 2 * sizeof(DataType) + sizeof(mLd) + biasSize + sizeof(mHasBias); + return kSKIP_LAYER_NORM_NAME; } -void SkipLayerNormVarSeqlenPlugin::serialize(void* buffer) const noexcept +int32_t SkipLayerNormVarSeqlenPluginV3::onShapeChange( + PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) noexcept { try { - serialize_value(&buffer, mType); - serialize_value(&buffer, mCfgType); - serialize_value(&buffer, mLd); - serialize_value(&buffer, mHasBias); - - char* d = static_cast(buffer); - serFromDev(d, static_cast(mBetaDev.get()), mLd * mParamWordsize); - serFromDev(d, static_cast(mGammaDev.get()), mLd * mParamWordsize); - if (mHasBias) + // Validate input arguments + PLUGIN_VALIDATE(inputs != nullptr); + PLUGIN_VALIDATE(outputs != nullptr); + PLUGIN_VALIDATE(nbOutputs == 1); + PLUGIN_VALIDATE(nbInputs == 2); + + if (mType == DataType::kFLOAT || mType == DataType::kHALF) { - serFromDev(d, static_cast(mBiasDev.get()), mLd * mParamWordsize); + PLUGIN_VALIDATE(mType == inputs[0].type); + PLUGIN_VALIDATE(mType == inputs[1].type); } + else + { + PLUGIN_VALIDATE(mType == inputs[0].type || DataType::kFLOAT == inputs[0].type); + PLUGIN_VALIDATE(mType == inputs[1].type || DataType::kFLOAT == inputs[1].type); + } + auto const& inDims0 = inputs[0].dims; + auto const& inDims1 = inputs[1].dims; + PLUGIN_VALIDATE(inDims0.nbDims == inDims1.nbDims); + + PLUGIN_VALIDATE(std::equal(inDims0.d, inDims0.d + inDims0.nbDims, inDims1.d)); + + mCfgType = inputs[0].type == DataType::kINT8 ? DataType::kHALF : inputs[0].type; + + mParamWordsize = getElementSize(mCfgType); + + return pluginStatus_t::STATUS_SUCCESS; } catch (std::exception const& e) { caughtError(e); } + return pluginStatus_t::STATUS_FAILURE; } -void SkipLayerNormVarSeqlenPlugin::destroy() noexcept +IPluginV3* SkipLayerNormVarSeqlenPluginV3::attachToContext(IPluginResourceContext* context) noexcept +{ + return clone(); +} + +IPluginCapability* SkipLayerNormVarSeqlenPluginV3::getCapabilityInterface(PluginCapabilityType type) noexcept { try { - BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPlugin destroy"); - // This gets called when the network containing plugin is destroyed - mGammaDev.reset(nullptr); - mBetaDev.reset(nullptr); - mBiasDev.reset(nullptr); - delete this; + if (type == PluginCapabilityType::kBUILD) + { + return static_cast(this); + } + if (type == PluginCapabilityType::kRUNTIME) + { + return static_cast(this); + } + PLUGIN_ASSERT(type == PluginCapabilityType::kCORE); + return static_cast(this); } catch (std::exception const& e) { caughtError(e); } + return nullptr; } -void SkipLayerNormVarSeqlenPlugin::setPluginNamespace(char const* libNamespace) noexcept -{ - mNamespace = libNamespace; -} - -char const* SkipLayerNormVarSeqlenPlugin::getPluginNamespace() const noexcept -{ - return mNamespace.c_str(); -} - -///////////////////////////////////////////////////////// +////////////////////////// SkipLayerNormVarSeqlenPluginV3Creator /////////////////////////////// -SkipLayerNormVarSeqlenPluginCreator::SkipLayerNormVarSeqlenPluginCreator() +SkipLayerNormVarSeqlenPluginV3Creator::SkipLayerNormVarSeqlenPluginV3Creator() { + static std::mutex sMutex; + std::lock_guard guard(sMutex); mPluginAttributes.clear(); mPluginAttributes.emplace_back(PluginField("type_id")); mPluginAttributes.emplace_back(PluginField("beta")); @@ -975,26 +959,27 @@ SkipLayerNormVarSeqlenPluginCreator::SkipLayerNormVarSeqlenPluginCreator() mFC.fields = mPluginAttributes.data(); } -char const* SkipLayerNormVarSeqlenPluginCreator::getPluginName() const noexcept +char const* SkipLayerNormVarSeqlenPluginV3Creator::getPluginName() const noexcept { return kSKIP_LAYER_NORM_NAME; } -char const* SkipLayerNormVarSeqlenPluginCreator::getPluginVersion() const noexcept +char const* SkipLayerNormVarSeqlenPluginV3Creator::getPluginVersion() const noexcept { return kSKIP_LAYER_NORM_VAR_SEQLEN_VERSION; } -PluginFieldCollection const* SkipLayerNormVarSeqlenPluginCreator::getFieldNames() noexcept +PluginFieldCollection const* SkipLayerNormVarSeqlenPluginV3Creator::getFieldNames() noexcept { return &mFC; } -IPluginV2* SkipLayerNormVarSeqlenPluginCreator::createPlugin(char const* name, PluginFieldCollection const* fc) noexcept +IPluginV3* SkipLayerNormVarSeqlenPluginV3Creator::createPlugin( + char const* name, PluginFieldCollection const* fc, TensorRTPhase phase) noexcept { try { - BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPluginCreator createPlugin"); + BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPluginV3Creator createPlugin"); Weights beta{DataType::kFLOAT, nullptr, 0}; Weights gamma{DataType::kFLOAT, nullptr, 0}; @@ -1007,36 +992,21 @@ IPluginV2* SkipLayerNormVarSeqlenPluginCreator::createPlugin(char const* name, P for (int32_t i = 0; i < fc->nbFields; i++) { - std::string field_name(fc->fields[i].name); - - if (field_name.compare("type_id") == 0) + std::string fieldName(fc->fields[i].name); + if (fieldName == "type_id") { typeId = *static_cast(fc->fields[i].data); BERT_DEBUG_VALUE("Building typeId: ", typeId); } - - if (field_name.compare("beta") == 0) + // process the weight tensors beta, gamma, bias + else if (fieldName == "beta" || fieldName == "gamma" || fieldName == "bias") { - BERT_DEBUG_MSG("Building beta..."); - beta.values = fc->fields[i].data; - beta.count = fc->fields[i].length; - beta.type = fieldTypeToDataType(fc->fields[i].type); - } + Weights* weightPtr = (fieldName == "beta") ? &beta : (fieldName == "gamma") ? &gamma : &bias; - if (field_name.compare("gamma") == 0) - { - BERT_DEBUG_MSG("Building gamma..."); - gamma.values = fc->fields[i].data; - gamma.count = fc->fields[i].length; - gamma.type = fieldTypeToDataType(fc->fields[i].type); - } - - if (field_name.compare("bias") == 0) - { - BERT_DEBUG_MSG("Building bias..."); - bias.values = fc->fields[i].data; - bias.count = fc->fields[i].length; - bias.type = fieldTypeToDataType(fc->fields[i].type); + BERT_DEBUG_MSG(("Building " + fieldName + "...").c_str()); + weightPtr->type = fieldTypeToDataType(fc->fields[i].type); + weightPtr->values = fc->fields[i].data; + weightPtr->count = fc->fields[i].length; } } BERT_DEBUG_VALUE("Type ", typeId); @@ -1050,7 +1020,7 @@ IPluginV2* SkipLayerNormVarSeqlenPluginCreator::createPlugin(char const* name, P PLUGIN_VALIDATE(gamma.values != nullptr, "SkipLayerNorm: invalid gamma"); PLUGIN_VALIDATE(gamma.count > 0, "SkipLayerNorm: invalid gamma"); - return new SkipLayerNormVarSeqlenPlugin(name, static_cast(typeId), beta, gamma, bias); + return new SkipLayerNormVarSeqlenPluginV3(name, static_cast(typeId), beta, gamma, bias); } catch (std::exception const& e) { @@ -1059,28 +1029,19 @@ IPluginV2* SkipLayerNormVarSeqlenPluginCreator::createPlugin(char const* name, P return nullptr; } -IPluginV2* SkipLayerNormVarSeqlenPluginCreator::deserializePlugin( - char const* name, void const* serialData, size_t serialLength) noexcept +void SkipLayerNormVarSeqlenPluginV3Creator::setPluginNamespace(char const* libNamespace) noexcept { - // This object will be deleted when the network is destroyed, which will - // call SkipLayerNormVarSeqlenPlugin::destroy() try { - return new SkipLayerNormVarSeqlenPlugin(name, serialData, serialLength); + mNamespace = libNamespace; } catch (std::exception const& e) { caughtError(e); } - return nullptr; -} - -void SkipLayerNormVarSeqlenPluginCreator::setPluginNamespace(char const* libNamespace) noexcept -{ - mNamespace = libNamespace; } -char const* SkipLayerNormVarSeqlenPluginCreator::getPluginNamespace() const noexcept +char const* SkipLayerNormVarSeqlenPluginV3Creator::getPluginNamespace() const noexcept { return mNamespace.c_str(); } diff --git a/plugin/skipLayerNormPlugin/skipLayerNormPlugin.h b/plugin/skipLayerNormPlugin/skipLayerNormPlugin.h index 9b1a783a..364fc68d 100644 --- a/plugin/skipLayerNormPlugin/skipLayerNormPlugin.h +++ b/plugin/skipLayerNormPlugin/skipLayerNormPlugin.h @@ -43,75 +43,100 @@ template int32_t computeSkipLayerNorm(cudaStream_t stream, int32_t const ld, int32_t const n, T const* input, T const* skip, T const* beta, T const* gamma, T* output, T const* bias); -class SkipLayerNormPluginDynamic : public nvinfer1::IPluginV2DynamicExt +class SkipLayerNormPluginV3 : public IPluginV3, + public IPluginV3OneCore, + public IPluginV3OneBuild, + public IPluginV3OneRuntime { public: - SkipLayerNormPluginDynamic(const std::string name, const nvinfer1::DataType type, int32_t const ld, + SkipLayerNormPluginV3(const std::string name, const nvinfer1::DataType type, int32_t const ld, nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma, nvinfer1::Weights const& bias); - SkipLayerNormPluginDynamic(const std::string name, void const* data, size_t length); - - // It doesn't make sense to make SkipLayerNormPluginDynamic without arguments, + // It doesn't make sense to make SkipLayerNormPluginV3 without arguments, // so we delete default constructor. - SkipLayerNormPluginDynamic() = delete; + SkipLayerNormPluginV3() = delete; + + ~SkipLayerNormPluginV3() override; + + // IPluginV3 Methods + IPluginCapability* getCapabilityInterface(PluginCapabilityType type) noexcept override; + + IPluginV3* clone() noexcept override; + // end of IPluginV3 Methods + + // IPluginV3OneCore Methods + char const* getPluginName() const noexcept override; + + char const* getPluginVersion() const noexcept override; + + char const* getPluginNamespace() const noexcept override; + + void setPluginNamespace(char const* pluginNamespace) noexcept; + // end of IPluginV3OneCore Methods + + // IPluginV3Build Methods + int32_t getNbOutputs() const noexcept override; - // IPluginV2DynamicExt Methods - nvinfer1::IPluginV2DynamicExt* clone() const noexcept override; - nvinfer1::DimsExprs getOutputDimensions(int32_t outputIndex, nvinfer1::DimsExprs const* inputs, int32_t nbInputs, - nvinfer1::IExprBuilder& exprBuilder) noexcept override; bool supportsFormatCombination( - int32_t pos, nvinfer1::PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept override; - void configurePlugin(nvinfer1::DynamicPluginTensorDesc const* in, int32_t nbInputs, - nvinfer1::DynamicPluginTensorDesc const* out, int32_t nbOutputs) noexcept override; - size_t getWorkspaceSize(nvinfer1::PluginTensorDesc const* inputs, int32_t nbInputs, - nvinfer1::PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept override; + int32_t pos, DynamicPluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept override; + + int32_t getOutputShapes(DimsExprs const* inputs, int32_t nbInputs, DimsExprs const* shapeInputs, + int32_t nbShapeInputs, DimsExprs* outputs, int32_t nbOutputs, IExprBuilder& exprBuilder) noexcept override; + + int32_t configurePlugin(DynamicPluginTensorDesc const* in, int32_t nbInputs, DynamicPluginTensorDesc const* out, + int32_t nbOutputs) noexcept override; + + size_t getWorkspaceSize(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept override; + + int32_t getOutputDataTypes( + DataType* outputTypes, int32_t nbOutputs, DataType const* inputTypes, int32_t nbInputs) const noexcept override; + // end IPluginV3Build Methods + + // IPluginV3Runtime Methods int32_t enqueue(nvinfer1::PluginTensorDesc const* inputDesc, nvinfer1::PluginTensorDesc const* outputDesc, void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override; - // IPluginV2Ext Methods - nvinfer1::DataType getOutputDataType( - int32_t index, nvinfer1::DataType const* inputTypes, int32_t nbInputs) const noexcept override; + int32_t onShapeChange( + PluginTensorDesc const* in, int32_t nbInputs, PluginTensorDesc const* out, int32_t nbOutputs) noexcept override; - // IPluginV2 Methods - char const* getPluginType() const noexcept override; - char const* getPluginVersion() const noexcept override; - int32_t getNbOutputs() const noexcept override; - int32_t initialize() noexcept override; - void terminate() noexcept override; - size_t getSerializationSize() const noexcept override; - void serialize(void* buffer) const noexcept override; - void destroy() noexcept override; - void setPluginNamespace(char const* pluginNamespace) noexcept override; - char const* getPluginNamespace() const noexcept override; + IPluginV3* attachToContext(IPluginResourceContext* context) noexcept override; + + PluginFieldCollection const* getFieldsToSerialize() noexcept override; + // end IPluginV3Runtime Methods private: + // metadata const std::string mLayerName; std::string mNamespace; - bert::cuda_unique_ptr mGammaDev; - bert::cuda_unique_ptr mBetaDev; - size_t mLd{}; // leading dim + // members that participate in ser/deserialization bert::WeightsWithOwnership mGamma; bert::WeightsWithOwnership mBeta; + bert::WeightsWithOwnership mBias; nvinfer1::DataType mType; nvinfer1::DataType mCfgType; - + int32_t mLd{}; // leading dim bool mHasBias{}; + + // device-side + bert::cuda_unique_ptr mGammaDev; + bert::cuda_unique_ptr mBetaDev; bert::cuda_unique_ptr mBiasDev; - bert::WeightsWithOwnership mBias; + // derived member from mCfgType size_t mParamWordsize{}; - using IPluginV2::enqueue; - using IPluginV2::getOutputDimensions; - using IPluginV2::getWorkspaceSize; - using IPluginV2Ext::configurePlugin; + // serialization data structures + std::vector mDataToSerialize; + nvinfer1::PluginFieldCollection mFCToSerialize; }; -class SkipLayerNormPluginDynamicCreator : public nvinfer1::IPluginCreator +class SkipLayerNormPluginV3Creator : public nvinfer1::IPluginCreatorV3One { public: - SkipLayerNormPluginDynamicCreator(); + SkipLayerNormPluginV3Creator(); + ~SkipLayerNormPluginV3Creator() override = default; char const* getPluginName() const noexcept override; @@ -119,61 +144,81 @@ class SkipLayerNormPluginDynamicCreator : public nvinfer1::IPluginCreator nvinfer1::PluginFieldCollection const* getFieldNames() noexcept override; - nvinfer1::IPluginV2* createPlugin(char const* name, nvinfer1::PluginFieldCollection const* fc) noexcept override; + IPluginV3* createPlugin(char const* name, PluginFieldCollection const* fc, TensorRTPhase phase) noexcept override; - nvinfer1::IPluginV2* deserializePlugin( - char const* name, void const* serialData, size_t serialLength) noexcept override; - - void setPluginNamespace(char const* pluginNamespace) noexcept override; + void setPluginNamespace(char const* libNamespace) noexcept; char const* getPluginNamespace() const noexcept override; private: - static nvinfer1::PluginFieldCollection mFC; - static std::vector mPluginAttributes; + static PluginFieldCollection mFC; + static std::vector mPluginAttributes; std::string mNamespace; }; -class SkipLayerNormVarSeqlenPlugin : public nvinfer1::IPluginV2DynamicExt +class SkipLayerNormVarSeqlenPluginV3 : public IPluginV3, + public IPluginV3OneCore, + public IPluginV3OneBuild, + public IPluginV3OneRuntime { public: - SkipLayerNormVarSeqlenPlugin(const std::string name, const nvinfer1::DataType type, nvinfer1::Weights const& beta, + SkipLayerNormVarSeqlenPluginV3(const std::string name, const nvinfer1::DataType type, nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma, nvinfer1::Weights const& bias); - SkipLayerNormVarSeqlenPlugin(const std::string name, void const* data, size_t length); + SkipLayerNormVarSeqlenPluginV3(const std::string name, void const* data, size_t length); - // It doesn't make sense to make SkipLayerNormVarSeqlenPlugin without + // It doesn't make sense to make SkipLayerNormVarSeqlenPluginV3 without // arguments, so we delete default constructor. - SkipLayerNormVarSeqlenPlugin() = delete; + SkipLayerNormVarSeqlenPluginV3() = delete; + + ~SkipLayerNormVarSeqlenPluginV3() override; + + // IPluginV3 Methods + IPluginCapability* getCapabilityInterface(PluginCapabilityType type) noexcept override; + + IPluginV3* clone() noexcept override; + // end of IPluginV3 Methods + + // IPluginV3OneCore Methods + char const* getPluginName() const noexcept override; + + char const* getPluginVersion() const noexcept override; + + char const* getPluginNamespace() const noexcept override; + + void setPluginNamespace(char const* pluginNamespace) noexcept; + // end of IPluginV3OneCore Methods + + // IPluginV3Build Methods + int32_t getNbOutputs() const noexcept override; - // IPluginV2DynamicExt Methods - nvinfer1::IPluginV2DynamicExt* clone() const noexcept override; - nvinfer1::DimsExprs getOutputDimensions(int32_t outputIndex, nvinfer1::DimsExprs const* inputs, int32_t nbInputs, - nvinfer1::IExprBuilder& exprBuilder) noexcept override; bool supportsFormatCombination( - int32_t pos, nvinfer1::PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept override; - void configurePlugin(nvinfer1::DynamicPluginTensorDesc const* in, int32_t nbInputs, - nvinfer1::DynamicPluginTensorDesc const* out, int32_t nbOutputs) noexcept override; - size_t getWorkspaceSize(nvinfer1::PluginTensorDesc const* inputs, int32_t nbInputs, - nvinfer1::PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept override; + int32_t pos, DynamicPluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept override; + + int32_t getOutputShapes(DimsExprs const* inputs, int32_t nbInputs, DimsExprs const* shapeInputs, + int32_t nbShapeInputs, DimsExprs* outputs, int32_t nbOutputs, IExprBuilder& exprBuilder) noexcept override; + + int32_t configurePlugin(DynamicPluginTensorDesc const* in, int32_t nbInputs, DynamicPluginTensorDesc const* out, + int32_t nbOutputs) noexcept override; + + size_t getWorkspaceSize(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept override; + + int32_t getOutputDataTypes( + DataType* outputTypes, int32_t nbOutputs, DataType const* inputTypes, int32_t nbInputs) const noexcept override; + // end IPluginV3Build Methods + + // IPluginV3Runtime Methods int32_t enqueue(nvinfer1::PluginTensorDesc const* inputDesc, nvinfer1::PluginTensorDesc const* outputDesc, void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override; - // IPluginV2Ext Methods - nvinfer1::DataType getOutputDataType( - int32_t index, nvinfer1::DataType const* inputTypes, int32_t nbInputs) const noexcept override; + int32_t onShapeChange( + PluginTensorDesc const* in, int32_t nbInputs, PluginTensorDesc const* out, int32_t nbOutputs) noexcept override; - // IPluginV2 Methods - char const* getPluginType() const noexcept override; - char const* getPluginVersion() const noexcept override; - int32_t getNbOutputs() const noexcept override; - int32_t initialize() noexcept override; - void terminate() noexcept override; - size_t getSerializationSize() const noexcept override; - void serialize(void* buffer) const noexcept override; - void destroy() noexcept override; - void setPluginNamespace(char const* pluginNamespace) noexcept override; - char const* getPluginNamespace() const noexcept override; + IPluginV3* attachToContext(IPluginResourceContext* context) noexcept override; + + PluginFieldCollection const* getFieldsToSerialize() noexcept override; + // end IPluginV3Runtime Methods private: const std::string mLayerName; @@ -181,7 +226,7 @@ class SkipLayerNormVarSeqlenPlugin : public nvinfer1::IPluginV2DynamicExt bert::cuda_unique_ptr mGammaDev; bert::cuda_unique_ptr mBetaDev; - size_t mLd{}; // leading dim + int32_t mLd{}; // leading dim bert::WeightsWithOwnership mGamma; bert::WeightsWithOwnership mBeta; nvinfer1::DataType mType; @@ -193,29 +238,25 @@ class SkipLayerNormVarSeqlenPlugin : public nvinfer1::IPluginV2DynamicExt size_t mParamWordsize{}; - using IPluginV2::enqueue; - using IPluginV2::getOutputDimensions; - using IPluginV2::getWorkspaceSize; - using IPluginV2Ext::configurePlugin; + std::vector mDataToSerialize; + nvinfer1::PluginFieldCollection mFCToSerialize; }; -class SkipLayerNormVarSeqlenPluginCreator : public nvinfer1::IPluginCreator +class SkipLayerNormVarSeqlenPluginV3Creator : public nvinfer1::IPluginCreatorV3One { public: - SkipLayerNormVarSeqlenPluginCreator(); + SkipLayerNormVarSeqlenPluginV3Creator(); + ~SkipLayerNormVarSeqlenPluginV3Creator() override = default; char const* getPluginName() const noexcept override; char const* getPluginVersion() const noexcept override; - nvinfer1::PluginFieldCollection const* getFieldNames() noexcept override; - - nvinfer1::IPluginV2* createPlugin(char const* name, nvinfer1::PluginFieldCollection const* fc) noexcept override; + PluginFieldCollection const* getFieldNames() noexcept override; - nvinfer1::IPluginV2* deserializePlugin( - char const* name, void const* serialData, size_t serialLength) noexcept override; + IPluginV3* createPlugin(char const* name, PluginFieldCollection const* fc, TensorRTPhase phase) noexcept override; - void setPluginNamespace(char const* pluginNamespace) noexcept override; + void setPluginNamespace(char const* libNamespace) noexcept; char const* getPluginNamespace() const noexcept override; diff --git a/plugin/skipLayerNormPlugin/skipLayerNormPluginLegacy.cpp b/plugin/skipLayerNormPlugin/skipLayerNormPluginLegacy.cpp new file mode 100644 index 00000000..119cc8d0 --- /dev/null +++ b/plugin/skipLayerNormPlugin/skipLayerNormPluginLegacy.cpp @@ -0,0 +1,1078 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 1993-2024 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. + */ + +#include +#if CUDA_VERSION >= 10010 + +#include "NvInfer.h" +#include "common/serialize.hpp" +#include "skipLayerNormPluginLegacy.h" + +#include +#include + +using namespace nvinfer1; +using namespace nvinfer1::plugin; +using namespace nvinfer1::plugin::bert; + +// Clip plugin specific constants +namespace +{ +constexpr char const* kSKIP_LAYER_NORM_VERSION{"1"}; +constexpr char const* kSKIP_LAYER_NORM_NAME{"CustomSkipLayerNormPluginDynamic"}; +constexpr char const* kSKIP_LAYER_NORM_VAR_SEQLEN_VERSION{"2"}; +} // namespace + +// Static class fields initialization +PluginFieldCollection SkipLayerNormPluginDynamicCreator::mFC{}; +std::vector SkipLayerNormPluginDynamicCreator::mPluginAttributes; + +PluginFieldCollection SkipLayerNormVarSeqlenPluginCreator::mFC{}; +std::vector SkipLayerNormVarSeqlenPluginCreator::mPluginAttributes; + +REGISTER_TENSORRT_PLUGIN(SkipLayerNormPluginDynamicCreator); +REGISTER_TENSORRT_PLUGIN(SkipLayerNormVarSeqlenPluginCreator); + +SkipLayerNormPluginDynamic::SkipLayerNormPluginDynamic(const std::string name, const DataType type, int32_t const ld, + Weights const& beta, Weights const& gamma, Weights const& bias) + : mLayerName(name) + , mGammaDev(nullptr) + , mBetaDev(nullptr) + , mLd(ld) + , mType(type) + , mBiasDev(nullptr) +{ + PLUGIN_VALIDATE(mType == nvinfer1::DataType::kFLOAT || mType == nvinfer1::DataType::kHALF + || mType == nvinfer1::DataType::kINT8); + // mCfgType is the dataType for beta, gamma bias weights, always fp16 or fp32 + // mType is the plugin IO datatype, can be int8 + mCfgType = mType == DataType::kINT8 ? DataType::kHALF : mType; + mParamWordsize = getElementSize(mCfgType); + + mBeta.convertAndCopy(beta, mCfgType); + mGamma.convertAndCopy(gamma, mCfgType); + + mHasBias = (bias.values != nullptr); + if (mHasBias) + { + mBias.convertAndCopy(bias, mCfgType); + } + + copyToDevice(mGamma, getWeightsSize(mGamma, mCfgType), mGammaDev); + copyToDevice(mBeta, getWeightsSize(mBeta, mCfgType), mBetaDev); + if (mHasBias) + { + copyToDevice(mBias, getWeightsSize(mBias, mCfgType), mBiasDev); + } +} + +SkipLayerNormPluginDynamic::SkipLayerNormPluginDynamic(const std::string name, void const* data, size_t length) + : mLayerName(name) + , mGammaDev(nullptr) + , mBetaDev(nullptr) + , mBiasDev(nullptr) +{ + BERT_DEBUG_MSG("SkipLayerNormPluginDynamic deserialize"); + + // Deserialize in the same order as serialization + deserialize_value(&data, &length, &mType); + deserialize_value(&data, &length, &mCfgType); + deserialize_value(&data, &length, &mLd); + deserialize_value(&data, &length, &mHasBias); + + PLUGIN_VALIDATE(mCfgType == nvinfer1::DataType::kFLOAT || mCfgType == nvinfer1::DataType::kHALF); + mParamWordsize = getElementSize(mCfgType); + + char const* d = static_cast(data); + mBeta.convertAndCopy(d, mLd, mCfgType); + mGamma.convertAndCopy(d, mLd, mCfgType); + if (mHasBias) + { + mBias.convertAndCopy(d, mLd, mCfgType); + } + + copyToDevice(mGamma, getWeightsSize(mGamma, mCfgType), mGammaDev); + copyToDevice(mBeta, getWeightsSize(mBeta, mCfgType), mBetaDev); + if (mHasBias) + { + copyToDevice(mBias, getWeightsSize(mBias, mCfgType), mBiasDev); + } +} + +// IPluginV2DynamicExt Methods +IPluginV2DynamicExt* SkipLayerNormPluginDynamic::clone() const noexcept +{ + try + { + BERT_DEBUG_MSG("SkipLayerNormPluginDynamic clone"); + + auto* p = new SkipLayerNormPluginDynamic(mLayerName, mType, mLd, mBeta, mGamma, mBias); + p->initialize(); + p->setPluginNamespace(mNamespace.c_str()); + return p; + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +DimsExprs SkipLayerNormPluginDynamic::getOutputDimensions( + int32_t outputIndex, DimsExprs const* inputs, int32_t nbInputs, IExprBuilder& exprBuilder) noexcept +{ + try + { + PLUGIN_VALIDATE(inputs != nullptr); + PLUGIN_VALIDATE(nbInputs == 2); + PLUGIN_VALIDATE(outputIndex == 0); + PLUGIN_VALIDATE(inputs[0].nbDims == inputs[1].nbDims); + return inputs[0]; + } + catch (std::exception const& e) + { + caughtError(e); + } + return DimsExprs{}; +} + +bool SkipLayerNormPluginDynamic::supportsFormatCombination( + int32_t pos, PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept +{ + try + { + PLUGIN_VALIDATE(inOut != nullptr); + PLUGIN_VALIDATE(nbInputs == 2); + PLUGIN_VALIDATE(nbOutputs == 1); + PLUGIN_VALIDATE(pos >= 0 && pos < (nbInputs + nbOutputs)); + + PluginTensorDesc const& in = inOut[pos]; + if (pos == 0) + { + // Since H = W = 1, we can report CHWx for any x + if (mType == DataType::kINT8) + { + // won't work for hiddensize too small! + TensorFormat myFmt = TensorFormat::kCHW32; + if (mLd < 32) + { + myFmt = TensorFormat::kCHW4; + BERT_DEBUG_VALUE("SkipLayerNormDQQ: TensorFormat CHW4 for LD=", mLd); + } + else + { + BERT_DEBUG_VALUE("SkipLayerNormDQQ: TensorFormat CHW32 for LD=", mLd); + } + // TODO do we need to check if the vectorization divides mLd? + return ((in.type == mType) && (in.format == myFmt)); + } + return (in.type == mType) && (in.format == TensorFormat::kLINEAR); + } + PluginTensorDesc const& prev = inOut[pos - 1]; + + return in.type == prev.type && in.format == prev.format; + } + catch (std::exception const& e) + { + caughtError(e); + } + return false; +} + +void SkipLayerNormPluginDynamic::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept +{ + try + { + BERT_DEBUG_MSG("SkipLayerNormPluginDynamic configurePlugin"); + + // Validate input arguments + PLUGIN_VALIDATE(inputs != nullptr); + PLUGIN_VALIDATE(outputs != nullptr); + PLUGIN_VALIDATE(nbOutputs == 1); + PLUGIN_VALIDATE(nbInputs == 2); + if (mType == DataType::kFLOAT || mType == DataType::kHALF) + { + PLUGIN_VALIDATE(mType == inputs[0].desc.type); + PLUGIN_VALIDATE(mType == inputs[1].desc.type); + } + else + { + PLUGIN_VALIDATE(mType == inputs[0].desc.type || DataType::kFLOAT == inputs[0].desc.type); + PLUGIN_VALIDATE(mType == inputs[1].desc.type || DataType::kFLOAT == inputs[1].desc.type); + } + auto const& inDims0 = inputs[0].desc.dims; + auto const& inDims1 = inputs[1].desc.dims; + PLUGIN_VALIDATE(inDims0.nbDims == inDims1.nbDims); + + PLUGIN_VALIDATE(std::equal(inDims0.d, inDims0.d + inDims0.nbDims, inDims1.d)); + + PLUGIN_VALIDATE(inDims0.nbDims == 5); + mLd = inDims0.d[HDIM]; // hiddensize + PLUGIN_VALIDATE(mLd != 0U); + PLUGIN_VALIDATE(inDims0.d[3] == 1); + PLUGIN_VALIDATE(inDims0.d[4] == 1); + + mCfgType = inputs[0].desc.type == DataType::kINT8 ? DataType::kHALF : inputs[0].desc.type; + + auto const paramType = mCfgType == DataType::kINT8 ? DataType::kHALF : mCfgType; + mParamWordsize = getElementSize(paramType); + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +size_t SkipLayerNormPluginDynamic::getWorkspaceSize( + PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept +{ + return 0; +} + +int32_t SkipLayerNormPluginDynamic::enqueue(PluginTensorDesc const* inputDesc, PluginTensorDesc const* outputDesc, + void const* const* inputs, void* const* outputs, void* /* workspace */, cudaStream_t stream) noexcept +{ + int32_t status = -1; + try + { + PLUGIN_VALIDATE(inputDesc != nullptr && outputDesc != nullptr && inputs != nullptr && outputs != nullptr); + + int32_t const inputVolume = volume(inputDesc[0].dims); + DataType iType = inputDesc->type; + + // Our plugin outputs only one tensor + // Launch CUDA kernel wrapper and save its return value + if (iType == DataType::kFLOAT) + { + auto const* const input = static_cast(inputs[0]); + auto const* const skip = static_cast(inputs[1]); + auto* output = static_cast(outputs[0]); + auto const* const bias = static_cast(mBiasDev.get()); + auto const* const beta = static_cast(mBetaDev.get()); + auto const* const gamma = static_cast(mGammaDev.get()); + if (mHasBias) + { + status = computeSkipLayerNorm( + stream, static_cast(mLd), inputVolume, input, skip, beta, gamma, output, bias); + } + else + { + status = computeSkipLayerNorm( + stream, static_cast(mLd), inputVolume, input, skip, beta, gamma, output, bias); + } + } + else if (iType == DataType::kHALF) + { + auto const* const input = static_cast(inputs[0]); + auto const* const skip = static_cast(inputs[1]); + auto* output = static_cast(outputs[0]); + auto const* const bias = static_cast(mBiasDev.get()); + auto const* const beta = static_cast(mBetaDev.get()); + auto const* const gamma = static_cast(mGammaDev.get()); + if (mHasBias) + { + status = computeSkipLayerNorm( + stream, static_cast(mLd), inputVolume, input, skip, beta, gamma, output, bias); + } + else + { + status = computeSkipLayerNorm( + stream, static_cast(mLd), inputVolume, input, skip, beta, gamma, output, bias); + } + } + else if (iType == DataType::kINT8) + { + float const dqScaleIn = inputDesc[0].scale; + float const dqScaleSkip = inputDesc[1].scale; + PLUGIN_VALIDATE(outputDesc[0].scale != 0.0F); + float const qScale = 1.F / outputDesc[0].scale; + auto const* const input = static_cast(inputs[0]); + auto const* const skip = static_cast(inputs[1]); + auto* output = static_cast(outputs[0]); + auto const* const bias = static_cast(mBiasDev.get()); + auto const* const beta = static_cast(mBetaDev.get()); + auto const* const gamma = static_cast(mGammaDev.get()); + if (mHasBias) + { + status = computeSkipLayerNormDQQ(stream, static_cast(mLd), inputVolume, input, skip, + beta, gamma, output, bias, dqScaleIn, dqScaleSkip, qScale); + } + else + { + status = computeSkipLayerNormDQQ(stream, static_cast(mLd), inputVolume, input, skip, + beta, gamma, output, bias, dqScaleIn, dqScaleSkip, qScale); + } + } + else + { + PLUGIN_ERROR(("Unsupported type error, expected [kINT8,kHALF,kFLOAT], but received " + + std::to_string(static_cast(iType))) + .c_str()); + } + } + catch (std::exception const& e) + { + caughtError(e); + } + return status; +} + +// IPluginV2Ext Methods +DataType SkipLayerNormPluginDynamic::getOutputDataType( + int32_t index, DataType const* inputTypes, int32_t nbInputs) const noexcept +{ + try + { + PLUGIN_VALIDATE(inputTypes != nullptr); + PLUGIN_VALIDATE(index == 0); + PLUGIN_VALIDATE(nbInputs == 2); + return inputTypes[0]; + } + catch (std::exception const& e) + { + caughtError(e); + } + return DataType{}; +} + +// IPluginV2 Methods +char const* SkipLayerNormPluginDynamic::getPluginType() const noexcept +{ + return kSKIP_LAYER_NORM_NAME; +} + +char const* SkipLayerNormPluginDynamic::getPluginVersion() const noexcept +{ + return kSKIP_LAYER_NORM_VERSION; +} + +int32_t SkipLayerNormPluginDynamic::getNbOutputs() const noexcept +{ + return 1; +} +int32_t SkipLayerNormPluginDynamic::initialize() noexcept +{ + BERT_DEBUG_MSG("SkipLayerNormPluginDynamic initialize"); + return 0; +} + +void SkipLayerNormPluginDynamic::terminate() noexcept +{ + BERT_DEBUG_MSG("SkipLayerNormPluginDynamic terminate"); +} + +size_t SkipLayerNormPluginDynamic::getSerializationSize() const noexcept +{ + const size_t biasSize = mHasBias ? (mLd * mParamWordsize) : 0; + return 2 * mParamWordsize * mLd + 2 * sizeof(DataType) + sizeof(mLd) + biasSize + sizeof(mHasBias); +} + +void SkipLayerNormPluginDynamic::serialize(void* buffer) const noexcept +{ + try + { + serialize_value(&buffer, mType); + serialize_value(&buffer, mCfgType); + serialize_value(&buffer, mLd); + serialize_value(&buffer, mHasBias); + + char* d = static_cast(buffer); + serFromDev(d, static_cast(mBetaDev.get()), mLd * mParamWordsize); + serFromDev(d, static_cast(mGammaDev.get()), mLd * mParamWordsize); + if (mHasBias) + { + serFromDev(d, static_cast(mBiasDev.get()), mLd * mParamWordsize); + } + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +void SkipLayerNormPluginDynamic::destroy() noexcept +{ + try + { + BERT_DEBUG_MSG("SkipLayerNormPluginDynamic destroy"); + // This gets called when the network containing plugin is destroyed + mGammaDev.reset(nullptr); + mBetaDev.reset(nullptr); + mBiasDev.reset(nullptr); + delete this; + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +void SkipLayerNormPluginDynamic::setPluginNamespace(char const* libNamespace) noexcept +{ + try + { + mNamespace = libNamespace; + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +char const* SkipLayerNormPluginDynamic::getPluginNamespace() const noexcept +{ + return mNamespace.c_str(); +} + +///////////////////////////////////////////////////////// + +SkipLayerNormPluginDynamicCreator::SkipLayerNormPluginDynamicCreator() +{ + mPluginAttributes.clear(); + mPluginAttributes.emplace_back(PluginField("ld")); + mPluginAttributes.emplace_back(PluginField("type_id")); + mPluginAttributes.emplace_back(PluginField("beta")); + mPluginAttributes.emplace_back(PluginField("gamma")); + mPluginAttributes.emplace_back(PluginField("bias")); + mFC.nbFields = mPluginAttributes.size(); + mFC.fields = mPluginAttributes.data(); +} + +char const* SkipLayerNormPluginDynamicCreator::getPluginName() const noexcept +{ + return kSKIP_LAYER_NORM_NAME; +} + +char const* SkipLayerNormPluginDynamicCreator::getPluginVersion() const noexcept +{ + return kSKIP_LAYER_NORM_VERSION; +} + +PluginFieldCollection const* SkipLayerNormPluginDynamicCreator::getFieldNames() noexcept +{ + return &mFC; +} + +IPluginV2* SkipLayerNormPluginDynamicCreator::createPlugin(char const* name, PluginFieldCollection const* fc) noexcept +{ + try + { + BERT_DEBUG_MSG("SkipLayerNormPluginDynamicCreator createPlugin"); + + int32_t ld = 0; + Weights beta{DataType::kFLOAT, nullptr, 0}; + Weights gamma{DataType::kFLOAT, nullptr, 0}; + Weights bias{DataType::kFLOAT, nullptr, 0}; + int32_t typeId = -1; + + PLUGIN_VALIDATE(fc != nullptr); + + plugin::validateRequiredAttributesExist({"type_id", "beta", "ld", "gamma"}, fc); + + for (int32_t i = 0; i < fc->nbFields; i++) + { + std::string field_name(fc->fields[i].name); + if (field_name.compare("ld") == 0) + { + ld = *static_cast(fc->fields[i].data); + BERT_DEBUG_VALUE("Building ld: ", ld); + } + + if (field_name.compare("type_id") == 0) + { + typeId = *static_cast(fc->fields[i].data); + BERT_DEBUG_VALUE("Building typeId: ", typeId); + } + + if (field_name.compare("beta") == 0) + { + BERT_DEBUG_MSG("Building beta..."); + beta.values = fc->fields[i].data; + beta.count = fc->fields[i].length; + beta.type = fieldTypeToDataType(fc->fields[i].type); + } + + if (field_name.compare("gamma") == 0) + { + BERT_DEBUG_MSG("Building gamma..."); + gamma.values = fc->fields[i].data; + gamma.count = fc->fields[i].length; + gamma.type = fieldTypeToDataType(fc->fields[i].type); + } + + if (field_name.compare("bias") == 0) + { + BERT_DEBUG_MSG("Building bias..."); + bias.values = fc->fields[i].data; + bias.count = fc->fields[i].length; + bias.type = fieldTypeToDataType(fc->fields[i].type); + } + } + BERT_DEBUG_VALUE("Type ", typeId); + + PLUGIN_VALIDATE( + typeId >= 0 && typeId <= 3, ("SkipLayerNorm: Invalid type ID: " + std::to_string(typeId)).c_str()); + + PLUGIN_VALIDATE(beta.values != nullptr, "SkipLayerNorm: invalid beta"); + PLUGIN_VALIDATE(beta.count > 0, "SkipLayerNorm: invalid beta"); + + PLUGIN_VALIDATE(gamma.values != nullptr, "SkipLayerNorm: invalid gamma"); + PLUGIN_VALIDATE(gamma.count > 0, "SkipLayerNorm: invalid gamma"); + + return new SkipLayerNormPluginDynamic(name, static_cast(typeId), ld, beta, gamma, bias); + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +IPluginV2* SkipLayerNormPluginDynamicCreator::deserializePlugin( + char const* name, void const* serialData, size_t serialLength) noexcept +{ + // This object will be deleted when the network is destroyed, which will + // call SkipLayerNormPluginDynamic::destroy() + try + { + return new SkipLayerNormPluginDynamic(name, serialData, serialLength); + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +void SkipLayerNormPluginDynamicCreator::setPluginNamespace(char const* libNamespace) noexcept +{ + try + { + mNamespace = libNamespace; + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +char const* SkipLayerNormPluginDynamicCreator::getPluginNamespace() const noexcept +{ + return mNamespace.c_str(); +} + +SkipLayerNormVarSeqlenPlugin::SkipLayerNormVarSeqlenPlugin( + const std::string name, const DataType type, Weights const& beta, Weights const& gamma, Weights const& bias) + : mLayerName(name) + , mGammaDev(nullptr) + , mBetaDev(nullptr) + , mLd(beta.count) + , mType(type) + , mBiasDev(nullptr) +{ + PLUGIN_VALIDATE(mLd > 0); + PLUGIN_VALIDATE(beta.count == gamma.count); + PLUGIN_VALIDATE(mType == nvinfer1::DataType::kFLOAT || mType == nvinfer1::DataType::kHALF + || mType == nvinfer1::DataType::kINT8); + // mCfgType is the dataType for beta, gamma bias weights, always fp16 or fp32 + // mType is the plugin IO datatype, can be int8 + mCfgType = mType == DataType::kINT8 ? DataType::kHALF : mType; + mParamWordsize = getElementSize(mCfgType); + + mBeta.convertAndCopy(beta, mCfgType); + mGamma.convertAndCopy(gamma, mCfgType); + + mHasBias = (bias.values != nullptr); + if (mHasBias) + { + mBias.convertAndCopy(bias, mCfgType); + } + + copyToDevice(mGamma, getWeightsSize(mGamma, mCfgType), mGammaDev); + copyToDevice(mBeta, getWeightsSize(mBeta, mCfgType), mBetaDev); + if (mHasBias) + { + copyToDevice(mBias, getWeightsSize(mBias, mCfgType), mBiasDev); + } +} + +SkipLayerNormVarSeqlenPlugin::SkipLayerNormVarSeqlenPlugin(const std::string name, void const* data, size_t length) + : mLayerName(name) + , mGammaDev(nullptr) + , mBetaDev(nullptr) + , mBiasDev(nullptr) +{ + BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPlugin deserialize"); + + // Deserialize in the same order as serialization + deserialize_value(&data, &length, &mType); + deserialize_value(&data, &length, &mCfgType); + deserialize_value(&data, &length, &mLd); + deserialize_value(&data, &length, &mHasBias); + + PLUGIN_VALIDATE(mCfgType == nvinfer1::DataType::kFLOAT || mCfgType == nvinfer1::DataType::kHALF); + mParamWordsize = getElementSize(mCfgType); + + char const* d = static_cast(data); + mBeta.convertAndCopy(d, mLd, mCfgType); + mGamma.convertAndCopy(d, mLd, mCfgType); + if (mHasBias) + { + mBias.convertAndCopy(d, mLd, mCfgType); + } + + copyToDevice(mGamma, getWeightsSize(mGamma, mCfgType), mGammaDev); + copyToDevice(mBeta, getWeightsSize(mBeta, mCfgType), mBetaDev); + if (mHasBias) + { + copyToDevice(mBias, getWeightsSize(mBias, mCfgType), mBiasDev); + } +} + +// IPluginV2DynamicExt Methods +IPluginV2DynamicExt* SkipLayerNormVarSeqlenPlugin::clone() const noexcept +{ + try + { + BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPlugin clone"); + + auto* p = new SkipLayerNormVarSeqlenPlugin(mLayerName, mType, mBeta, mGamma, mBias); + p->initialize(); + p->setPluginNamespace(mNamespace.c_str()); + return p; + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +DimsExprs SkipLayerNormVarSeqlenPlugin::getOutputDimensions( + int32_t outputIndex, DimsExprs const* inputs, int32_t nbInputs, IExprBuilder& exprBuilder) noexcept +{ + try + { + PLUGIN_VALIDATE(inputs != nullptr); + PLUGIN_VALIDATE(nbInputs == 2); + PLUGIN_VALIDATE(outputIndex == 0); + PLUGIN_VALIDATE(inputs[0].nbDims == inputs[1].nbDims); + return inputs[0]; + } + catch (std::exception const& e) + { + caughtError(e); + } + return DimsExprs{}; +} + +bool SkipLayerNormVarSeqlenPlugin::supportsFormatCombination( + int32_t pos, PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept +{ + try + { + PLUGIN_VALIDATE(inOut != nullptr); + PLUGIN_VALIDATE(nbInputs == 2); + PLUGIN_VALIDATE(nbOutputs == 1); + PLUGIN_VALIDATE(pos >= 0 && pos < (nbInputs + nbOutputs)); + + PluginTensorDesc const& in = inOut[pos]; + + if (mType != in.type) + return false; + if (pos == 0) + { + // Since H = W = 1, we can report CHWx for any x + if (mType == DataType::kINT8) + { + // won't work for hiddensize too small! + TensorFormat myFmt = TensorFormat::kCHW32; + if (mLd < 32) + { + myFmt = TensorFormat::kCHW4; + BERT_DEBUG_VALUE("SkipLayerNormDQQ: TensorFormat CHW4 for LD=", mLd); + } + else + { + BERT_DEBUG_VALUE("SkipLayerNormDQQ: TensorFormat CHW32 for LD=", mLd); + } + // TODO do we need to check if the vectorization divides mLd? + return in.format == myFmt; + } + return in.format == TensorFormat::kLINEAR; + } + PluginTensorDesc const& prev = inOut[pos - 1]; + + return in.format == prev.format; + } + catch (std::exception const& e) + { + caughtError(e); + } + return false; +} + +void SkipLayerNormVarSeqlenPlugin::configurePlugin(DynamicPluginTensorDesc const* inputs, int32_t nbInputs, + DynamicPluginTensorDesc const* outputs, int32_t nbOutputs) noexcept +{ + try + { + // Validate input arguments + PLUGIN_VALIDATE(inputs != nullptr); + PLUGIN_VALIDATE(outputs != nullptr); + PLUGIN_VALIDATE(nbOutputs == 1); + PLUGIN_VALIDATE(nbInputs == 2); + + if (mType == DataType::kFLOAT || mType == DataType::kHALF) + { + PLUGIN_VALIDATE(mType == inputs[0].desc.type); + PLUGIN_VALIDATE(mType == inputs[1].desc.type); + } + else + { + PLUGIN_VALIDATE(mType == inputs[0].desc.type || DataType::kFLOAT == inputs[0].desc.type); + PLUGIN_VALIDATE(mType == inputs[1].desc.type || DataType::kFLOAT == inputs[1].desc.type); + } + auto const& inDims0 = inputs[0].desc.dims; + auto const& inDims1 = inputs[1].desc.dims; + PLUGIN_VALIDATE(inDims0.nbDims == inDims1.nbDims); + + PLUGIN_VALIDATE(std::equal(inDims0.d, inDims0.d + inDims0.nbDims, inDims1.d)); + + mCfgType = inputs[0].desc.type == DataType::kINT8 ? DataType::kHALF : inputs[0].desc.type; + + auto const paramType = mCfgType == DataType::kINT8 ? DataType::kHALF : mCfgType; + mParamWordsize = getElementSize(paramType); + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +size_t SkipLayerNormVarSeqlenPlugin::getWorkspaceSize( + PluginTensorDesc const* inputs, int32_t nbInputs, PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept +{ + return 0; +} + +int32_t SkipLayerNormVarSeqlenPlugin::enqueue(PluginTensorDesc const* inputDesc, PluginTensorDesc const* outputDesc, + void const* const* inputs, void* const* outputs, void* /* workspace */, cudaStream_t stream) noexcept +{ + int32_t status = -1; + try + { + PLUGIN_VALIDATE(inputDesc != nullptr && outputDesc != nullptr && inputs != nullptr && outputs != nullptr); + + int32_t const inputVolume = volume(inputDesc[0].dims); + PLUGIN_VALIDATE(inputVolume % mLd == 0 && "inconsistent dimensions"); + DataType iType = inputDesc->type; + + // Our plugin outputs only one tensor + // Launch CUDA kernel wrapper and save its return value + if (iType == DataType::kFLOAT) + { + auto const* const input = static_cast(inputs[0]); + auto const* const skip = static_cast(inputs[1]); + auto* output = static_cast(outputs[0]); + auto const* const bias = static_cast(mBiasDev.get()); + auto const* const beta = static_cast(mBetaDev.get()); + auto const* const gamma = static_cast(mGammaDev.get()); + if (mHasBias) + { + status = computeSkipLayerNorm( + stream, static_cast(mLd), inputVolume, input, skip, beta, gamma, output, bias); + } + else + { + status = computeSkipLayerNorm( + stream, static_cast(mLd), inputVolume, input, skip, beta, gamma, output, bias); + } + } + else if (iType == DataType::kHALF) + { + auto const* const input = static_cast(inputs[0]); + auto const* const skip = static_cast(inputs[1]); + auto* output = static_cast(outputs[0]); + auto const* const bias = static_cast(mBiasDev.get()); + auto const* const beta = static_cast(mBetaDev.get()); + auto const* const gamma = static_cast(mGammaDev.get()); + if (mHasBias) + { + status = computeSkipLayerNorm( + stream, static_cast(mLd), inputVolume, input, skip, beta, gamma, output, bias); + } + else + { + status = computeSkipLayerNorm( + stream, static_cast(mLd), inputVolume, input, skip, beta, gamma, output, bias); + } + } + else if (iType == DataType::kINT8) + { + float const dqScaleIn = inputDesc[0].scale; + float const dqScaleSkip = inputDesc[1].scale; + PLUGIN_VALIDATE(outputDesc[0].scale != 0.0F); + float const qScale = 1.F / outputDesc[0].scale; + auto const* const input = static_cast(inputs[0]); + auto const* const skip = static_cast(inputs[1]); + auto* output = static_cast(outputs[0]); + auto const* const bias = static_cast(mBiasDev.get()); + auto const* const beta = static_cast(mBetaDev.get()); + auto const* const gamma = static_cast(mGammaDev.get()); + if (mHasBias) + { + status = computeSkipLayerNormDQQ(stream, static_cast(mLd), inputVolume, input, skip, + beta, gamma, output, bias, dqScaleIn, dqScaleSkip, qScale); + } + else + { + status = computeSkipLayerNormDQQ(stream, static_cast(mLd), inputVolume, input, skip, + beta, gamma, output, bias, dqScaleIn, dqScaleSkip, qScale); + } + } + else + { + PLUGIN_VALIDATE(("Unsupported type error, expected [kINT8,kHALF,kFLOAT], but received " + + std::to_string(static_cast(iType))) + .c_str()); + } + } + catch (std::exception const& e) + { + caughtError(e); + } + return status; +} + +// IPluginV2Ext Methods +DataType SkipLayerNormVarSeqlenPlugin::getOutputDataType( + int32_t index, DataType const* inputTypes, int32_t nbInputs) const noexcept +{ + PLUGIN_VALIDATE(inputTypes != nullptr); + PLUGIN_VALIDATE(index == 0); + PLUGIN_VALIDATE(nbInputs == 2); + return inputTypes[0]; +} + +// IPluginV2 Methods +char const* SkipLayerNormVarSeqlenPlugin::getPluginType() const noexcept +{ + return kSKIP_LAYER_NORM_NAME; +} + +char const* SkipLayerNormVarSeqlenPlugin::getPluginVersion() const noexcept +{ + return kSKIP_LAYER_NORM_VAR_SEQLEN_VERSION; +} + +int32_t SkipLayerNormVarSeqlenPlugin::getNbOutputs() const noexcept +{ + return 1; +} +int32_t SkipLayerNormVarSeqlenPlugin::initialize() noexcept +{ + BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPlugin initialize"); + return 0; +} + +void SkipLayerNormVarSeqlenPlugin::terminate() noexcept +{ + BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPlugin terminate"); +} + +size_t SkipLayerNormVarSeqlenPlugin::getSerializationSize() const noexcept +{ + const size_t biasSize = mHasBias ? (mLd * mParamWordsize) : 0; + return 2 * mParamWordsize * mLd + 2 * sizeof(DataType) + sizeof(mLd) + biasSize + sizeof(mHasBias); +} + +void SkipLayerNormVarSeqlenPlugin::serialize(void* buffer) const noexcept +{ + try + { + serialize_value(&buffer, mType); + serialize_value(&buffer, mCfgType); + serialize_value(&buffer, mLd); + serialize_value(&buffer, mHasBias); + + char* d = static_cast(buffer); + serFromDev(d, static_cast(mBetaDev.get()), mLd * mParamWordsize); + serFromDev(d, static_cast(mGammaDev.get()), mLd * mParamWordsize); + if (mHasBias) + { + serFromDev(d, static_cast(mBiasDev.get()), mLd * mParamWordsize); + } + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +void SkipLayerNormVarSeqlenPlugin::destroy() noexcept +{ + try + { + BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPlugin destroy"); + // This gets called when the network containing plugin is destroyed + mGammaDev.reset(nullptr); + mBetaDev.reset(nullptr); + mBiasDev.reset(nullptr); + delete this; + } + catch (std::exception const& e) + { + caughtError(e); + } +} + +void SkipLayerNormVarSeqlenPlugin::setPluginNamespace(char const* libNamespace) noexcept +{ + mNamespace = libNamespace; +} + +char const* SkipLayerNormVarSeqlenPlugin::getPluginNamespace() const noexcept +{ + return mNamespace.c_str(); +} + +///////////////////////////////////////////////////////// + +SkipLayerNormVarSeqlenPluginCreator::SkipLayerNormVarSeqlenPluginCreator() +{ + mPluginAttributes.clear(); + mPluginAttributes.emplace_back(PluginField("type_id")); + mPluginAttributes.emplace_back(PluginField("beta")); + mPluginAttributes.emplace_back(PluginField("gamma")); + mPluginAttributes.emplace_back(PluginField("bias")); + mFC.nbFields = mPluginAttributes.size(); + mFC.fields = mPluginAttributes.data(); +} + +char const* SkipLayerNormVarSeqlenPluginCreator::getPluginName() const noexcept +{ + return kSKIP_LAYER_NORM_NAME; +} + +char const* SkipLayerNormVarSeqlenPluginCreator::getPluginVersion() const noexcept +{ + return kSKIP_LAYER_NORM_VAR_SEQLEN_VERSION; +} + +PluginFieldCollection const* SkipLayerNormVarSeqlenPluginCreator::getFieldNames() noexcept +{ + return &mFC; +} + +IPluginV2* SkipLayerNormVarSeqlenPluginCreator::createPlugin(char const* name, PluginFieldCollection const* fc) noexcept +{ + try + { + BERT_DEBUG_MSG("SkipLayerNormVarSeqlenPluginCreator createPlugin"); + + Weights beta{DataType::kFLOAT, nullptr, 0}; + Weights gamma{DataType::kFLOAT, nullptr, 0}; + Weights bias{DataType::kFLOAT, nullptr, 0}; + int32_t typeId = -1; + + PLUGIN_VALIDATE(fc != nullptr); + + plugin::validateRequiredAttributesExist({"type_id", "beta", "gamma"}, fc); + + for (int32_t i = 0; i < fc->nbFields; i++) + { + std::string field_name(fc->fields[i].name); + + if (field_name.compare("type_id") == 0) + { + typeId = *static_cast(fc->fields[i].data); + BERT_DEBUG_VALUE("Building typeId: ", typeId); + } + + if (field_name.compare("beta") == 0) + { + BERT_DEBUG_MSG("Building beta..."); + beta.values = fc->fields[i].data; + beta.count = fc->fields[i].length; + beta.type = fieldTypeToDataType(fc->fields[i].type); + } + + if (field_name.compare("gamma") == 0) + { + BERT_DEBUG_MSG("Building gamma..."); + gamma.values = fc->fields[i].data; + gamma.count = fc->fields[i].length; + gamma.type = fieldTypeToDataType(fc->fields[i].type); + } + + if (field_name.compare("bias") == 0) + { + BERT_DEBUG_MSG("Building bias..."); + bias.values = fc->fields[i].data; + bias.count = fc->fields[i].length; + bias.type = fieldTypeToDataType(fc->fields[i].type); + } + } + BERT_DEBUG_VALUE("Type ", typeId); + + PLUGIN_VALIDATE( + typeId >= 0 && typeId <= 3, ("SkipLayerNorm: Invalid type ID: " + std::to_string(typeId)).c_str()); + + PLUGIN_VALIDATE(beta.values != nullptr, "SkipLayerNorm: invalid beta"); + PLUGIN_VALIDATE(beta.count > 0, "SkipLayerNorm: invalid beta"); + + PLUGIN_VALIDATE(gamma.values != nullptr, "SkipLayerNorm: invalid gamma"); + PLUGIN_VALIDATE(gamma.count > 0, "SkipLayerNorm: invalid gamma"); + + return new SkipLayerNormVarSeqlenPlugin(name, static_cast(typeId), beta, gamma, bias); + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +IPluginV2* SkipLayerNormVarSeqlenPluginCreator::deserializePlugin( + char const* name, void const* serialData, size_t serialLength) noexcept +{ + // This object will be deleted when the network is destroyed, which will + // call SkipLayerNormVarSeqlenPlugin::destroy() + try + { + return new SkipLayerNormVarSeqlenPlugin(name, serialData, serialLength); + } + catch (std::exception const& e) + { + caughtError(e); + } + return nullptr; +} + +void SkipLayerNormVarSeqlenPluginCreator::setPluginNamespace(char const* libNamespace) noexcept +{ + mNamespace = libNamespace; +} + +char const* SkipLayerNormVarSeqlenPluginCreator::getPluginNamespace() const noexcept +{ + return mNamespace.c_str(); +} + +#endif // CUDA_VERSION >= 10010 diff --git a/plugin/skipLayerNormPlugin/skipLayerNormPluginLegacy.h b/plugin/skipLayerNormPlugin/skipLayerNormPluginLegacy.h new file mode 100644 index 00000000..9b1a783a --- /dev/null +++ b/plugin/skipLayerNormPlugin/skipLayerNormPluginLegacy.h @@ -0,0 +1,233 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 1993-2024 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. + */ + +#include +#if CUDA_VERSION >= 10010 + +#ifndef TRT_SKIP_LAYER_NORM_PLUGIN_H +#define TRT_SKIP_LAYER_NORM_PLUGIN_H + +#include "NvInferPlugin.h" + +#include "common/bertCommon.h" +#include +#include +#include + +namespace nvinfer1 +{ +namespace plugin +{ +namespace bert +{ +template +int32_t computeSkipLayerNormDQQ(cudaStream_t stream, int32_t const ld, int32_t const n, int8_t const* input, + int8_t const* skip, __half const* beta, __half const* gamma, int8_t* output, __half const* bias, + float const dqScaleIn, float const dqScaleSkip, float const qScale); + +template +int32_t computeSkipLayerNorm(cudaStream_t stream, int32_t const ld, int32_t const n, T const* input, T const* skip, + T const* beta, T const* gamma, T* output, T const* bias); + +class SkipLayerNormPluginDynamic : public nvinfer1::IPluginV2DynamicExt +{ +public: + SkipLayerNormPluginDynamic(const std::string name, const nvinfer1::DataType type, int32_t const ld, + nvinfer1::Weights const& beta, nvinfer1::Weights const& gamma, nvinfer1::Weights const& bias); + + SkipLayerNormPluginDynamic(const std::string name, void const* data, size_t length); + + // It doesn't make sense to make SkipLayerNormPluginDynamic without arguments, + // so we delete default constructor. + SkipLayerNormPluginDynamic() = delete; + + // IPluginV2DynamicExt Methods + nvinfer1::IPluginV2DynamicExt* clone() const noexcept override; + nvinfer1::DimsExprs getOutputDimensions(int32_t outputIndex, nvinfer1::DimsExprs const* inputs, int32_t nbInputs, + nvinfer1::IExprBuilder& exprBuilder) noexcept override; + bool supportsFormatCombination( + int32_t pos, nvinfer1::PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept override; + void configurePlugin(nvinfer1::DynamicPluginTensorDesc const* in, int32_t nbInputs, + nvinfer1::DynamicPluginTensorDesc const* out, int32_t nbOutputs) noexcept override; + size_t getWorkspaceSize(nvinfer1::PluginTensorDesc const* inputs, int32_t nbInputs, + nvinfer1::PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept override; + int32_t enqueue(nvinfer1::PluginTensorDesc const* inputDesc, nvinfer1::PluginTensorDesc const* outputDesc, + void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override; + + // IPluginV2Ext Methods + nvinfer1::DataType getOutputDataType( + int32_t index, nvinfer1::DataType const* inputTypes, int32_t nbInputs) const noexcept override; + + // IPluginV2 Methods + char const* getPluginType() const noexcept override; + char const* getPluginVersion() const noexcept override; + int32_t getNbOutputs() const noexcept override; + int32_t initialize() noexcept override; + void terminate() noexcept override; + size_t getSerializationSize() const noexcept override; + void serialize(void* buffer) const noexcept override; + void destroy() noexcept override; + void setPluginNamespace(char const* pluginNamespace) noexcept override; + char const* getPluginNamespace() const noexcept override; + +private: + const std::string mLayerName; + std::string mNamespace; + + bert::cuda_unique_ptr mGammaDev; + bert::cuda_unique_ptr mBetaDev; + size_t mLd{}; // leading dim + bert::WeightsWithOwnership mGamma; + bert::WeightsWithOwnership mBeta; + nvinfer1::DataType mType; + nvinfer1::DataType mCfgType; + + bool mHasBias{}; + bert::cuda_unique_ptr mBiasDev; + bert::WeightsWithOwnership mBias; + + size_t mParamWordsize{}; + + using IPluginV2::enqueue; + using IPluginV2::getOutputDimensions; + using IPluginV2::getWorkspaceSize; + using IPluginV2Ext::configurePlugin; +}; + +class SkipLayerNormPluginDynamicCreator : public nvinfer1::IPluginCreator +{ +public: + SkipLayerNormPluginDynamicCreator(); + + char const* getPluginName() const noexcept override; + + char const* getPluginVersion() const noexcept override; + + nvinfer1::PluginFieldCollection const* getFieldNames() noexcept override; + + nvinfer1::IPluginV2* createPlugin(char const* name, nvinfer1::PluginFieldCollection const* fc) noexcept override; + + nvinfer1::IPluginV2* deserializePlugin( + char const* name, void const* serialData, size_t serialLength) noexcept override; + + void setPluginNamespace(char const* pluginNamespace) noexcept override; + + char const* getPluginNamespace() const noexcept override; + +private: + static nvinfer1::PluginFieldCollection mFC; + static std::vector mPluginAttributes; + std::string mNamespace; +}; + +class SkipLayerNormVarSeqlenPlugin : public nvinfer1::IPluginV2DynamicExt +{ +public: + SkipLayerNormVarSeqlenPlugin(const std::string name, const nvinfer1::DataType type, nvinfer1::Weights const& beta, + nvinfer1::Weights const& gamma, nvinfer1::Weights const& bias); + + SkipLayerNormVarSeqlenPlugin(const std::string name, void const* data, size_t length); + + // It doesn't make sense to make SkipLayerNormVarSeqlenPlugin without + // arguments, so we delete default constructor. + SkipLayerNormVarSeqlenPlugin() = delete; + + // IPluginV2DynamicExt Methods + nvinfer1::IPluginV2DynamicExt* clone() const noexcept override; + nvinfer1::DimsExprs getOutputDimensions(int32_t outputIndex, nvinfer1::DimsExprs const* inputs, int32_t nbInputs, + nvinfer1::IExprBuilder& exprBuilder) noexcept override; + bool supportsFormatCombination( + int32_t pos, nvinfer1::PluginTensorDesc const* inOut, int32_t nbInputs, int32_t nbOutputs) noexcept override; + void configurePlugin(nvinfer1::DynamicPluginTensorDesc const* in, int32_t nbInputs, + nvinfer1::DynamicPluginTensorDesc const* out, int32_t nbOutputs) noexcept override; + size_t getWorkspaceSize(nvinfer1::PluginTensorDesc const* inputs, int32_t nbInputs, + nvinfer1::PluginTensorDesc const* outputs, int32_t nbOutputs) const noexcept override; + int32_t enqueue(nvinfer1::PluginTensorDesc const* inputDesc, nvinfer1::PluginTensorDesc const* outputDesc, + void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override; + + // IPluginV2Ext Methods + nvinfer1::DataType getOutputDataType( + int32_t index, nvinfer1::DataType const* inputTypes, int32_t nbInputs) const noexcept override; + + // IPluginV2 Methods + char const* getPluginType() const noexcept override; + char const* getPluginVersion() const noexcept override; + int32_t getNbOutputs() const noexcept override; + int32_t initialize() noexcept override; + void terminate() noexcept override; + size_t getSerializationSize() const noexcept override; + void serialize(void* buffer) const noexcept override; + void destroy() noexcept override; + void setPluginNamespace(char const* pluginNamespace) noexcept override; + char const* getPluginNamespace() const noexcept override; + +private: + const std::string mLayerName; + std::string mNamespace; + + bert::cuda_unique_ptr mGammaDev; + bert::cuda_unique_ptr mBetaDev; + size_t mLd{}; // leading dim + bert::WeightsWithOwnership mGamma; + bert::WeightsWithOwnership mBeta; + nvinfer1::DataType mType; + nvinfer1::DataType mCfgType; + + bool mHasBias{}; + bert::cuda_unique_ptr mBiasDev; + bert::WeightsWithOwnership mBias; + + size_t mParamWordsize{}; + + using IPluginV2::enqueue; + using IPluginV2::getOutputDimensions; + using IPluginV2::getWorkspaceSize; + using IPluginV2Ext::configurePlugin; +}; + +class SkipLayerNormVarSeqlenPluginCreator : public nvinfer1::IPluginCreator +{ +public: + SkipLayerNormVarSeqlenPluginCreator(); + + char const* getPluginName() const noexcept override; + + char const* getPluginVersion() const noexcept override; + + nvinfer1::PluginFieldCollection const* getFieldNames() noexcept override; + + nvinfer1::IPluginV2* createPlugin(char const* name, nvinfer1::PluginFieldCollection const* fc) noexcept override; + + nvinfer1::IPluginV2* deserializePlugin( + char const* name, void const* serialData, size_t serialLength) noexcept override; + + void setPluginNamespace(char const* pluginNamespace) noexcept override; + + char const* getPluginNamespace() const noexcept override; + +private: + static nvinfer1::PluginFieldCollection mFC; + static std::vector mPluginAttributes; + std::string mNamespace; +}; + +} // namespace bert +} // namespace plugin +} // namespace nvinfer1 +#endif // TRT_SKIP_LAYER_NORM_PLUGIN_H + +#endif // CUDA_VERSION >= 10010 diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 49f5d8a1..ffde193d 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -35,7 +35,7 @@ endfunction() # -------- CMAKE OPTIONS -------- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${TENSORRT_MODULE}/) -set(CPP_STANDARD 14 CACHE STRING "CPP Standard Version") +set(CPP_STANDARD 17 CACHE STRING "CPP Standard Version") set(CMAKE_CXX_STANDARD ${CPP_STANDARD}) if (NOT MSVC) @@ -179,13 +179,6 @@ else() message(FATAL_ERROR "Unknown TensorRT module " ${TENSORRT_MODULE}) endif() - -# -------- START BUILD PROCESS -------- -message(STATUS "Building in ${CMAKE_BUILD_TYPE} mode") -if (ENABLE_INETWORK_SERIALIZE) - set(TRT_LIBS ${TRT_LIBS} nvserialize) -endif() - # -------- BUILDING -------- set(LIB_NAME ${PY_MODULE_NAME}) diff --git a/python/docstrings/infer/pyCoreDoc.h b/python/docstrings/infer/pyCoreDoc.h index 39a52a9b..8227c87f 100644 --- a/python/docstrings/infer/pyCoreDoc.h +++ b/python/docstrings/infer/pyCoreDoc.h @@ -713,7 +713,8 @@ constexpr char const* descr = R"trtdoc( :ivar streamable_weights_size: Returns the size of the streamable weights in the engine. This may not include all the weights. :ivar weight_streaming_budget_v2: Set and get the current weight streaming budget for inference. The budget may be set any non-negative value. A value of 0 streams the most weights. Values equal to streamable_weights_size (default) or larger will disable weight streaming. :ivar weight_streaming_scratch_memory_size: The amount of scratch memory required by a TensorRT ExecutionContext to perform inference. This value may change based on the current weight streaming budget. Please use the V2 memory APIs, engine.device_memory_size_v2 and ExecutionContext.set_device_memory() to provide memory which includes the current weight streaming scratch memory. Not specifying these APIs or using the V1 APIs will not include this memory, so TensorRT will resort to allocating itself. - )trtdoc"; + )trtdoc" + ; // Documentation bug with parameters on these three functions because they are overloaded. constexpr char const* serialize = R"trtdoc( @@ -1294,6 +1295,7 @@ constexpr char const* descr = R"trtdoc( :ivar engine_capability: The desired engine capability. See :class:`EngineCapability` for details. :ivar algorithm_selector: The :class:`IAlgorithmSelector` to use. :ivar builder_optimization_level: The builder optimization level which TensorRT should build the engine at. Setting a higher optimization level allows TensorRT to spend longer engine building time searching for more optimization options. The resulting engine may have better performance compared to an engine built with a lower optimization level. The default optimization level is 3. Valid values include integers from 0 to the maximum optimization level, which is currently 5. Setting it to be greater than the maximum level results in identical behavior to the maximum level. + :ivar max_num_tactics: The maximum number of tactics to time when there is a choice of tactics. Setting a larger number allows TensorRT to spend longer engine building time searching for more optimization options. The resulting engine may have better performance compared to an engine built with a smaller number of tactics. Valid values include integers from -1 to the maximum 32-bit integer. Default value -1 indicates that TensorRT can decide the number of tactics based on its own heuristic. :ivar hardware_compatibility_level: Hardware compatibility allows an engine compatible with GPU architectures other than that of the GPU on which the engine was built. :ivar plugins_to_serialize: The plugin libraries to be serialized with forward-compatible engines. :ivar max_aux_streams: The maximum number of auxiliary streams that TRT is allowed to use. If the network contains operators that can run in parallel, TRT can execute them using auxiliary streams in addition to the one provided to the IExecutionContext::enqueueV3() call. The default maximum number of auxiliary streams is determined by the heuristics in TensorRT on whether enabling multi-stream would improve the performance. This behavior can be overridden by calling this API to set the maximum number of auxiliary streams explicitly. Set this to 0 to enforce single-stream inference. The resulting engine may use fewer auxiliary streams than the maximum if the network does not contain enough parallelism or if TensorRT determines that using more auxiliary streams does not help improve the performance. Allowing more auxiliary streams does not always give better performance since there will be synchronizations overhead between streams. Using CUDA graphs at runtime can help reduce the overhead caused by cross-stream synchronizations. Using more auxiliary leads to more memory usage at runtime since some activation memory blocks will not be able to be reused. diff --git a/python/docstrings/infer/pyGraphDoc.h b/python/docstrings/infer/pyGraphDoc.h index cfd51ed8..7281174b 100644 --- a/python/docstrings/infer/pyGraphDoc.h +++ b/python/docstrings/infer/pyGraphDoc.h @@ -666,8 +666,7 @@ constexpr const char* SIGN constexpr const char* ROUND = R"trtdoc(Round to nearest even for floating-point data type.)trtdoc"; constexpr const char* ISINF = R"trtdoc(Return true if the input value equals +/- infinity for floating-point data type.)trtdoc"; -constexpr const char* ISNAN - = R"trtdoc(Return true if the input value equals NaN for floating-point data type.)trtdoc"; +constexpr const char* ISNAN = R"trtdoc(Return true if the input value equals NaN for floating-point data type.)trtdoc"; } // namespace UnaryOperationDoc namespace IUnaryLayerDoc @@ -812,10 +811,11 @@ constexpr const char* descr = R"trtdoc( The following constraints must be satisfied to execute this layer on DLA: * ``start``, ``size``, and ``stride`` are build time constants, either as static :class:`Dims` or as constant input tensors. * ``axes``, if provided, is a build time constant, either as static :class:`Dims` or as a constant input tensor. - * sampleMode is :const:`SampleMode.STRICT_BOUNDS` . + * sampleMode is :const:`SampleMode.DEFAULT` , :const:`SampleMode.WRAP` , or :const:`SampleMode.FILL` . * Strides are 1 for all dimensions. - * Slicing is not performed on the first dimension - * The input tensor has four dimensions + * Slicing is not performed on the first dimension. + * The input tensor has four dimensions. + * For :const:`SliceMode.FILL` , the fill value input is a scalar output of an :class:`IConstantLayer` with value 0 that is not consumed by any other layer. :ivar start: :class:`Dims` The start offset. :ivar shape: :class:`Dims` The output dimensions. @@ -1697,7 +1697,7 @@ constexpr const char* descr = R"trtdoc( The following constraints apply to If-conditionals: - Both the trueSubgraph and falseSubgraph must be defined. - The number of output tensors in both subgraphs is the same. - - The type and shape of each output tensor from true/false subgraphs are the same. + - The type and shape of each output tensor from the true/false subgraphs are the same, except that the shapes are allowed to differ if the condition is a build-time constant. )trtdoc"; diff --git a/python/src/infer/pyCore.cpp b/python/src/infer/pyCore.cpp index b92933f7..58c17892 100644 --- a/python/src/infer/pyCore.cpp +++ b/python/src/infer/pyCore.cpp @@ -1293,6 +1293,7 @@ void bindCore(py::module& m) "weight_streaming_scratch_memory_size", &ICudaEngine::getWeightStreamingScratchMemorySize) // End weight streaming APIs .def("is_debug_tensor", &ICudaEngine::isDebugTensor, "name"_a, ICudaEngineDoc::is_debug_tensor) + .def("__del__", &utils::doNothingDel); py::enum_(m, "AllocatorFlag", py::arithmetic{}, AllocatorFlagDoc::descr, py::module_local()) @@ -1488,6 +1489,7 @@ void bindCore(py::module& m) IBuilderConfigDoc::get_preview_feature) .def_property("builder_optimization_level", &IBuilderConfig::getBuilderOptimizationLevel, &IBuilderConfig::setBuilderOptimizationLevel) + .def_property("max_num_tactics", &IBuilderConfig::getMaxNbTactics, &IBuilderConfig::setMaxNbTactics) .def_property("hardware_compatibility_level", &IBuilderConfig::getHardwareCompatibilityLevel, &IBuilderConfig::setHardwareCompatibilityLevel) .def_property("runtime_platform", &IBuilderConfig::getRuntimePlatform, &IBuilderConfig::setRuntimePlatform) @@ -1506,7 +1508,10 @@ void bindCore(py::module& m) // Builder py::class_(m, "Builder", BuilderDoc::descr, py::module_local()) - .def(py::init(&nvinfer1::createInferBuilder), "logger"_a, BuilderDoc::init, py::keep_alive<1, 2>{}) + // Use a lambda to force correct resolution. Pybind doesn't resolve noexcept factory methods correctly as + // constructors. https://github.com/pybind/pybind11/issues/2856 + .def(py::init([](ILogger& logger) { return nvinfer1::createInferBuilder(logger); }), "logger"_a, + BuilderDoc::init, py::keep_alive<1, 2>{}) .def("create_network", &IBuilder::createNetworkV2, "flags"_a = 0U, BuilderDoc::create_network, py::keep_alive<0, 1>{}) .def_property_readonly("platform_has_tf32", &IBuilder::platformHasTf32) @@ -1535,7 +1540,10 @@ void bindCore(py::module& m) // Runtime py::class_(m, "Runtime", RuntimeDoc::descr, py::module_local()) - .def(py::init(&nvinfer1::createInferRuntime), "logger"_a, RuntimeDoc::init, py::keep_alive<1, 2>{}) + // Use a lambda to force correct resolution. Pybind doesn't resolve noexcept factory methods correctly as + // constructors. https://github.com/pybind/pybind11/issues/2856 + .def(py::init([](ILogger& logger) { return nvinfer1::createInferRuntime(logger); }), "logger"_a, + RuntimeDoc::init, py::keep_alive<1, 2>{}) .def("deserialize_cuda_engine", lambdas::runtime_deserialize_cuda_engine, "serialized_engine"_a, RuntimeDoc::deserialize_cuda_engine, py::call_guard{}, py::keep_alive<0, 1>{}) .def("deserialize_cuda_engine", py::overload_cast(&IRuntime::deserializeCudaEngine), @@ -1559,8 +1567,11 @@ void bindCore(py::module& m) // Refitter py::class_(m, "Refitter", RefitterDoc::descr, py::module_local()) - .def(py::init(&nvinfer1::createInferRefitter), "engine"_a, "logger"_a, py::keep_alive<1, 2>{}, - py::keep_alive<1, 3>{}, RefitterDoc::init) + // Use a lambda to force correct resolution. Pybind doesn't resolve noexcept factory methods correctly as + // constructors. https://github.com/pybind/pybind11/issues/2856 + .def(py::init( + [](ICudaEngine& engine, ILogger& logger) { return nvinfer1::createInferRefitter(engine, logger); }), + "engine"_a, "logger"_a, py::keep_alive<1, 2>{}, py::keep_alive<1, 3>{}, RefitterDoc::init) .def("set_weights", &IRefitter::setWeights, "layer_name"_a, "role"_a, "weights"_a, py::keep_alive<1, 4>{}, RefitterDoc::set_weights) .def("set_named_weights", py::overload_cast(&IRefitter::setNamedWeights), "name"_a, diff --git a/python/src/infer/pyPlugin.cpp b/python/src/infer/pyPlugin.cpp index e7c8caa1..b1e37967 100644 --- a/python/src/infer/pyPlugin.cpp +++ b/python/src/infer/pyPlugin.cpp @@ -851,8 +851,15 @@ class PyIPluginV3Impl : public IPluginV3 pyDestroy(); } - // Remove reference to the Python plugin object so that it could be garbage-collected - py::cast(this).dec_ref(); + // If ref_count is > 1 at this point, then this is guaranteed to be a plugin instance + // which was release()'d (e.g. after being clone()'d) (lifetime managed by TRT) + // So only dec_ref() for those plugin instances + // Ref counts for others will be automatically managed by Python + auto obj = py::cast(this); + if (obj.ref_count() > 1) + { + obj.dec_ref(); + } } PLUGIN_API_CATCH("destroy") } @@ -1997,6 +2004,48 @@ static const auto get_all_creators = [](IPluginRegistry& self) -> std::vector py::object { + IPluginCapability* capability_interface = self.getCapabilityInterface(type); + + if (capability_interface == nullptr) + { + return py::none{}; + } + else + { + try + { + if (type == PluginCapabilityType::kCORE) + { + return py::cast(static_cast(capability_interface)); + } + if (type == PluginCapabilityType::kBUILD) + { + try + { + return py::cast(static_cast(capability_interface)); + } + catch (py::cast_error const& e) + { + try + { + return py::cast(static_cast(capability_interface)); + } + PLUGIN_API_CATCH_CAST("get_capability_interface", " a valid build capability interface") + } + } + if (type == PluginCapabilityType::kRUNTIME) + { + return py::cast(static_cast(capability_interface)); + } + } + PLUGIN_API_CATCH_CAST("get_capability_interface", "nvinfer1::IPluginCapability") + } + + utils::throwPyError(PyExc_RuntimeError, "Unknown plugin capability type"); + return py::none{}; +}; + static const auto get_creator = [](IPluginRegistry& self, char const* pluginType, char const* pluginVersion, char const* pluginNamespace) -> py::object { IPluginCreatorInterface* creator = self.getCreator(pluginType, pluginVersion, pluginNamespace); @@ -2255,11 +2304,6 @@ size_t getSerializationSize(PyIPluginV2DynamicExt& self) return 0U; } -IPluginCapability* getCapabilityInterface(IPluginV3& self, PluginCapabilityType type) -{ - return nullptr; -} - std::vector getOutputDataTypes(IPluginV3& self, std::vector const& inputTypes) { return {}; @@ -2538,8 +2582,9 @@ void bindPlugin(py::module& m) m, "IPluginV3", IPluginV3Doc::ipluginv3_descr, py::module_local()) .def(py::init<>()) .def(py::init()) - // The following defs are only for documenting the API for Python-based plugins - .def("get_capability_interface", &pluginDoc::getCapabilityInterface, IPluginV3Doc::get_capability_interface) + .def("get_capability_interface", lambdas::get_capability_interface, "type"_a, + py::return_value_policy::reference_internal, IPluginV3Doc::get_capability_interface) + // The following defs are only for documenting API for Python-based plugins .def("clone", &pluginDoc::cloneV3, IPluginV3Doc::clone) .def("destroy", &pluginDoc::destroyV3, IPluginV3Doc::destroy); diff --git a/python/src/parsers/pyOnnx.cpp b/python/src/parsers/pyOnnx.cpp index e9dc446f..6b753b12 100644 --- a/python/src/parsers/pyOnnx.cpp +++ b/python/src/parsers/pyOnnx.cpp @@ -119,8 +119,12 @@ void bindOnnx(py::module& m) py::bind_vector(m, "SubGraphCollection"); py::class_(m, "OnnxParser", OnnxParserDoc::descr, py::module_local()) - .def(py::init(&nvonnxparser::createParser), "network"_a, "logger"_a, OnnxParserDoc::init, - py::keep_alive<1, 3>{}, py::keep_alive<2, 1>{}) + // Use a lambda to force correct resolution. Pybind doesn't resolve noexcept factory methods correctly as + // constructors. https://github.com/pybind/pybind11/issues/2856 + .def(py::init([](nvinfer1::INetworkDefinition& network, nvinfer1::ILogger& logger) { + return nvonnxparser::createParser(network, logger); + }), + "network"_a, "logger"_a, OnnxParserDoc::init, py::keep_alive<1, 3>{}, py::keep_alive<2, 1>{}) .def("parse", lambdas::parse, "model"_a, "path"_a = nullptr, OnnxParserDoc::parse, py::call_guard{}) .def("parse_with_weight_descriptors", lambdas::parse_with_weight_descriptors, "model"_a, @@ -185,8 +189,12 @@ void bindOnnx(py::module& m) .def("__repr__", &onnx2trt::parserErrorStr); py::class_(m, "OnnxParserRefitter", OnnxParserRefitterDoc::descr, py::module_local()) - .def(py::init(&nvonnxparser::createParserRefitter), "refitter"_a, "logger"_a, OnnxParserRefitterDoc::init, - py::keep_alive<1, 3>{}, py::keep_alive<2, 1>{}) + // Use a lambda to force correct resolution. Pybind doesn't resolve noexcept factory methods correctly as + // constructors. https://github.com/pybind/pybind11/issues/2856 + .def(py::init([](nvinfer1::IRefitter& refitter, nvinfer1::ILogger& logger) { + return nvonnxparser::createParserRefitter(refitter, logger); + }), + "refitter"_a, "logger"_a, OnnxParserRefitterDoc::init, py::keep_alive<1, 3>{}, py::keep_alive<2, 1>{}) .def("refit_from_bytes", lambdas::refitFromBytes, "model"_a, "path"_a = nullptr, OnnxParserRefitterDoc::refit_from_bytes, py::call_guard{}) .def("refit_from_file", lambdas::refitFromFile, "model"_a, OnnxParserRefitterDoc::refit_from_file, diff --git a/quickstart/IntroNotebooks/0. Running This Guide.ipynb b/quickstart/IntroNotebooks/0. Running This Guide.ipynb index 2bbf4c4f..8d03d27b 100644 --- a/quickstart/IntroNotebooks/0. Running This Guide.ipynb +++ b/quickstart/IntroNotebooks/0. Running This Guide.ipynb @@ -40,22 +40,6 @@ "!nvidia-smi " ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you have Python versions 3.5 to 3.8 and CUDA 11.1 (or are in Google Colab), you can do the following to install TensorRT:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!pip install --upgrade --index-url https://pypi.ngc.nvidia.com nvidia-tensorrt" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -72,28 +56,6 @@ "!pip install pycuda onnx scikit-image" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "__Tensorflow__:\n", - "\n", - "We will be using Tensorflow 2 to walk through the basic steps of deploying a TensorRT model. \n", - "\n", - "You can find Tensorflow installation instructions [here](), or you can use one of NVIDIA's NGC containers [here](https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow). \n", - "\n", - "The Tensorflow examples also need keras2onnx and matplotlib:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!pip install matplotlib keras2onnx tf2onnx" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -105,7 +67,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can also use other frameworks, such as PyTorch, with TensorRT by [exporting the model in ONNX format](https://pytorch.org/docs/stable/onnx.html). For this guide, we will demonstrate this process using PyTorch.\n", + "We will be using PyTorch to walk through the basic steps of deploying a TensorRT model by [exporting the model in ONNX format](https://pytorch.org/docs/stable/onnx.html).\n", "\n", "You can find PyTorch installation instructions [here](https://pytorch.org/get-started/locally/), or use one of NVIDIA's NGC containers [here](https://ngc.nvidia.com/catalog/containers/nvidia:pytorch). \n", "\n", @@ -118,7 +80,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install torchvision" + "!pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124" ] }, { @@ -127,26 +89,7 @@ "source": [ "__Using Colab:__\n", "\n", - "You can also test these notebooks out using [Google Colab](https://colab.research.google.com/), which includes both Tensorflow and PyTorch, as well as supported NVIDIA drivers. __Make sure to select a GPU hardware accelerator__ in the runtime options. Just note that TensorRT performance is best on newer gpus, Colab often has trouble with reduced precision inference, and you will have to use an older version of TensorRT.\n", - "\n", - "At the time of writing, Colab is on an old version of CUDA (10.1) that TensorRT 7 does not support. You will need to install TensorRT 6 - at the time of writing the following works to install it:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%bash\n", - "\n", - "version=\"6.0.1-1+cuda10.1\"\n", - "wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb\n", - "\n", - "dpkg -i nvidia-machine-learning-repo-*.deb\n", - "apt-get update\n", - "\n", - "sudo apt-get install libnvinfer6=${version} libnvonnxparsers6=${version} libnvparsers6=${version} libnvinfer-plugin6=${version} libnvinfer-dev=${version} libnvonnxparsers-dev=${version} libnvparsers-dev=${version} libnvinfer-plugin-dev=${version} python-libnvinfer=${version} python3-libnvinfer=${version}" + "You can also test these notebooks out using [Google Colab](https://colab.research.google.com/), which includes PyTorch, as well as supported NVIDIA drivers. __Make sure to select a GPU hardware accelerator__ in the runtime options. Just note that TensorRT performance is best on newer gpus, Colab often has trouble with reduced precision inference, and you will have to use an older version of TensorRT." ] }, { @@ -172,16 +115,14 @@ "\n", "The notebooks included with this guide are:\n", "- [1. Introduction.ipynb](./1.%20Introduction.ipynb)\n", - "- [2. Using the TF-TRT Tensorflow Integration.ipynb](./2.%20Using%20the%20Tensorflow%20TensorRT%20Integration.ipynb)\n", - "- [3. Using Tensorflow 2 through ONNX.ipynb](./3.%20Using%20Tensorflow%202%20through%20ONNX.ipynb)\n", - "- [4. Using PyTorch through ONNX.ipynb](./4.%20Using%20PyTorch%20through%20ONNX.ipynb)\n", - "- [5. Understanding TensorRT Runtimes.ipynb](./5.%20Understanding%20TensorRT%20Runtimes.ipynb)" + "- [2. Using PyTorch through ONNX.ipynb](./2.%20Using%20PyTorch%20through%20ONNX.ipynb)\n", + "- [3. Understanding TensorRT Runtimes.ipynb](./3.%20Understanding%20TensorRT%20Runtimes.ipynb)" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -195,7 +136,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/quickstart/IntroNotebooks/1. Introduction.ipynb b/quickstart/IntroNotebooks/1. Introduction.ipynb index 23c5f8fa..55ba50a3 100644 --- a/quickstart/IntroNotebooks/1. Introduction.ipynb +++ b/quickstart/IntroNotebooks/1. Introduction.ipynb @@ -8,11 +8,6 @@ ] }, { - "attachments": { - "tensorrt_landscape.png": { - "image/png": "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\nt3Ufe1/Dfvv9NQcYB8obkcbpjT1N4qaO5rTm9oNjDra2+Lcc+Hn4z9sOWR+qPmx8ePER6pHSI/1H\ni4/2HpMd6z6ec/xh66TW2yfGnbh6cuzJtlNRp878Ev7LidOc00fPBJw5dNbv7MFz7HNN573PN17w\nunDgV69fD7R5tzVe9LnYfMn3Ukv76PYjl4MuH78SeuWXq7yr56/FXmu/nnz95o2MGx03hTef3sq/\n9fK3ot/6bs+9Q7hTflf/buU983u1vzv/vrvDu+Pw/dD7Fx4kPrj9UPDw+SPFo0+dpY/pjyufWD2p\ne+rx9FBXeNelZ+OfdT6XPe/rLvvD4I+aF04v9v8Z/OeFnnE9nS/lL/tfLXxt+nrbm1FvWnvje++9\nLXjb9678ven77R/YH05/TP34pG/qJ9Knqs/On1u+RH2501/Q3y/jy/nqTwEMNjQ7G4BX2wCgpwHA\nuASPCeM15zy1IJqzqZrAf2LNWVAt3gBsmgtAcjAAMfC+ATZHyDTYVJ/qScEA9fQcbFpRZHt6aHzR\n4ImH8L6//7UFAKQWAD7L+/v71vb3f94Mg70FwLEpmvOlSojwbLBBdX4B17cumAu+kX8B8ht7tRQ5\nxdIAAACKZVhJZk1NACoAAAAIAAQBGgAFAAAAAQAAAD4BGwAFAAAAAQAAAEYBKAADAAAAAQACAACH\naQAEAAAAAQAAAE4AAAAAAAAAkAAAAAEAAACQAAAAAQADkoYABwAAABIAAAB4oAIABAAAAAEAAAXa\noAMABAAAAAEAAALsAAAAAEFTQ0lJAAAAU2NyZWVuc2hvdJIArqsAAAAJcEhZcwAAFiUAABYlAUlS\nJPAAAAHXaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2Jl\nOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJk\nZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxy\nZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6\nLy9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9u\nPjE0OTg8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5T\nY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNp\nb24+NzQ4PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAg\nIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cn6ozksAAAAcaURPVAAAAAIAAAAAAAABdgAAACgAAAF2\nAAABdgAB+ZtlCxUrAABAAElEQVR4AeydB3wUxRfH36X3Rgo9tBAg9F4CBJCiWBHEir2gKIq9Y1cU\nAcGCiID6twsWsNBLKKH3FkpCIJ303vjPHF68u929une3d/e7z+c+uzv1zXdn72bezrynusQ+hA8I\ngAAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgIBFBFRQtFvEDZlAAARAAARAAARAAARAAARA\nAARAAARAAARAAARAAARAQE0AinZ0BBAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARCwggAU\n7VbAQ1YQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQgKIdfQAEQAAEQAAEQAAEQAAEQAAE\nQAAEQAAEQAAEQAAEQAAErCAARbsV8JAVBEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABKBo\nRx8AARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAASsIQNFuBTxkBQEQAAEQAAEQAAEQAAEQ\nAAEQAAEQAAEQAAEQAAEQAAEo2tEHQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQMAKAlC0\nWwEPWUEABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAAinb0ARAAARAAARAAARAAARAAARAA\nARAAARAAARAAARAAARCwggAU7VbAU3rW8poiKqq6QAXlGVTIjmXVeVRRW0Tl1YXqIz+vra+kuoYa\nqm+ovXy8VMuadUnpTYN8IAACIAACshJQkafKm7w8fMjT4/LR29OfArzD1N9A33D1Mcg3isL9WlBE\nYCsKY8dAnzBZpUBhIAACIAACIKAEApcuXaKymnwqrLxAhRXn1Ud+rZlLVbJ51OW5VBXVs/lTHZtL\n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\nAQTsKfA/PrWWJX/i+nsAAAAASUVORK5CYII=\n" - } - }, "cell_type": "markdown", "metadata": {}, "source": [ @@ -27,7 +22,7 @@ "1. The various paths users can follow to convert their models to optimized TensorRT engines\n", "2. The various runtimes users can target with TensorRT when deploying their optimized TensorRT engines\n", "\n", - "If you have a model in Tensorflow or PyTorch and want to run inference as efficiently as possible - with low latency, high throughput, and less memory consumption - this guide will help you achieve just that!!" + "If you have a model in PyTorch and want to run inference as efficiently as possible - with low latency, high throughput, and less memory consumption - this guide will help you achieve just that!!" ] }, { @@ -55,7 +50,7 @@ "\n", "This guide will walk you broadly through all of these decision points while giving you an overview of your options at each step.\n", "\n", - "We could talk about these points in isolation, but they are best understood in the context of an actual end-to-end workflow. Let's get started on a simple one here, using a TensorRT API wrapper written for this guide. Once you understand the basic workflow, you can dive into the more in depth notebooks on the TF-TRT and ONNX converters!" + "We could talk about these points in isolation, but they are best understood in the context of an actual end-to-end workflow. Let's get started on a simple one here, using a TensorRT API wrapper written for this guide. Once you understand the basic workflow, you can dive into the more in depth notebooks on the Torch-TRT and ONNX converters!" ] }, { @@ -82,7 +77,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "__IMPORTANT NOTE:__ Please __shutdown all other notebooks and Tensorflow/PyTorch processes__ before running these steps. TensorRT and Tensorflow/PyTorch can not be loaded into your Python processes at the same time." + "__IMPORTANT NOTE:__ Please __shutdown all other notebooks and PyTorch processes__ before running these steps. TensorRT and PyTorch can not be loaded into your Python processes at the same time." ] }, { @@ -96,7 +91,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The two main automatic conversion paths for TensorRT require different model formats to successfully convert a model. TF-TRT uses Tensorflow SavedModels, and the ONNX path requires models be saved in ONNX. Here, we will use ONNX.\n", + "The two main automatic conversion paths for TensorRT require different model formats to successfully convert a model. Torch-TRT uses PyTorch saved models and the ONNX path requires models be saved in ONNX. Here, we will use ONNX.\n", "\n", "We are going to use ResNet50 - a basic backbone vision model that can be used for a variety of purposes. For the sake of demonstration, here we will perform classification using a __pretrained ResNet50 ONNX__ model included with the [ONNX model zoo](https://github.com/onnx/models).\n", "\n", @@ -112,22 +107,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "--2021-01-30 00:56:52-- https://s3.amazonaws.com/download.onnx/models/opset_8/resnet50.tar.gz\n", - "Resolving s3.amazonaws.com (s3.amazonaws.com)... 52.217.17.118\n", - "Connecting to s3.amazonaws.com (s3.amazonaws.com)|52.217.17.118|:443... connected.\n", + "--2024-08-09 23:11:25-- https://download.onnxruntime.ai/onnx/models/resnet50.tar.gz\n", + "Resolving download.onnxruntime.ai (download.onnxruntime.ai)... 13.107.246.69, 2620:1ec:bdf::69\n", + "Connecting to download.onnxruntime.ai (download.onnxruntime.ai)|13.107.246.69|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", - "Length: 101706397 (97M) [binary/octet-stream]\n", + "Length: 101632129 (97M) [application/octet-stream]\n", "Saving to: ‘resnet50.tar.gz’\n", "\n", - "resnet50.tar.gz 100%[===================>] 96.99M 17.3MB/s in 17s \n", + "resnet50.tar.gz 100%[===================>] 96.92M 6.53MB/s in 16s \n", "\n", - "2021-01-30 00:57:10 (5.55 MB/s) - ‘resnet50.tar.gz’ saved [101706397/101706397]\n", + "2024-08-09 23:11:41 (6.08 MB/s) - ‘resnet50.tar.gz’ saved [101632129/101632129]\n", "\n" ] } ], "source": [ - "!wget https://s3.amazonaws.com/download.onnx/models/opset_8/resnet50.tar.gz -O resnet50.tar.gz\n", + "!wget https://download.onnxruntime.ai/onnx/models/resnet50.tar.gz -O resnet50.tar.gz\n", "!tar xzf resnet50.tar.gz" ] }, @@ -135,43 +130,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "See how to export ONNX models that will work with this same trtexec command in the [Tensorflow through ONNX notebook](./3.%20Using%20Tensorflow%202%20through%20ONNX.ipynb), and in the [PyTorch through ONNX notebook](./4.%20Using%20PyTorch%20through%20ONNX.ipynb)." + "See how to export ONNX models that will work with this same trtexec command in the [PyTorch through ONNX notebook](./2.%20Using%20PyTorch%20through%20ONNX.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### 2. Which batch size(s) will I use?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Batch size can have a large effect on the optimizations TensorRT performs on our model. When using ONNX, we need to tell TensorRT what batch size to expect. Additionally, we need to tell TensorRT whether to expect a fixed batch size, or a range of batch sizes.\n", - "\n", - "TensorRT is capable of handling the batch size dynamically if you don’t know until runtime what exact batch size you will need. That said, a fixed batch size allows TensorRT to make additional optimizations. For this example workflow, we use a fixed batch size of 32. \n", - "\n", - "We set the batch size when we save our model (see [the Tensorflow through ONNX notebook](./3.%20Using%20Tensorflow%202%20through%20ONNX.ipynb)), and we tell TensorRT to expect a fixed batch size by setting the _--explicitBatch_ flag in our __trtexec__ command when converting our model below." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "BATCH_SIZE=32" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 3. What precision will I use?" + "#### 2. What precision will I use?" ] }, { @@ -185,286 +151,471 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ + "import numpy as np\n", "PRECISION = np.float32\n", "\n", - "dummy_input_batch = np.zeros((BATCH_SIZE, 224, 224, 3), dtype=PRECISION)" + "# The input tensor shape of the ONNX model.\n", + "input_shape = (1, 3, 224, 224)\n", + "\n", + "dummy_input_batch = np.zeros(input_shape, dtype=PRECISION)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### 4. What TensorRT path am I using to convert my model?" + "#### 3. What TensorRT path am I using to convert my model?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The ONNX conversion path is one of the most universal and performant paths for automatic TensorRT conversion. It works for Tensorflow, PyTorch, and many other frameworks. There are several tools to help users convert models from ONNX to a TensorRT engine. \n", + "The ONNX conversion path is one of the most universal and performant paths for automatic TensorRT conversion. It works for PyTorch and many other frameworks. There are several tools to help users convert models from ONNX to a TensorRT engine. \n", "\n", "One common approach is to use trtexec - a command line tool included with TensorRT that can, among other things, convert ONNX models to TensorRT engines and profile them." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "&&&& RUNNING TensorRT.trtexec # trtexec --onnx=resnet50/model.onnx --saveEngine=resnet_engine_intro.trt --explicitBatch\n", - "[01/30/2021-00:57:12] [I] === Model Options ===\n", - "[01/30/2021-00:57:12] [I] Format: ONNX\n", - "[01/30/2021-00:57:12] [I] Model: resnet50/model.onnx\n", - "[01/30/2021-00:57:12] [I] Output:\n", - "[01/30/2021-00:57:12] [I] === Build Options ===\n", - "[01/30/2021-00:57:12] [I] Max batch: explicit\n", - "[01/30/2021-00:57:12] [I] Workspace: 16 MiB\n", - "[01/30/2021-00:57:12] [I] minTiming: 1\n", - "[01/30/2021-00:57:12] [I] avgTiming: 8\n", - "[01/30/2021-00:57:12] [I] Precision: FP32\n", - "[01/30/2021-00:57:12] [I] Calibration: \n", - "[01/30/2021-00:57:12] [I] Refit: Disabled\n", - "[01/30/2021-00:57:12] [I] Safe mode: Disabled\n", - "[01/30/2021-00:57:12] [I] Save engine: resnet_engine_intro.trt\n", - "[01/30/2021-00:57:12] [I] Load engine: \n", - "[01/30/2021-00:57:12] [I] Builder Cache: Enabled\n", - "[01/30/2021-00:57:12] [I] NVTX verbosity: 0\n", - "[01/30/2021-00:57:12] [I] Tactic sources: Using default tactic sources\n", - "[01/30/2021-00:57:12] [I] Input(s)s format: fp32:CHW\n", - "[01/30/2021-00:57:12] [I] Output(s)s format: fp32:CHW\n", - "[01/30/2021-00:57:12] [I] Input build shapes: model\n", - "[01/30/2021-00:57:12] [I] Input calibration shapes: model\n", - "[01/30/2021-00:57:12] [I] === System Options ===\n", - "[01/30/2021-00:57:12] [I] Device: 0\n", - "[01/30/2021-00:57:12] [I] DLACore: \n", - "[01/30/2021-00:57:12] [I] Plugins:\n", - "[01/30/2021-00:57:12] [I] === Inference Options ===\n", - "[01/30/2021-00:57:12] [I] Batch: Explicit\n", - "[01/30/2021-00:57:12] [I] Input inference shapes: model\n", - "[01/30/2021-00:57:12] [I] Iterations: 10\n", - "[01/30/2021-00:57:12] [I] Duration: 3s (+ 200ms warm up)\n", - "[01/30/2021-00:57:12] [I] Sleep time: 0ms\n", - "[01/30/2021-00:57:12] [I] Streams: 1\n", - "[01/30/2021-00:57:12] [I] ExposeDMA: Disabled\n", - "[01/30/2021-00:57:12] [I] Data transfers: Enabled\n", - "[01/30/2021-00:57:12] [I] Spin-wait: Disabled\n", - "[01/30/2021-00:57:12] [I] Multithreading: Disabled\n", - "[01/30/2021-00:57:12] [I] CUDA Graph: Disabled\n", - "[01/30/2021-00:57:12] [I] Separate profiling: Disabled\n", - "[01/30/2021-00:57:12] [I] Skip inference: Disabled\n", - "[01/30/2021-00:57:12] [I] Inputs:\n", - "[01/30/2021-00:57:12] [I] === Reporting Options ===\n", - "[01/30/2021-00:57:12] [I] Verbose: Disabled\n", - "[01/30/2021-00:57:12] [I] Averages: 10 inferences\n", - "[01/30/2021-00:57:12] [I] Percentile: 99\n", - "[01/30/2021-00:57:12] [I] Dump refittable layers:Disabled\n", - "[01/30/2021-00:57:12] [I] Dump output: Disabled\n", - "[01/30/2021-00:57:12] [I] Profile: Disabled\n", - "[01/30/2021-00:57:12] [I] Export timing to JSON file: \n", - "[01/30/2021-00:57:12] [I] Export output to JSON file: \n", - "[01/30/2021-00:57:12] [I] Export profile to JSON file: \n", - "[01/30/2021-00:57:12] [I] \n", - "[01/30/2021-00:57:13] [I] === Device Information ===\n", - "[01/30/2021-00:57:13] [I] Selected Device: Tesla V100-DGXS-16GB\n", - "[01/30/2021-00:57:13] [I] Compute Capability: 7.0\n", - "[01/30/2021-00:57:13] [I] SMs: 80\n", - "[01/30/2021-00:57:13] [I] Compute Clock Rate: 1.53 GHz\n", - "[01/30/2021-00:57:13] [I] Device Global Memory: 16155 MiB\n", - "[01/30/2021-00:57:13] [I] Shared Memory per SM: 96 KiB\n", - "[01/30/2021-00:57:13] [I] Memory Bus Width: 4096 bits (ECC enabled)\n", - "[01/30/2021-00:57:13] [I] Memory Clock Rate: 0.877 GHz\n", - "[01/30/2021-00:57:13] [I] \n", - "----------------------------------------------------------------\n", - "Input filename: resnet50/model.onnx\n", - "ONNX IR version: 0.0.3\n", - "Opset version: 8\n", - "Producer name: onnx-caffe2\n", - "Producer version: \n", - "Domain: \n", - "Model version: 0\n", - "Doc string: \n", - "----------------------------------------------------------------\n", - "[01/30/2021-00:57:28] [W] [TRT] /workspace/TensorRT/parsers/onnx/onnx2trt_utils.cpp:218: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.\n", - "[01/30/2021-00:57:33] [I] [TRT] Some tactics do not have sufficient workspace memory to run. Increasing workspace size may increase performance, please check verbose output.\n", - "[01/30/2021-00:58:00] [I] [TRT] Detected 1 inputs and 1 output network tensors.\n", - "[01/30/2021-00:58:01] [I] Engine built in 48.3635 sec.\n", - "[01/30/2021-00:58:01] [I] Starting inference\n", - "[01/30/2021-00:58:04] [I] Warmup completed 0 queries over 200 ms\n", - "[01/30/2021-00:58:04] [I] Timing trace has 0 queries over 3.00755 s\n", - "[01/30/2021-00:58:04] [I] Trace averages of 10 runs:\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11589 ms - Host latency: 2.17926 ms (end to end 4.1571 ms, enqueue 0.555537 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11435 ms - Host latency: 2.17651 ms (end to end 4.15565 ms, enqueue 0.558661 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11344 ms - Host latency: 2.1762 ms (end to end 4.15384 ms, enqueue 0.55706 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11272 ms - Host latency: 2.17611 ms (end to end 4.15171 ms, enqueue 0.558392 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11353 ms - Host latency: 2.17744 ms (end to end 4.1518 ms, enqueue 0.560349 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11425 ms - Host latency: 2.17675 ms (end to end 4.15527 ms, enqueue 0.555679 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11343 ms - Host latency: 2.17668 ms (end to end 4.15175 ms, enqueue 0.581152 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1118 ms - Host latency: 2.17372 ms (end to end 4.15207 ms, enqueue 0.524023 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11344 ms - Host latency: 2.17588 ms (end to end 4.15279 ms, enqueue 0.540732 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11282 ms - Host latency: 2.17574 ms (end to end 4.15146 ms, enqueue 0.577774 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11476 ms - Host latency: 2.1772 ms (end to end 4.15719 ms, enqueue 0.520935 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1123 ms - Host latency: 2.17551 ms (end to end 4.1503 ms, enqueue 0.561722 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11477 ms - Host latency: 2.17788 ms (end to end 4.15459 ms, enqueue 0.558096 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.112 ms - Host latency: 2.17459 ms (end to end 4.15193 ms, enqueue 0.544376 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1121 ms - Host latency: 2.17496 ms (end to end 4.14929 ms, enqueue 0.557077 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11109 ms - Host latency: 2.17415 ms (end to end 4.14834 ms, enqueue 0.556427 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11354 ms - Host latency: 2.17654 ms (end to end 4.15099 ms, enqueue 0.55946 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11252 ms - Host latency: 2.17513 ms (end to end 4.15128 ms, enqueue 0.550018 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11353 ms - Host latency: 2.17624 ms (end to end 4.15395 ms, enqueue 0.548749 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11119 ms - Host latency: 2.1734 ms (end to end 4.14968 ms, enqueue 0.555878 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1116 ms - Host latency: 2.17479 ms (end to end 4.14795 ms, enqueue 0.558081 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11241 ms - Host latency: 2.17573 ms (end to end 4.15023 ms, enqueue 0.558087 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11302 ms - Host latency: 2.1759 ms (end to end 4.15216 ms, enqueue 0.556372 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11303 ms - Host latency: 2.17605 ms (end to end 4.15298 ms, enqueue 0.559839 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11364 ms - Host latency: 2.17699 ms (end to end 4.15289 ms, enqueue 0.558508 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11139 ms - Host latency: 2.17415 ms (end to end 4.15061 ms, enqueue 0.544489 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11447 ms - Host latency: 2.17653 ms (end to end 4.15565 ms, enqueue 0.556574 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11271 ms - Host latency: 2.17557 ms (end to end 4.15234 ms, enqueue 0.55708 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11097 ms - Host latency: 2.17423 ms (end to end 4.14752 ms, enqueue 0.558173 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11241 ms - Host latency: 2.17522 ms (end to end 4.15159 ms, enqueue 0.556244 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11332 ms - Host latency: 2.1765 ms (end to end 4.15158 ms, enqueue 0.558722 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11271 ms - Host latency: 2.17546 ms (end to end 4.15314 ms, enqueue 0.555103 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11219 ms - Host latency: 2.1749 ms (end to end 4.14993 ms, enqueue 0.560773 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11271 ms - Host latency: 2.17522 ms (end to end 4.15272 ms, enqueue 0.557971 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11303 ms - Host latency: 2.17612 ms (end to end 4.15154 ms, enqueue 0.555768 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11324 ms - Host latency: 2.17654 ms (end to end 4.15027 ms, enqueue 0.552136 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11302 ms - Host latency: 2.17607 ms (end to end 4.15239 ms, enqueue 0.554169 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11107 ms - Host latency: 2.17465 ms (end to end 4.14894 ms, enqueue 0.546442 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11313 ms - Host latency: 2.17551 ms (end to end 4.15522 ms, enqueue 0.523438 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11049 ms - Host latency: 2.17324 ms (end to end 4.14769 ms, enqueue 0.540741 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11405 ms - Host latency: 2.17726 ms (end to end 4.15367 ms, enqueue 0.559326 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11097 ms - Host latency: 2.17369 ms (end to end 4.15007 ms, enqueue 0.556116 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11149 ms - Host latency: 2.17452 ms (end to end 4.14658 ms, enqueue 0.559424 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11427 ms - Host latency: 2.17723 ms (end to end 4.15461 ms, enqueue 0.555127 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1131 ms - Host latency: 2.17538 ms (end to end 4.15183 ms, enqueue 0.560632 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11249 ms - Host latency: 2.17482 ms (end to end 4.15189 ms, enqueue 0.557959 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11375 ms - Host latency: 2.17643 ms (end to end 4.15238 ms, enqueue 0.562488 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1116 ms - Host latency: 2.1741 ms (end to end 4.14967 ms, enqueue 0.547644 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11403 ms - Host latency: 2.17742 ms (end to end 4.15244 ms, enqueue 0.555774 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11252 ms - Host latency: 2.17515 ms (end to end 4.1512 ms, enqueue 0.558606 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1114 ms - Host latency: 2.17408 ms (end to end 4.14801 ms, enqueue 0.554724 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11332 ms - Host latency: 2.17617 ms (end to end 4.15319 ms, enqueue 0.547461 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11351 ms - Host latency: 2.17595 ms (end to end 4.15333 ms, enqueue 0.558728 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11222 ms - Host latency: 2.17472 ms (end to end 4.15006 ms, enqueue 0.556201 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11324 ms - Host latency: 2.17637 ms (end to end 4.15137 ms, enqueue 0.559521 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11014 ms - Host latency: 2.17297 ms (end to end 4.14584 ms, enqueue 0.555689 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11836 ms - Host latency: 2.18071 ms (end to end 3.91808 ms, enqueue 0.570044 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.12634 ms - Host latency: 2.18938 ms (end to end 4.18035 ms, enqueue 0.521484 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.12777 ms - Host latency: 2.19177 ms (end to end 4.17981 ms, enqueue 0.551685 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.12837 ms - Host latency: 2.19091 ms (end to end 4.18446 ms, enqueue 0.538281 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.12396 ms - Host latency: 2.18756 ms (end to end 4.17269 ms, enqueue 0.559168 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.12452 ms - Host latency: 2.18771 ms (end to end 4.17476 ms, enqueue 0.554163 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11993 ms - Host latency: 2.18292 ms (end to end 4.16759 ms, enqueue 0.556616 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.12032 ms - Host latency: 2.18378 ms (end to end 4.16458 ms, enqueue 0.5573 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11735 ms - Host latency: 2.18063 ms (end to end 4.16068 ms, enqueue 0.559265 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1175 ms - Host latency: 2.18032 ms (end to end 4.16119 ms, enqueue 0.555395 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11755 ms - Host latency: 2.18091 ms (end to end 4.1616 ms, enqueue 0.559143 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11436 ms - Host latency: 2.17661 ms (end to end 4.15618 ms, enqueue 0.556836 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11536 ms - Host latency: 2.17844 ms (end to end 4.15696 ms, enqueue 0.544946 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11466 ms - Host latency: 2.17747 ms (end to end 4.15542 ms, enqueue 0.55824 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11517 ms - Host latency: 2.17788 ms (end to end 4.15695 ms, enqueue 0.555554 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.116 ms - Host latency: 2.17919 ms (end to end 4.15634 ms, enqueue 0.580286 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11315 ms - Host latency: 2.17648 ms (end to end 4.15194 ms, enqueue 0.599573 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11315 ms - Host latency: 2.1769 ms (end to end 4.15255 ms, enqueue 0.536169 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11353 ms - Host latency: 2.17578 ms (end to end 4.15463 ms, enqueue 0.558142 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11212 ms - Host latency: 2.17516 ms (end to end 4.15062 ms, enqueue 0.543506 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11364 ms - Host latency: 2.17599 ms (end to end 4.15186 ms, enqueue 0.570325 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11353 ms - Host latency: 2.17643 ms (end to end 4.15061 ms, enqueue 0.59751 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11312 ms - Host latency: 2.17607 ms (end to end 4.15355 ms, enqueue 0.543774 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11362 ms - Host latency: 2.17668 ms (end to end 4.15172 ms, enqueue 0.5672 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11373 ms - Host latency: 2.17716 ms (end to end 4.15122 ms, enqueue 0.55531 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11373 ms - Host latency: 2.17621 ms (end to end 4.15096 ms, enqueue 0.573486 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11293 ms - Host latency: 2.17657 ms (end to end 4.14648 ms, enqueue 0.623621 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11317 ms - Host latency: 2.1764 ms (end to end 4.14712 ms, enqueue 0.558459 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11262 ms - Host latency: 2.17612 ms (end to end 4.14435 ms, enqueue 0.5927 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1124 ms - Host latency: 2.17574 ms (end to end 4.14446 ms, enqueue 0.585632 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11322 ms - Host latency: 2.17765 ms (end to end 4.14637 ms, enqueue 0.586939 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11245 ms - Host latency: 2.17583 ms (end to end 4.14529 ms, enqueue 0.586645 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11262 ms - Host latency: 2.17637 ms (end to end 4.14568 ms, enqueue 0.58977 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11357 ms - Host latency: 2.17761 ms (end to end 4.14595 ms, enqueue 0.586621 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11194 ms - Host latency: 2.17544 ms (end to end 4.14165 ms, enqueue 0.590649 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11379 ms - Host latency: 2.17812 ms (end to end 4.1459 ms, enqueue 0.588574 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1127 ms - Host latency: 2.17659 ms (end to end 4.14382 ms, enqueue 0.588721 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11211 ms - Host latency: 2.176 ms (end to end 4.13708 ms, enqueue 0.595557 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11335 ms - Host latency: 2.17754 ms (end to end 4.14412 ms, enqueue 0.59043 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11245 ms - Host latency: 2.17676 ms (end to end 4.1438 ms, enqueue 0.591821 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11279 ms - Host latency: 2.17673 ms (end to end 4.14336 ms, enqueue 0.584399 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1115 ms - Host latency: 2.17537 ms (end to end 4.14294 ms, enqueue 0.59458 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11104 ms - Host latency: 2.17471 ms (end to end 4.14072 ms, enqueue 0.597974 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11108 ms - Host latency: 2.17488 ms (end to end 4.14187 ms, enqueue 0.625659 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11348 ms - Host latency: 2.17795 ms (end to end 4.14451 ms, enqueue 0.586597 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11323 ms - Host latency: 2.17646 ms (end to end 4.14539 ms, enqueue 0.590649 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11301 ms - Host latency: 2.17666 ms (end to end 4.146 ms, enqueue 0.595654 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11292 ms - Host latency: 2.17634 ms (end to end 4.14446 ms, enqueue 0.593213 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11011 ms - Host latency: 2.17397 ms (end to end 4.13892 ms, enqueue 0.622974 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11248 ms - Host latency: 2.17588 ms (end to end 4.14495 ms, enqueue 0.596289 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11477 ms - Host latency: 2.17993 ms (end to end 4.14653 ms, enqueue 0.582837 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11292 ms - Host latency: 2.17661 ms (end to end 4.14492 ms, enqueue 0.603027 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11355 ms - Host latency: 2.17661 ms (end to end 4.14651 ms, enqueue 0.566821 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11223 ms - Host latency: 2.17651 ms (end to end 4.14209 ms, enqueue 0.625342 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11147 ms - Host latency: 2.17524 ms (end to end 4.14187 ms, enqueue 0.615601 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11353 ms - Host latency: 2.17744 ms (end to end 4.14546 ms, enqueue 0.575049 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11223 ms - Host latency: 2.17561 ms (end to end 4.1418 ms, enqueue 0.597363 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11243 ms - Host latency: 2.17581 ms (end to end 4.14287 ms, enqueue 0.589453 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11177 ms - Host latency: 2.17585 ms (end to end 4.1418 ms, enqueue 0.612402 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11296 ms - Host latency: 2.17734 ms (end to end 4.14319 ms, enqueue 0.619409 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11218 ms - Host latency: 2.17603 ms (end to end 4.1449 ms, enqueue 0.565015 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11343 ms - Host latency: 2.17698 ms (end to end 4.14553 ms, enqueue 0.587769 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11301 ms - Host latency: 2.17622 ms (end to end 4.14519 ms, enqueue 0.591113 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11316 ms - Host latency: 2.17698 ms (end to end 4.14565 ms, enqueue 0.608716 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11514 ms - Host latency: 2.17805 ms (end to end 4.14985 ms, enqueue 0.553271 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11558 ms - Host latency: 2.17832 ms (end to end 4.15251 ms, enqueue 0.582935 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.12288 ms - Host latency: 2.18635 ms (end to end 3.91743 ms, enqueue 0.62688 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.12126 ms - Host latency: 2.18442 ms (end to end 4.16807 ms, enqueue 0.494141 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11946 ms - Host latency: 2.18298 ms (end to end 4.16011 ms, enqueue 0.591016 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.12029 ms - Host latency: 2.18364 ms (end to end 4.16406 ms, enqueue 0.564893 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.12004 ms - Host latency: 2.18499 ms (end to end 4.16604 ms, enqueue 0.557935 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1198 ms - Host latency: 2.18325 ms (end to end 4.16367 ms, enqueue 0.554346 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1158 ms - Host latency: 2.17839 ms (end to end 4.15647 ms, enqueue 0.565063 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1156 ms - Host latency: 2.179 ms (end to end 4.15845 ms, enqueue 0.550684 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11472 ms - Host latency: 2.1781 ms (end to end 4.15522 ms, enqueue 0.566064 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1186 ms - Host latency: 2.18154 ms (end to end 4.1626 ms, enqueue 0.552197 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11624 ms - Host latency: 2.17861 ms (end to end 4.15891 ms, enqueue 0.560767 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11423 ms - Host latency: 2.17747 ms (end to end 4.15547 ms, enqueue 0.565674 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11482 ms - Host latency: 2.17715 ms (end to end 4.15476 ms, enqueue 0.544629 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11367 ms - Host latency: 2.17717 ms (end to end 4.15237 ms, enqueue 0.560815 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.1157 ms - Host latency: 2.17856 ms (end to end 4.15601 ms, enqueue 0.560864 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11323 ms - Host latency: 2.17678 ms (end to end 4.15149 ms, enqueue 0.593677 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11255 ms - Host latency: 2.17583 ms (end to end 4.14907 ms, enqueue 0.570288 ms)\n", - "[01/30/2021-00:58:04] [I] Average on 10 runs - GPU latency: 2.11191 ms - Host latency: 2.17317 ms (end to end 4.15513 ms, enqueue 0.491797 ms)\n", - "[01/30/2021-00:58:04] [I] Host Latency\n", - "[01/30/2021-00:58:04] [I] min: 2.16614 ms (end to end 2.19995 ms)\n", - "[01/30/2021-00:58:04] [I] max: 2.20166 ms (end to end 4.19275 ms)\n", - "[01/30/2021-00:58:04] [I] mean: 2.17729 ms (end to end 4.14859 ms)\n", - "[01/30/2021-00:58:04] [I] median: 2.17676 ms (end to end 4.15125 ms)\n", - "[01/30/2021-00:58:04] [I] percentile: 2.19336 ms at 99% (end to end 4.18213 ms at 99%)\n", - "[01/30/2021-00:58:04] [I] throughput: 0 qps\n", - "[01/30/2021-00:58:04] [I] walltime: 3.00755 s\n", - "[01/30/2021-00:58:04] [I] Enqueue Time\n", - "[01/30/2021-00:58:04] [I] min: 0.447021 ms\n", - "[01/30/2021-00:58:04] [I] max: 0.669434 ms\n", - "[01/30/2021-00:58:04] [I] median: 0.559113 ms\n", - "[01/30/2021-00:58:04] [I] GPU Compute\n", - "[01/30/2021-00:58:04] [I] min: 2.10223 ms\n", - "[01/30/2021-00:58:04] [I] max: 2.13513 ms\n", - "[01/30/2021-00:58:04] [I] mean: 2.11412 ms\n", - "[01/30/2021-00:58:04] [I] median: 2.11353 ms\n", - "[01/30/2021-00:58:04] [I] percentile: 2.12988 ms at 99%\n", - "[01/30/2021-00:58:04] [I] total compute time: 2.97245 s\n", - "&&&& PASSED TensorRT.trtexec # trtexec --onnx=resnet50/model.onnx --saveEngine=resnet_engine_intro.trt --explicitBatch\n" + "&&&& RUNNING TensorRT.trtexec [TensorRT v100300] # trtexec --onnx=resnet50/model.onnx --saveEngine=resnet_engine_intro.engine\n", + "[08/09/2024-23:11:42] [I] === Model Options ===\n", + "[08/09/2024-23:11:42] [I] Format: ONNX\n", + "[08/09/2024-23:11:42] [I] Model: resnet50/model.onnx\n", + "[08/09/2024-23:11:42] [I] Output:\n", + "[08/09/2024-23:11:42] [I] === Build Options ===\n", + "[08/09/2024-23:11:42] [I] Memory Pools: workspace: default, dlaSRAM: default, dlaLocalDRAM: default, dlaGlobalDRAM: default, tacticSharedMem: default\n", + "[08/09/2024-23:11:42] [I] avgTiming: 8\n", + "[08/09/2024-23:11:42] [I] Precision: FP32\n", + "[08/09/2024-23:11:42] [I] LayerPrecisions: \n", + "[08/09/2024-23:11:42] [I] Layer Device Types: \n", + "[08/09/2024-23:11:42] [I] Calibration: \n", + "[08/09/2024-23:11:42] [I] Refit: Disabled\n", + "[08/09/2024-23:11:42] [I] Strip weights: Disabled\n", + "[08/09/2024-23:11:42] [I] Version Compatible: Disabled\n", + "[08/09/2024-23:11:42] [I] ONNX Plugin InstanceNorm: Disabled\n", + "[08/09/2024-23:11:42] [I] TensorRT runtime: full\n", + "[08/09/2024-23:11:42] [I] Lean DLL Path: \n", + "[08/09/2024-23:11:42] [I] Tempfile Controls: { in_memory: allow, temporary: allow }\n", + "[08/09/2024-23:11:42] [I] Exclude Lean Runtime: Disabled\n", + "[08/09/2024-23:11:42] [I] Sparsity: Disabled\n", + "[08/09/2024-23:11:42] [I] Safe mode: Disabled\n", + "[08/09/2024-23:11:42] [I] Build DLA standalone loadable: Disabled\n", + "[08/09/2024-23:11:42] [I] Allow GPU fallback for DLA: Disabled\n", + "[08/09/2024-23:11:42] [I] DirectIO mode: Disabled\n", + "[08/09/2024-23:11:42] [I] Restricted mode: Disabled\n", + "[08/09/2024-23:11:42] [I] Skip inference: Disabled\n", + "[08/09/2024-23:11:42] [I] Save engine: resnet_engine_intro.engine\n", + "[08/09/2024-23:11:42] [I] Load engine: \n", + "[08/09/2024-23:11:42] [I] Profiling verbosity: 0\n", + "[08/09/2024-23:11:42] [I] Tactic sources: Using default tactic sources\n", + "[08/09/2024-23:11:42] [I] timingCacheMode: local\n", + "[08/09/2024-23:11:42] [I] timingCacheFile: \n", + "[08/09/2024-23:11:42] [I] Enable Compilation Cache: Enabled\n", + "[08/09/2024-23:11:42] [I] errorOnTimingCacheMiss: Disabled\n", + "[08/09/2024-23:11:42] [I] Preview Features: Use default preview flags.\n", + "[08/09/2024-23:11:42] [I] MaxAuxStreams: -1\n", + "[08/09/2024-23:11:42] [I] BuilderOptimizationLevel: -1\n", + "[08/09/2024-23:11:42] [I] Calibration Profile Index: 0\n", + "[08/09/2024-23:11:42] [I] Weight Streaming: Disabled\n", + "[08/09/2024-23:11:42] [I] Runtime Platform: Same As Build\n", + "[08/09/2024-23:11:42] [I] Debug Tensors: \n", + "[08/09/2024-23:11:42] [I] Input(s)s format: fp32:CHW\n", + "[08/09/2024-23:11:42] [I] Output(s)s format: fp32:CHW\n", + "[08/09/2024-23:11:42] [I] Input build shapes: model\n", + "[08/09/2024-23:11:42] [I] Input calibration shapes: model\n", + "[08/09/2024-23:11:42] [I] === System Options ===\n", + "[08/09/2024-23:11:42] [I] Device: 0\n", + "[08/09/2024-23:11:42] [I] DLACore: \n", + "[08/09/2024-23:11:42] [I] Plugins:\n", + "[08/09/2024-23:11:42] [I] setPluginsToSerialize:\n", + "[08/09/2024-23:11:42] [I] dynamicPlugins:\n", + "[08/09/2024-23:11:42] [I] ignoreParsedPluginLibs: 0\n", + "[08/09/2024-23:11:42] [I] \n", + "[08/09/2024-23:11:42] [I] === Inference Options ===\n", + "[08/09/2024-23:11:42] [I] Batch: Explicit\n", + "[08/09/2024-23:11:42] [I] Input inference shapes: model\n", + "[08/09/2024-23:11:42] [I] Iterations: 10\n", + "[08/09/2024-23:11:42] [I] Duration: 3s (+ 200ms warm up)\n", + "[08/09/2024-23:11:42] [I] Sleep time: 0ms\n", + "[08/09/2024-23:11:42] [I] Idle time: 0ms\n", + "[08/09/2024-23:11:42] [I] Inference Streams: 1\n", + "[08/09/2024-23:11:42] [I] ExposeDMA: Disabled\n", + "[08/09/2024-23:11:42] [I] Data transfers: Enabled\n", + "[08/09/2024-23:11:42] [I] Spin-wait: Disabled\n", + "[08/09/2024-23:11:42] [I] Multithreading: Disabled\n", + "[08/09/2024-23:11:42] [I] CUDA Graph: Disabled\n", + "[08/09/2024-23:11:42] [I] Separate profiling: Disabled\n", + "[08/09/2024-23:11:42] [I] Time Deserialize: Disabled\n", + "[08/09/2024-23:11:42] [I] Time Refit: Disabled\n", + "[08/09/2024-23:11:42] [I] NVTX verbosity: 0\n", + "[08/09/2024-23:11:42] [I] Persistent Cache Ratio: 0\n", + "[08/09/2024-23:11:42] [I] Optimization Profile Index: 0\n", + "[08/09/2024-23:11:42] [I] Weight Streaming Budget: 100.000000%\n", + "[08/09/2024-23:11:42] [I] Inputs:\n", + "[08/09/2024-23:11:42] [I] Debug Tensor Save Destinations:\n", + "[08/09/2024-23:11:42] [I] === Reporting Options ===\n", + "[08/09/2024-23:11:42] [I] Verbose: Disabled\n", + "[08/09/2024-23:11:42] [I] Averages: 10 inferences\n", + "[08/09/2024-23:11:42] [I] Percentiles: 90,95,99\n", + "[08/09/2024-23:11:42] [I] Dump refittable layers:Disabled\n", + "[08/09/2024-23:11:42] [I] Dump output: Disabled\n", + "[08/09/2024-23:11:42] [I] Profile: Disabled\n", + "[08/09/2024-23:11:42] [I] Export timing to JSON file: \n", + "[08/09/2024-23:11:42] [I] Export output to JSON file: \n", + "[08/09/2024-23:11:42] [I] Export profile to JSON file: \n", + "[08/09/2024-23:11:42] [I] \n", + "[08/09/2024-23:11:42] [I] === Device Information ===\n", + "[08/09/2024-23:11:42] [I] Available Devices: \n", + "[08/09/2024-23:11:42] [I] Device 0: \"NVIDIA RTX A5000\" UUID: GPU-bd38339f-9e6e-7f34-17ad-c1123627120b\n", + "[08/09/2024-23:11:42] [I] Selected Device: NVIDIA RTX A5000\n", + "[08/09/2024-23:11:42] [I] Selected Device ID: 0\n", + "[08/09/2024-23:11:42] [I] Selected Device UUID: GPU-bd38339f-9e6e-7f34-17ad-c1123627120b\n", + "[08/09/2024-23:11:42] [I] Compute Capability: 8.6\n", + "[08/09/2024-23:11:42] [I] SMs: 64\n", + "[08/09/2024-23:11:42] [I] Device Global Memory: 24238 MiB\n", + "[08/09/2024-23:11:42] [I] Shared Memory per SM: 100 KiB\n", + "[08/09/2024-23:11:42] [I] Memory Bus Width: 384 bits (ECC disabled)\n", + "[08/09/2024-23:11:42] [I] Application Compute Clock Rate: 1.695 GHz\n", + "[08/09/2024-23:11:42] [I] Application Memory Clock Rate: 8.001 GHz\n", + "[08/09/2024-23:11:42] [I] \n", + "[08/09/2024-23:11:42] [I] Note: The application clock rates do not reflect the actual clock rates that the GPU is currently running at.\n", + "[08/09/2024-23:11:42] [I] \n", + "[08/09/2024-23:11:42] [I] TensorRT version: 10.3.0\n", + "[08/09/2024-23:11:42] [I] Loading standard plugins\n", + "[08/09/2024-23:11:42] [I] [TRT] [MemUsageChange] Init CUDA: CPU +1, GPU +0, now: CPU 19, GPU 328 (MiB)\n", + "[08/09/2024-23:11:44] [I] [TRT] [MemUsageChange] Init builder kernel library: CPU +2087, GPU +386, now: CPU 2262, GPU 714 (MiB)\n", + "[08/09/2024-23:11:44] [I] Start parsing network model.\n", + "[08/09/2024-23:11:44] [I] [TRT] ----------------------------------------------------------------\n", + "[08/09/2024-23:11:44] [I] [TRT] Input filename: resnet50/model.onnx\n", + "[08/09/2024-23:11:44] [I] [TRT] ONNX IR version: 0.0.3\n", + "[08/09/2024-23:11:44] [I] [TRT] Opset version: 9\n", + "[08/09/2024-23:11:44] [I] [TRT] Producer name: onnx-caffe2\n", + "[08/09/2024-23:11:44] [I] [TRT] Producer version: \n", + "[08/09/2024-23:11:44] [I] [TRT] Domain: \n", + "[08/09/2024-23:11:44] [I] [TRT] Model version: 0\n", + "[08/09/2024-23:11:44] [I] [TRT] Doc string: \n", + "[08/09/2024-23:11:44] [I] [TRT] ----------------------------------------------------------------\n", + "[08/09/2024-23:11:44] [I] Finished parsing network model. Parse time: 0.0980711\n", + "[08/09/2024-23:11:44] [I] [TRT] Local timing cache in use. Profiling results in this builder pass will not be stored.\n", + "[08/09/2024-23:12:00] [I] [TRT] Detected 1 inputs and 1 output network tensors.\n", + "[08/09/2024-23:12:00] [I] [TRT] Total Host Persistent Memory: 358288\n", + "[08/09/2024-23:12:00] [I] [TRT] Total Device Persistent Memory: 1536\n", + "[08/09/2024-23:12:00] [I] [TRT] Total Scratch Memory: 524800\n", + "[08/09/2024-23:12:00] [I] [TRT] [BlockAssignment] Started assigning block shifts. This will take 98 steps to complete.\n", + "[08/09/2024-23:12:00] [I] [TRT] [BlockAssignment] Algorithm ShiftNTopDown took 1.47372ms to assign 5 blocks to 98 nodes requiring 8229376 bytes.\n", + "[08/09/2024-23:12:00] [I] [TRT] Total Activation Memory: 8228864\n", + "[08/09/2024-23:12:00] [I] [TRT] Total Weights Memory: 127384320\n", + "[08/09/2024-23:12:00] [I] [TRT] Engine generation completed in 15.6092 seconds.\n", + "[08/09/2024-23:12:00] [I] [TRT] [MemUsageStats] Peak memory usage of TRT CPU/GPU memory allocators: CPU 16 MiB, GPU 128 MiB\n", + "[08/09/2024-23:12:00] [I] [TRT] [MemUsageStats] Peak memory usage during Engine building and serialization: CPU: 3495 MiB\n", + "[08/09/2024-23:12:00] [I] Engine built in 15.678 sec.\n", + "[08/09/2024-23:12:00] [I] Created engine with size: 123.593 MiB\n", + "[08/09/2024-23:12:00] [I] [TRT] Loaded engine size: 123 MiB\n", + "[08/09/2024-23:12:00] [I] Engine deserialized in 0.0817244 sec.\n", + "[08/09/2024-23:12:00] [I] [TRT] [MemUsageChange] TensorRT-managed allocation in IExecutionContext creation: CPU +0, GPU +8, now: CPU 0, GPU 129 (MiB)\n", + "[08/09/2024-23:12:00] [I] Setting persistentCacheLimit to 0 bytes.\n", + "[08/09/2024-23:12:00] [I] Created execution context with device memory size: 7.84766 MiB\n", + "[08/09/2024-23:12:00] [I] Using random values for input gpu_0/data_0\n", + "[08/09/2024-23:12:00] [I] Input binding for gpu_0/data_0 with dimensions 1x3x224x224 is created.\n", + "[08/09/2024-23:12:00] [I] Output binding for gpu_0/softmax_1 with dimensions 1x1000 is created.\n", + "[08/09/2024-23:12:00] [I] Starting inference\n", + "[08/09/2024-23:12:04] [I] Warmup completed 177 queries over 200 ms\n", + "[08/09/2024-23:12:04] [I] Timing trace has 2622 queries over 3.00285 s\n", + "[08/09/2024-23:12:04] [I] \n", + "[08/09/2024-23:12:04] [I] === Trace details ===\n", + "[08/09/2024-23:12:04] [I] Trace averages of 10 runs:\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1434 ms - Host latency: 1.2078 ms (enqueue 0.681778 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14197 ms - Host latency: 1.20857 ms (enqueue 0.623233 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14115 ms - Host latency: 1.20379 ms (enqueue 0.640746 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14207 ms - Host latency: 1.20751 ms (enqueue 0.669678 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14186 ms - Host latency: 1.20764 ms (enqueue 0.629774 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13991 ms - Host latency: 1.20297 ms (enqueue 0.741623 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13982 ms - Host latency: 1.20135 ms (enqueue 0.717255 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14012 ms - Host latency: 1.20335 ms (enqueue 0.716397 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14073 ms - Host latency: 1.20221 ms (enqueue 0.676779 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13971 ms - Host latency: 1.20068 ms (enqueue 0.704474 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14002 ms - Host latency: 1.20219 ms (enqueue 0.720291 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13941 ms - Host latency: 1.20047 ms (enqueue 0.697601 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13971 ms - Host latency: 1.20179 ms (enqueue 0.693964 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1394 ms - Host latency: 1.20286 ms (enqueue 0.683246 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14095 ms - Host latency: 1.20357 ms (enqueue 0.683603 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14279 ms - Host latency: 1.20704 ms (enqueue 0.688162 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14186 ms - Host latency: 1.2038 ms (enqueue 0.645267 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14063 ms - Host latency: 1.20164 ms (enqueue 0.692361 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14043 ms - Host latency: 1.20164 ms (enqueue 0.702689 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14084 ms - Host latency: 1.20169 ms (enqueue 0.66651 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14084 ms - Host latency: 1.20146 ms (enqueue 0.658337 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14176 ms - Host latency: 1.20426 ms (enqueue 0.69798 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14124 ms - Host latency: 1.20262 ms (enqueue 0.694205 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14002 ms - Host latency: 1.20105 ms (enqueue 0.674658 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13572 ms - Host latency: 1.19737 ms (enqueue 0.708185 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13582 ms - Host latency: 1.19694 ms (enqueue 0.692053 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13439 ms - Host latency: 1.19557 ms (enqueue 0.685651 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13633 ms - Host latency: 1.1996 ms (enqueue 0.672461 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1346 ms - Host latency: 1.19826 ms (enqueue 0.708868 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13469 ms - Host latency: 1.19805 ms (enqueue 0.660419 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13664 ms - Host latency: 1.19839 ms (enqueue 0.700195 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13582 ms - Host latency: 1.19742 ms (enqueue 0.668628 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13602 ms - Host latency: 1.19868 ms (enqueue 0.706824 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13747 ms - Host latency: 1.19943 ms (enqueue 0.704651 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1346 ms - Host latency: 1.19565 ms (enqueue 0.690649 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13438 ms - Host latency: 1.19586 ms (enqueue 0.701184 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13838 ms - Host latency: 1.20226 ms (enqueue 0.702856 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1528 ms - Host latency: 1.21788 ms (enqueue 0.568842 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13276 ms - Host latency: 1.19438 ms (enqueue 0.482397 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1307 ms - Host latency: 1.1896 ms (enqueue 0.424017 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13172 ms - Host latency: 1.19357 ms (enqueue 0.572021 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13203 ms - Host latency: 1.19403 ms (enqueue 0.755896 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13338 ms - Host latency: 1.195 ms (enqueue 0.544983 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13417 ms - Host latency: 1.1938 ms (enqueue 0.441614 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13203 ms - Host latency: 1.19128 ms (enqueue 0.413116 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13345 ms - Host latency: 1.19925 ms (enqueue 0.572754 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13408 ms - Host latency: 1.19639 ms (enqueue 0.678613 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13379 ms - Host latency: 1.19441 ms (enqueue 0.673431 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13348 ms - Host latency: 1.19547 ms (enqueue 0.690594 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13243 ms - Host latency: 1.1952 ms (enqueue 0.700989 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13296 ms - Host latency: 1.19422 ms (enqueue 0.692523 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13407 ms - Host latency: 1.19562 ms (enqueue 0.692444 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13583 ms - Host latency: 1.19931 ms (enqueue 0.689624 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13604 ms - Host latency: 1.1983 ms (enqueue 0.69278 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13572 ms - Host latency: 1.19719 ms (enqueue 0.64353 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.135 ms - Host latency: 1.19745 ms (enqueue 0.655817 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13448 ms - Host latency: 1.19561 ms (enqueue 0.714655 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13461 ms - Host latency: 1.19612 ms (enqueue 0.701239 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13409 ms - Host latency: 1.19507 ms (enqueue 0.670715 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13604 ms - Host latency: 1.19795 ms (enqueue 0.651379 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13337 ms - Host latency: 1.19666 ms (enqueue 0.721234 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13387 ms - Host latency: 1.19581 ms (enqueue 0.695056 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13449 ms - Host latency: 1.19549 ms (enqueue 0.714343 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13367 ms - Host latency: 1.19608 ms (enqueue 0.704687 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.13521 ms - Host latency: 1.19631 ms (enqueue 0.694922 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1351 ms - Host latency: 1.19637 ms (enqueue 0.693372 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14062 ms - Host latency: 1.20346 ms (enqueue 0.71059 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14207 ms - Host latency: 1.20299 ms (enqueue 0.692322 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14085 ms - Host latency: 1.20264 ms (enqueue 0.703583 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14175 ms - Host latency: 1.20376 ms (enqueue 0.714893 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14125 ms - Host latency: 1.20208 ms (enqueue 0.692554 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14236 ms - Host latency: 1.20372 ms (enqueue 0.696967 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14227 ms - Host latency: 1.20373 ms (enqueue 0.691272 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14261 ms - Host latency: 1.20391 ms (enqueue 0.70481 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1427 ms - Host latency: 1.20387 ms (enqueue 0.676599 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14381 ms - Host latency: 1.20514 ms (enqueue 0.659851 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14298 ms - Host latency: 1.20524 ms (enqueue 0.655066 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14421 ms - Host latency: 1.20553 ms (enqueue 0.685242 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14382 ms - Host latency: 1.2059 ms (enqueue 0.706702 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14166 ms - Host latency: 1.20245 ms (enqueue 0.701538 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14204 ms - Host latency: 1.20311 ms (enqueue 0.674072 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14207 ms - Host latency: 1.20341 ms (enqueue 0.720386 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14279 ms - Host latency: 1.20404 ms (enqueue 0.689429 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14187 ms - Host latency: 1.20322 ms (enqueue 0.659839 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14177 ms - Host latency: 1.20433 ms (enqueue 0.697144 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14308 ms - Host latency: 1.20757 ms (enqueue 0.679883 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14144 ms - Host latency: 1.204 ms (enqueue 0.677527 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14432 ms - Host latency: 1.20797 ms (enqueue 0.647131 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14154 ms - Host latency: 1.20652 ms (enqueue 0.659021 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14327 ms - Host latency: 1.20457 ms (enqueue 0.721362 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14219 ms - Host latency: 1.2035 ms (enqueue 0.695007 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14247 ms - Host latency: 1.20375 ms (enqueue 0.703101 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14811 ms - Host latency: 1.20905 ms (enqueue 0.688147 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14329 ms - Host latency: 1.20479 ms (enqueue 0.68363 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14207 ms - Host latency: 1.20431 ms (enqueue 0.655811 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14441 ms - Host latency: 1.20873 ms (enqueue 0.748669 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15115 ms - Host latency: 1.21249 ms (enqueue 0.719312 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14884 ms - Host latency: 1.21035 ms (enqueue 0.758337 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14933 ms - Host latency: 1.21251 ms (enqueue 0.728979 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15009 ms - Host latency: 1.21229 ms (enqueue 0.750781 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14967 ms - Host latency: 1.21121 ms (enqueue 0.721741 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14797 ms - Host latency: 1.20935 ms (enqueue 0.726392 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14758 ms - Host latency: 1.2085 ms (enqueue 0.724573 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14976 ms - Host latency: 1.21111 ms (enqueue 0.70625 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14956 ms - Host latency: 1.2114 ms (enqueue 0.693628 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1484 ms - Host latency: 1.2113 ms (enqueue 0.717908 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15016 ms - Host latency: 1.21298 ms (enqueue 0.706726 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14844 ms - Host latency: 1.21119 ms (enqueue 0.718213 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14893 ms - Host latency: 1.21027 ms (enqueue 0.696863 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14935 ms - Host latency: 1.21289 ms (enqueue 0.662988 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14996 ms - Host latency: 1.21116 ms (enqueue 0.666565 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14934 ms - Host latency: 1.21072 ms (enqueue 0.710828 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14872 ms - Host latency: 1.2113 ms (enqueue 0.727893 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14893 ms - Host latency: 1.21074 ms (enqueue 0.69751 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15046 ms - Host latency: 1.21553 ms (enqueue 0.673096 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14818 ms - Host latency: 1.20941 ms (enqueue 0.698657 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14943 ms - Host latency: 1.21099 ms (enqueue 0.709241 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14865 ms - Host latency: 1.21071 ms (enqueue 0.683936 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14861 ms - Host latency: 1.21249 ms (enqueue 0.703088 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14984 ms - Host latency: 1.21351 ms (enqueue 0.6922 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14513 ms - Host latency: 1.20815 ms (enqueue 0.709875 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14326 ms - Host latency: 1.20458 ms (enqueue 0.696545 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14198 ms - Host latency: 1.20691 ms (enqueue 0.672986 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14585 ms - Host latency: 1.20876 ms (enqueue 0.668347 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14268 ms - Host latency: 1.20422 ms (enqueue 0.610132 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14319 ms - Host latency: 1.20684 ms (enqueue 0.676782 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14247 ms - Host latency: 1.20795 ms (enqueue 0.689124 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14298 ms - Host latency: 1.20582 ms (enqueue 0.649878 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14335 ms - Host latency: 1.20626 ms (enqueue 0.664539 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14318 ms - Host latency: 1.20713 ms (enqueue 0.737732 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14298 ms - Host latency: 1.20652 ms (enqueue 0.690857 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1438 ms - Host latency: 1.20513 ms (enqueue 0.692834 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14238 ms - Host latency: 1.20387 ms (enqueue 0.670142 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14133 ms - Host latency: 1.20211 ms (enqueue 0.665064 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14463 ms - Host latency: 1.20867 ms (enqueue 0.667432 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14105 ms - Host latency: 1.20347 ms (enqueue 0.64447 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14323 ms - Host latency: 1.20671 ms (enqueue 0.659827 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14146 ms - Host latency: 1.20388 ms (enqueue 0.698633 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14501 ms - Host latency: 1.20725 ms (enqueue 0.704041 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1432 ms - Host latency: 1.20487 ms (enqueue 0.704651 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14271 ms - Host latency: 1.20555 ms (enqueue 0.716479 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14226 ms - Host latency: 1.20509 ms (enqueue 0.731213 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14297 ms - Host latency: 1.20398 ms (enqueue 0.721033 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14227 ms - Host latency: 1.20378 ms (enqueue 0.712207 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14257 ms - Host latency: 1.20366 ms (enqueue 0.702466 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14384 ms - Host latency: 1.20565 ms (enqueue 0.685388 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14535 ms - Host latency: 1.20789 ms (enqueue 0.707727 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14257 ms - Host latency: 1.20498 ms (enqueue 0.706787 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14249 ms - Host latency: 1.20538 ms (enqueue 0.70542 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1429 ms - Host latency: 1.20406 ms (enqueue 0.676648 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14183 ms - Host latency: 1.20409 ms (enqueue 0.695117 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14194 ms - Host latency: 1.20394 ms (enqueue 0.707397 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14094 ms - Host latency: 1.20253 ms (enqueue 0.662793 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14187 ms - Host latency: 1.20291 ms (enqueue 0.623547 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14319 ms - Host latency: 1.20557 ms (enqueue 0.708301 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14178 ms - Host latency: 1.20437 ms (enqueue 0.724231 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14341 ms - Host latency: 1.20441 ms (enqueue 0.691223 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14258 ms - Host latency: 1.20438 ms (enqueue 0.695947 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14227 ms - Host latency: 1.20344 ms (enqueue 0.681104 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14167 ms - Host latency: 1.20309 ms (enqueue 0.720618 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14287 ms - Host latency: 1.20515 ms (enqueue 0.685925 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14166 ms - Host latency: 1.20458 ms (enqueue 0.694983 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14099 ms - Host latency: 1.20435 ms (enqueue 0.691528 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1418 ms - Host latency: 1.20415 ms (enqueue 0.65686 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14253 ms - Host latency: 1.20601 ms (enqueue 0.799878 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14309 ms - Host latency: 1.2062 ms (enqueue 0.793213 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14565 ms - Host latency: 1.20745 ms (enqueue 0.692529 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1439 ms - Host latency: 1.20645 ms (enqueue 0.663696 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14316 ms - Host latency: 1.20762 ms (enqueue 0.681958 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14207 ms - Host latency: 1.20642 ms (enqueue 0.650146 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14314 ms - Host latency: 1.20762 ms (enqueue 0.620239 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14458 ms - Host latency: 1.20459 ms (enqueue 0.531641 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14324 ms - Host latency: 1.20635 ms (enqueue 0.620435 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14219 ms - Host latency: 1.20457 ms (enqueue 0.637573 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14309 ms - Host latency: 1.20574 ms (enqueue 0.772852 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14177 ms - Host latency: 1.20354 ms (enqueue 0.727295 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14124 ms - Host latency: 1.20593 ms (enqueue 0.840503 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14255 ms - Host latency: 1.20356 ms (enqueue 0.581299 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14126 ms - Host latency: 1.20195 ms (enqueue 0.62688 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14099 ms - Host latency: 1.20232 ms (enqueue 0.644946 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14128 ms - Host latency: 1.20239 ms (enqueue 0.64126 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14351 ms - Host latency: 1.20591 ms (enqueue 0.730664 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14099 ms - Host latency: 1.20283 ms (enqueue 0.723437 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14167 ms - Host latency: 1.20464 ms (enqueue 0.605005 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14167 ms - Host latency: 1.20293 ms (enqueue 0.555322 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14172 ms - Host latency: 1.20378 ms (enqueue 0.615112 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14277 ms - Host latency: 1.20642 ms (enqueue 0.601538 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14382 ms - Host latency: 1.2051 ms (enqueue 0.603638 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1427 ms - Host latency: 1.2064 ms (enqueue 0.660986 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14324 ms - Host latency: 1.20552 ms (enqueue 0.696948 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1436 ms - Host latency: 1.20554 ms (enqueue 0.733203 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14211 ms - Host latency: 1.20376 ms (enqueue 0.687769 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14248 ms - Host latency: 1.2054 ms (enqueue 0.679639 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14504 ms - Host latency: 1.20759 ms (enqueue 0.65022 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1437 ms - Host latency: 1.20527 ms (enqueue 0.723169 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14995 ms - Host latency: 1.2116 ms (enqueue 0.704956 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.151 ms - Host latency: 1.21372 ms (enqueue 0.686694 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14919 ms - Host latency: 1.21082 ms (enqueue 0.697852 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.149 ms - Host latency: 1.21042 ms (enqueue 0.688477 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14895 ms - Host latency: 1.21089 ms (enqueue 0.664429 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15012 ms - Host latency: 1.21147 ms (enqueue 0.647583 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15039 ms - Host latency: 1.21272 ms (enqueue 0.584131 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15044 ms - Host latency: 1.2126 ms (enqueue 0.518481 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15164 ms - Host latency: 1.21484 ms (enqueue 0.586377 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15107 ms - Host latency: 1.21316 ms (enqueue 0.727173 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15017 ms - Host latency: 1.21155 ms (enqueue 0.711694 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15007 ms - Host latency: 1.21265 ms (enqueue 0.704053 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15034 ms - Host latency: 1.21191 ms (enqueue 0.713062 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14946 ms - Host latency: 1.21079 ms (enqueue 0.706592 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14832 ms - Host latency: 1.21086 ms (enqueue 0.748608 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14968 ms - Host latency: 1.21125 ms (enqueue 0.712622 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14924 ms - Host latency: 1.20996 ms (enqueue 0.683716 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.149 ms - Host latency: 1.21199 ms (enqueue 0.699561 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14971 ms - Host latency: 1.21755 ms (enqueue 0.724756 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14973 ms - Host latency: 1.2123 ms (enqueue 0.701636 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14949 ms - Host latency: 1.21086 ms (enqueue 0.696851 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14873 ms - Host latency: 1.20984 ms (enqueue 0.685156 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.15127 ms - Host latency: 1.21292 ms (enqueue 0.696387 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1502 ms - Host latency: 1.21204 ms (enqueue 0.699292 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14636 ms - Host latency: 1.2074 ms (enqueue 0.687402 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14346 ms - Host latency: 1.20452 ms (enqueue 0.686646 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14216 ms - Host latency: 1.20486 ms (enqueue 0.722998 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14248 ms - Host latency: 1.20515 ms (enqueue 0.718799 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14211 ms - Host latency: 1.20376 ms (enqueue 0.691284 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14348 ms - Host latency: 1.20461 ms (enqueue 0.640356 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14045 ms - Host latency: 1.2033 ms (enqueue 0.759644 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14331 ms - Host latency: 1.20449 ms (enqueue 0.735645 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14136 ms - Host latency: 1.20281 ms (enqueue 0.712134 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14099 ms - Host latency: 1.20186 ms (enqueue 0.684814 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14353 ms - Host latency: 1.20581 ms (enqueue 0.709253 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14253 ms - Host latency: 1.20757 ms (enqueue 0.69895 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14207 ms - Host latency: 1.2051 ms (enqueue 0.67229 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14409 ms - Host latency: 1.21067 ms (enqueue 0.664478 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1426 ms - Host latency: 1.20449 ms (enqueue 0.68313 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14265 ms - Host latency: 1.20662 ms (enqueue 0.717017 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14258 ms - Host latency: 1.2042 ms (enqueue 0.678711 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14387 ms - Host latency: 1.20632 ms (enqueue 0.632373 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14297 ms - Host latency: 1.20986 ms (enqueue 0.69939 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14255 ms - Host latency: 1.20408 ms (enqueue 0.640991 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1425 ms - Host latency: 1.20747 ms (enqueue 0.653931 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14165 ms - Host latency: 1.20442 ms (enqueue 0.725781 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14167 ms - Host latency: 1.20256 ms (enqueue 0.698462 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14102 ms - Host latency: 1.20249 ms (enqueue 0.711816 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14482 ms - Host latency: 1.20696 ms (enqueue 0.706055 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14194 ms - Host latency: 1.20342 ms (enqueue 0.678467 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14089 ms - Host latency: 1.20234 ms (enqueue 0.721216 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14155 ms - Host latency: 1.20303 ms (enqueue 0.700317 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14109 ms - Host latency: 1.20378 ms (enqueue 0.701904 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14197 ms - Host latency: 1.20603 ms (enqueue 0.697729 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1418 ms - Host latency: 1.20352 ms (enqueue 0.697778 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14282 ms - Host latency: 1.20447 ms (enqueue 0.686914 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.1449 ms - Host latency: 1.20918 ms (enqueue 0.672437 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14299 ms - Host latency: 1.20823 ms (enqueue 0.688672 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14236 ms - Host latency: 1.20366 ms (enqueue 0.68584 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14368 ms - Host latency: 1.20764 ms (enqueue 0.674365 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14185 ms - Host latency: 1.20254 ms (enqueue 0.648682 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14158 ms - Host latency: 1.20249 ms (enqueue 0.708667 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14297 ms - Host latency: 1.20481 ms (enqueue 0.704248 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14358 ms - Host latency: 1.2052 ms (enqueue 0.709033 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14094 ms - Host latency: 1.2019 ms (enqueue 0.701807 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14277 ms - Host latency: 1.204 ms (enqueue 0.708667 ms)\n", + "[08/09/2024-23:12:04] [I] Average on 10 runs - GPU latency: 1.14297 ms - Host latency: 1.20444 ms (enqueue 0.705786 ms)\n", + "[08/09/2024-23:12:04] [I] \n", + "[08/09/2024-23:12:04] [I] === Performance summary ===\n", + "[08/09/2024-23:12:04] [I] Throughput: 873.17 qps\n", + "[08/09/2024-23:12:04] [I] Latency: min = 1.18591 ms, max = 1.36273 ms, mean = 1.20476 ms, median = 1.2041 ms, percentile(90%) = 1.21265 ms, percentile(95%) = 1.21558 ms, percentile(99%) = 1.22229 ms\n", + "[08/09/2024-23:12:04] [I] Enqueue Time: min = 0.250732 ms, max = 1.58789 ms, mean = 0.682948 ms, median = 0.69696 ms, percentile(90%) = 0.746094 ms, percentile(95%) = 0.783936 ms, percentile(99%) = 0.883545 ms\n", + "[08/09/2024-23:12:04] [I] H2D Latency: min = 0.0541382 ms, max = 0.09375 ms, mean = 0.057872 ms, median = 0.0571289 ms, percentile(90%) = 0.0585938 ms, percentile(95%) = 0.0678711 ms, percentile(99%) = 0.0698242 ms\n", + "[08/09/2024-23:12:04] [I] GPU Compute Time: min = 1.12744 ms, max = 1.30353 ms, mean = 1.14253 ms, median = 1.14185 ms, percentile(90%) = 1.1499 ms, percentile(95%) = 1.151 ms, percentile(99%) = 1.15405 ms\n", + "[08/09/2024-23:12:04] [I] D2H Latency: min = 0.00341797 ms, max = 0.0123291 ms, mean = 0.00436357 ms, median = 0.00415039 ms, percentile(90%) = 0.00537109 ms, percentile(95%) = 0.00561523 ms, percentile(99%) = 0.00817871 ms\n", + "[08/09/2024-23:12:04] [I] Total Host Walltime: 3.00285 s\n", + "[08/09/2024-23:12:04] [I] Total GPU Compute Time: 2.99571 s\n", + "[08/09/2024-23:12:04] [I] Explanations of the performance metrics are printed in the verbose logs.\n", + "[08/09/2024-23:12:04] [I] \n", + "&&&& PASSED TensorRT.trtexec [TensorRT v100300] # trtexec --onnx=resnet50/model.onnx --saveEngine=resnet_engine_intro.engine\n" ] } ], "source": [ - "!trtexec --onnx=resnet50/model.onnx --saveEngine=resnet_engine_intro.trt --explicitBatch" + "!trtexec --onnx=resnet50/model.onnx --saveEngine=resnet_engine_intro.engine " ] }, { @@ -479,34 +630,50 @@ "\n", "Tell trtexec where to save our optimized TensorRT engine:\n", "\n", - " --saveEngine=resnet_engine_intro.trt\n", - "\n", - "Tell trtexec to expect a fixed batch size when optimizing (the exact value of this batch size will be inferred from the ONNX file)\n", - "\n", - " --explicitBatch" + " --saveEngine=resnet_engine_intro.engine\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### 5. What runtime will I use?\n", + "#### 4. What runtime will I use?\n", "\n", "After we have our TensorRT engine created successfully, we need to decide how to run it with TensorRT.\n", "\n", - "There are two types of TensorRT runtimes: a standalone runtime which has C++ and Python bindings, and a native integration into TensorFlow. In this section, we will use a simplified wrapper (ONNXClassifierWrapper) which calls the standalone runtime. " + "There are two types of TensorRT runtimes: a standalone runtime which has C++ and Python bindings, and a native integration into PyTorch. In this section, we will use a simplified wrapper (ONNXClassifierWrapper) which calls the standalone runtime. " ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: numpy<2.0 in /home/trtuser/.local/lib/python3.10/site-packages (1.26.4)\n", + "\u001b[33mWARNING: Error parsing dependencies of devscripts: Invalid version: '2.22.1ubuntu1'\u001b[0m\u001b[33m\n", + "\u001b[0m" + ] + } + ], + "source": [ + "!python3 -m pip install \"numpy<2.0\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ - "# If you get an error in this cell, restart your notebook (possibly your whole machine) and do not run anything that imports/uses Tensorflow/PyTorch\n", + "# If you get an error in this cell, restart your notebook (possibly your whole machine) and do not run anything that imports/uses PyTorch\n", "\n", "from onnx_helper import ONNXClassifierWrapper\n", - "trt_model = ONNXClassifierWrapper(\"resnet_engine_intro.trt\", [BATCH_SIZE, 1000], target_dtype = PRECISION)" + "trt_model = ONNXClassifierWrapper(\"resnet_engine_intro.engine\", target_dtype = PRECISION)" ] }, { @@ -520,25 +687,25 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([1.6954490e-04, 6.5457245e-04, 7.4289841e-05, 5.2106294e-05,\n", - " 1.2014447e-04, 2.3334271e-04, 1.8507861e-05, 1.9884911e-04,\n", - " 5.1907176e-05, 4.5095466e-04], dtype=float32)" + "array([1.6979914e-04, 6.5189815e-04, 7.4759657e-05, 5.2728519e-05,\n", + " 1.2118524e-04, 2.3333427e-04, 1.8690433e-05, 2.0056585e-04,\n", + " 5.2347525e-05, 4.5492270e-04], dtype=float32)" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Warm up:\n", - "trt_model.predict(dummy_input_batch)[0][:10] # softmax probability predictions for the first 10 classes of the first sample" + "trt_model.predict(dummy_input_batch)[:10] # softmax probability predictions for the first 10 classes of the first sample" ] }, { @@ -550,20 +717,20 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "3.91 ms ± 533 ns per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + "1.22 ms ± 3.39 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" ] } ], "source": [ "%%timeit\n", - "trt_model.predict(dummy_input_batch)[0][:10]" + "trt_model.predict(dummy_input_batch)[:10]" ] }, { @@ -585,39 +752,20 @@ "\n", "TensorRT is compatible with models consisting of [these layers](https://docs.nvidia.com/deeplearning/tensorrt/support-matrix/index.html#layers-matrix). Using only supported layers ensures optimal performance without having to write any custom plugin code.\n", "\n", - "In terms of framework, TensorRT is integrated directly with Tensorflow - and most other major deep learning frameworks, such as PyTorch, are supported by first converting to ONNX format.\n", + "In terms of framework, TensorRT is integrated directly with PyTorch - and most other major deep learning frameworks are supported by first converting to ONNX format.\n", "\n", - "### __Conversion Methods:__ ONNX/TF-TRT/TensorRT API\n", + "### __Conversion Methods:__ ONNX/TensorRT API\n", "\n", "The __ONNX__ path is the most performant and framework-agnostic automatic way of converting models. It's main disadvantage is that it must convert networks completely - if a network has an unsupported layer ONNX can't convert it unless you write a custom plugin.\n", "\n", "You can see an example of how to use TensorRT with ONNX:\n", - "- [Here](./3.%20Using%20Tensorflow%202%20through%20ONNX.ipynb) in this guide for Tensorflow\n", - "- [Here](./4.%20Using%20PyTorch%20through%20ONNX.ipynb) in this guide for PyTorch\n", - "\n", - "__TF-TRT__ is a high level API for automatically converting Tensorflow models. It contains a parser, and runs inside the default Tensorflow runtime. Its ease of use and flexibility are its biggest advantages. TF-TRT can convert Tensorflow networks with unsupported layers in them - it will optimize whatever operations it can, and will leave the rest of the network alone.\n", + "- [Here](./2.%20Using%20PyTorch%20through%20ONNX.ipynb) in this guide for PyTorch\n", "\n", - "You can find an example included with this guide of using TF-TRT to convert and run a model [here]((./2.%20Using%20the%20Tensorflow%20TensorRT%20Integration.ipynb)).\n", - "\n", - "Last, there is the __TensorRT API__. The TensorRT ONNX path and TF-TRT integration both automatically convert models to TensorRT engines for you. Sometimes, however, we want to convert something complex, or have the maximum amount of control in how our TensorRT engine is created. This let's us do things like using dynamic batch dimensions outside of TF-TRT, or create custom plugins for layers that TensorRT doesn't support. \n", + "There is the __TensorRT API__. The TensorRT ONNX path automatically convert models to TensorRT engines for you. Sometimes, however, we want to convert something complex, or have the maximum amount of control in how our TensorRT engine is created. This let's us do things like creating custom plugins for layers that TensorRT doesn't support. \n", "\n", "When using this approach, we create TensorRT engine manually operation-by-operation using the TensorRT API's available in Python and C++. This process involves building a network identical in structure to your target network using the TensorRT API, and then loading in the weights directly in proper format. You can find more details on this [in the TensorRT documentation](https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#c_topics).\n", "\n", - "### __Batch Size:__ Prioritize Latency/Prioritize Throughput, Fixed Batch Size/Dynamic Batch Size\n", - "\n", - "Batch size determination is usually based on the tradeoff between throughput and latency. If you need low latency, use a low batch size. If you prefer high throughput and can accept higher latency, you can use a large batch size instead.\n", - "\n", - "TensorRT has two batch size modes: __explicit__ and __dynamic__. \n", - "\n", - "__Explicit batch networks__ accept a fixed predetermined batch size. Explicit batch mode is useful if you know exactly what batch size you expect - as it lets you skip the added step of specifying an optimization profile. This mode is required when converting networks through the ONNX path, as opposed to TF-TRT and the TensorRT API.\n", - "\n", - "You can see an example of setting an explicit batch size in either of the ONNX notebooks listed above.\n", - "\n", - "__Dynamic shape networks__ can accept a range of batch sizes. You must provide an '__optimization profile__' when using dynamic shapes in order to specify the possible range of batch sizes you expect to recieve. This is required because TensorRT does a lot of batch-size specific optimizations.\n", - "\n", - "For more information on best practices regarding batching, see the [TensorRT best practices guide](https://docs.nvidia.com/deeplearning/tensorrt/best-practices/index.html#batching).\n", - "\n", - "### __Precision:__ TF32/FP32/FP16/INT8\n", + "### __Precision:__ TF32/FP32/FP16/INT8/FP8\n", "\n", "TensorRT feature support - such as precision - for NVIDIA GPUs is determined by their __compute capability__. You can check the compute cabapility of your card on the [NVIDIA website](https://developer.nvidia.com/cuda-gpus).\n", "\n", @@ -633,9 +781,11 @@ "\n", "__INT8__ is an inference focused reduced precision. It further reduces memory requirements and latency compared to FP16. INT8 has the potential to lose more accuracy than FP16 - but TensorRT provides tools to help you quantize your network's INT8 weights to avoid this as much as possible. INT8 requires the extra step of calibrating how TensorRT should quantize your weights to integers - requiring some sample data. With careful tuning and a good calibration dataset, accuracy loss from INT8 is often minimal. This makes INT8 a great precision for lower-power environments such as those using T4 GPUs or AGX Jetson modules - both of which have strong INT8 capabilities.\n", "\n", - "### __Runtime:__ TF-TRT/Python API/C++ API/TRITON\n", + "__FP8__ 8-bit floating point type with 1-bit for sign, 4-bits for exponent, 3-bits for mantissa is an inference focused reduced precision. Similar to INT8, it further reduces memory requirements and latency compared to FP16 with potential suffer from precision loss, especially in deep models with large ranges of values. Extra steps of calibration are needed to minimize accuracy loss. The FP8 precision is supported on NVIDIA GPUs with compute cabapilities of 9.0 and higher (e.g. NVIDIA H100 and later). \n", + "\n", + "### __Runtime:__ Torch-TRT/Python API/C++ API/TRITON\n", "\n", - "For a more in depth discussion of these options and how they compare see [this notebook on TensorRT Runtimes!](./Intro_Notebooks/3.Runtimes.ipynb)" + "For a more in depth discussion of these options and how they compare see [this notebook on TensorRT Runtimes!](./3.%20Understanding%20TensorRT%20Runtimes.ipynb)" ] }, { @@ -652,12 +802,11 @@ "Here are several steps you can try if your model is not converting to TensorRT properly:\n", "\n", "1. Check the logs - if you are using a tool such as trtexec to convert your model, it will tell you which layer is problematic\n", - "2. Write a custom plugin - you can find more information on it [here]().\n", - "3. Alternatively, if you are using ONNX and Tensorflow try switching to TF-TRT - it can support partial Tensorflow graph optimizations\n", - "4. Use alternative implementations of the layers or operations in question in your network definition - for example, it can be easier to use the padding argument in your convolutional layers instead of adding an explicit padding layer to the network. \n", - "5. TF-TRT can be harder to debug, but tools like graph surgeon https://docs.nvidia.com/deeplearning/tensorrt/api/python_api/graphsurgeon/graphsurgeon.html can help you fix specific nodes in your graph as well as pull it apart for analysis or patch specific nodes in your graph\n", - "6. Ask on the [NVIDIA developer forums](https://forums.developer.nvidia.com/c/ai-data-science/deep-learning/tensorrt) - we have many active TensorRT experts at NVIDIA who who browse the forums and can help\n", - "7. Post an issue on the [TensorRT OSS Github](https://github.com/NVIDIA/TensorRT)" + "2. Write a custom plugin - you can find more information on it [here](https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#extending).\n", + "3. Use alternative implementations of the layers or operations in question in your network definition - for example, it can be easier to use the padding argument in your convolutional layers instead of adding an explicit padding layer to the network. \n", + "4. ONNX to TensorRT conversion can be hard to debug, but tools like graph surgeon https://docs.nvidia.com/deeplearning/tensorrt/api/python_api/graphsurgeon/graphsurgeon.html can help you fix specific nodes in your graph as well as pull it apart for analysis or patch specific nodes in your graph\n", + "5. Ask on the [NVIDIA developer forums](https://forums.developer.nvidia.com/c/ai-data-science/deep-learning/tensorrt) - we have many active TensorRT experts at NVIDIA who who browse the forums and can help\n", + "6. Post an issue on the [TensorRT OSS Github](https://github.com/NVIDIA/TensorRT)" ] }, { @@ -670,10 +819,8 @@ "\n", "Now, you can check out the remaining notebooks in this guide. See:\n", "\n", - "- [2. Using the TF-TRT Tensorflow Integration](./2.%20Using%20the%20Tensorflow%20TensorRT%20Integration.ipynb)\n", - "- [3. Using Tensorflow 2 through ONNX.ipynb](./3.%20Using%20Tensorflow%202%20through%20ONNX.ipynb)\n", - "- [4. Using PyTorch through ONNX.ipynb](./4.%20Using%20PyTorch%20through%20ONNX.ipynb)\n", - "- [5. Understanding TensorRT Runtimes.ipynb](./5.%20Understanding%20TensorRT%20Runtimes.ipynb)" + "- [2. Using PyTorch through ONNX.ipynb](./2.%20Using%20PyTorch%20through%20ONNX.ipynb)\n", + "- [3. Understanding TensorRT Runtimes.ipynb](./3.%20Understanding%20TensorRT%20Runtimes.ipynb)" ] }, { @@ -684,7 +831,7 @@ "\n", "This is a great next step for further optimizing and debugging models you are working on productionizing\n", "\n", - "You can find it here: https://docs.nvidia.com/deeplearning/tensorrt/best-practices/index.html\n", + "You can find it here: https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#performance\n", "\n", "

TRT Dev Docs

\n", "\n", @@ -702,7 +849,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -716,7 +863,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/quickstart/IntroNotebooks/2. Using PyTorch through ONNX.ipynb b/quickstart/IntroNotebooks/2. Using PyTorch through ONNX.ipynb new file mode 100644 index 00000000..ed395e17 --- /dev/null +++ b/quickstart/IntroNotebooks/2. Using PyTorch through ONNX.ipynb @@ -0,0 +1,1066 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Using PyTorch with TensorRT through ONNX:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "TensorRT is a great way to take a trained PyTorch model and optimize it to run more efficiently during inference on an NVIDIA GPU.\n", + "\n", + "One approach to convert a PyTorch model to TensorRT is to export a PyTorch model to ONNX (an open format exchange for deep learning models) and then convert into a TensorRT engine. Essentially, we will follow this path to convert and deploy our model:\n", + "\n", + "![PyTorch+ONNX](./images/pytorch_onnx.png)\n", + "\n", + "Both PyTorch and TensorFlow models can be exported to ONNX, as well as many other frameworks. This allows models created using either framework to flow into common downstream pipelines.\n", + "\n", + "To get started, let's take a well-known computer vision model and follow five key steps to deploy it to the TensorRT Python runtime:\n", + "\n", + "1. __What format should I save my model in?__\n", + "2. __What batch size(s) am I running inference at?__\n", + "3. __What precision am I running inference at?__\n", + "4. __What TensorRT path am I using to convert my model?__\n", + "5. __What runtime am I targeting?__" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. What format should I save my model in?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We are going to use ResNet50, a widely used CNN architecture first described in this paper.\n", + "\n", + "Let's start by loading dependencies and downloading the model. We will also move our Resnet model onto the GPU and set it to evaluation mode." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/trtuser/.local/lib/python3.10/site-packages/torchvision/models/_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n", + " warnings.warn(\n", + "/home/trtuser/.local/lib/python3.10/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet50_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet50_Weights.DEFAULT` to get the most up-to-date weights.\n", + " warnings.warn(msg)\n" + ] + } + ], + "source": [ + "import torchvision.models as models\n", + "import torch\n", + "import torch.onnx\n", + "\n", + "# load the pretrained model\n", + "resnet50 = models.resnet50(pretrained=True, progress=False).eval()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When saving a model to ONNX, PyTorch requires a test batch in proper shape and format. We pick a batch size:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "BATCH_SIZE=32\n", + "\n", + "dummy_input=torch.randn(BATCH_SIZE, 3, 224, 224)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will export the model using the dummy input batch:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# export the model to ONNX\n", + "torch.onnx.export(resnet50, dummy_input, \"resnet50_pytorch.onnx\", verbose=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we are picking a BATCH_SIZE of 32 in this example." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now Test with a Real Image:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's try a real image batch! For this example, we will simply repeat one open-source dog image from http://www.dog.ceo:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(32, 224, 224, 3)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from skimage import io\n", + "from skimage.transform import resize\n", + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "\n", + "url='https://images.dog.ceo/breeds/retriever-golden/n02099601_3004.jpg'\n", + "img = resize(io.imread(url), (224, 224))\n", + "img = np.expand_dims(np.array(img, dtype=np.float32), axis=0) # Expand image to have a batch dimension\n", + "input_batch = np.array(np.repeat(img, BATCH_SIZE, axis=0), dtype=np.float32) # Repeat across the batch dimension\n", + "\n", + "input_batch.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(input_batch[0].astype(np.float32))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/trtuser/.local/lib/python3.10/site-packages/torchvision/models/_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n", + " warnings.warn(\n", + "/home/trtuser/.local/lib/python3.10/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet50_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet50_Weights.DEFAULT` to get the most up-to-date weights.\n", + " warnings.warn(msg)\n" + ] + } + ], + "source": [ + "resnet50_gpu = models.resnet50(pretrained=True, progress=False).to(\"cuda\").eval()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We need to move our batch onto GPU and properly format it to shape [32, 3, 224, 224]. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([32, 3, 224, 224])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "input_batch_chw = torch.from_numpy(input_batch).transpose(1,3).transpose(2,3)\n", + "input_batch_gpu = input_batch_chw.to(\"cuda\")\n", + "\n", + "input_batch_gpu.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can run a prediction on a batch using .forward():" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(32, 1000)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with torch.no_grad():\n", + " predictions = np.array(resnet50_gpu(input_batch_gpu).cpu())\n", + "\n", + "predictions.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Verify Baseline Model Performance/Accuracy:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a baseline, lets time our prediction in FP32:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "22.2 ms ± 27.2 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "with torch.no_grad():\n", + " preds = np.array(resnet50_gpu(input_batch_gpu).cpu())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also time FP16 precision performance:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(32, 1000)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "resnet50_gpu_half = resnet50_gpu.half()\n", + "input_half = input_batch_gpu.half()\n", + "\n", + "with torch.no_grad():\n", + " preds = np.array(resnet50_gpu_half(input_half).cpu()) # Warm Up\n", + " \n", + "preds.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "11 ms ± 21.6 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "with torch.no_grad():\n", + " preds = np.array(resnet50_gpu_half(input_half).cpu())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's also make sure our results are accurate. We will look at the top 5 accuracy on a single image prediction. The image we are using is of a Golden Retriever, which is class 207 in the ImageNet dataset our model was trained on." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Class | Likelihood\n" + ] + }, + { + "data": { + "text/plain": [ + "[(207, 13.216685),\n", + " (208, 9.681775),\n", + " (257, 9.401826),\n", + " (205, 8.851855),\n", + " (256, 8.663586)]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "indices = (-predictions[0]).argsort()[:5]\n", + "print(\"Class | Likelihood\")\n", + "list(zip(indices, predictions[0][indices]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have a model exported to ONNX and a baseline to compare against! Let's now take our ONNX model and convert it to a TensorRT inference engine." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. What batch size(s) am I running inference at?\n", + "\n", + "We are going to run with a fixed batch size of 32 for this example. Note that above we set BATCH_SIZE to 32 when saving our model to ONNX. We need to create another dummy batch of the same size (this time it will need to be in our target precision) to test out our engine.\n", + "\n", + "First, as before, we will set our BATCH_SIZE to 32. Note that our trtexec command above includes the '--explicitBatch' flag to signal to TensorRT that we will be using a fixed batch size at runtime." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "BATCH_SIZE = 32" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Importantly, by default TensorRT will use the input precision you give the runtime as the default precision for the rest of the network. So before we create our new dummy batch, we also need to choose a precision as in the next section:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. What precision am I running inference at?\n", + "\n", + "Remember that lower precisions than FP32 tend to run faster. There are two common reduced precision modes - FP16 and INT8. Graphics cards that are designed to do inference well often have an affinity for one of these two types. This guide was developed on an NVIDIA V100, which favors FP16, so we will use that here by default. INT8 is a more complicated process that requires a calibration step.\n", + "\n", + "__NOTE__: Make sure you use the same precision (USE_FP16) here you saved your model in above!" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "USE_FP16 = True\n", + "target_dtype = np.float16 if USE_FP16 else np.float32" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " To create a test batch, we will once again repeat one open-source dog image from http://www.dog.ceo:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(32, 224, 224, 3)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from skimage import io\n", + "from skimage.transform import resize\n", + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "\n", + "url='https://images.dog.ceo/breeds/retriever-golden/n02099601_3004.jpg'\n", + "img = resize(io.imread(url), (224, 224))\n", + "input_batch = np.array(np.repeat(np.expand_dims(np.array(img, dtype=np.float32), axis=0), BATCH_SIZE, axis=0), dtype=np.float32)\n", + "\n", + "input_batch.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(input_batch[0].astype(np.float32))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Preprocess Images:\n", + "\n", + "PyTorch has a normalization that it applies by default in all of its pretrained vision models - we can preprocess our images to match this normalization by the following, making sure our final result is in FP16 precision:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "from torchvision.transforms import Normalize\n", + "\n", + "def preprocess_image(img):\n", + " norm = Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n", + " result = norm(torch.from_numpy(img).transpose(0,2).transpose(1,2))\n", + " return np.array(result, dtype=np.float16)\n", + "\n", + "preprocessed_images = np.array([preprocess_image(image) for image in input_batch])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. What TensorRT path am I using to convert my model?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use trtexec, a command line tool for working with TensorRT, in order to convert an ONNX model originally from PyTorch to an engine file.\n", + "\n", + "Let's make sure we have TensorRT installed (this comes with trtexec):" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorrt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To convert the model we saved in the previous step, we need to point to the ONNX file, give trtexec a name to save the engine as, and last specify that we want to use a fixed batch size instead of a dynamic one." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "&&&& RUNNING TensorRT.trtexec [TensorRT v100300] # /workspace/TensorRT/build/out/trtexec --onnx=resnet50_pytorch.onnx --saveEngine=resnet_engine_pytorch.trt --inputIOFormats=fp16:chw --outputIOFormats=fp16:chw --fp16\n", + "[08/09/2024-23:19:08] [I] === Model Options ===\n", + "[08/09/2024-23:19:08] [I] Format: ONNX\n", + "[08/09/2024-23:19:08] [I] Model: resnet50_pytorch.onnx\n", + "[08/09/2024-23:19:08] [I] Output:\n", + "[08/09/2024-23:19:08] [I] === Build Options ===\n", + "[08/09/2024-23:19:08] [I] Memory Pools: workspace: default, dlaSRAM: default, dlaLocalDRAM: default, dlaGlobalDRAM: default, tacticSharedMem: default\n", + "[08/09/2024-23:19:08] [I] avgTiming: 8\n", + "[08/09/2024-23:19:08] [I] Precision: FP32+FP16\n", + "[08/09/2024-23:19:08] [I] LayerPrecisions: \n", + "[08/09/2024-23:19:08] [I] Layer Device Types: \n", + "[08/09/2024-23:19:08] [I] Calibration: \n", + "[08/09/2024-23:19:08] [I] Refit: Disabled\n", + "[08/09/2024-23:19:08] [I] Strip weights: Disabled\n", + "[08/09/2024-23:19:08] [I] Version Compatible: Disabled\n", + "[08/09/2024-23:19:08] [I] ONNX Plugin InstanceNorm: Disabled\n", + "[08/09/2024-23:19:08] [I] TensorRT runtime: full\n", + "[08/09/2024-23:19:08] [I] Lean DLL Path: \n", + "[08/09/2024-23:19:08] [I] Tempfile Controls: { in_memory: allow, temporary: allow }\n", + "[08/09/2024-23:19:08] [I] Exclude Lean Runtime: Disabled\n", + "[08/09/2024-23:19:08] [I] Sparsity: Disabled\n", + "[08/09/2024-23:19:08] [I] Safe mode: Disabled\n", + "[08/09/2024-23:19:08] [I] Build DLA standalone loadable: Disabled\n", + "[08/09/2024-23:19:08] [I] Allow GPU fallback for DLA: Disabled\n", + "[08/09/2024-23:19:08] [I] DirectIO mode: Disabled\n", + "[08/09/2024-23:19:08] [I] Restricted mode: Disabled\n", + "[08/09/2024-23:19:08] [I] Skip inference: Disabled\n", + "[08/09/2024-23:19:08] [I] Save engine: resnet_engine_pytorch.trt\n", + "[08/09/2024-23:19:08] [I] Load engine: \n", + "[08/09/2024-23:19:08] [I] Profiling verbosity: 0\n", + "[08/09/2024-23:19:08] [I] Tactic sources: Using default tactic sources\n", + "[08/09/2024-23:19:08] [I] timingCacheMode: local\n", + "[08/09/2024-23:19:08] [I] timingCacheFile: \n", + "[08/09/2024-23:19:08] [I] Enable Compilation Cache: Enabled\n", + "[08/09/2024-23:19:08] [I] errorOnTimingCacheMiss: Disabled\n", + "[08/09/2024-23:19:08] [I] Preview Features: Use default preview flags.\n", + "[08/09/2024-23:19:08] [I] MaxAuxStreams: -1\n", + "[08/09/2024-23:19:08] [I] BuilderOptimizationLevel: -1\n", + "[08/09/2024-23:19:08] [I] Calibration Profile Index: 0\n", + "[08/09/2024-23:19:08] [I] Weight Streaming: Disabled\n", + "[08/09/2024-23:19:08] [I] Runtime Platform: Same As Build\n", + "[08/09/2024-23:19:08] [I] Debug Tensors: \n", + "[08/09/2024-23:19:08] [I] Input(s): fp16:chw\n", + "[08/09/2024-23:19:08] [I] Output(s): fp16:chw\n", + "[08/09/2024-23:19:08] [I] Input build shapes: model\n", + "[08/09/2024-23:19:08] [I] Input calibration shapes: model\n", + "[08/09/2024-23:19:08] [I] === System Options ===\n", + "[08/09/2024-23:19:08] [I] Device: 0\n", + "[08/09/2024-23:19:08] [I] DLACore: \n", + "[08/09/2024-23:19:08] [I] Plugins:\n", + "[08/09/2024-23:19:08] [I] setPluginsToSerialize:\n", + "[08/09/2024-23:19:08] [I] dynamicPlugins:\n", + "[08/09/2024-23:19:08] [I] ignoreParsedPluginLibs: 0\n", + "[08/09/2024-23:19:08] [I] \n", + "[08/09/2024-23:19:08] [I] === Inference Options ===\n", + "[08/09/2024-23:19:08] [I] Batch: Explicit\n", + "[08/09/2024-23:19:08] [I] Input inference shapes: model\n", + "[08/09/2024-23:19:08] [I] Iterations: 10\n", + "[08/09/2024-23:19:08] [I] Duration: 3s (+ 200ms warm up)\n", + "[08/09/2024-23:19:08] [I] Sleep time: 0ms\n", + "[08/09/2024-23:19:08] [I] Idle time: 0ms\n", + "[08/09/2024-23:19:08] [I] Inference Streams: 1\n", + "[08/09/2024-23:19:08] [I] ExposeDMA: Disabled\n", + "[08/09/2024-23:19:08] [I] Data transfers: Enabled\n", + "[08/09/2024-23:19:08] [I] Spin-wait: Disabled\n", + "[08/09/2024-23:19:08] [I] Multithreading: Disabled\n", + "[08/09/2024-23:19:08] [I] CUDA Graph: Disabled\n", + "[08/09/2024-23:19:08] [I] Separate profiling: Disabled\n", + "[08/09/2024-23:19:08] [I] Time Deserialize: Disabled\n", + "[08/09/2024-23:19:08] [I] Time Refit: Disabled\n", + "[08/09/2024-23:19:08] [I] NVTX verbosity: 0\n", + "[08/09/2024-23:19:08] [I] Persistent Cache Ratio: 0\n", + "[08/09/2024-23:19:08] [I] Optimization Profile Index: 0\n", + "[08/09/2024-23:19:08] [I] Weight Streaming Budget: 100.000000%\n", + "[08/09/2024-23:19:08] [I] Inputs:\n", + "[08/09/2024-23:19:08] [I] Debug Tensor Save Destinations:\n", + "[08/09/2024-23:19:08] [I] === Reporting Options ===\n", + "[08/09/2024-23:19:08] [I] Verbose: Disabled\n", + "[08/09/2024-23:19:08] [I] Averages: 10 inferences\n", + "[08/09/2024-23:19:08] [I] Percentiles: 90,95,99\n", + "[08/09/2024-23:19:08] [I] Dump refittable layers:Disabled\n", + "[08/09/2024-23:19:08] [I] Dump output: Disabled\n", + "[08/09/2024-23:19:08] [I] Profile: Disabled\n", + "[08/09/2024-23:19:08] [I] Export timing to JSON file: \n", + "[08/09/2024-23:19:08] [I] Export output to JSON file: \n", + "[08/09/2024-23:19:08] [I] Export profile to JSON file: \n", + "[08/09/2024-23:19:08] [I] \n", + "[08/09/2024-23:19:08] [I] === Device Information ===\n", + "[08/09/2024-23:19:08] [I] Available Devices: \n", + "[08/09/2024-23:19:08] [I] Device 0: \"NVIDIA RTX A5000\" UUID: GPU-bd38339f-9e6e-7f34-17ad-c1123627120b\n", + "[08/09/2024-23:19:08] [I] Selected Device: NVIDIA RTX A5000\n", + "[08/09/2024-23:19:08] [I] Selected Device ID: 0\n", + "[08/09/2024-23:19:08] [I] Selected Device UUID: GPU-bd38339f-9e6e-7f34-17ad-c1123627120b\n", + "[08/09/2024-23:19:08] [I] Compute Capability: 8.6\n", + "[08/09/2024-23:19:08] [I] SMs: 64\n", + "[08/09/2024-23:19:08] [I] Device Global Memory: 24238 MiB\n", + "[08/09/2024-23:19:08] [I] Shared Memory per SM: 100 KiB\n", + "[08/09/2024-23:19:08] [I] Memory Bus Width: 384 bits (ECC disabled)\n", + "[08/09/2024-23:19:08] [I] Application Compute Clock Rate: 1.695 GHz\n", + "[08/09/2024-23:19:08] [I] Application Memory Clock Rate: 8.001 GHz\n", + "[08/09/2024-23:19:08] [I] \n", + "[08/09/2024-23:19:08] [I] Note: The application clock rates do not reflect the actual clock rates that the GPU is currently running at.\n", + "[08/09/2024-23:19:08] [I] \n", + "[08/09/2024-23:19:08] [I] TensorRT version: 10.3.0\n", + "[08/09/2024-23:19:08] [I] Loading standard plugins\n", + "[08/09/2024-23:19:08] [I] [TRT] [MemUsageChange] Init CUDA: CPU +1, GPU +0, now: CPU 19, GPU 1578 (MiB)\n", + "[08/09/2024-23:19:10] [I] [TRT] [MemUsageChange] Init builder kernel library: CPU +2087, GPU +386, now: CPU 2262, GPU 1964 (MiB)\n", + "[08/09/2024-23:19:10] [I] Start parsing network model.\n", + "[08/09/2024-23:19:10] [I] [TRT] ----------------------------------------------------------------\n", + "[08/09/2024-23:19:10] [I] [TRT] Input filename: resnet50_pytorch.onnx\n", + "[08/09/2024-23:19:10] [I] [TRT] ONNX IR version: 0.0.8\n", + "[08/09/2024-23:19:10] [I] [TRT] Opset version: 17\n", + "[08/09/2024-23:19:10] [I] [TRT] Producer name: pytorch\n", + "[08/09/2024-23:19:10] [I] [TRT] Producer version: 2.4.0\n", + "[08/09/2024-23:19:10] [I] [TRT] Domain: \n", + "[08/09/2024-23:19:10] [I] [TRT] Model version: 0\n", + "[08/09/2024-23:19:10] [I] [TRT] Doc string: \n", + "[08/09/2024-23:19:10] [I] [TRT] ----------------------------------------------------------------\n", + "[08/09/2024-23:19:10] [I] Finished parsing network model. Parse time: 0.0944174\n", + "[08/09/2024-23:19:10] [I] [TRT] Local timing cache in use. Profiling results in this builder pass will not be stored.\n", + "[08/09/2024-23:19:56] [I] [TRT] Detected 1 inputs and 1 output network tensors.\n", + "[08/09/2024-23:19:58] [I] [TRT] Total Host Persistent Memory: 330496\n", + "[08/09/2024-23:19:58] [I] [TRT] Total Device Persistent Memory: 0\n", + "[08/09/2024-23:19:58] [I] [TRT] Total Scratch Memory: 0\n", + "[08/09/2024-23:19:58] [I] [TRT] [BlockAssignment] Started assigning block shifts. This will take 57 steps to complete.\n", + "[08/09/2024-23:19:58] [I] [TRT] [BlockAssignment] Algorithm ShiftNTopDown took 0.495652ms to assign 4 blocks to 57 nodes requiring 131661824 bytes.\n", + "[08/09/2024-23:19:58] [I] [TRT] Total Activation Memory: 131661824\n", + "[08/09/2024-23:19:58] [I] [TRT] Total Weights Memory: 51088640\n", + "[08/09/2024-23:19:58] [I] [TRT] Engine generation completed in 47.9778 seconds.\n", + "[08/09/2024-23:19:58] [I] [TRT] [MemUsageStats] Peak memory usage of TRT CPU/GPU memory allocators: CPU 8 MiB, GPU 221 MiB\n", + "[08/09/2024-23:19:58] [I] [TRT] [MemUsageStats] Peak memory usage during Engine building and serialization: CPU: 3494 MiB\n", + "[08/09/2024-23:19:58] [I] Engine built in 48.0138 sec.\n", + "[08/09/2024-23:19:58] [I] Created engine with size: 51.3226 MiB\n", + "[08/09/2024-23:19:58] [I] [TRT] Loaded engine size: 51 MiB\n", + "[08/09/2024-23:19:58] [I] Engine deserialized in 0.040731 sec.\n", + "[08/09/2024-23:19:58] [I] [TRT] [MemUsageChange] TensorRT-managed allocation in IExecutionContext creation: CPU +0, GPU +126, now: CPU 0, GPU 174 (MiB)\n", + "[08/09/2024-23:19:58] [I] Setting persistentCacheLimit to 0 bytes.\n", + "[08/09/2024-23:19:58] [I] Created execution context with device memory size: 125.562 MiB\n", + "[08/09/2024-23:19:58] [I] Using random values for input input.1\n", + "[08/09/2024-23:19:58] [I] Input binding for input.1 with dimensions 32x3x224x224 is created.\n", + "[08/09/2024-23:19:58] [I] Output binding for 495 with dimensions 32x1000 is created.\n", + "[08/09/2024-23:19:58] [I] Starting inference\n", + "[08/09/2024-23:20:01] [I] Warmup completed 40 queries over 200 ms\n", + "[08/09/2024-23:20:01] [I] Timing trace has 577 queries over 3.01593 s\n", + "[08/09/2024-23:20:01] [I] \n", + "[08/09/2024-23:20:01] [I] === Trace details ===\n", + "[08/09/2024-23:20:01] [I] Trace averages of 10 runs:\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.15379 ms - Host latency: 5.96491 ms (enqueue 0.601962 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.15573 ms - Host latency: 5.96678 ms (enqueue 0.614818 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.14959 ms - Host latency: 5.9606 ms (enqueue 0.619507 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.15471 ms - Host latency: 5.96739 ms (enqueue 0.596365 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.15789 ms - Host latency: 5.96873 ms (enqueue 0.60484 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.15574 ms - Host latency: 5.96605 ms (enqueue 0.615045 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.16485 ms - Host latency: 5.97597 ms (enqueue 0.606131 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.16719 ms - Host latency: 5.9787 ms (enqueue 0.606793 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.15942 ms - Host latency: 5.9703 ms (enqueue 0.608478 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.158 ms - Host latency: 5.96863 ms (enqueue 0.618744 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.16301 ms - Host latency: 5.97296 ms (enqueue 0.605475 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.15902 ms - Host latency: 5.96936 ms (enqueue 0.606885 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.48464 ms - Host latency: 6.29867 ms (enqueue 0.610254 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.52335 ms - Host latency: 6.33522 ms (enqueue 0.611707 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.29356 ms - Host latency: 6.10337 ms (enqueue 0.600226 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.21546 ms - Host latency: 6.02838 ms (enqueue 0.604974 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.19424 ms - Host latency: 6.00571 ms (enqueue 0.606787 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.19053 ms - Host latency: 6.00176 ms (enqueue 0.603711 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.19945 ms - Host latency: 6.01036 ms (enqueue 0.608167 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.19435 ms - Host latency: 6.00419 ms (enqueue 0.60293 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.18092 ms - Host latency: 5.99093 ms (enqueue 0.607703 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.15225 ms - Host latency: 5.96377 ms (enqueue 0.60929 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.15585 ms - Host latency: 5.96615 ms (enqueue 0.608423 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.16517 ms - Host latency: 5.97937 ms (enqueue 0.604126 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.15837 ms - Host latency: 5.96953 ms (enqueue 0.608276 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.22946 ms - Host latency: 6.04004 ms (enqueue 0.608459 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.18505 ms - Host latency: 5.99532 ms (enqueue 0.605957 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.17819 ms - Host latency: 5.9891 ms (enqueue 0.609656 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.21862 ms - Host latency: 6.02983 ms (enqueue 0.608874 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.21357 ms - Host latency: 6.025 ms (enqueue 0.606592 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.31761 ms - Host latency: 6.12921 ms (enqueue 0.607971 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.33801 ms - Host latency: 6.14896 ms (enqueue 0.603137 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.3157 ms - Host latency: 6.12772 ms (enqueue 0.606689 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.28331 ms - Host latency: 6.09431 ms (enqueue 0.608887 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.22885 ms - Host latency: 6.03916 ms (enqueue 0.603479 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.22043 ms - Host latency: 6.03131 ms (enqueue 0.608521 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.22188 ms - Host latency: 6.03206 ms (enqueue 0.607861 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.21018 ms - Host latency: 6.0208 ms (enqueue 0.605029 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.19058 ms - Host latency: 6.00125 ms (enqueue 0.603784 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.19673 ms - Host latency: 6.00825 ms (enqueue 0.604175 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.19771 ms - Host latency: 6.00811 ms (enqueue 0.603662 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.19678 ms - Host latency: 6.00706 ms (enqueue 0.604907 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.18628 ms - Host latency: 5.99937 ms (enqueue 0.60459 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.16621 ms - Host latency: 5.97705 ms (enqueue 0.606909 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.15674 ms - Host latency: 5.96704 ms (enqueue 0.605737 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.17947 ms - Host latency: 5.99036 ms (enqueue 0.61001 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.1947 ms - Host latency: 6.00486 ms (enqueue 0.607153 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.20366 ms - Host latency: 6.01467 ms (enqueue 0.608594 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.24043 ms - Host latency: 6.05107 ms (enqueue 0.609766 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.29194 ms - Host latency: 6.10222 ms (enqueue 0.612354 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.29412 ms - Host latency: 6.1072 ms (enqueue 0.605859 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.29851 ms - Host latency: 6.10952 ms (enqueue 0.60459 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.2551 ms - Host latency: 6.06633 ms (enqueue 0.610669 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.26223 ms - Host latency: 6.07361 ms (enqueue 0.603735 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.22039 ms - Host latency: 6.03188 ms (enqueue 0.607324 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.22549 ms - Host latency: 6.03557 ms (enqueue 0.614111 ms)\n", + "[08/09/2024-23:20:01] [I] Average on 10 runs - GPU latency: 5.21543 ms - Host latency: 6.02625 ms (enqueue 0.607227 ms)\n", + "[08/09/2024-23:20:01] [I] \n", + "[08/09/2024-23:20:01] [I] === Performance summary ===\n", + "[08/09/2024-23:20:01] [I] Throughput: 191.317 qps\n", + "[08/09/2024-23:20:01] [I] Latency: min = 5.94817 ms, max = 6.54626 ms, mean = 6.02724 ms, median = 6.0061 ms, percentile(90%) = 6.11475 ms, percentile(95%) = 6.14783 ms, percentile(99%) = 6.44324 ms\n", + "[08/09/2024-23:20:01] [I] Enqueue Time: min = 0.525635 ms, max = 0.730743 ms, mean = 0.607313 ms, median = 0.602783 ms, percentile(90%) = 0.625977 ms, percentile(95%) = 0.630676 ms, percentile(99%) = 0.64917 ms\n", + "[08/09/2024-23:20:01] [I] H2D Latency: min = 0.79187 ms, max = 0.833099 ms, mean = 0.80143 ms, median = 0.800537 ms, percentile(90%) = 0.802734 ms, percentile(95%) = 0.809082 ms, percentile(99%) = 0.815674 ms\n", + "[08/09/2024-23:20:01] [I] GPU Compute Time: min = 5.13742 ms, max = 5.73645 ms, mean = 5.21617 ms, median = 5.1947 ms, percentile(90%) = 5.30127 ms, percentile(95%) = 5.33813 ms, percentile(99%) = 5.63098 ms\n", + "[08/09/2024-23:20:01] [I] D2H Latency: min = 0.00830078 ms, max = 0.0117798 ms, mean = 0.00964316 ms, median = 0.00958252 ms, percentile(90%) = 0.0101929 ms, percentile(95%) = 0.010498 ms, percentile(99%) = 0.0111694 ms\n", + "[08/09/2024-23:20:01] [I] Total Host Walltime: 3.01593 s\n", + "[08/09/2024-23:20:01] [I] Total GPU Compute Time: 3.00973 s\n", + "[08/09/2024-23:20:01] [W] * GPU compute time is unstable, with coefficient of variance = 1.57058%.\n", + "[08/09/2024-23:20:01] [W] If not already in use, locking GPU clock frequency or adding --useSpinWait may improve the stability.\n", + "[08/09/2024-23:20:01] [I] Explanations of the performance metrics are printed in the verbose logs.\n", + "[08/09/2024-23:20:01] [I] \n", + "&&&& PASSED TensorRT.trtexec [TensorRT v100300] # /workspace/TensorRT/build/out/trtexec --onnx=resnet50_pytorch.onnx --saveEngine=resnet_engine_pytorch.trt --inputIOFormats=fp16:chw --outputIOFormats=fp16:chw --fp16\n" + ] + } + ], + "source": [ + "# step out of Python for a moment to convert the ONNX model to a TRT engine using trtexec\n", + "if USE_FP16:\n", + " !trtexec --onnx=resnet50_pytorch.onnx --saveEngine=resnet_engine_pytorch.trt --inputIOFormats=fp16:chw --outputIOFormats=fp16:chw --fp16\n", + "else:\n", + " !trtexec --onnx=resnet50_pytorch.onnx --saveEngine=resnet_engine_pytorch.trt " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This will save our model as 'resnet_engine.trt'." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. What TensorRT runtime am I targeting?\n", + "\n", + "Now, we have a converted our model to a TensorRT engine. Great! That means we are ready to load it into the native Python TensorRT runtime. This runtime strikes a balance between the ease of use of the high level Python APIs used in frameworks and the fast, low level C++ runtimes available in TensorRT." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 39.7 ms, sys: 76.2 ms, total: 116 ms\n", + "Wall time: 115 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "\n", + "import tensorrt as trt\n", + "import pycuda.driver as cuda\n", + "import pycuda.autoinit\n", + "\n", + "f = open(\"resnet_engine_pytorch.trt\", \"rb\")\n", + "runtime = trt.Runtime(trt.Logger(trt.Logger.WARNING)) \n", + "\n", + "engine = runtime.deserialize_cuda_engine(f.read())\n", + "context = engine.create_execution_context()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now allocate input and output memory, give TRT pointers (bindings) to it:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "# need to set input and output precisions to FP16 to fully enable it\n", + "output = np.empty([BATCH_SIZE, 1000], dtype = target_dtype) \n", + "\n", + "# allocate device memory\n", + "d_input = cuda.mem_alloc(1 * input_batch.nbytes)\n", + "d_output = cuda.mem_alloc(1 * output.nbytes)\n", + "\n", + "tensor_names = [engine.get_tensor_name(i) for i in range(engine.num_io_tensors)]\n", + "assert(len(tensor_names) == 2)\n", + "\n", + "context.set_tensor_address(tensor_names[0], int(d_input))\n", + "context.set_tensor_address(tensor_names[1], int(d_output))\n", + "\n", + "bindings = [int(d_input), int(d_output)]\n", + "\n", + "stream = cuda.Stream()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, set up the prediction function.\n", + "\n", + "This involves a copy from CPU RAM to GPU VRAM, executing the model, then copying the results back from GPU VRAM to CPU RAM:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "def predict(batch): # result gets copied into output\n", + " # transfer input data to device\n", + " cuda.memcpy_htod_async(d_input, batch, stream)\n", + " # execute model\n", + " context.execute_async_v3(stream.handle)\n", + " # transfer predictions back\n", + " cuda.memcpy_dtoh_async(output, d_output, stream)\n", + " # syncronize threads\n", + " stream.synchronize()\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's time the function!" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Warming up...\n", + "Done warming up!\n" + ] + } + ], + "source": [ + "print(\"Warming up...\")\n", + "\n", + "pred = predict(preprocessed_images)\n", + "\n", + "print(\"Done warming up!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.92 ms ± 3.49 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "pred = predict(preprocessed_images)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally we should verify our TensorRT output is still accurate." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Class | Probability (out of 1)\n" + ] + }, + { + "data": { + "text/plain": [ + "[(207, 12.42), (208, 7.574), (220, 7.473), (226, 7.39), (160, 7.35)]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "indices = (-pred[0]).argsort()[:5]\n", + "print(\"Class | Probability (out of 1)\")\n", + "list(zip(indices, pred[0][indices]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Look for ImageNet indices 150-275 above, where 207 is the ground truth correct class (Golden Retriever). Compare with the results of the original unoptimized model in the first section!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Next Steps:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

TRT Dev Docs

\n", + "\n", + "Main documentation page for the ONNX, layer builder, C++, and legacy APIs\n", + "\n", + "You can find it here: https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html\n", + "\n", + "

TRT OSS GitHub

\n", + "\n", + "Contains OSS TRT components, sample applications, and plugin examples\n", + "\n", + "You can find it here: https://github.com/NVIDIA/TensorRT\n", + "\n", + "\n", + "#### TRT Supported Layers:\n", + "\n", + "https://docs.nvidia.com/deeplearning/tensorrt/support-matrix/index.html#layers-precision-matrix\n", + "\n", + "#### TRT ONNX Plugin Example:\n", + "\n", + "https://github.com/NVIDIA/TensorRT/tree/main/samples/sampleOnnxMnistCoordConvAC" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/quickstart/IntroNotebooks/3. Understanding TensorRT Runtimes.ipynb b/quickstart/IntroNotebooks/3. Understanding TensorRT Runtimes.ipynb new file mode 100644 index 00000000..a793adbd --- /dev/null +++ b/quickstart/IntroNotebooks/3. Understanding TensorRT Runtimes.ipynb @@ -0,0 +1,107 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Runtimes: What are my options? How do I choose?\n", + "\n", + "Remember that TensorRT consists of two main components - __1. A series of parsers and integrations__ to convert your model to an optimized engine and __2. An series of TensorRT runtime APIs__ with several associated tools for deployment.\n", + "\n", + "In this notebook, we will focus on the latter - various runtime options for TensorRT engines.\n", + "\n", + "The runtimes have different use cases for running TRT engines. \n", + "\n", + "### Considerations when picking a runtime:\n", + "\n", + "Generally speaking, there are a few major considerations when picking a runtime:\n", + "- __Framework__ - Some options, like Torch-TRT, are only relevant to PyTorch\n", + "- __Time-to-solution__ - Torch-TRT is much more likely to work 'out-of-the-box' if a quick solution is required and ONNX fails\n", + "- __Serving needs__ - Torch-TRT can use TorchServe to serve models over Cloud as a simple solution. For other frameworks (or for more advanced features) TRITON is framework agnostic, allows for concurrent model execution or multiple copies within a GPU to reduce latency, and can accept engines created through both the ONNX and Torch-TRT paths\n", + "- __Performance__ - Different TensorRT runtimes offer varying levels of performance. For example, Torch-TRT is generally going to be slower than using ONNX or the C++ API directly.\n", + "\n", + "### Python API:\n", + "\n", + "__Use this when:__\n", + "- You can accept some performance overhead, and\n", + "- You are most familiar with Python, or\n", + "- You are performing initial debugging and testing with TRT\n", + "\n", + "__More info:__\n", + "\n", + " \n", + "The [TensorRT Python API](https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#perform_inference_python) gives you fine-grained control over the execution of your engine using a Python interface. It makes memory allocation, kernel execution, and copies to and from the GPU explicit - which can make integration into high performance applications easier. It is also great for testing models in a Python environment - such as in a Jupyter notebook.\n", + " \n", + "The [ONNX notebook for PyTorch](./2.%20Using%20PyTorch%20through%20ONNX.ipynb) is a good example of using TensorRT to get great performance while staying in Python.\n", + "\n", + "### C++ API: \n", + "\n", + "__Use this when:__\n", + "- You want the least amount of overhead possible to maximize the performance of your models and achieve better latency\n", + "- You are not using Torch-TRT (though Torch-TRT graph conversions that only generate a single engine can still be exported to C++)\n", + "- You are most familiar with C++\n", + "- You want to optimize your inference pipeline as much as possible\n", + "\n", + "__More info:__\n", + "\n", + "The [TensorRT C++ API](https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#perform_inference_c) gives you fine-grained control over the execution of your engine using a C++ interface. It makes memory allocation, kernel execution, and copies to and from the GPU explicit - which can make integration into high performance C++ applications easier. The C++ API is generally the most performant option for running TensorRT engines, with the least overhead.\n", + "\n", + "[This NVIDIA Developer blog](https://developer.nvidia.com/blog/speed-up-inference-tensorrt/) is a good example of taking an ONNX model and running it with dynamic batch size support using the C++ API.\n", + "\n", + "\n", + "### Torch-TRT Runtime:\n", + " \n", + "__Use this when:__\n", + " \n", + "- You are using Torch-TRT, and\n", + "- Your model converts to more than one TensorRT engine\n", + "\n", + "__More info:__\n", + "\n", + "\n", + "Torch-TRT is the standard runtime used with models that were converted in Torch-TRT. It works by taking groups of nodes at once in the PyTorch graph, and replacing them with a singular optimized engine that calls the TensorRT Python API behind the scenes. This optimized engine is in the form of a PyTorch operation - which means that your graph is still in PyTorch and will essentially function like any other PyTorch model.\n", + "\n", + "If your graph entirely converts to a single Torch-TRT engine, it can be more efficient to export the engine node and run it using one of the other APIs. You can find instructions to do this in the [Torch-TRT documentation](https://pytorch.org/TensorRT/index.html).\n", + "\n", + "As an example, the Torch-TRT notebooks included with this guide use the Torch-TRT runtime.\n", + "\n", + "### TRITON Inference Server\n", + "\n", + "__Use this when:__\n", + "- You want to serve your models over HTTP or gRPC\n", + "- You want to load balance across multiple models or copies of models across GPUs to minimze latency and make better use of the GPU\n", + "- You want to have multiple models running efficiently on a single GPU at the same time\n", + "- You want to serve a variety of models converted using a variety of converters and frameworks (including Torch-TRT and ONNX) through a uniform interface\n", + "- You need serving support but are using PyTorch, another framework, or the ONNX path in general\n", + "\n", + "__More info:__\n", + "\n", + "\n", + "TRITON is an open source inference serving software that lets teams deploy trained AI models from any framework (TensorFlow, TensorRT, PyTorch, ONNX Runtime, or a custom framework), from local storage or Google Cloud Platform or AWS S3 on any GPU- or CPU-based infrastructure (cloud, data center, or edge). It is a flexible project with several unique features - such as concurrent model execution of both heterogeneous models and multiple copies of the same model (multiple model copies can reduce latency further) as well as load balancing and model analysis. It is a good option if you need to serve your models over HTTP - such as in a cloud inferencing solution.\n", + " \n", + "You can find the TRITON home page [here](https://developer.nvidia.com/triton-inference-server), and the documentation [here](https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/quickstart/IntroNotebooks/images/onnx_onnx.png b/quickstart/IntroNotebooks/images/onnx_onnx.png index e5b66dae..401f1b0c 100644 Binary files a/quickstart/IntroNotebooks/images/onnx_onnx.png and b/quickstart/IntroNotebooks/images/onnx_onnx.png differ diff --git a/quickstart/IntroNotebooks/images/pytorch_onnx.png b/quickstart/IntroNotebooks/images/pytorch_onnx.png index bfc67268..af7de1ea 100644 Binary files a/quickstart/IntroNotebooks/images/pytorch_onnx.png and b/quickstart/IntroNotebooks/images/pytorch_onnx.png differ diff --git a/quickstart/IntroNotebooks/images/tensorrt_landscape.png b/quickstart/IntroNotebooks/images/tensorrt_landscape.png index 8940363b..c207c74e 100644 Binary files a/quickstart/IntroNotebooks/images/tensorrt_landscape.png and b/quickstart/IntroNotebooks/images/tensorrt_landscape.png differ diff --git a/quickstart/IntroNotebooks/onnx_helper.py b/quickstart/IntroNotebooks/onnx_helper.py index 2f3d6767..d5b898cf 100644 --- a/quickstart/IntroNotebooks/onnx_helper.py +++ b/quickstart/IntroNotebooks/onnx_helper.py @@ -16,7 +16,6 @@ # import numpy as np -import tensorflow as tf import tensorrt as trt import pycuda.driver as cuda @@ -25,20 +24,20 @@ # For ONNX: class ONNXClassifierWrapper(): - def __init__(self, file, num_classes, target_dtype = np.float32): + def __init__(self, file, target_dtype = np.float32): self.target_dtype = target_dtype - self.num_classes = num_classes + self.num_classes = 1000 self.load(file) self.stream = None def load(self, file): f = open(file, "rb") - runtime = trt.Runtime(trt.Logger(trt.Logger.WARNING)) + self.runtime = trt.Runtime(trt.Logger(trt.Logger.WARNING)) - engine = runtime.deserialize_cuda_engine(f.read()) - self.context = engine.create_execution_context() + self.engine = self.runtime.deserialize_cuda_engine(f.read()) + self.context = self.engine.create_execution_context() def allocate_memory(self, batch): self.output = np.empty(self.num_classes, dtype = self.target_dtype) # Need to set both input and output precisions to FP16 to fully enable FP16 @@ -46,8 +45,12 @@ def allocate_memory(self, batch): # Allocate device memory self.d_input = cuda.mem_alloc(1 * batch.nbytes) self.d_output = cuda.mem_alloc(1 * self.output.nbytes) + + tensor_names = [self.engine.get_tensor_name(i) for i in range(self.engine.num_io_tensors)] + assert(len(tensor_names) == 2) - self.bindings = [int(self.d_input), int(self.d_output)] + self.context.set_tensor_address(tensor_names[0], int(self.d_input)) + self.context.set_tensor_address(tensor_names[1], int(self.d_output)) self.stream = cuda.Stream() @@ -58,7 +61,7 @@ def predict(self, batch): # result gets copied into output # Transfer input data to device cuda.memcpy_htod_async(self.d_input, batch, self.stream) # Execute model - self.context.execute_async_v2(self.bindings, self.stream.handle, None) + self.context.execute_async_v3(self.stream.handle) # Transfer predictions back cuda.memcpy_dtoh_async(self.output, self.d_output, self.stream) # Syncronize threads diff --git a/quickstart/Makefile.config b/quickstart/Makefile.config index 33065899..7b776fbd 100644 --- a/quickstart/Makefile.config +++ b/quickstart/Makefile.config @@ -37,6 +37,11 @@ ifeq ($(TRT_LIB_DIR),) $(warning TRT_LIB_DIR is not specified, searching $(TRT_LIB_DIR), /usr/lib/x86_64-linux-gnu/ by default, use TRT_LIB_DIR= to change.) endif +ifeq ($(TRT_INC_DIR),) + TRT_INC_DIR ?= /usr/include/x86_64-linux-gnu/ + $(warning TRT_INC_DIR is not specified, searching $(TRT_INC_DIR), /usr/include/x86_64-linux-gnu/ by default, use TRT_INC_DIR= to change.) +endif + CUDA_LIBDIR = lib CUDNN_LIBDIR = lib64 ifeq ($(TARGET), aarch64) @@ -128,7 +133,7 @@ ifneq ($(shell uname -m), $(TARGET)) LIBPATHS += -L"../lib/stubs" -L"../../lib/stubs" -L"/usr/lib/$(DLSW_TRIPLE)/stubs" -L"/usr/lib/$(DLSW_TRIPLE)" -L"/usr/lib/$(CUBLAS_TRIPLE)/stubs" -L"/usr/lib/$(CUBLAS_TRIPLE)" LIBPATHS += -L"$(CUDA_INSTALL_DIR)/targets/$(CUDA_TRIPLE)/$(CUDA_LIBDIR)/stubs" -L"$(CUDA_INSTALL_DIR)/targets/$(CUDA_TRIPLE)/$(CUDA_LIBDIR)" endif -INCPATHS += -I"../common" -I"$(CUDA_INSTALL_DIR)/include" -I"$(CUDNN_INSTALL_DIR)/include" +INCPATHS += -I"../common" -I"$(TRT_INC_DIR)" -I"$(CUDA_INSTALL_DIR)/include" -I"$(CUDNN_INSTALL_DIR)/include" LIBPATHS += -L"$(CUDA_INSTALL_DIR)/$(CUDA_LIBDIR)" -Wl,-rpath-link="$(CUDA_INSTALL_DIR)/$(CUDA_LIBDIR)" LIBPATHS += -L"$(CUDNN_INSTALL_DIR)/$(CUDNN_LIBDIR)" -Wl,-rpath-link="$(CUDNN_INSTALL_DIR)/$(CUDNN_LIBDIR)" LIBPATHS += -L"$(TRT_LIB_DIR)" -Wl,-rpath-link="$(TRT_LIB_DIR)" $(STUBS_DIR) diff --git a/quickstart/README.md b/quickstart/README.md index 6f8de374..ee1ca2e4 100644 --- a/quickstart/README.md +++ b/quickstart/README.md @@ -3,11 +3,12 @@ Introductory notebooks in TensorRT QuickStartGuide - [Running the QuickStartGuide](IntroNotebooks/0.%20Running%20This%20Guide.ipynb) - [Getting Started with TensorRT](IntroNotebooks/1.%20Introduction.ipynb) -- [Using the TF-TRT Tensorflow Integration](IntroNotebooks/2.%20Using%20the%20Tensorflow%20TensorRT%20Integration.ipynb) -- [Using Tensorflow2 through ONNX](IntroNotebooks/3.%20Using%20Tensorflow%202%20through%20ONNX.ipynb) -- [Using PyTorch through ONNX](IntroNotebooks/4.%20Using%20PyTorch%20through%20ONNX.ipynb) -- [Understanding TensorRT Runtimes](IntroNotebooks/5.%20Understanding%20TensorRT%20Runtimes.ipynb) +- [Using PyTorch through ONNX](IntroNotebooks/2.%20Using%20PyTorch%20through%20ONNX.ipynb) +- [Understanding TensorRT Runtimes](IntroNotebooks/3.%20Understanding%20TensorRT%20Runtimes.ipynb) Tutorials corresponding to TensorRT QuickStartGuide - Semantic Segmentation using TensorRT - [C++ sample and Python notebook](./SemanticSegmentation/) - Optimize with TensorRT, Deploy with Triton - [Walkthrough and Python code](./deploy_to_triton/) +- Quantization with TensorRT Model Optimizer - [Stable Diffusion XL (Base/Turbo) and Stable Diffusion 1.5 Quantization with Model Optimizer +](https://github.com/NVIDIA/TensorRT-Model-Optimizer/tree/main/diffusers/quantization) + diff --git a/quickstart/deploy_to_triton/README.md b/quickstart/deploy_to_triton/README.md index 35a1c268..11c4f673 100644 --- a/quickstart/deploy_to_triton/README.md +++ b/quickstart/deploy_to_triton/README.md @@ -1,20 +1,21 @@ # TensorRT to Triton -This quick start guide showcases how to deploy a simple ResNet model accelerated by using TensorRT on Triton Inference Server. Optimization and deployment go hand in hand in a discussion about Machine Learning infrastructure. For a TensorRT user, network level optimzation to get the maximum performance would already be an area of expertize. +This quick start guide showcases how to deploy a simple ResNet model accelerated by using TensorRT on Triton Inference Server. Optimization and deployment go hand in hand in a discussion about Machine Learning infrastructure. For a TensorRT user, network level optimization to get the maximum performance would already be an area of expertize. -However, serving this optimized model comes with it's own set of considerations and challenges like: building an infrastructure to support concorrent model executions, supporting clients over HTTP, gRPC and more. +However, serving this optimized model comes with its own set of considerations and challenges, such as building infrastructure to support concurrent model executions, supporting clients over HTTP, gRPC and more. The [Triton Inference Server](https://github.com/triton-inference-server/server) solves the aforementioned and more. Let's discuss step-by-step, the process of optimizing a model with Torch-TensorRT, deploying it on Triton Inference Server, and building a client to query the model. ## Step 1: Optimize your model with TensorRT -If you are unfamiliar with TensorRT, please refer this [video](https://youtu.be/rK-jxPPY9V4). The first step in this pipeline is to accelerate your model with TensorRT. For the purposes of this demonstration, we are going to assume that you have your trained model in ONNX format. +If you are unfamiliar with TensorRT, please refer to this [video](https://youtu.be/rK-jxPPY9V4). The first step in this pipeline is to accelerate your model with TensorRT. For the purposes of this demonstration, we are going to assume that you have your trained model in ONNX format. (Optional) If you don't have an ONNX model handy and just want to follow along, feel free to use this script: ``` # is the yy:mm for the publishing tag for NVIDIA's TensorRT -# container; eg. 22.04 +# container; eg. 24.07 +# Check https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch for latest releases docker run -it --gpus all -v /path/to/this/folder:/resnet50_eg nvcr.io/nvidia/pytorch:-py3 @@ -36,33 +37,34 @@ There are several ways to build a TensorRT Engine; for this demonstration, we wi ``` trtexec --onnx=resnet50.onnx \ --saveEngine=model.plan \ - --explicitBatch \ --useCudaGraph ``` Before we proceed to the next step, it is important that we know the names of the "input" and "output" layers of your network, as these would be required by Triton. One easy way is to use `polygraphy` which comes packaged with the TensorRT container. If you want to learn more about Polygraphy and its usage, visit [this](https://github.com/NVIDIA/TensorRT/tree/main/tools/Polygraphy) repository. You can checkout a plethora of [examples](https://github.com/NVIDIA/TensorRT/tree/main/tools/Polygraphy/examples/cli/inspect) demonstrating the utility of Polygraphy to inspect models. ``` -polygraphy inspect model model.plan --model-type engine +polygraphy inspect model model.plan ``` A section of the output mode looks like this: ``` [I] ==== TensorRT Engine ==== Name: Unnamed Network 0 | Explicit Batch Engine - + ---- 1 Engine Input(s) ---- {input [dtype=float32, shape=(1, 3, 224, 224)]} - + ---- 1 Engine Output(s) ---- {output [dtype=float32, shape=(1, 1000)]} - + ---- Memory ---- - Device Memory: 7225344 bytes - - ---- 1 Profile(s) (2 Binding(s) Each) ---- + Device Memory: 8228864 bytes + + ---- 1 Profile(s) (2 Tensor(s) Each) ---- - Profile: 0 - Binding Index: 0 (Input) [Name: input] | Shapes: min=(1, 3, 224, 224), opt=(1, 3, 224, 224), max=(1, 3, 224, 224) - Binding Index: 1 (Output) [Name: output] | Shape: (1, 1000) + Tensor: input (Input), Index: 0 | Shapes: min=(1, 3, 224, 224), opt=(1, 3, 224, 224), max=(1, 3, 224, 224) + Tensor: output (Output), Index: 1 | Shape: (1, 1000) + + ---- 87 Layer(s) ---- ``` With this, we are ready to proceed to the next step; setting up the Triton Inference Server. @@ -89,7 +91,7 @@ Once you have the model repository setup, it is time to launch the triton server ``` # Make sure that the TensorRT version in the Triton container # and TensorRT version in the environment used to optimize the model -# are the same. as 22.04 will work in this example +# are the same. as 24.07 will work in this example docker run --gpus all --rm -p 8000:8000 -p 8001:8001 -p 8002:8002 -v /full/path/to/docs/examples/model_repository:/models nvcr.io/nvidia/tritonserver:-py3 tritonserver --model-repository=/models @@ -122,7 +124,6 @@ python3 triton_client.py ``` The output of the same should look like below: ``` -[b'12.472842:90' b'11.523070:92' b'9.660665:14' b'8.407766:136' - b'8.222099:11'] +[b'12.477911:90' b'11.527293:92' b'9.662313:14' b'8.411008:136' b'8.220069:11'] ``` The output format here is `:`. To learn how to map these to the label names and more, refer to our [documentation](https://github.com/triton-inference-server/server/blob/main/docs/protocol/extension_classification.md). diff --git a/samples/common/logging.h b/samples/common/logging.h index d2c571d9..69273a5e 100644 --- a/samples/common/logging.h +++ b/samples/common/logging.h @@ -380,7 +380,8 @@ class Logger : public nvinfer1::ILogger static TestAtom defineTest(const std::string& name, int32_t argc, char const* const* argv) { // Append TensorRT version as info - const std::string vname = name + " [TensorRT v" + std::to_string(NV_TENSORRT_VERSION) + "]"; + const std::string vname = name + " [TensorRT v" + std::to_string(NV_TENSORRT_VERSION) + "] [b" + + std::to_string(NV_TENSORRT_BUILD) + "]"; auto cmdline = genCmdlineString(argc, argv); return defineTest(vname, cmdline); } diff --git a/samples/common/safeCommon.h b/samples/common/safeCommon.h index 5d9a30bc..f10aad18 100644 --- a/samples/common/safeCommon.h +++ b/samples/common/safeCommon.h @@ -18,7 +18,6 @@ #ifndef TENSORRT_SAFE_COMMON_H #define TENSORRT_SAFE_COMMON_H -#include "NvInferSafeRuntime.h" #include "cuda_runtime.h" #include "sampleEntrypoints.h" #include diff --git a/samples/common/sampleDevice.h b/samples/common/sampleDevice.h index add2cbf5..986dccb4 100644 --- a/samples/common/sampleDevice.h +++ b/samples/common/sampleDevice.h @@ -509,18 +509,27 @@ class OutputAllocator : public nvinfer1::IOutputAllocator return reallocateOutput(tensorName, currentMemory, size, alignment); } - void notifyShape(char const* tensorName, nvinfer1::Dims const& dims) noexcept override {} + void notifyShape(char const* tensorName, nvinfer1::Dims const& dims) noexcept override + { + mFinalDims = dims; + } IMirroredBuffer* getBuffer() { return mBuffer.get(); } + nvinfer1::Dims getFinalDims() + { + return mFinalDims; + } + ~OutputAllocator() override {} private: std::unique_ptr mBuffer; uint64_t mSize{}; + nvinfer1::Dims mFinalDims; }; //! Set the GPU to run the inference on. diff --git a/samples/common/sampleEngines.cpp b/samples/common/sampleEngines.cpp index f56e335f..51d1329c 100644 --- a/samples/common/sampleEngines.cpp +++ b/samples/common/sampleEngines.cpp @@ -150,40 +150,6 @@ nvinfer1::ICudaEngine* LazilyDeserializedEngine::release() return mEngine.release(); } -nvinfer1::safe::ICudaEngine* LazilyDeserializedEngine::getSafe() -{ - SMP_RETVAL_IF_FALSE( - mIsSafe, "Safe mode is not enabled, but trying to get safe engine!", nullptr, sample::gLogError); - - ASSERT(sample::hasSafeRuntime()); - auto engineBlob = getBlob(); - if (mSafeEngine == nullptr) - { - SMP_RETVAL_IF_FALSE( - !engineBlob.empty(), "Engine blob is empty. Nothing to deserialize!", nullptr, sample::gLogError); - - SMP_RETVAL_IF_FALSE(mDLACore == -1, - "Safe DLA engine built with kDLA_STANDALONE should not be deserialized in TRT!", nullptr, - sample::gLogError); - - using time_point = std::chrono::time_point; - using duration = std::chrono::duration; - time_point const deserializeStartTime{std::chrono::high_resolution_clock::now()}; - - std::unique_ptr safeRuntime{sample::createSafeInferRuntime(sample::gLogger.getTRTLogger())}; - SMP_RETVAL_IF_FALSE(safeRuntime != nullptr, "SafeRuntime creation failed", nullptr, sample::gLogError); - safeRuntime->setErrorRecorder(&gRecorder); - mSafeEngine.reset(safeRuntime->deserializeCudaEngine(engineBlob.data, engineBlob.size)); - SMP_RETVAL_IF_FALSE(mSafeEngine != nullptr, "SafeEngine deserialization failed", nullptr, sample::gLogError); - - time_point const deserializeEndTime{std::chrono::high_resolution_clock::now()}; - sample::gLogInfo << "SafeEngine deserialized in " << duration(deserializeEndTime - deserializeStartTime).count() - << " sec." << std::endl; - } - - return mSafeEngine.get(); -} - void setTensorScalesFromCalibration(nvinfer1::INetworkDefinition& network, std::vector const& inputFormats, std::vector const& outputFormats, std::string const& calibrationFile) { @@ -877,6 +843,11 @@ bool setupNetworkAndConfig(BuildOptions const& build, SystemOptions const& sys, config.setBuilderOptimizationLevel(build.builderOptimizationLevel); } + if (build.maxTactics != defaultMaxTactics) + { + config.setMaxNbTactics(build.maxTactics); + } + if (build.timingCacheMode == TimingCacheMode::kDISABLE) { config.setFlag(BuilderFlag::kDISABLE_TIMING_CACHE); @@ -1213,15 +1184,6 @@ bool networkToSerializedEngine( sample::gLogInfo << "Engine built in " << buildTime << " sec." << std::endl; sample::gLogInfo << "Created engine with size: " << (serializedEngine->size() / 1.0_MiB) << " MiB" << std::endl; - if (build.safe && build.consistency) - { - if (!checkSafeEngine(serializedEngine->data(), serializedEngine->size())) - { - sample::gLogError << "Consistency validation is not supported." << std::endl; - return false; - } - } - env.engine.setBlob(serializedEngine); if (build.timingCacheMode == TimingCacheMode::kGLOBAL) @@ -1343,7 +1305,7 @@ bool loadStreamingEngineToBuildEnv(std::string const& filepath, BuildEnvironment return true; } -bool loadEngineToBuildEnv(std::string const& filepath, bool enableConsistency, BuildEnvironment& env, std::ostream& err) +bool loadEngineToBuildEnv(std::string const& filepath, BuildEnvironment& env, std::ostream& err) { auto const tBegin = std::chrono::high_resolution_clock::now(); std::ifstream engineFile(filepath, std::ios::binary); @@ -1360,15 +1322,6 @@ bool loadEngineToBuildEnv(std::string const& filepath, bool enableConsistency, B sample::gLogInfo << "Engine loaded in " << loadTime << " sec." << std::endl; sample::gLogInfo << "Loaded engine with size: " << (fsize / 1.0_MiB) << " MiB" << std::endl; - if (enableConsistency) - { - if (!checkSafeEngine(engineBlob.data(), fsize)) - { - sample::gLogError << "Consistency validation is not enabled." << std::endl; - return false; - } - } - env.engine.setBlob(std::move(engineBlob)); return true; @@ -1433,7 +1386,7 @@ void dumpRefittable(nvinfer1::ICudaEngine& engine) ICudaEngine* loadEngine(std::string const& engine, int32_t DLACore, std::ostream& err) { BuildEnvironment env(/* isSafe */ false, /* versionCompatible */ false, DLACore, "", getTempfileControlDefaults()); - return loadEngineToBuildEnv(engine, false, env, err) ? env.engine.release() : nullptr; + return loadEngineToBuildEnv(engine, env, err) ? env.engine.release() : nullptr; } bool saveEngine(const ICudaEngine& engine, std::string const& fileName, std::ostream& err) @@ -1465,7 +1418,7 @@ bool getEngineBuildEnv( { if (build.safe) { - createEngineSuccess = loadEngineToBuildEnv(build.engine, build.safe && build.consistency, env, err); + createEngineSuccess = loadEngineToBuildEnv(build.engine, env, err); } else { @@ -1691,9 +1644,9 @@ namespace void* initSafeRuntime() { void* handle{nullptr}; + // Currently libsafe_executor_debug.so for samplesCommon::isDebug() is not ready. #if !defined(_WIN32) - std::string const dllName{samplesCommon::isDebug() ? "libnvinfer_safe_debug.so." + std::to_string(NV_TENSORRT_MAJOR) - : "libnvinfer_safe.so." + std::to_string(NV_TENSORRT_MAJOR)}; + std::string const dllName{"libsafe_executor.so"}; #if SANITIZER_BUILD handle = dlopen(dllName.c_str(), RTLD_LAZY | RTLD_NODELETE); #else @@ -1704,22 +1657,6 @@ void* initSafeRuntime() return handle; } -void* initConsistencyCheckerLibrary() -{ - void* handle{nullptr}; -#if !defined(_WIN32) - std::string const dllName{samplesCommon::isDebug() - ? "libnvinfer_checker_debug.so." + std::to_string(NV_TENSORRT_MAJOR) - : "libnvinfer_checker.so." + std::to_string(NV_TENSORRT_MAJOR)}; -#if SANITIZER_BUILD - handle = dlopen(dllName.c_str(), RTLD_LAZY | RTLD_NODELETE); -#else - handle = dlopen(dllName.c_str(), RTLD_LAZY); -#endif -#endif - return handle; -} - #if !defined(_WIN32) struct DllDeleter { @@ -1732,7 +1669,6 @@ struct DllDeleter } }; const std::unique_ptr safeRuntimeLibrary{initSafeRuntime()}; -const std::unique_ptr consistencyCheckerLibrary{initConsistencyCheckerLibrary()}; #endif } // namespace @@ -1745,61 +1681,4 @@ bool hasSafeRuntime() return ret; } -nvinfer1::safe::IRuntime* createSafeInferRuntime(nvinfer1::ILogger& logger) noexcept -{ - nvinfer1::safe::IRuntime* runtime{nullptr}; -#if !defined(_WIN32) - constexpr char symbolName[] = "_ZN8nvinfer14safe18createInferRuntimeERNS_7ILoggerE"; - typedef nvinfer1::safe::IRuntime* (*CreateInferRuntimeFn)(nvinfer1::ILogger & logger); - if (hasSafeRuntime()) - { - auto createFn = reinterpret_cast(dlsym(safeRuntimeLibrary.get(), symbolName)); - if (createFn != nullptr) - { - runtime = createFn(logger); - } - } -#endif - return runtime; -} - -bool hasConsistencyChecker() -{ - bool ret{false}; -#if !defined(_WIN32) - ret = (consistencyCheckerLibrary != nullptr); -#endif - return ret; -} - -nvinfer1::consistency::IConsistencyChecker* createConsistencyChecker( - nvinfer1::ILogger& logger, void const* serializedEngine, int32_t const engineSize) noexcept -{ - nvinfer1::consistency::IConsistencyChecker* checker{nullptr}; - - if (serializedEngine == nullptr || engineSize == 0) - { - return checker; - } - -#if !defined(_WIN32) - constexpr char symbolName[] = "createConsistencyChecker_INTERNAL"; - typedef nvinfer1::consistency::IConsistencyChecker* (*CreateCheckerFn)( - nvinfer1::ILogger * logger, void const* data, size_t size, uint32_t version); - if (hasSafeRuntime()) - { - auto createFn = reinterpret_cast(dlsym(consistencyCheckerLibrary.get(), symbolName)); - if (createFn != nullptr) - { - checker = createFn(&logger, serializedEngine, engineSize, NV_TENSORRT_VERSION); - } - } -#endif - return checker; -} - -bool checkSafeEngine(void const* serializedEngine, int32_t const engineSize) -{ - return hasConsistencyChecker(); -} } // namespace sample diff --git a/samples/common/sampleEngines.h b/samples/common/sampleEngines.h index 4c4272b7..ec02e909 100644 --- a/samples/common/sampleEngines.h +++ b/samples/common/sampleEngines.h @@ -18,16 +18,13 @@ #ifndef TRT_SAMPLE_ENGINES_H #define TRT_SAMPLE_ENGINES_H -#include -#include - #include "NvInfer.h" -#include "NvInferConsistency.h" -#include "NvInferSafeRuntime.h" #include "NvOnnxParser.h" #include "sampleOptions.h" #include "sampleUtils.h" #include "streamReader.h" +#include +#include namespace sample { @@ -106,11 +103,6 @@ class LazilyDeserializedEngine //! nvinfer1::ICudaEngine* release(); - //! - //! \brief Get the pointer to the safe::ICudaEngine. Triggers deserialization if not already done so. - //! - nvinfer1::safe::ICudaEngine* getSafe(); - //! //! \brief Get the underlying blob storing serialized engine. //! @@ -138,7 +130,6 @@ class LazilyDeserializedEngine ASSERT(data.get() && data->size() > 0); mEngineBlobHostMemory = std::move(data); mEngine.reset(); - mSafeEngine.reset(); } //! @@ -148,7 +139,6 @@ class LazilyDeserializedEngine { mEngineBlob = std::move(engineBlob); mEngine.reset(); - mSafeEngine.reset(); } //! @@ -200,8 +190,8 @@ class LazilyDeserializedEngine //! \name Owned TensorRT objects //! Per TensorRT object lifetime requirements as outlined in the developer guide, //! the runtime must remain live while any engines created by the runtime are live. - //! DO NOT ADJUST the declaration order here: runtime -> (engine|safeEngine). - //! Destruction occurs in reverse declaration order: (engine|safeEngine) -> runtime. + //! DO NOT ADJUST the declaration order here: runtime -> (engine). + //! Destruction occurs in reverse declaration order: (engine) -> runtime. //!@{ //! The runtime used to track parent of mRuntime if one exists. @@ -214,9 +204,6 @@ class LazilyDeserializedEngine //! If mIsSafe is false, this points to the deserialized std engine std::unique_ptr mEngine{}; - //! If mIsSafe is true, this points to the deserialized safe engine - std::unique_ptr mSafeEngine{}; - //!@} }; @@ -326,30 +313,9 @@ void setTensorScalesFromCalibration(nvinfer1::INetworkDefinition& network, std:: //! bool hasSafeRuntime(); -//! -//! \brief Create a safe runtime object if the dynamic library is loaded. -//! -nvinfer1::safe::IRuntime* createSafeInferRuntime(nvinfer1::ILogger& logger) noexcept; - -//! -//! \brief Check if consistency checker is loaded. -//! -bool hasConsistencyChecker(); - -//! -//! \brief Create a consistency checker object if the dynamic library is loaded. -//! -nvinfer1::consistency::IConsistencyChecker* createConsistencyChecker( - nvinfer1::ILogger& logger, nvinfer1::IHostMemory const* engine) noexcept; - -//! -//! \brief Run consistency check on serialized engine. -//! -bool checkSafeEngine(void const* serializedEngine, int32_t const engineSize); - bool loadStreamingEngineToBuildEnv(std::string const& engine, BuildEnvironment& env, std::ostream& err); -bool loadEngineToBuildEnv(std::string const& engine, bool enableConsistency, BuildEnvironment& env, std::ostream& err); +bool loadEngineToBuildEnv(std::string const& engine, BuildEnvironment& env, std::ostream& err); } // namespace sample #endif // TRT_SAMPLE_ENGINES_H diff --git a/samples/common/sampleInference.cpp b/samples/common/sampleInference.cpp index dc3aa1c2..ca0098d4 100644 --- a/samples/common/sampleInference.cpp +++ b/samples/common/sampleInference.cpp @@ -50,8 +50,8 @@ using namespace nvinfer1; namespace sample { -template -bool validateTensorNames(MapType const& map, EngineType const* engine, int32_t const endBindingIndex) +template +bool validateTensorNames(TMapType const& map, TEngineType const* engine, int32_t const endBindingIndex) { // Check if the provided input tensor names match the input tensors of the engine. // Throw an error if the provided input tensor names cannot be found because it implies a potential typo. @@ -78,15 +78,15 @@ bool validateTensorNames(MapType const& map, EngineType const* engine, int32_t c return true; } -template +template class FillBindingClosure { private: using InputsMap = std::unordered_map; using BindingsVector = std::vector>; - EngineType const* engine; - ContextType const* context; + TEngineType const* mEngine; + nvinfer1::IExecutionContext const* mContext; InputsMap const& inputs; BindingsVector& bindings; int32_t batch; @@ -129,7 +129,7 @@ class FillBindingClosure bool fillAllBindings(int32_t batch, int32_t endBindingIndex) { - if (!validateTensorNames(inputs, engine, endBindingIndex)) + if (!validateTensorNames(inputs, mEngine, endBindingIndex)) { sample::gLogError << "Invalid tensor names found in --loadInputs flag." << std::endl; return false; @@ -148,10 +148,11 @@ class FillBindingClosure void getTensorInfo(TensorInfo& tensorInfo); public: - FillBindingClosure(EngineType const* _engine, ContextType const* _context, InputsMap const& _inputs, - BindingsVector& _bindings, int32_t _batch, int32_t _endBindingIndex, int32_t _profileIndex) - : engine(_engine) - , context(_context) + FillBindingClosure(TEngineType const* _engine, nvinfer1::IExecutionContext const* _context, + InputsMap const& _inputs, BindingsVector& _bindings, int32_t _batch, int32_t _endBindingIndex, + int32_t _profileIndex) + : mEngine(_engine) + , mContext(_context) , inputs(_inputs) , bindings(_bindings) , batch(_batch) @@ -167,36 +168,19 @@ class FillBindingClosure }; template <> -void FillBindingClosure::getTensorInfo(TensorInfo& tensorInfo) +void FillBindingClosure::getTensorInfo(TensorInfo& tensorInfo) { auto const b = tensorInfo.bindingIndex; - auto const name = engine->getIOTensorName(b); + auto const name = mEngine->getIOTensorName(b); tensorInfo.name = name; - tensorInfo.dims = context->getTensorShape(name); + tensorInfo.dims = mContext->getTensorShape(name); tensorInfo.isDynamic = std::any_of( tensorInfo.dims.d, tensorInfo.dims.d + tensorInfo.dims.nbDims, [](int32_t dim) { return dim == -1; }); - tensorInfo.comps = engine->getTensorComponentsPerElement(name, profileIndex); - tensorInfo.strides = context->getTensorStrides(name); - tensorInfo.vectorDimIndex = engine->getTensorVectorizedDim(name, profileIndex); - tensorInfo.isInput = engine->getTensorIOMode(name) == TensorIOMode::kINPUT; - tensorInfo.dataType = engine->getTensorDataType(name); -} - -template <> -void FillBindingClosure::getTensorInfo( - TensorInfo& tensorInfo) -{ - // Use enqueueV3 for safe engine/context - auto const b = tensorInfo.bindingIndex; - auto const name = engine->getIOTensorName(b); - tensorInfo.name = name; - tensorInfo.dims = engine->getTensorShape(name); - tensorInfo.isDynamic = false; - tensorInfo.comps = engine->getTensorComponentsPerElement(name); - tensorInfo.strides = context->getTensorStrides(name); - tensorInfo.vectorDimIndex = engine->getTensorVectorizedDim(name); - tensorInfo.isInput = engine->getTensorIOMode(name) == TensorIOMode::kINPUT; - tensorInfo.dataType = engine->getTensorDataType(name); + tensorInfo.comps = mEngine->getTensorComponentsPerElement(name, profileIndex); + tensorInfo.strides = mContext->getTensorStrides(name); + tensorInfo.vectorDimIndex = mEngine->getTensorVectorizedDim(name, profileIndex); + tensorInfo.isInput = mEngine->getTensorIOMode(name) == TensorIOMode::kINPUT; + tensorInfo.dataType = mEngine->getTensorDataType(name); } namespace @@ -262,39 +246,9 @@ bool setUpInference(InferenceEnvironment& iEnv, InferenceOptions const& inferenc // Use managed memory on integrated devices when transfers are skipped // and when it is explicitly requested on the commandline. bool useManagedMemory{(inference.skipTransfers && isIntegrated) || inference.useManaged}; - using FillSafeBindings = FillBindingClosure; - if (iEnv.safe) - { - ASSERT(sample::hasSafeRuntime()); - - auto* safeEngine = iEnv.engine.getSafe(); - SMP_RETVAL_IF_FALSE(safeEngine != nullptr, "Got invalid safeEngine!", false, sample::gLogError); - - // Release serialized blob to save memory space. - iEnv.engine.releaseBlob(); - - for (int32_t s = 0; s < inference.infStreams; ++s) - { - auto ec = safeEngine->createExecutionContext(); - if (ec == nullptr) - { - sample::gLogError << "Unable to create execution context for stream " << s << "." << std::endl; - return false; - } + SMP_RETVAL_IF_FALSE(!iEnv.safe, "Safe inference is not supported!", false, sample::gLogError); - sample::gLogInfo << "Created safe execution context with device memory size: " - << (safeEngine->getDeviceMemorySize() / 1.0_MiB) << " MiB" << std::endl; - - iEnv.safeContexts.emplace_back(ec); - iEnv.bindings.emplace_back(new Bindings(useManagedMemory)); - } - int32_t const nbIOTensor = safeEngine->getNbIOTensors(); - auto const* safeContext = iEnv.safeContexts.front().get(); - // batch is set to 1 because safety only support explicit batch. - return FillSafeBindings(safeEngine, safeContext, inference.inputs, iEnv.bindings, 1, nbIOTensor, 0)(); - } - - using FillStdBindings = FillBindingClosure; + using FillStdBindings = FillBindingClosure; auto* engine = iEnv.engine.get(); SMP_RETVAL_IF_FALSE(engine != nullptr, "Got invalid engine!", false, sample::gLogError); @@ -388,10 +342,12 @@ bool setUpInference(InferenceEnvironment& iEnv, InferenceOptions const& inferenc } ec->setNvtxVerbosity(inference.nvtxVerbosity); +#if !TRT_WINML int32_t const persistentCacheLimit = samplesCommon::getMaxPersistentCacheSize() * inference.persistentCacheRatio; sample::gLogInfo << "Setting persistentCacheLimit to " << persistentCacheLimit << " bytes." << std::endl; ec->setPersistentCacheLimit(persistentCacheLimit); +#endif auto setProfile = ec->setOptimizationProfileAsync(inference.optProfileIndex, setOptProfileStream); CHECK(cudaStreamSynchronize(setOptProfileStream)); @@ -557,7 +513,7 @@ TaskInferenceEnvironment::TaskInferenceEnvironment( , batch(bs) { BuildEnvironment bEnv(/* isSafe */ false, /* versionCompatible */ false, DLACore, "", getTempfileControlDefaults()); - loadEngineToBuildEnv(engineFile, false, bEnv, sample::gLogError); + loadEngineToBuildEnv(engineFile, bEnv, sample::gLogError); std::unique_ptr tmp(new InferenceEnvironment(bEnv)); iEnv = std::move(tmp); @@ -715,39 +671,6 @@ class EnqueueGraphSafe TrtCudaGraph& mGraph; }; -//! -//! \class EnqueueSafe -//! \brief Functor to enqueue safe execution context -//! -class EnqueueSafe -{ -public: - explicit EnqueueSafe(nvinfer1::safe::IExecutionContext& context, Bindings const& bindings) - : mContext(context) - , mBindings(bindings) - { - ASSERT(mBindings.setSafeTensorAddresses(mContext)); - } - - bool operator()(TrtCudaStream& stream) const - { - try - { - return mContext.enqueueV3(stream.get()); - } - catch (const std::exception&) - { - return false; - } - return false; - } - - nvinfer1::safe::IExecutionContext& mContext; - -private: - Bindings const& mBindings; -}; - using EnqueueFunction = std::function; enum class StreamType : int32_t @@ -779,12 +702,11 @@ using EnqueueTimes = std::array; //! \class Iteration //! \brief Inference iteration and streams management //! -template class Iteration { public: - Iteration(int32_t id, InferenceOptions const& inference, ContextType& context, Bindings& bindings) + Iteration(int32_t id, InferenceOptions const& inference, nvinfer1::IExecutionContext& context, Bindings& bindings) : mBindings(bindings) , mStreamId(id) , mDepth(1 + inference.overlap) @@ -991,21 +913,6 @@ class Iteration } } - void createEnqueueFunction(InferenceOptions const& inference, nvinfer1::safe::IExecutionContext& context, Bindings&) - { - mEnqueue = EnqueueFunction(EnqueueSafe(context, mBindings)); - if (inference.graph) - { - TrtCudaStream& stream = getStream(StreamType::kCOMPUTE); - ASSERT(mEnqueue(stream)); - stream.synchronize(); - mGraph.beginCapture(stream); - ASSERT(mEnqueue(stream)); - mGraph.endCapture(stream); - mEnqueue = EnqueueFunction(EnqueueGraphSafe(mGraph)); - } - } - Bindings& mBindings; TrtCudaGraph mGraph; @@ -1021,11 +928,10 @@ class Iteration int32_t enqueueStart{0}; std::vector mEnqueueTimes; - ContextType* mContext{nullptr}; + nvinfer1::IExecutionContext* mContext{nullptr}; }; -template -bool inferenceLoop(std::vector>>& iStreams, TimePoint const& cpuStart, +bool inferenceLoop(std::vector>& iStreams, TimePoint const& cpuStart, TrtCudaEvent const& gpuStart, int iterations, float maxDurationMs, float warmupMs, std::vector& trace, bool skipTransfers, float idleMs) { @@ -1085,7 +991,6 @@ bool inferenceLoop(std::vector>>& iStream return true; } -template void inferenceExecution(InferenceOptions const& inference, InferenceEnvironment& iEnv, SyncStruct& sync, int32_t const threadIdx, int32_t const streamsPerThread, int32_t device, std::vector& trace) noexcept @@ -1101,13 +1006,12 @@ void inferenceExecution(InferenceOptions const& inference, InferenceEnvironment& cudaCheck(cudaSetDevice(device)); - std::vector>> iStreams; + std::vector> iStreams; for (int32_t s = 0; s < streamsPerThread; ++s) { int32_t const streamId{threadIdx * streamsPerThread + s}; - auto* iteration = new Iteration( - streamId, inference, *iEnv.template getContext(streamId), *iEnv.bindings[streamId]); + auto* iteration = new Iteration(streamId, inference, *iEnv.getContext(streamId), *iEnv.bindings[streamId]); if (inference.skipTransfers) { iteration->setInputData(true); @@ -1152,16 +1056,8 @@ void inferenceExecution(InferenceOptions const& inference, InferenceEnvironment& inline std::thread makeThread(InferenceOptions const& inference, InferenceEnvironment& iEnv, SyncStruct& sync, int32_t threadIdx, int32_t streamsPerThread, int32_t device, std::vector& trace) { - - if (iEnv.safe) - { - ASSERT(sample::hasSafeRuntime()); - return std::thread(inferenceExecution, std::cref(inference), std::ref(iEnv), - std::ref(sync), threadIdx, streamsPerThread, device, std::ref(trace)); - } - - return std::thread(inferenceExecution, std::cref(inference), std::ref(iEnv), - std::ref(sync), threadIdx, streamsPerThread, device, std::ref(trace)); + return std::thread(inferenceExecution, std::cref(inference), std::ref(iEnv), std::ref(sync), threadIdx, + streamsPerThread, device, std::ref(trace)); } } // namespace @@ -1169,6 +1065,7 @@ inline std::thread makeThread(InferenceOptions const& inference, InferenceEnviro bool runInference( InferenceOptions const& inference, InferenceEnvironment& iEnv, int32_t device, std::vector& trace) { + SMP_RETVAL_IF_FALSE(!iEnv.safe, "Safe inference is not supported!", false, sample::gLogError); cudaCheck(cudaProfilerStart()); trace.resize(0); @@ -1266,40 +1163,25 @@ bool timeDeserialize(InferenceEnvironment& iEnv, SystemOptions const& sys) std::unique_ptr rt{createRuntime()}; std::unique_ptr engine; - std::unique_ptr safeRT{sample::createSafeInferRuntime(sample::gLogger.getTRTLogger())}; - std::unique_ptr safeEngine; - - if (iEnv.safe) - { - ASSERT(sample::hasSafeRuntime() && safeRT != nullptr); - safeRT->setErrorRecorder(&gRecorder); - } + SMP_RETVAL_IF_FALSE(!iEnv.safe, "Safe inference is not supported!", false, sample::gLogError); auto timeDeserializeFn = [&]() -> float { bool deserializeOK{false}; engine.reset(nullptr); - safeEngine.reset(nullptr); auto startClock = std::chrono::high_resolution_clock::now(); - if (iEnv.safe) + SMP_RETVAL_IF_FALSE(!iEnv.safe, "Safe inference is not supported!", false, sample::gLogError); + + auto& reader = iEnv.engine.getFileReader(); + reader.reset(); + ASSERT(reader.isOpen()); +#if !TRT_WINML + for (auto const& pluginPath : sys.dynamicPlugins) { - auto& engineBlob = iEnv.engine.getBlob(); - safeEngine.reset(safeRT->deserializeCudaEngine(engineBlob.data, engineBlob.size)); - deserializeOK = (safeEngine != nullptr); + rt->getPluginRegistry().loadLibrary(pluginPath.c_str()); } - else - { - auto& reader = iEnv.engine.getFileReader(); - reader.reset(); - ASSERT(reader.isOpen()); -#if !TRT_WINML - for (auto const& pluginPath : sys.dynamicPlugins) - { - rt->getPluginRegistry().loadLibrary(pluginPath.c_str()); - } #endif - engine.reset(rt->deserializeCudaEngine(reader)); - deserializeOK = (engine != nullptr); - } + engine.reset(rt->deserializeCudaEngine(reader)); + deserializeOK = (engine != nullptr); auto endClock = std::chrono::high_resolution_clock::now(); // return NAN if deserialization failed. return deserializeOK ? std::chrono::duration(endClock - startClock).count() : NAN; @@ -1430,6 +1312,9 @@ void Binding::dump(std::ostream& os, Dims dims, Dims strides, int32_t vectorDim, if (outputAllocator != nullptr) { outputBuffer = outputAllocator->getBuffer()->getHostBuffer(); + // Overwrite dimensions with those reported by the output allocator. + dims = outputAllocator->getFinalDims(); + os << "Final shape is " << dims << " reported by the output allocator." << std::endl; } else { @@ -1582,9 +1467,8 @@ void Bindings::transferOutputToHost(TrtCudaStream& stream) } } -template <> -void Bindings::dumpBindingValues(nvinfer1::IExecutionContext const& context, - int32_t binding, std::ostream& os, std::string const& separator /*= " "*/, int32_t batch /*= 1*/) const +void Bindings::dumpBindingValues(nvinfer1::IExecutionContext const& context, int32_t binding, std::ostream& os, + std::string const& separator /*= " "*/, int32_t batch /*= 1*/) const { auto const tensorName = context.getEngine().getIOTensorName(binding); Dims dims = context.getTensorShape(tensorName); @@ -1612,21 +1496,13 @@ std::string genFilenameSafeString(std::string const& s) return res; } -template -Dims getBindingDimensions(ContextType const& /*context*/, std::string const& /*name*/) -{ - ASSERT(0 && "Unimplemented"); -} - -template <> Dims getBindingDimensions(nvinfer1::IExecutionContext const& context, std::string const& name) { return context.getTensorShape(name.c_str()); } } // namespace -template -void Bindings::dumpRawBindingToFiles(ContextType const& context, std::ostream& os) const +void Bindings::dumpRawBindingToFiles(nvinfer1::IExecutionContext const& context, std::ostream& os) const { os << "Dumping I/O Bindings to RAW Files:" << std::endl; for (auto const& n : mNames) @@ -1670,11 +1546,7 @@ void Bindings::dumpRawBindingToFiles(ContextType const& context, std::ostream& o } } -template void Bindings::dumpRawBindingToFiles( - nvinfer1::IExecutionContext const& context, std::ostream& os) const; - -template <> -void Bindings::dumpBindingDimensions( +void Bindings::dumpBindingDimensions( std::string const& name, nvinfer1::IExecutionContext const& context, std::ostream& os) const { auto const dims = context.getTensorShape(name.c_str()); @@ -1682,31 +1554,6 @@ void Bindings::dumpBindingDimensions( os << dims; } -template <> -void Bindings::dumpBindingDimensions( - std::string const& name, nvinfer1::safe::IExecutionContext const& context, std::ostream& os) const -{ - auto const dims = context.getEngine().getTensorShape(name.c_str()); - // Do not add a newline terminator, because the caller may be outputting a JSON string. - os << dims; -} - -template <> -void Bindings::dumpBindingValues(nvinfer1::safe::IExecutionContext const& context, - int32_t binding, std::ostream& os, std::string const& separator /*= " "*/, int32_t batch /*= 1*/) const -{ - auto const tensorName = context.getEngine().getIOTensorName(binding); - Dims const strides = context.getTensorStrides(tensorName); - auto const dims = context.getEngine().getTensorShape(tensorName); - int32_t const vectorDim = context.getEngine().getTensorVectorizedDim(tensorName); - int32_t const spv = context.getEngine().getTensorComponentsPerElement(tensorName); - - mBindings[binding].dump(os, dims, strides, vectorDim, spv, separator); -} - -template void Bindings::dumpRawBindingToFiles( - nvinfer1::safe::IExecutionContext const& context, std::ostream& os) const; - std::unordered_map Bindings::getBindings(std::function predicate) const { std::unordered_map bindings; @@ -1748,29 +1595,6 @@ bool Bindings::setTensorAddresses(nvinfer1::IExecutionContext& context) const return true; } -bool Bindings::setSafeTensorAddresses(nvinfer1::safe::IExecutionContext& context) const -{ - for (auto const& b : mNames) - { - auto const name = b.first.c_str(); - if (context.getEngine().getTensorIOMode(name) == nvinfer1::TensorIOMode::kINPUT) - { - if (!context.setInputTensorAddress(name, static_cast(mDevicePointers[b.second]))) - { - return false; - } - } - else - { - if (!context.setOutputTensorAddress(name, mDevicePointers[b.second])) - { - return false; - } - } - } - return true; -} - bool DebugTensorWriter::processDebugTensor(void const* addr, nvinfer1::TensorLocation location, nvinfer1::DataType type, nvinfer1::Dims const& shape, char const* name, cudaStream_t stream) { diff --git a/samples/common/sampleInference.h b/samples/common/sampleInference.h index af8fc181..d9ebed92 100644 --- a/samples/common/sampleInference.h +++ b/samples/common/sampleInference.h @@ -30,8 +30,6 @@ #include #include -#include "NvInferSafeRuntime.h" - namespace sample { @@ -70,10 +68,8 @@ struct InferenceEnvironment bool error{false}; bool safe{false}; - std::vector> safeContexts; - template - inline ContextType* getContext(int32_t streamIdx); + inline nvinfer1::IExecutionContext* getContext(int32_t streamIdx); //! Storage for input shape tensors. //! @@ -87,18 +83,11 @@ struct InferenceEnvironment std::list> inputShapeTensorValues; }; -template <> inline nvinfer1::IExecutionContext* InferenceEnvironment::getContext(int32_t streamIdx) { return contexts[streamIdx].get(); } -template <> -inline nvinfer1::safe::IExecutionContext* InferenceEnvironment::getContext(int32_t streamIdx) -{ - return safeContexts[streamIdx].get(); -} - //! //! \brief Set up contexts and bindings for inference //! @@ -183,40 +172,30 @@ class Bindings mBindings[binding].fill(); } - template - void dumpBindingDimensions(std::string const& name, ContextType const& context, std::ostream& os) const; + void dumpBindingDimensions( + std::string const& name, nvinfer1::IExecutionContext const& context, std::ostream& os) const; - template - void dumpBindingValues(ContextType const& context, int32_t binding, std::ostream& os, + void dumpBindingValues(nvinfer1::IExecutionContext const& context, int32_t binding, std::ostream& os, std::string const& separator = " ", int32_t batch = 1) const; - template - void dumpRawBindingToFiles(ContextType const& context, std::ostream& os) const; + void dumpRawBindingToFiles(nvinfer1::IExecutionContext const& context, std::ostream& os) const; - template - void dumpInputs(ContextType const& context, std::ostream& os) const + void dumpInputs(nvinfer1::IExecutionContext const& context, std::ostream& os) const { auto isInput = [](Binding const& b) { return b.isInput; }; dumpBindings(context, isInput, os); } - template - void dumpOutputs(ContextType const& context, std::ostream& os) const - { - auto isOutput = [](Binding const& b) { return !b.isInput; }; - dumpBindings(context, isOutput, os); - } + void dumpOutputs(nvinfer1::IExecutionContext const& context, std::ostream& os) const; - template - void dumpBindings(ContextType const& context, std::ostream& os) const + void dumpBindings(nvinfer1::IExecutionContext const& context, std::ostream& os) const { auto all = [](Binding const& b) { return true; }; dumpBindings(context, all, os); } - template - void dumpBindings( - ContextType const& context, std::function predicate, std::ostream& os) const + void dumpBindings(nvinfer1::IExecutionContext const& context, std::function predicate, + std::ostream& os) const { for (auto const& n : mNames) { @@ -256,8 +235,6 @@ class Bindings bool setTensorAddresses(nvinfer1::IExecutionContext& context) const; - bool setSafeTensorAddresses(nvinfer1::safe::IExecutionContext& context) const; - private: std::unordered_map mNames; std::vector mBindings; diff --git a/samples/common/sampleOptions.cpp b/samples/common/sampleOptions.cpp index c4235a49..bdb1b21c 100644 --- a/samples/common/sampleOptions.cpp +++ b/samples/common/sampleOptions.cpp @@ -1254,7 +1254,6 @@ void BuildOptions::parse(Arguments& arguments) getAndDelOption(arguments, "--safe", safe); getAndDelOption(arguments, "--buildDLAStandalone", buildDLAStandalone); getAndDelOption(arguments, "--allowGPUFallback", allowGPUFallback); - getAndDelOption(arguments, "--consistency", consistency); getAndDelOption(arguments, "--restricted", restricted); getAndDelOption(arguments, "--skipInference", skipInference); getAndDelOption(arguments, "--directIO", directIO); @@ -1446,6 +1445,7 @@ void BuildOptions::parse(Arguments& arguments) } getAndDelOption(arguments, "--errorOnTimingCacheMiss", errorOnTimingCacheMiss); getAndDelOption(arguments, "--builderOptimizationLevel", builderOptimizationLevel); + getAndDelOption(arguments, "--maxTactics", maxTactics); std::string runtimePlatformArgs; getAndDelOption(arguments, "--runtimePlatform", runtimePlatformArgs); @@ -1839,7 +1839,6 @@ void SafeBuilderOptions::parse(Arguments& arguments) getFormats(outputFormats, "--outputIOFormats"); getAndDelOption(arguments, "--int8", int8); getAndDelOption(arguments, "--calib", calibFile); - getAndDelOption(arguments, "--consistency", consistency); getAndDelOption(arguments, "--std", standard); #if !TRT_WINML std::string pluginName; @@ -2180,6 +2179,7 @@ std::ostream& operator<<(std::ostream& os, const BuildOptions& options) "Preview Features: "; printPreviewFlags(os, options) << std::endl << "MaxAuxStreams: " << options.maxAuxStreams << std::endl << "BuilderOptimizationLevel: " << options.builderOptimizationLevel << std::endl << + "MaxTactics: " << options.maxTactics << std::endl << "Calibration Profile Index: " << options.calibProfile << std::endl << "Weight Streaming: " << boolToEnabled(options.allowWeightStreaming) << std::endl << "Runtime Platform: " << options.runtimePlatform << std::endl << @@ -2529,7 +2529,6 @@ void BuildOptions::help(std::ostream& os) " specifying --inputIOFormats and --outputIOFormats restricts I/O data type and memory layout" "\n" " (default = disabled)" "\n" " --allowGPUFallback When DLA is enabled, allow GPU fallback for unsupported layers (default = disabled)" "\n" - " --consistency Perform consistency checking on safety certified engine" "\n" " --restricted Enable safety scope checking with kSAFETY_SCOPE build flag" "\n" " --saveEngine= Save the serialized engine" "\n" " --loadEngine= Load a serialized engine" "\n" @@ -2556,6 +2555,9 @@ void BuildOptions::help(std::ostream& os) " --builderOptimizationLevel Set the builder optimization level. (default is 3)" "\n" " Higher level allows TensorRT to spend more building time for more optimization options." "\n" " Valid values include integers from 0 to the maximum optimization level, which is currently 5." "\n" + " --maxTactics Set the maximum number of tactics to time when there is a choice of tactics. (default is -1)" "\n" + " Larger number of tactics allow TensorRT to spend more building time on evaluating tactics." "\n" + " Default value -1 means TensorRT can decide the number of tactics based on its own heuristic." "\n" " --hardwareCompatibilityLevel=mode Make the engine file compatible with other GPU architectures. (default = none)" "\n" R"( Hardware Compatibility Level: mode ::= "none" | "ampere+")" "\n" " none = no compatibility" "\n" @@ -2770,7 +2772,6 @@ void SafeBuilderOptions::printHelp(std::ostream& os) R"( fmt ::= ("chw"|"chw2"|"chw4"|"hwc8"|"chw16"|"chw32"|"dhwc8"|)" << std::endl << R"( "cdhw32"|"hwc"|"dla_linear"|"dla_hwc4")["+"fmt])" << std::endl << " --int8 Enable int8 precision, in addition to fp16 (default = disabled)" << std::endl << - " --consistency Enable consistency check for serialized engine, (default = disabled)" << std::endl << " --std Build standard serialized engine, (default = disabled)" << std::endl << " --calib= Read INT8 calibration cache file" << std::endl << " --serialized= Save the serialized network" << std::endl << diff --git a/samples/common/sampleOptions.h b/samples/common/sampleOptions.h index bd5fe880..8ca0a655 100644 --- a/samples/common/sampleOptions.h +++ b/samples/common/sampleOptions.h @@ -37,6 +37,7 @@ namespace sample constexpr int32_t defaultAvgTiming{8}; constexpr int32_t defaultMaxAuxStreams{-1}; constexpr int32_t defaultBuilderOptimizationLevel{-1}; +constexpr int32_t defaultMaxTactics{-1}; // System default params constexpr int32_t defaultDevice{0}; @@ -227,7 +228,6 @@ class BuildOptions : public Options bool safe{false}; bool buildDLAStandalone{false}; bool allowGPUFallback{false}; - bool consistency{false}; bool restricted{false}; bool skipInference{false}; bool save{false}; @@ -239,6 +239,7 @@ class BuildOptions : public Options bool excludeLeanRuntime{false}; bool disableCompilationCache{false}; int32_t builderOptimizationLevel{defaultBuilderOptimizationLevel}; + int32_t maxTactics{defaultMaxTactics}; SparsityFlag sparsity{SparsityFlag::kDISABLE}; nvinfer1::ProfilingVerbosity profilingVerbosity{nvinfer1::ProfilingVerbosity::kLAYER_NAMES_ONLY}; std::string engine; @@ -359,7 +360,6 @@ class SafeBuilderOptions : public Options bool int4{false}; std::string calibFile{}; std::vector plugins; - bool consistency{false}; bool standard{false}; TimingCacheMode timingCacheMode{TimingCacheMode::kLOCAL}; std::string timingCacheFile{}; diff --git a/samples/common/sampleReporting.cpp b/samples/common/sampleReporting.cpp index 1d3e2ca5..e9dda6e0 100644 --- a/samples/common/sampleReporting.cpp +++ b/samples/common/sampleReporting.cpp @@ -461,33 +461,19 @@ void dumpInputs(nvinfer1::IExecutionContext const& context, Bindings const& bind bindings.dumpInputs(context, os); } -template -void dumpOutputs(ContextType const& context, Bindings const& bindings, std::ostream& os) +void dumpOutputs(nvinfer1::IExecutionContext const& context, Bindings const& bindings, std::ostream& os) { - os << "Output Tensors:" << std::endl; - bindings.dumpOutputs(context, os); + auto isOutput = [](Binding const& b) { return !b.isInput; }; + bindings.dumpBindings(context, isOutput, os); } -template -void dumpOutputs(nvinfer1::IExecutionContext const& context, Bindings const& bindings, std::ostream& os); -template -void dumpOutputs(nvinfer1::safe::IExecutionContext const& context, Bindings const& bindings, std::ostream& os); - -template -void dumpRawBindingsToFiles(ContextType const& context, Bindings const& bindings, std::ostream& os) +void dumpRawBindingsToFiles(nvinfer1::IExecutionContext const& context, Bindings const& bindings, std::ostream& os) { bindings.dumpRawBindingToFiles(context, os); } -template -void dumpRawBindingsToFiles(nvinfer1::IExecutionContext const& context, Bindings const& bindings, std::ostream& os); - -template -void dumpRawBindingsToFiles(nvinfer1::safe::IExecutionContext const& context, Bindings const& bindings, std::ostream& os); - -template void exportJSONOutput( - ContextType const& context, Bindings const& bindings, std::string const& fileName, int32_t batch) + nvinfer1::IExecutionContext const& context, Bindings const& bindings, std::string const& fileName, int32_t batch) { std::ofstream os(fileName, std::ofstream::trunc); std::string sep = " "; @@ -509,11 +495,8 @@ void exportJSONOutput( os << "]" << std::endl; } -template -void exportJSONOutput(nvinfer1::IExecutionContext const& context, Bindings const& bindings, std::string const& fileName, int32_t batch); - -template void exportJSONOutput(nvinfer1::safe::IExecutionContext const& context, Bindings const& bindings, - std::string const& fileName, int32_t batch); +void exportJSONOutput( + nvinfer1::IExecutionContext const& context, Bindings const& bindings, std::string const& fileName, int32_t batch); void printLayerInfo( ReportingOptions const& reporting, nvinfer1::ICudaEngine* engine, nvinfer1::IExecutionContext* context) @@ -583,8 +566,7 @@ void printPerformanceProfile(ReportingOptions const& reporting, InferenceEnviron namespace details { -template -void dump(std::unique_ptr const& context, std::unique_ptr const& binding, +void dump(std::unique_ptr const& context, std::unique_ptr const& binding, ReportingOptions const& reporting, int32_t batch) { if (!context) @@ -615,17 +597,13 @@ void printOutput(ReportingOptions const& reporting, InferenceEnvironment const& sample::gLogError << "Empty bindings! Skip printing outputs." << std::endl; return; } - if (iEnv.safe) { - auto const& context = iEnv.safeContexts.at(0); - details::dump(context, binding, reporting, batch); - } - else - { - auto const& context = iEnv.contexts.at(0); - details::dump(context, binding, reporting, batch); + sample::gLogError << "Safe inferernce is not supported!" << std::endl; + return; } + auto const& context = iEnv.contexts.at(0); + details::dump(context, binding, reporting, batch); } } // namespace sample diff --git a/samples/common/sampleReporting.h b/samples/common/sampleReporting.h index 74f510cf..922ef3c8 100644 --- a/samples/common/sampleReporting.h +++ b/samples/common/sampleReporting.h @@ -170,19 +170,15 @@ void dumpInputs(nvinfer1::IExecutionContext const& context, Bindings const& bind //! //! \brief Print output tensors to stream //! -template -void dumpOutputs(ContextType const& context, Bindings const& bindings, std::ostream& os); +void dumpOutputs(nvinfer1::IExecutionContext const& context, Bindings const& bindings, std::ostream& os); -template -void dumpRawBindingsToFiles(ContextType const& context, Bindings const& bindings, std::ostream& os); +void dumpRawBindingsToFiles(nvinfer1::IExecutionContext const& context, Bindings const& bindings, std::ostream& os); //! //! \brief Export output tensors to JSON file //! -template void exportJSONOutput( - ContextType const& context, Bindings const& bindings, std::string const& fileName, int32_t batch); - + nvinfer1::IExecutionContext const& context, Bindings const& bindings, std::string const& fileName, int32_t batch); //! //! \struct LayerProfile diff --git a/samples/python/aliased_io_plugin/README.md b/samples/python/aliased_io_plugin/README.md new file mode 100644 index 00000000..889f3975 --- /dev/null +++ b/samples/python/aliased_io_plugin/README.md @@ -0,0 +1,85 @@ +# Utilizing a plugin with aliased I/O to realize in-place updates + +## Description + +This sample, `aliased_io_plugin`, implements a Python-based plugin for an in-place scatter-add operation. + +Scatter-add "scatters" a set of source values into memory locations based on a given set of indices and adds together those values mapped to the same location. + +## How does this sample work? + +This sample creates and runs a TensorRT engine demonstrating an example commonly encountered with Graph Neural Networks (GNNs). In GNNs, the features associated with the neighbors of each node is aggregated with an order-independent operation (e.g. sum, product), averaged by the size of the neighborhood, and then run through a classifier to determine a property of interest; example applications of GNNs include the modeling of social networks and building recommendation systems. + +Here, we use an addition as the aggregation function; therefore, we build a network containing a Scatter-add plugin node. It receives a "source" tensor containing the features of the neighbors of each node, and an "index" tensor denoting the index of each such node. For example, consider the following graph: + +![alt text](aliased_io_gnn.png "GNN example") + +For simplicity, in this example, and in the sample in general, we utilize scalar features at each node. The "source" could be represented as a flattened tensor `[1.0, 3.0, 5.0, 7.0, 1.0, 3.0]` while the corresponding source nodes are `[1, 2, 3, 0, 2, 3]`. It is clear that the Scatter-add should yield `[7.0, 1.0, 4.0, 8.0]`. This result is then normalized by the number of neighbors of each node and then fed into a simple dense layer followed by ReLU activation. + +### Implementing an in-place Scatter-add plugin using `IPluginV3OneBuildV2` interface + +Before the introduction of `IPluginV3OneBuildV2` interface, TensorRT plugin inputs were to be treated as read-only. In-place optimizations (output written to an input) and operations that inherently required an input to be modified, were kept out-of-reach due to this limitation. + +In the Scatter-add operation, an in-place operation is useful because a node of interest may have some pre-conditions that require the neighborhood aggregation to be combined with a bias. Another use case is in hierarchical aggregation where higher-layer features may have to be integrated as well. + +To allow writes to the input, `IPluginV3OneBuildV2` interface provides an API to declare certain input-output pairs as being aliased. In this case, the first output of the plugin and the first input are aliased, so we may declare: +```py +def get_aliased_input(self, output_index: int): + if output_index == 0: + return 0 + + return -1 +``` +A return value of `-1` indicates that that `output_index` is not aliased to any input. + +This new method `get_aliased_input` is the only difference between `IPluginV3OneBuildV2` and `IPluginV3OneBuild`. As part of the `V3_ONE` set of capability interfaces, `IPluginV3OneBuildV2` may be used in conjunction with `IPluginV3OneCore` and `IPluginV3OneRuntime`. + +### Creating network and building the engine + +To add the plugin to the network, the `INetworkDefinition::add_plugin_v3()` method is used. + +For subsequent averaging and classification steps, TensorRT ElementWise, MatrixMultiply, Activation and SoftMax layers are used. + +## Running the sample + +1. Run the sample to create a TensorRT inference engine and run inference: + `python3 aliased_io_plugin.py [-h] [--precision {fp32,fp16}] [--node_features NODE_FEATURES] [--edges EDGES] [--num_classes NUM_CLASSES] [--validate] [--seed SEED]` + +2. If the `--validate` flag was passed, verify that the sample ran successfully. If the sample runs successfully, you should see the following message: + ``` + Validation against reference successful! + ``` + +### Sample `--help` options + +To see the full list of available options and their descriptions, use the `-h` or `--help` command line option. + + +# Additional resources + +The following resources provide a deeper understanding about the V3 TensorRT plugins and the Scatter-Add operation: + +**ScatterElements** +- [ONNX: ScatterElements](https://onnx.ai/onnx/operators/onnx__ScatterElements.html) + +**TensorRT plugins** +- [Extending TensorRT with Custom Layers](https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#extending) +- [TensorRT Python-based Plugins](https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/#add_custom_layer_python) + +**Other documentation** +- [Introduction To NVIDIA’s TensorRT Samples](https://docs.nvidia.com/deeplearning/sdk/tensorrt-sample-support-guide/index.html#samples) +- [Working With TensorRT Using The Python API](https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/#python_topics) +- [NVIDIA’s TensorRT Documentation Library](https://docs.nvidia.com/deeplearning/sdk/tensorrt-archived/index.html) + +# License + +For terms and conditions for use, reproduction, and distribution, see the [TensorRT Software License Agreement](https://docs.nvidia.com/deeplearning/sdk/tensorrt-sla/index.html) documentation. + +# Changelog + +August 2024 +This is the first version of this `README.md` file. + +# Known issues + +There are no known issues in this sample. diff --git a/samples/python/aliased_io_plugin/aliased_io_gnn.png b/samples/python/aliased_io_plugin/aliased_io_gnn.png new file mode 100644 index 00000000..3ce0e0d6 Binary files /dev/null and b/samples/python/aliased_io_plugin/aliased_io_gnn.png differ diff --git a/samples/python/aliased_io_plugin/aliased_io_plugin.py b/samples/python/aliased_io_plugin/aliased_io_plugin.py new file mode 100644 index 00000000..2c789da2 --- /dev/null +++ b/samples/python/aliased_io_plugin/aliased_io_plugin.py @@ -0,0 +1,454 @@ +# +# SPDX-FileCopyrightText: Copyright (c) 2024 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. +# + + +import torch +import triton +import triton.language as tl + +import tensorrt as trt +import cupy as cp +import numpy as np +import ast + +from polygraphy.backend.trt import ( + CreateConfig, + TrtRunner, + create_network, + engine_from_network, +) + +import argparse + +import logging + +logging.basicConfig(level=logging.INFO) +logging.getLogger("AliasedIOPlugin").setLevel(logging.INFO) +log = logging.getLogger("AliasedIOPlugin") + +import sys + +# An OpenAI Triton kernel to both perform the scatter-add and counts of each index +@triton.jit +def scatter_add_kernel( + self_ptr, + src_ptr, # Source array + index_ptr, # Indices + n_elements, # Number of elements in the source/indices array + n_labels, # Number of labels (distinct indices) + counts, # Output counts of each distinct index + BLOCK_SIZE: tl.constexpr, + BLOCK_SIZE_C: tl.constexpr, +): + pid = tl.program_id(axis=0) + block_start = pid * BLOCK_SIZE + offsets = block_start + tl.arange(0, BLOCK_SIZE) + + mask = offsets < n_elements + + # Load the source values and indices + src = tl.load(src_ptr + offsets, mask=mask) + indices = tl.load(index_ptr + offsets, mask=mask) + + # Iterate over n_labels + for i in range(0, BLOCK_SIZE_C): + idx = i + tl.program_id(1) * BLOCK_SIZE_C + 1 + if idx <= n_labels: + l_mask = indices == idx + # Perform the scatter-add operation + tl.atomic_add(self_ptr + idx - 1, tl.sum(tl.where(l_mask, src, 0))) + # Update count for idx + tl.atomic_add(counts + idx - 1, tl.sum(tl.where(l_mask, 1, 0))) + + +def volume(d): + return np.prod(d) + + +class UnownedMemory: + def __init__(self, ptr, shape, dtype): + mem = cp.cuda.UnownedMemory(ptr, volume(shape) * cp.dtype(dtype).itemsize, self) + cupy_ptr = cp.cuda.MemoryPointer(mem, 0) + self.d = cp.ndarray(shape, dtype=dtype, memptr=cupy_ptr) + + +class ScatterAddPlugin( + trt.IPluginV3, + trt.IPluginV3OneCore, + trt.IPluginV3OneBuildV2, + trt.IPluginV3OneRuntime, +): + def __init__(self, fc=None): + trt.IPluginV3.__init__(self) + trt.IPluginV3OneCore.__init__(self) + trt.IPluginV3OneBuildV2.__init__(self) + trt.IPluginV3OneRuntime.__init__(self) + + self.plugin_namespace = "" + self.plugin_name = "ScatterAddPlugin" + self.plugin_version = "1" + self.num_outputs = 2 + + def get_capability_interface(self, type): + return self + + def get_output_data_types(self, input_types): + self.type = input_types[0] + return [input_types[0], trt.int64] + + def get_fields_to_serialize(self): + return trt.PluginFieldCollection([]) + + def get_output_shapes(self, inputs, shape_inputs, exprBuilder): + output_dims = [ + inputs[0], + trt.DimsExprs([inputs[0][0], exprBuilder.constant(1)]), + ] + + return output_dims + + def configure_plugin(self, inp, out): + pass + + def on_shape_change(self, inp, out): + pass + + def supports_format_combination( + self, pos: int, in_out: "list[trt.PluginTensorDesc]", num_inputs: int + ): + assert num_inputs == 3 + assert pos < len(in_out) + + desc = in_out[pos].desc + if desc.format != trt.TensorFormat.LINEAR: + return False + + # self, src and output have the same type + if pos in [0, 1, 3]: + return desc.type == self.type + + # indices anc the counts output are int64 + return desc.type == trt.int64 + + def enqueue(self, input_desc, output_desc, inputs, outputs, workspace, stream): + + # No-copy operations to setup torch tensors over the I/O buffers + inp_mem = UnownedMemory( + inputs[0], input_desc[0].dims, trt.nptype(input_desc[0].type) + ) + src_mem = UnownedMemory( + inputs[1], input_desc[1].dims, trt.nptype(input_desc[1].type) + ) + idx_mem = UnownedMemory( + inputs[2], input_desc[2].dims, trt.nptype(input_desc[2].type) + ) + counts_mem = UnownedMemory( + outputs[1], output_desc[1].dims, trt.nptype(output_desc[1].type) + ) + + inp = torch.as_tensor(inp_mem.d, device="cuda") + src = torch.as_tensor(src_mem.d, device="cuda") + idx = torch.as_tensor(idx_mem.d, device="cuda") + counts = torch.as_tensor(counts_mem.d, device="cuda") + + # Zero out the counts before passing to kernel + counts.zero_() + + n_classes = inp.shape[0] + n_elements = src.numel() + + # Block size definitions + BLOCK_SIZE = 1024 + BLOCK_SIZE_C = 32 + + # Calculate grid size + grid_x = (n_elements + BLOCK_SIZE - 1) // BLOCK_SIZE + grid_y = (n_classes + BLOCK_SIZE_C - 1) // BLOCK_SIZE_C + + scatter_add_kernel[(grid_x, grid_y)]( + inp, src, idx, n_elements, n_classes, counts, BLOCK_SIZE, BLOCK_SIZE_C + ) + + def attach_to_context(self, context): + return self.clone() + + def set_tactic(self, tactic): + pass + + def get_aliased_input(self, output_index: int): + if output_index == 0: + return 0 + + return -1 + + def clone(self): + cloned_plugin = ScatterAddPlugin() + cloned_plugin.__dict__.update(self.__dict__) + return cloned_plugin + + +class ScatterAddPluginCreator(trt.IPluginCreatorV3One): + def __init__(self): + trt.IPluginCreatorV3One.__init__(self) + self.name = "ScatterAddPlugin" + self.plugin_namespace = "" + self.plugin_version = "1" + self.field_names = trt.PluginFieldCollection([]) + + def create_plugin(self, name, fc, phase): + return ScatterAddPlugin() + + +def torch_ref(node_features, edges, W, precision): + # Initialize an output tensor for aggregation + aggregated = torch.zeros_like(node_features, dtype=precision, device="cuda") + + # Perform aggregation using scatter_add_ + aggregated.scatter_add_(0, edges[:, 1].unsqueeze(1), node_features[edges[:, 0]]) + + # Get the counts of each distinct index + bincounts = torch.bincount(edges[:, 1].contiguous()) + + # Normalize and classify + Y = W * (aggregated / bincounts.unsqueeze(1)).transpose(1, 0) + return torch.softmax(torch.relu(Y), dim=0) + + +numpy_to_torch_dtype = { + np.int32: torch.int32, + np.int64: torch.int64, + np.float16: torch.float16, + np.float32: torch.float32, +} + + +def parse_edges_string(input_string): + try: + # Parse the string into a list of integer pairs + raw_edges = ast.literal_eval(input_string) + + # Check if the parsed object is a list + if not isinstance(raw_edges, list): + return None, "The input string does not represent a list." + + edges = [] + for edge in raw_edges: + if ( + not isinstance(edge, list) + or len(edge) != 2 + or not all(isinstance(x, int) for x in edge) + ): + return ( + None, + f"Each edge must be a list of two integers. Invalid edge: {edge}", + ) + edges.append(edge) + + return edges, None + except (SyntaxError, ValueError) as e: + return None, f"Error parsing string: {e}" + + +def validate_edges(edges, n_nodes): + for edge in edges: + src, target = edge + if not (0 <= src < n_nodes) or not (0 <= target < n_nodes): + return f"Edge ({src}, {target}) is out of bounds. Must be in range [0, {n_nodes - 1}]." + + # check incoming edges + incoming_edges_count = [0] * n_nodes + for _, target in edges: + incoming_edges_count[target] += 1 + + for idx in range(n_nodes): + if incoming_edges_count[idx] == 0: + return f"Index {idx} has no incoming edges." + return None + + +def parse_edges(input_string, n_nodes): + parsed_edges, parse_error = parse_edges_string(input_string) + if parse_error: + return None, parse_error + else: + # Validate the edges + validation_error = validate_edges(parsed_edges, n_nodes) + if validation_error is not None: + return None, validation_error + else: + return parsed_edges, None + + +# Print adjacency matrix +def print_graph(edges, n_nodes): + adjacency_matrix = [[0] * n_nodes for _ in range(n_nodes)] + + for src, tgt in edges: + adjacency_matrix[src][tgt] = 1 + + for row in adjacency_matrix: + print(row) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument( + "--precision", + type=str, + default="fp32", + choices=["fp32", "fp16"], + help="Precision for node features", + ) + parser.add_argument( + "--node_features", + type=str, + default="[1.0,3.0,5.0,7.0]", + help="List of node features as a comma-separated list. e.g. [1.0,2.0,3.0].", + ) + parser.add_argument( + "--edges", + type=str, + default="[[0,1],[1,2],[2,3],[3,0],[0,2],[1,3]]", + help="Pairs of source->target directed edges. Every node must have at least one incoming edge. e.g. [[0,1],[1,0]].", + ) + parser.add_argument( + "--num_classes", type=int, default=3, help="Number of classes in the classifier" + ) + parser.add_argument( + "--validate", action="store_true", help="Validate result with reference" + ) + parser.add_argument("--seed", type=int, help="Seed to use for weights generation") + + args = parser.parse_args() + + if args.seed is not None: + print("Setting seed to:", args.seed) + torch.manual_seed(args.seed) + else: + print("Setting seed to:", torch.seed()) + + precision = trt.float32 if args.precision == "fp32" else trt.float16 + n_classes = args.num_classes + + numpy_precision = trt.nptype(precision) + torch_precision = numpy_to_torch_dtype[numpy_precision] + + if args.num_classes < 1: + parser.print_help() + log.error("num_classes must be a positive integer") + sys.exit(1) + + try: + float_list = ast.literal_eval(args.node_features) + if not isinstance(float_list, list): + parser.print_help() + log.error("The node_features string does not represent a list") + sys.exit(1) + + # Check if all elements in the list are floats/ints + if not all(isinstance(x, (float, int)) for x in float_list): + parser.print_help() + log.error("The node_features list must contain only numbers") + sys.exit(1) + except (SyntaxError, ValueError) as e: + parser.print_help() + log.error(f"The node_features string could not be parsed as a list: {e}") + sys.exit(1) + + node_features = torch.tensor(float_list, dtype=torch_precision, device="cuda").view( + -1, 1 + ) + + n_nodes = node_features.shape[0] + + parsed_edges, parse_error = parse_edges(args.edges, n_nodes) + if parse_error: + parser.print_help() + log.error(parse_error) + sys.exit(1) + + edges = torch.tensor(parsed_edges, device="cuda", dtype=torch.int64) + + print() + print("Adjacency matrix for graph:") + print_graph(edges, n_nodes) + print() + + target = torch.zeros_like(node_features, device="cuda") + + input_x = target.clone() + input_src = node_features[edges[:, 0]].flatten() + input_idx = edges[:, 1].contiguous() + 1 + + W = torch.randn((n_classes, 1), dtype=torch_precision, device="cuda") + + plg_registry = trt.get_plugin_registry() + my_plugin_creator = ScatterAddPluginCreator() + plg_registry.register_creator(my_plugin_creator, "") + + builder, network = create_network() + input_x_T = network.add_input(name="X", dtype=precision, shape=input_x.shape) + input_src_T = network.add_input(name="src", dtype=precision, shape=input_src.shape) + input_idx_T = network.add_input(name="idx", dtype=trt.int64, shape=input_idx.shape) + w_T = network.add_input(name="W", dtype=precision, shape=W.shape) + out = network.add_plugin_v3( + [input_x_T, input_src_T, input_idx_T], [], ScatterAddPlugin() + ) + cast_layer = network.add_cast(out.get_output(1), precision) + div_layer = network.add_elementwise( + out.get_output(0), + cast_layer.get_output(0), + op=trt.ElementWiseOperation.FLOOR_DIV, + ) + matmul_layer = network.add_matrix_multiply( + w_T, + trt.MatrixOperation.NONE, + div_layer.get_output(0), + trt.MatrixOperation.TRANSPOSE, + ) + relu_layer = network.add_activation( + matmul_layer.get_output(0), type=trt.ActivationType.RELU + ) + softmax_layer = network.add_softmax(relu_layer.get_output(0)) + softmax_layer.get_output(0).dtype = precision + softmax_layer.get_output(0).name = "softmax" + network.mark_output(tensor=softmax_layer.get_output(0)) + build_engine = engine_from_network( + (builder, network), + CreateConfig( + fp16=precision == trt.float16, + preview_features=[trt.PreviewFeature.ALIASED_PLUGIN_IO_10_03], + ), + ) + + with TrtRunner(build_engine, "trt_runner") as runner: + outputs = runner.infer( + {"X": input_x, "src": input_src, "idx": input_idx, "W": W}, + copy_outputs_to_host=False, + ) + + print() + print("Classifier output:") + print(outputs["softmax"]) + print() + + if args.validate: + tref = torch_ref(node_features, edges, W, torch_precision) + if torch.allclose(outputs["softmax"], tref, 1e-2): + print("Validation against reference successful!") + else: + print("Validation against reference failed!") diff --git a/samples/python/aliased_io_plugin/requirements.txt b/samples/python/aliased_io_plugin/requirements.txt new file mode 100644 index 00000000..e42eb836 --- /dev/null +++ b/samples/python/aliased_io_plugin/requirements.txt @@ -0,0 +1,11 @@ +cupy-cuda12x +triton; platform_system != "Windows" +torch +--extra-index-url https://pypi.ngc.nvidia.com +polygraphy +colored +numpy==1.23.5; (platform_system != "Windows" and python_version <= "3.10") +numpy==1.26.4; (platform_system != "Windows" and python_version >= "3.11") +pyyaml==6.0.1 +requests==2.32.2 +tqdm==4.66.4 diff --git a/samples/python/efficientdet/requirements.txt b/samples/python/efficientdet/requirements.txt index bb83a8da..c9e040ec 100644 --- a/samples/python/efficientdet/requirements.txt +++ b/samples/python/efficientdet/requirements.txt @@ -3,7 +3,8 @@ onnx==1.14.0; python_version <= "3.10" onnx==1.16.1; python_version >= "3.11" onnxruntime==1.15.1; python_version <= "3.10" onnxruntime==1.18.1; python_version >= "3.11" -tf2onnx==1.8.1 +tf2onnx==1.8.1; python_version <= "3.10" +tf2onnx==1.16.0; python_version >= "3.11" cuda-python==12.2.0; python_version <= "3.10" cuda-python==12.5.0; python_version >= "3.11" pywin32; platform_system == "Windows" diff --git a/samples/python/efficientnet/requirements.txt b/samples/python/efficientnet/requirements.txt index 73bf53ef..751c0789 100644 --- a/samples/python/efficientnet/requirements.txt +++ b/samples/python/efficientnet/requirements.txt @@ -2,7 +2,8 @@ Pillow>=10.0.0 onnx==1.14.0; python_version <= "3.10" onnx==1.16.1; python_version >= "3.11" tensorrt>=7.1.0.0 -tf2onnx==1.8.1 +tf2onnx==1.8.1; python_version <= "3.10" +tf2onnx==1.16.0; python_version >= "3.11" cuda-python==12.2.0; python_version <= "3.10" cuda-python==12.5.0; python_version >= "3.11" pywin32; platform_system == "Windows" diff --git a/samples/python/engine_refit_onnx_bidaf/requirements.txt b/samples/python/engine_refit_onnx_bidaf/requirements.txt index b5009f1c..84469f7a 100644 --- a/samples/python/engine_refit_onnx_bidaf/requirements.txt +++ b/samples/python/engine_refit_onnx_bidaf/requirements.txt @@ -1,4 +1,5 @@ -nltk>=3.5 +onnx==1.16.0 +nltk==3.8.1 wget==3.2 cuda-python==12.2.0; python_version <= "3.10" cuda-python==12.5.0; python_version >= "3.11" diff --git a/samples/python/onnx_custom_plugin/requirements.txt b/samples/python/onnx_custom_plugin/requirements.txt index 9fe2b9a5..4be5b282 100644 --- a/samples/python/onnx_custom_plugin/requirements.txt +++ b/samples/python/onnx_custom_plugin/requirements.txt @@ -1,4 +1,4 @@ -nltk>=3.5 +nltk==3.8.1 onnx==1.16.0 --extra-index-url https://pypi.ngc.nvidia.com onnx-graphsurgeon>=0.3.20 diff --git a/samples/python/python_plugin/requirements.txt b/samples/python/python_plugin/requirements.txt index 4bf8cdda..0299b6b0 100644 --- a/samples/python/python_plugin/requirements.txt +++ b/samples/python/python_plugin/requirements.txt @@ -9,6 +9,7 @@ polygraphy colored numpy==1.23.5; (platform_system != "Windows" and python_version <= "3.10") numpy==1.26.4; (platform_system != "Windows" and python_version >= "3.11") +onnx==1.16.0; platform_system == "Windows" --extra-index-url https://pypi.ngc.nvidia.com onnx-graphsurgeon pywin32; platform_system == "Windows" diff --git a/samples/python/tensorflow_object_detection_api/README.md b/samples/python/tensorflow_object_detection_api/README.md index de0548e4..f566304b 100644 --- a/samples/python/tensorflow_object_detection_api/README.md +++ b/samples/python/tensorflow_object_detection_api/README.md @@ -152,11 +152,11 @@ This will create the file `model.onnx` which is ready to convert to TensorRT. The script has a few optional arguments, including: * `--first_nms_threshold [...]` allows overriding the default 1st NMS score threshold parameter, as the runtime latency of the NMS plugin is sensitive to this value. It's a good practice to set this value as high as possible, while still fulfilling your application requirements, to reduce inference latency. In case of SSD models it will be a score threshold for first and final NMS, in case of Faster R-CNN and Mask R-CNN this will be a score threshold for Region Proposal Network. -* `--second_nms_threshold [...]` allows overriding the default 2nd NMS score threshold parameter, further improves the runtime latency of the NMS plugin. It's a good practice to set this value as high as possible, while still fulfilling your application requirements, to reduce inference latency. Only applicable in case of Faster R-CNN and Mask R-CNN since it will be the second and last NMS for both networks. +* `--second_nms_threshold [...]` allows overriding the default 2nd NMS score threshold parameter, further improves the runtime latency of the NMS plugin. It's a good practice to set this value as high as possible, while still fulfilling your application requirements, to reduce inference latency. Only applicable in case of Faster R-CNN and Mask R-CNN since it will be the second and last NMS for both networks. * `--batch_size` allows selection of various batch sizes, default is 1. -* `--debug` allows to add an extra output to debug a particular node. -* `--input_format` allows to set an input format of the network, either `NHWC` that is set by default or `NCHW`. -* `--tf2onnx` allows to save an intermediate ONNX graph generated by t2onnx. +* `--debug` allows to add an extra output to debug a particular node. +* `--input_format` allows to set an input format of the network, either `NHWC` that is set by default or `NCHW`. +* `--tf2onnx` allows to save an intermediate ONNX graph generated by t2onnx. Optionally, you may wish to visualize the resulting ONNX graph with a tool such as [Netron](https://netron.app/). @@ -248,7 +248,7 @@ The argument `--labels` is a path to a file that contains label data and is incl The script has a few optional arguments, including: * `--nms_threshold` allows overriding the default NMS score threshold parameter. -* `--detection_type` allows to select a detection type, either `bbox` that is set by default or `segmentation` that works only with **Mask R-CNN**. +* `--detection_type` allows to select a detection type, either `bbox` that is set by default or `segmentation` that works only with **Mask R-CNN**. * `--iou_threshold` allows to set IoU threshold for the mask segmentation, works only with **Mask R-CNN**, default is 0.5. The detection results will be written out to the specified output directory, consisting of a visualization image, and a tab-separated results file for each input image processed. @@ -257,7 +257,7 @@ The detection results will be written out to the specified output directory, con ![ssd_infer](https://drive.google.com/uc?export=view&id=1xSA7IkJuAScCf_NaVyiAX6dA9BPQVyJf) -#### Mask R-CNN +#### Mask R-CNN ![mrcnn_infer](https://drive.google.com/uc?export=view&id=1c_8hXdFjjpEWKJSJfqoeKKgVXE3BTuyQ) @@ -322,7 +322,7 @@ If you run this on COCO val2017 images, you may also add the parameter `--annota May 2024: - Update TensorFlow version support to 2.13.1. -August 2023: +August 2023: - Removed support for Python versions < 3.8. - Update ONNX version support to 1.14.0 - Update ONNX Runtime version support to 1.15.1 for Python>=3.8 diff --git a/samples/sampleINT8API/README.md b/samples/sampleINT8API/README.md index 21579655..5fda204f 100644 --- a/samples/sampleINT8API/README.md +++ b/samples/sampleINT8API/README.md @@ -120,7 +120,7 @@ After the engine has been built, it can be used just like an FP32 engine. For ex 3. Enqueue the inference work and perform actual inference. ``` - context->enqueueV3(input_stream); + context->enqueueV3(input_stream)) ``` 4. Copy data from the device output buffers to the host output buffers. diff --git a/samples/trtexec/trtexec.cpp b/samples/trtexec/trtexec.cpp index f021ce69..a701c149 100644 --- a/samples/trtexec/trtexec.cpp +++ b/samples/trtexec/trtexec.cpp @@ -314,12 +314,6 @@ int main(int argc, char** argv) return sample::gLogger.reportFail(sampleTest); } - if (!options.build.safe && options.build.consistency) - { - sample::gLogInfo << "Skipping consistency checker on non-safety mode." << std::endl; - options.build.consistency = false; - } - // Start engine building phase. std::unique_ptr bEnv(new BuildEnvironment(options.build.safe, options.build.versionCompatible, options.system.DLACore, options.build.tempdir, options.build.tempfileControls, options.build.leanDLLPath)); @@ -387,6 +381,21 @@ int main(int argc, char** argv) // Start inference phase. std::unique_ptr iEnv(new InferenceEnvironment(*bEnv)); + // We avoid re-loading some dynamic plugins while deserializing + // if they were already serialized with `setPluginsToSerialize`. + std::vector dynamicPluginsNotSerialized; + for (auto& pluginName : options.system.dynamicPlugins) + { + if (std::find(options.system.setPluginsToSerialize.begin(), options.system.setPluginsToSerialize.end(), + pluginName) + == options.system.setPluginsToSerialize.end()) + { + dynamicPluginsNotSerialized.emplace_back(pluginName); + } + } + + iEnv->engine.setDynamicPlugins(dynamicPluginsNotSerialized); + // Delete build environment. bEnv.reset(); diff --git a/tools/polygraphy-extension-trtexec/CHANGELOG.md b/tools/polygraphy-extension-trtexec/CHANGELOG.md index 03708775..a6cb0a6c 100644 --- a/tools/polygraphy-extension-trtexec/CHANGELOG.md +++ b/tools/polygraphy-extension-trtexec/CHANGELOG.md @@ -3,6 +3,12 @@ Dates are in YYYY-MM-DD format. ## vNext +## v0.0.9 (2023-08-21) +### Changed +- Update API usage to accomodate `Polygraphy==0.49.0`. +- Replace `workspace` with `memPoolSize` in `TrtexecRunner`. +- Remove usage of `polygraphy.backend.trt.util` in `polygraphy_trtexec/backend/runner.py`. + ## v0.0.8 (2022-09-08) ### Added - `trtexec-export-times`, `trtexec-export-output`, `trtexec-export-profile` and `trtexec-export-layer-info` flags diff --git a/tools/polygraphy-extension-trtexec/polygraphy_trtexec/__init__.py b/tools/polygraphy-extension-trtexec/polygraphy_trtexec/__init__.py index 19f81ba1..53f2f850 100644 --- a/tools/polygraphy-extension-trtexec/polygraphy_trtexec/__init__.py +++ b/tools/polygraphy-extension-trtexec/polygraphy_trtexec/__init__.py @@ -15,4 +15,4 @@ # limitations under the License. # -__version__ = "0.0.8" +__version__ = "0.0.9" diff --git a/tools/polygraphy-extension-trtexec/polygraphy_trtexec/args/runner.py b/tools/polygraphy-extension-trtexec/polygraphy_trtexec/args/runner.py index 812a5d79..a1833363 100644 --- a/tools/polygraphy-extension-trtexec/polygraphy_trtexec/args/runner.py +++ b/tools/polygraphy-extension-trtexec/polygraphy_trtexec/args/runner.py @@ -23,7 +23,7 @@ import polygraphy from polygraphy import mod -from polygraphy.tools.args import ModelArgs, TrtConfigArgs, TrtLoadPluginsArgs, TrtLoadNetworkArgs, TrtSaveEngineArgs, util as args_util +from polygraphy.tools.args import ModelArgs, TrtConfigArgs, TrtLoadPluginsArgs, TrtLoadNetworkArgs, TrtSaveEngineBytesArgs, util as args_util from polygraphy.tools.args.base import BaseRunnerArgs from polygraphy.tools.script import make_invocable @@ -36,7 +36,7 @@ class TrtexecRunnerArgs(BaseRunnerArgs): ModelArgs TrtConfigArgs TrtLoadPluginsArgs - TrtSaveEngineArgs + TrtSaveEngineBytesArgs """ def get_name_opt_impl(self): @@ -294,7 +294,7 @@ def add_to_script_impl(self, script): int8 = self.arg_groups[TrtConfigArgs].int8 allow_gpu_fallback = self.arg_groups[TrtConfigArgs].allow_gpu_fallback precision_constraints = self.arg_groups[TrtConfigArgs].precision_constraints - workspace = self.arg_groups[TrtConfigArgs].workspace + mem_pool_size = self.arg_groups[TrtConfigArgs].memory_pool_limits use_dla = self.arg_groups[TrtConfigArgs].use_dla if mod.version(polygraphy.__version__) >= mod.version('0.39.0'): refit = self.arg_groups[TrtConfigArgs].refittable @@ -306,7 +306,10 @@ def add_to_script_impl(self, script): if layer_precisions: layer_precisions = {layer:str(precision) for (layer, precision) in layer_precisions.items()} - save_engine = self.arg_groups[TrtSaveEngineArgs].path + save_engine = self.arg_groups[TrtSaveEngineBytesArgs].path + + # Add an import for TensorRT + script.add_import(imports=["tensorrt"], imp_as="trt") # Add an import for the Trtexec runner. script.add_import(imports=["TrtexecRunner"], frm="polygraphy_trtexec.backend") @@ -355,7 +358,7 @@ def add_to_script_impl(self, script): int8=int8, allow_gpu_fallback=allow_gpu_fallback, precision_constraints=precision_constraints, - workspace=workspace, + mem_pool_size=mem_pool_size, use_dla=use_dla, layer_precisions=layer_precisions, plugins=plugins, diff --git a/tools/polygraphy-extension-trtexec/polygraphy_trtexec/backend/runner.py b/tools/polygraphy-extension-trtexec/polygraphy_trtexec/backend/runner.py index 8583cc68..69f2088f 100644 --- a/tools/polygraphy-extension-trtexec/polygraphy_trtexec/backend/runner.py +++ b/tools/polygraphy-extension-trtexec/polygraphy_trtexec/backend/runner.py @@ -31,12 +31,14 @@ from polygraphy import mod, util from polygraphy.backend.base import BaseRunner from polygraphy.common import TensorMetadata +from polygraphy.datatype import DataType from polygraphy.logger import G_LOGGER from polygraphy.backend.onnx import onnx_from_path from polygraphy.backend.onnx.util import get_input_metadata -from polygraphy.backend.trt import engine_from_bytes, util as trt_util +from polygraphy.backend.trt import engine_from_bytes from polygraphy.backend.common import bytes_from_path +trt = mod.lazy_import("tensorrt>=8.5") np = mod.lazy_import("numpy") TRTEXEC_DEFAULT_PATH = "trtexec" @@ -138,7 +140,7 @@ class TrtexecRunner(BaseRunner): def __init__(self, model_path, model_type=None, trtexec_path=None, use_cuda_graph=None, avg_runs=None, best=None, duration=None, device=None, streams=None, min_timing=None, avg_timing=None, expose_dma=None, no_data_transfers=None, trtexec_warmup=None, trtexec_iterations=None, trtexec_export_times=None, trtexec_export_output=None, trtexec_export_profile=None, trtexec_export_layer_info=None, use_spin_wait=None, threads=None, use_managed_memory=None, dump_refit=None, dump_output=None, dump_profile=None, dump_layer_info=None, refit=None, separate_profile_run=None, trtexec_no_builder_cache=None, trtexec_profiling_verbosity=None, layer_output_types=None, use_dla_core=None, - input_shapes=None, profile_dicts=None, tf32=None, fp16=None, int8=None, allow_gpu_fallback=None, precision_constraints=None, workspace=None, use_dla=None, layer_precisions=None, plugins=None, save_engine=None): + input_shapes=None, profile_dicts=None, tf32=None, fp16=None, int8=None, allow_gpu_fallback=None, precision_constraints=None, mem_pool_size=None, use_dla=None, layer_precisions=None, plugins=None, save_engine=None): super().__init__(prefix="trtexec-runner") self.model_path = model_path self.model_type = model_type @@ -183,11 +185,28 @@ def __init__(self, model_path, model_type=None, self.int8 = int8 self.allow_gpu_fallback = allow_gpu_fallback self.precision_constraints = precision_constraints - self.workspace = None if workspace is None else workspace / MiB # Convert bytes into MiB self.use_dla = 0 if use_dla else None self.plugins = plugins self.layer_precisions = parse_layer_precisions(layer_precisions) self.save_engine = save_engine + if mem_pool_size is None: + self.mem_pool_size = None + else: + self.mem_pool_size = "" + for k, v in mem_pool_size.items(): + v = v / MiB # Convert bytes into MiB + if int(k) == 0: + self.mem_pool_size += f"workspace:{v}," + elif int(k) == 1: + self.mem_pool_size += f"dlaSRAM:{v}," + elif int(k) == 2: + self.mem_pool_size += f"dlaLocalDRAM:{v}," + elif int(k) == 3: + self.mem_pool_size += f"dlaGlobalDRAM:{v}," + else: + pass + self.mem_pool_size = self.mem_pool_size.rstrip(',') + def activate_impl(self): """ @@ -251,7 +270,7 @@ def activate_impl(self): 'int8': self.int8, 'allowGPUFallback': self.allow_gpu_fallback, 'precisionConstraints': self.precision_constraints, - 'workspace': self.workspace, + 'memPoolSize': self.mem_pool_size, 'plugins': self.plugins, 'saveEngine': self.save_engine, @@ -326,8 +345,14 @@ def get_input_metadata_impl(self): if self.model_type =='engine': engine = engine_from_bytes(bytes_from_path(self.model_path)) - start_binding, end_binding = 0, trt_util.get_bindings_per_profile(engine) - return trt_util.get_input_metadata_from_engine(engine, start_binding, end_binding) + meta = TensorMetadata() + for idx in range(engine.num_io_tensors): + name = engine.get_tensor_name(idx) + if engine.get_tensor_mode(name) != trt.TensorIOMode.INPUT: + continue + meta.add(name=name, dtype=DataType.from_dtype(engine.get_tensor_dtype(name), "tensorrt"), shape=engine.get_tensor_shape(name)) + return meta + def infer_impl(self, feed_dict): outputs = OrderedDict() diff --git a/tools/polygraphy-extension-trtexec/setup.py b/tools/polygraphy-extension-trtexec/setup.py index 4cb63a84..efed5946 100644 --- a/tools/polygraphy-extension-trtexec/setup.py +++ b/tools/polygraphy-extension-trtexec/setup.py @@ -39,7 +39,7 @@ def main(): ], license="Apache 2.0", install_requires=[ - "polygraphy>=0.42.1", + "polygraphy>=0.49.0", ], packages=find_packages(exclude=("tests", "tests.*")), entry_points={ diff --git a/tools/polygraphy-extension-trtexec/tests/requirements.txt b/tools/polygraphy-extension-trtexec/tests/requirements.txt index d868e66a..8364a71e 100644 --- a/tools/polygraphy-extension-trtexec/tests/requirements.txt +++ b/tools/polygraphy-extension-trtexec/tests/requirements.txt @@ -1,7 +1,7 @@ colored -polygraphy==0.40.3 -onnx==1.10.0 -onnxruntime==1.10.0 -protobuf==3.19.4 +polygraphy==0.49.0 +onnx==1.14.0 +onnxruntime==1.15.0 +protobuf==3.20.2 pytest wheel diff --git a/tools/polygraphy-extension-trtexec/tests/test_runner_args.py b/tools/polygraphy-extension-trtexec/tests/test_runner_args.py index b7740268..1b96827a 100644 --- a/tools/polygraphy-extension-trtexec/tests/test_runner_args.py +++ b/tools/polygraphy-extension-trtexec/tests/test_runner_args.py @@ -22,7 +22,7 @@ TrtConfigArgs, TrtLoadPluginsArgs, TrtLoadNetworkArgs, - TrtSaveEngineArgs, + TrtSaveEngineBytesArgs, ) from polygraphy.tools.script import Script from tests.models.meta import ONNX_MODELS_PATH @@ -39,7 +39,7 @@ def trtexec_runner_args(): TrtConfigArgs(), TrtLoadPluginsArgs(), TrtLoadNetworkArgs(), - TrtSaveEngineArgs(), + TrtSaveEngineBytesArgs(), ], ) diff --git a/tools/polygraphy-extension-trtexec/tests/test_trtexec.py b/tools/polygraphy-extension-trtexec/tests/test_trtexec.py index 774e9891..dc8b53b8 100644 --- a/tools/polygraphy-extension-trtexec/tests/test_trtexec.py +++ b/tools/polygraphy-extension-trtexec/tests/test_trtexec.py @@ -69,7 +69,7 @@ def test_args(self): def test_kwargs(self): assert poly_run([ONNX_MODELS_PATH['identity'], "--trtexec", - "--workspace=1M", "--streams=2", "--device=0", + "--memory-pool-limit=workspace:1M", "--streams=2", "--device=0", "--avg-runs=1", "--min-timing=1", "--avg-timing=3", "--trtexec-iterations=1", "--trtexec-warmup=1", "--duration=1", ])