TensorRT-LLMs/performance/benchmarking-default-performance.html
Iman Tabrizian 130807da9f Update docs (#2732)
* Update docs

* Update windows install version

Update gh pages (#2741)

update gh pages (#2743)

gh pages update (#2746)

Update gh-pages (#2764)

Update
2025-02-11 02:56:32 +00:00

459 lines
40 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Benchmarking Default Performance &mdash; tensorrt_llm documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../_static/copybutton.css?v=76b2166b" />
<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/clipboard.min.js?v=a7894cd8"></script>
<script src="../_static/copybutton.js?v=65e89d2a"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
tensorrt_llm
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Getting Started</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../overview.html">Overview</a></li>
<li class="toctree-l1"><a class="reference internal" href="../quick-start-guide.html">Quick Start Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../key-features.html">Key Features</a></li>
<li class="toctree-l1"><a class="reference internal" href="../torch.html">PyTorch Backend</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Installation</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../installation/linux.html">Installing on Linux</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation/build-from-source-linux.html">Building from Source Code on Linux</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation/windows.html">Installing on Windows</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation/build-from-source-windows.html">Building from Source Code on Windows</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation/grace-hopper.html">Installing on Grace Hopper</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">LLM API</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../llm-api/index.html">API Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../llm-api/reference.html">API Reference</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">LLM API Examples</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../llm-api-examples/index.html">LLM Examples Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../llm-api-examples/customization.html">Common Customizations</a></li>
<li class="toctree-l1"><a class="reference internal" href="../llm-api-examples/llm_api_examples.html">Examples</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Model Definition API</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../python-api/tensorrt_llm.layers.html">Layers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../python-api/tensorrt_llm.functional.html">Functionals</a></li>
<li class="toctree-l1"><a class="reference internal" href="../python-api/tensorrt_llm.models.html">Models</a></li>
<li class="toctree-l1"><a class="reference internal" href="../python-api/tensorrt_llm.plugin.html">Plugin</a></li>
<li class="toctree-l1"><a class="reference internal" href="../python-api/tensorrt_llm.quantization.html">Quantization</a></li>
<li class="toctree-l1"><a class="reference internal" href="../python-api/tensorrt_llm.runtime.html">Runtime</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">C++ API</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../_cpp_gen/executor.html">Executor</a></li>
<li class="toctree-l1"><a class="reference internal" href="../_cpp_gen/runtime.html">Runtime</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Command-Line Reference</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../commands/trtllm-build.html">trtllm-build</a></li>
<li class="toctree-l1"><a class="reference internal" href="../commands/trtllm-serve.html">trtllm-serve</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Architecture</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../architecture/overview.html">TensorRT-LLM Architecture</a></li>
<li class="toctree-l1"><a class="reference internal" href="../architecture/core-concepts.html">Model Definition</a></li>
<li class="toctree-l1"><a class="reference internal" href="../architecture/core-concepts.html#compilation">Compilation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../architecture/core-concepts.html#runtime">Runtime</a></li>
<li class="toctree-l1"><a class="reference internal" href="../architecture/core-concepts.html#multi-gpu-and-multi-node-support">Multi-GPU and Multi-Node Support</a></li>
<li class="toctree-l1"><a class="reference internal" href="../architecture/checkpoint.html">TensorRT-LLM Checkpoint</a></li>
<li class="toctree-l1"><a class="reference internal" href="../architecture/workflow.html">TensorRT-LLM Build Workflow</a></li>
<li class="toctree-l1"><a class="reference internal" href="../architecture/add-model.html">Adding a Model</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Advanced</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../advanced/gpt-attention.html">Multi-Head, Multi-Query, and Group-Query Attention</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/gpt-runtime.html">C++ GPT Runtime</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/executor.html">Executor API</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/graph-rewriting.html">Graph Rewriting Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/inference-request.html">Inference Request</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/inference-request.html#responses">Responses</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/lora.html">Run gpt-2b + LoRA using GptManager / cpp runtime</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/expert-parallelism.html">Expert Parallelism in TensorRT-LLM</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/kv-cache-reuse.html">KV cache reuse</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/speculative-decoding.html">Speculative Sampling</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/disaggregated-service.html">Disaggregated-Service (experimental)</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Performance</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="perf-overview.html">Overview</a></li>
<li class="toctree-l1"><a class="reference internal" href="perf-benchmarking.html">Benchmarking</a></li>
<li class="toctree-l1"><a class="reference internal" href="introduction.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="perf-analysis.html">Performance Analysis</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Reference</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../reference/troubleshooting.html">Troubleshooting</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/support-matrix.html">Support Matrix</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/precision.html">Numerical Precision</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/memory.html">Memory Usage of TensorRT-LLM</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Blogs</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../blogs/H100vsA100.html">H100 has 4.6x A100 Performance in TensorRT-LLM, achieving 10,000 tok/s at 100ms to first token</a></li>
<li class="toctree-l1"><a class="reference internal" href="../blogs/H200launch.html">H200 achieves nearly 12,000 tokens/sec on Llama2-13B with TensorRT-LLM</a></li>
<li class="toctree-l1"><a class="reference internal" href="../blogs/Falcon180B-H200.html">Falcon-180B on a single H200 GPU with INT4 AWQ, and 6.7x faster Llama-70B over A100</a></li>
<li class="toctree-l1"><a class="reference internal" href="../blogs/quantization-in-TRT-LLM.html">Speed up inference with SOTA quantization techniques in TRT-LLM</a></li>
<li class="toctree-l1"><a class="reference internal" href="../blogs/XQA-kernel.html">New XQA-kernel provides 2.4x more Llama-70B throughput within the same latency budget</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">tensorrt_llm</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Benchmarking Default Performance</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/performance/benchmarking-default-performance.md.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="benchmarking-default-performance">
<span id="id1"></span><h1>Benchmarking Default Performance<a class="headerlink" href="#benchmarking-default-performance" title="Link to this heading"></a></h1>
<p>This section discusses how to build an engine for the model using the LLM-API and benchmark it using TRTLLM-Bench.</p>
<blockquote>
<div><p>Disclaimer: While performance numbers shown here are real, they are only for demonstration purposes. Differences in environment, SKU, interconnect, and workload can all significantly affect performance and lead to your results differing from what is shown here.</p>
</div></blockquote>
<section id="before-you-begin-tensorrt-llm-llm-api">
<h2>Before You Begin: TensorRT-LLM LLM-API<a class="headerlink" href="#before-you-begin-tensorrt-llm-llm-api" title="Link to this heading"></a></h2>
<p>TensorRT-LLMs LLM-API aims to make getting started with TensorRT-LLM quick and easy. For example, the following script instantiates <code class="docutils literal notranslate"><span class="pre">Llama-3.3-70B-Instruct</span></code> and runs inference on a small set of prompts. For those familiar with TensorRT-LLMs <a class="reference internal" href="#building-and-saving-engines-via-cli"><span class="std std-ref">CLI workflow</span></a>, the call to <code class="docutils literal notranslate"><span class="pre">LLM()</span></code> handles converting the model checkpoint and building the engine in one line.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1">#quickstart.py</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">tensorrt_llm</span><span class="w"> </span><span class="kn">import</span> <span class="n">LLM</span><span class="p">,</span> <span class="n">SamplingParams</span>
<span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">():</span>
<span class="n">prompts</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;Hello, I am&quot;</span><span class="p">,</span>
<span class="s2">&quot;The president of the United States is&quot;</span><span class="p">,</span>
<span class="s2">&quot;The capital of France is&quot;</span><span class="p">,</span>
<span class="s2">&quot;The future of AI is&quot;</span><span class="p">,</span>
<span class="p">]</span>
<span class="n">sampling_params</span> <span class="o">=</span> <span class="n">SamplingParams</span><span class="p">(</span><span class="n">temperature</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span> <span class="n">top_p</span><span class="o">=</span><span class="mf">0.95</span><span class="p">)</span>
<span class="n">llm</span> <span class="o">=</span> <span class="n">LLM</span><span class="p">(</span>
<span class="n">model</span><span class="o">=</span><span class="s2">&quot;meta-llama/Llama-3.3-70B-Instruct&quot;</span><span class="p">,</span> <span class="c1">#HuggingFace model name, no need to download the checkpoint beforehand</span>
<span class="n">tensor_parallel_size</span><span class="o">=</span><span class="mi">4</span>
<span class="p">)</span>
<span class="n">outputs</span> <span class="o">=</span> <span class="n">llm</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">prompts</span><span class="p">,</span> <span class="n">sampling_params</span><span class="p">)</span>
<span class="c1"># Print the outputs.</span>
<span class="k">for</span> <span class="n">output</span> <span class="ow">in</span> <span class="n">outputs</span><span class="p">:</span>
<span class="n">prompt</span> <span class="o">=</span> <span class="n">output</span><span class="o">.</span><span class="n">prompt</span>
<span class="n">generated_text</span> <span class="o">=</span> <span class="n">output</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Prompt: </span><span class="si">{</span><span class="n">prompt</span><span class="si">!r}</span><span class="s2">, Generated text: </span><span class="si">{</span><span class="n">generated_text</span><span class="si">!r}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="n">main</span><span class="p">()</span>
</pre></div>
</div>
<section id="troubleshooting-tips-and-pitfalls-to-avoid">
<h3>Troubleshooting Tips and Pitfalls To Avoid<a class="headerlink" href="#troubleshooting-tips-and-pitfalls-to-avoid" title="Link to this heading"></a></h3>
<p>Since we are running on multiple GPUs, MPI is used to spawn processes for each GPU. This raises the following requirements</p>
<ol class="arabic simple">
<li><p>The entrypoint to the script should be guarded via <code class="docutils literal notranslate"><span class="pre">if</span> <span class="pre">__name__</span> <span class="pre">==</span> <span class="pre">'__main__'</span></code>. This requirement comes from mpi4py.</p></li>
<li><p>Depending on your environment, it might be required to wrap the <code class="docutils literal notranslate"><span class="pre">python</span></code> command with <code class="docutils literal notranslate"><span class="pre">mpirun</span></code>. For example the command to run the script above could be <code class="docutils literal notranslate"><span class="pre">mpirun</span> <span class="pre">-n</span> <span class="pre">1</span> <span class="pre">--oversubscribe</span> <span class="pre">--allow-run-as-root</span> <span class="pre">python</span> <span class="pre">quickstart.py</span></code>. For running on multiple GPUs on one node like the example is attempting to do it is usually not required to prefix with <code class="docutils literal notranslate"><span class="pre">mpirun</span></code> but if you are getting MPI errors then you should add it. Additionally, the <code class="docutils literal notranslate"><span class="pre">-n</span> <span class="pre">1</span></code> which says just to launch one process is intentional as TensorRT-LLM handles spawning the processes for the remaining GPUs</p></li>
<li><p>If you get a HuggingFace access error when loading the Llama weights, this is likely because the model is gated. Request access on the HuggingFace page for the model. Then follow the instructions on <a class="reference external" href="https://huggingface.co/docs/huggingface_hub/en/quick-start#authentication">Huggingfaces quickstart guide</a> to authenticate in your environment.</p></li>
</ol>
</section>
</section>
<section id="building-and-saving-the-engine">
<h2>Building and Saving the Engine<a class="headerlink" href="#building-and-saving-the-engine" title="Link to this heading"></a></h2>
<p>Save the engine using <code class="docutils literal notranslate"><span class="pre">.save()</span></code>. Just like the previous example, this script and all subsequent scripts might need to be run via <code class="docutils literal notranslate"><span class="pre">mpirun</span></code>.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">tensorrt_llm</span><span class="w"> </span><span class="kn">import</span> <span class="n">LLM</span>
<span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">():</span>
<span class="n">llm</span> <span class="o">=</span> <span class="n">LLM</span><span class="p">(</span>
<span class="n">model</span><span class="o">=</span><span class="s2">&quot;/scratch/Llama-3.3-70B-Instruct&quot;</span><span class="p">,</span>
<span class="n">tensor_parallel_size</span><span class="o">=</span><span class="mi">4</span>
<span class="p">)</span>
<span class="n">llm</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s2">&quot;baseline&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="n">main</span><span class="p">()</span>
</pre></div>
</div>
<section id="building-and-saving-engines-via-cli">
<h3>Building and Saving Engines via CLI<a class="headerlink" href="#building-and-saving-engines-via-cli" title="Link to this heading"></a></h3>
<p>TensorRT-LLM also has a command line interface for building and saving engines. This workflow consists of two steps</p>
<ol class="arabic simple">
<li><p>Convert model checkpoint (HuggingFace, Nemo) to TensorRT-LLM checkpoint via <code class="docutils literal notranslate"><span class="pre">convert_checkpoint.py</span></code>. Each supported model has a <code class="docutils literal notranslate"><span class="pre">convert_checkpoint.py</span></code> associated it with it and can be found in the examples folder. For example, the <code class="docutils literal notranslate"><span class="pre">convert_checkpoint.py</span></code> script for Llama models can be found <a class="reference external" href="https://github.com/NVIDIA/TensorRT-LLM/tree/main/examples/llama/convert_checkpoint.py">here</a></p></li>
<li><p>Build engine by passing TensorRT-LLM checkpoint to <code class="docutils literal notranslate"><span class="pre">trtllm-build</span></code> command. The <code class="docutils literal notranslate"><span class="pre">trtllm-build</span></code> command is installed automatically when the <code class="docutils literal notranslate"><span class="pre">tensorrt_llm</span></code> package is installed.</p></li>
</ol>
<p>The README in the examples folder for supported models walks through building engines using this flow for a wide variety of situations. The examples folder for Llama models can be found at <a class="reference external" href="https://github.com/NVIDIA/TensorRT-LLM/tree/main/examples/llama">https://github.com/NVIDIA/TensorRT-LLM/tree/main/examples/llama</a>.</p>
</section>
</section>
<section id="benchmarking-with-trtllm-bench">
<h2>Benchmarking with <code class="docutils literal notranslate"><span class="pre">trtllm-bench</span></code><a class="headerlink" href="#benchmarking-with-trtllm-bench" title="Link to this heading"></a></h2>
<p><code class="docutils literal notranslate"><span class="pre">trtllm-bench</span></code> provides a command line interface for benchmarking the throughput and latency of saved engines.</p>
<section id="prepare-dataset">
<h3>Prepare Dataset<a class="headerlink" href="#prepare-dataset" title="Link to this heading"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">trtllm-bench</span></code> expects to be passed in a dataset of requests to run through the model. This guide creates a dummy dataset of 1000 requests with every request having input and output sequence length of 2048. TensorRT-LLM provides the <code class="docutils literal notranslate"><span class="pre">prepare_dataset.py</span></code> script to produce the dataset. To use it clone the TensorRT-LLM Repo and run the following command:</p>
<p><code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">benchmarks/cpp/prepare_dataset.py</span> <span class="pre">--stdout</span> <span class="pre">--tokenizer</span> <span class="pre">/path/to/hf/Llama-3.3-70B-Instruct/</span> <span class="pre">token-norm-dist</span> <span class="pre">--input-mean</span> <span class="pre">2048</span> <span class="pre">--output-mean</span> <span class="pre">2048</span> <span class="pre">--input-stdev</span> <span class="pre">0</span> <span class="pre">--output-stdev</span> <span class="pre">0</span> <span class="pre">--num-requests</span> <span class="pre">1000</span> <span class="pre">&gt;</span> <span class="pre">synthetic_2048_2048.txt</span></code></p>
<p><code class="docutils literal notranslate"><span class="pre">trtllm-bench</span></code> can also take in real data, see <a class="reference internal" href="perf-benchmarking.html"><span class="std std-doc"><code class="docutils literal notranslate"><span class="pre">trtllm-bench</span></code> documentation</span></a> for more details on the required format.</p>
</section>
<section id="running-throughput-and-latency-benchmarks">
<h3>Running Throughput and Latency Benchmarks<a class="headerlink" href="#running-throughput-and-latency-benchmarks" title="Link to this heading"></a></h3>
<p>To benchmark the baseline engine built in the previous script, run the following commands. Again, due to the multi-gpu nature of the workload you may need prefix the <code class="docutils literal notranslate"><span class="pre">trtllm-bench</span></code> command with <code class="docutils literal notranslate"><span class="pre">mpirun</span> <span class="pre">-n</span> <span class="pre">1</span> <span class="pre">--oversubscribe</span> <span class="pre">--allow-run-as-root</span></code>.</p>
<p><strong>Throughput</strong></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>trtllm-bench<span class="w"> </span><span class="se">\</span>
--model<span class="w"> </span>/path/to/hf/Llama-3.3-70B-Instruct/<span class="w"> </span><span class="se">\</span>
throughput<span class="w"> </span><span class="se">\</span>
--dataset<span class="w"> </span>/path/to/dataset/synthetic_2048_2048_1000.txt<span class="w"> </span><span class="se">\</span>
--engine_dir<span class="w"> </span>/path/to/engines/baseline<span class="w"> </span><span class="c1">#replace baseline with name used in llm.save()</span>
</pre></div>
</div>
<p>This command will send all 1000 requests to the model immediately. Run <code class="docutils literal notranslate"><span class="pre">trtllm-bench</span> <span class="pre">throughput</span> <span class="pre">-h</span></code> to see a list of options that help you control the request rate and cap the total number of requests if the benchmark is taking too long. For reference, internal testing of the above command took around 20 minutes on a 4 NVLink connected H100-sxm-80GB.</p>
<p>Running this command will provide a throughput overview like this:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="o">===========================================================</span>
<span class="o">=</span><span class="w"> </span>ENGINE<span class="w"> </span><span class="nv">DETAILS</span>
<span class="o">===========================================================</span>
Model:<span class="w"> </span>/scratch/Llama-3.3-70B-Instruct/
Engine<span class="w"> </span>Directory:<span class="w"> </span>/scratch/grid_search_engines/baseline
TensorRT-LLM<span class="w"> </span>Version:<span class="w"> </span><span class="m">0</span>.16.0
Dtype:<span class="w"> </span>bfloat16
KV<span class="w"> </span>Cache<span class="w"> </span>Dtype:<span class="w"> </span>None
Quantization:<span class="w"> </span>None
Max<span class="w"> </span>Sequence<span class="w"> </span>Length:<span class="w"> </span><span class="nv">131072</span>
<span class="o">===========================================================</span>
<span class="o">=</span><span class="w"> </span>WORLD<span class="w"> </span>+<span class="w"> </span>RUNTIME<span class="w"> </span><span class="nv">INFORMATION</span>
<span class="o">===========================================================</span>
TP<span class="w"> </span>Size:<span class="w"> </span><span class="m">4</span>
PP<span class="w"> </span>Size:<span class="w"> </span><span class="m">1</span>
Max<span class="w"> </span>Runtime<span class="w"> </span>Batch<span class="w"> </span>Size:<span class="w"> </span><span class="m">2048</span>
Max<span class="w"> </span>Runtime<span class="w"> </span>Tokens:<span class="w"> </span><span class="m">8192</span>
Scheduling<span class="w"> </span>Policy:<span class="w"> </span>Guaranteed<span class="w"> </span>No<span class="w"> </span>Evict
KV<span class="w"> </span>Memory<span class="w"> </span>Percentage:<span class="w"> </span><span class="m">90</span>.00%
Issue<span class="w"> </span>Rate<span class="w"> </span><span class="o">(</span>req/sec<span class="o">)</span>:<span class="w"> </span><span class="m">7</span>.9353E+13
<span class="o">===========================================================</span>
<span class="o">=</span><span class="w"> </span>PERFORMANCE<span class="w"> </span><span class="nv">OVERVIEW</span>
<span class="o">===========================================================</span>
Number<span class="w"> </span>of<span class="w"> </span>requests:<span class="w"> </span><span class="m">1000</span>
Average<span class="w"> </span>Input<span class="w"> </span>Length<span class="w"> </span><span class="o">(</span>tokens<span class="o">)</span>:<span class="w"> </span><span class="m">2048</span>.0000
Average<span class="w"> </span>Output<span class="w"> </span>Length<span class="w"> </span><span class="o">(</span>tokens<span class="o">)</span>:<span class="w"> </span><span class="m">2048</span>.0000
Token<span class="w"> </span>Throughput<span class="w"> </span><span class="o">(</span>tokens/sec<span class="o">)</span>:<span class="w"> </span><span class="m">1585</span>.7480
Request<span class="w"> </span>Throughput<span class="w"> </span><span class="o">(</span>req/sec<span class="o">)</span>:<span class="w"> </span><span class="m">0</span>.7743
Total<span class="w"> </span>Latency<span class="w"> </span><span class="o">(</span>ms<span class="o">)</span>:<span class="w"> </span><span class="m">1291504</span>.1051
<span class="o">===========================================================</span>
</pre></div>
</div>
<p><strong>Latency</strong></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>trtllm-bench<span class="w"> </span><span class="se">\</span>
--model<span class="w"> </span>/path/to/hf/Llama-3.3-70B-Instruct/<span class="w"> </span><span class="se">\</span>
latency<span class="w"> </span><span class="se">\</span>
--dataset<span class="w"> </span>/path/to/dataset/synthetic_2048_2048_1000.txt<span class="w"> </span><span class="se">\</span>
--num-requests<span class="w"> </span><span class="m">100</span><span class="w"> </span><span class="se">\</span>
--warmup<span class="w"> </span><span class="m">10</span><span class="w"> </span><span class="se">\</span>
--engine_dir<span class="w"> </span>/path/to/engines/baseline<span class="w"> </span><span class="c1">#replace baseline with name used in llm.save()</span>
</pre></div>
</div>
<p>The latency benchmark enforces a batch size of 1 to accurately measure latency, which can significantly increase testing duration. In the example above the total number of requests is limited to 100 via <code class="docutils literal notranslate"><span class="pre">--num-requests</span></code> to make the test duration more manageable. This example benchmark was designed to produce very stable numbers, but in real scenarios even 100 requests is likely more than you need and can take a long time to complete (in the case-study it took about an hour and a half). Reducing the number of requests to 10 would still provide accurate data and enable faster development iterations. In general you should adjust the number of requests per your needs. Run <code class="docutils literal notranslate"><span class="pre">trtllm-bench</span> <span class="pre">latency</span> <span class="pre">-h</span></code> to see other configurable options.</p>
<p>Running this command will provide a latency overview like this:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="o">===========================================================</span>
<span class="o">=</span><span class="w"> </span>ENGINE<span class="w"> </span><span class="nv">DETAILS</span>
<span class="o">===========================================================</span>
Model:<span class="w"> </span>/scratch/Llama-3.3-70B-Instruct/
Engine<span class="w"> </span>Directory:<span class="w"> </span>/scratch/grid_search_engines/baseline
TensorRT-LLM<span class="w"> </span>Version:<span class="w"> </span><span class="m">0</span>.16.0
Dtype:<span class="w"> </span>bfloat16
KV<span class="w"> </span>Cache<span class="w"> </span>Dtype:<span class="w"> </span>None
Quantization:<span class="w"> </span>None
Max<span class="w"> </span>Input<span class="w"> </span>Length:<span class="w"> </span><span class="m">1024</span>
Max<span class="w"> </span>Sequence<span class="w"> </span>Length:<span class="w"> </span><span class="nv">131072</span>
<span class="o">===========================================================</span>
<span class="o">=</span><span class="w"> </span>WORLD<span class="w"> </span>+<span class="w"> </span>RUNTIME<span class="w"> </span><span class="nv">INFORMATION</span>
<span class="o">===========================================================</span>
TP<span class="w"> </span>Size:<span class="w"> </span><span class="m">4</span>
PP<span class="w"> </span>Size:<span class="w"> </span><span class="m">1</span>
Max<span class="w"> </span>Runtime<span class="w"> </span>Batch<span class="w"> </span>Size:<span class="w"> </span><span class="m">1</span>
Max<span class="w"> </span>Runtime<span class="w"> </span>Tokens:<span class="w"> </span><span class="m">8192</span>
Scheduling<span class="w"> </span>Policy:<span class="w"> </span>Guaranteed<span class="w"> </span>No<span class="w"> </span>Evict
KV<span class="w"> </span>Memory<span class="w"> </span>Percentage:<span class="w"> </span><span class="m">90</span>.00%
<span class="o">===========================================================</span>
<span class="o">=</span><span class="w"> </span>GENERAL<span class="w"> </span><span class="nv">OVERVIEW</span>
<span class="o">===========================================================</span>
Number<span class="w"> </span>of<span class="w"> </span>requests:<span class="w"> </span><span class="m">100</span>
Average<span class="w"> </span>Input<span class="w"> </span>Length<span class="w"> </span><span class="o">(</span>tokens<span class="o">)</span>:<span class="w"> </span><span class="m">2048</span>.0000
Average<span class="w"> </span>Output<span class="w"> </span>Length<span class="w"> </span><span class="o">(</span>tokens<span class="o">)</span>:<span class="w"> </span><span class="m">2048</span>.0000
Average<span class="w"> </span>request<span class="w"> </span>latency<span class="w"> </span><span class="o">(</span>ms<span class="o">)</span>:<span class="w"> </span><span class="m">63456</span>.0704
<span class="o">===========================================================</span>
<span class="o">=</span><span class="w"> </span>THROUGHPUT<span class="w"> </span><span class="nv">OVERVIEW</span>
<span class="o">===========================================================</span>
Request<span class="w"> </span>Throughput<span class="w"> </span><span class="o">(</span>req/sec<span class="o">)</span>:<span class="w"> </span><span class="m">0</span>.0158
Total<span class="w"> </span>Token<span class="w"> </span>Throughput<span class="w"> </span><span class="o">(</span>tokens/sec<span class="o">)</span>:<span class="w"> </span><span class="m">32</span>.2742
Generation<span class="w"> </span>Token<span class="w"> </span>Throughput<span class="w"> </span><span class="o">(</span>tokens/sec<span class="o">)</span>:<span class="w"> </span><span class="m">32</span>.3338
<span class="o">===========================================================</span>
<span class="o">=</span><span class="w"> </span>LATENCY<span class="w"> </span><span class="nv">OVERVIEW</span>
<span class="o">===========================================================</span>
Total<span class="w"> </span>Latency<span class="w"> </span><span class="o">(</span>ms<span class="o">)</span>:<span class="w"> </span><span class="m">6345624</span>.0554
Average<span class="w"> </span>time-to-first-token<span class="w"> </span><span class="o">(</span>ms<span class="o">)</span>:<span class="w"> </span><span class="m">147</span>.7502
Average<span class="w"> </span>inter-token<span class="w"> </span>latency<span class="w"> </span><span class="o">(</span>ms<span class="o">)</span>:<span class="w"> </span><span class="m">30</span>.9274
Acceptance<span class="w"> </span>Rate<span class="w"> </span><span class="o">(</span>Speculative<span class="o">)</span>:<span class="w"> </span><span class="m">1</span>.00
<span class="o">===========================================================</span>
<span class="o">=</span><span class="w"> </span>GENERATION<span class="w"> </span>LATENCY<span class="w"> </span><span class="nv">BREAKDOWN</span>
<span class="o">===========================================================</span>
MIN<span class="w"> </span><span class="o">(</span>ms<span class="o">)</span>:<span class="w"> </span><span class="m">63266</span>.8804
MAX<span class="w"> </span><span class="o">(</span>ms<span class="o">)</span>:<span class="w"> </span><span class="m">63374</span>.7770
AVG<span class="w"> </span><span class="o">(</span>ms<span class="o">)</span>:<span class="w"> </span><span class="m">63308</span>.3201
P90<span class="w"> </span><span class="o">(</span>ms<span class="o">)</span>:<span class="w"> </span><span class="m">63307</span>.1885
P95<span class="w"> </span><span class="o">(</span>ms<span class="o">)</span>:<span class="w"> </span><span class="m">63331</span>.7136
P99<span class="w"> </span><span class="o">(</span>ms<span class="o">)</span>:<span class="w"> </span><span class="m">63374</span>.7770
<span class="o">===========================================================</span>
<span class="o">=</span><span class="w"> </span>ACCEPTANCE<span class="w"> </span><span class="nv">BREAKDOWN</span>
<span class="o">===========================================================</span>
MIN:<span class="w"> </span><span class="m">1</span>.00
MAX:<span class="w"> </span><span class="m">1</span>.00
AVG:<span class="w"> </span><span class="m">1</span>.00
P90:<span class="w"> </span><span class="m">1</span>.00
P95:<span class="w"> </span><span class="m">1</span>.00
P99:<span class="w"> </span><span class="m">1</span>.00
<span class="o">===========================================================</span>
</pre></div>
</div>
</section>
</section>
<section id="results">
<h2>Results<a class="headerlink" href="#results" title="Link to this heading"></a></h2>
<p>The baseline engine achieves the following performance for token throughput, request throughput, average time to first token, and average inter-token latency. These metrics will be analyzed throughout the guide.</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Metric</p></th>
<th class="head"><p>Value</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Token Throughput (tokens/sec)</p></td>
<td><p>1564.3040</p></td>
</tr>
<tr class="row-odd"><td><p>Request Throughput (req/sec)</p></td>
<td><p>0.7638</p></td>
</tr>
<tr class="row-even"><td><p>Average Time To First Token (ms)</p></td>
<td><p>147.6976</p></td>
</tr>
<tr class="row-odd"><td><p>Average Inter-Token Latency (ms)</p></td>
<td><p>31.3276</p></td>
</tr>
</tbody>
</table>
<p>The following sections show ways you can improve these metrics using different configuration options.</p>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<jinja2.runtime.BlockReference object at 0x7f640058c3e0>
<div class="footer">
<p>
Copyright © 2024 NVIDIA Corporation
</p>
<p>
<a class="Link" href="https://www.nvidia.com/en-us/about-nvidia/privacy-policy/" target="_blank" rel="noopener"
data-cms-ai="0">Privacy Policy</a> |
<a class="Link" href="https://www.nvidia.com/en-us/about-nvidia/privacy-center/" target="_blank" rel="noopener"
data-cms-ai="0">Manage My Privacy</a> |
<a class="Link" href="https://www.nvidia.com/en-us/preferences/start/" target="_blank" rel="noopener"
data-cms-ai="0">Do Not Sell or Share My Data</a> |
<a class="Link" href="https://www.nvidia.com/en-us/about-nvidia/terms-of-service/" target="_blank"
rel="noopener" data-cms-ai="0">Terms of Service</a> |
<a class="Link" href="https://www.nvidia.com/en-us/about-nvidia/accessibility/" target="_blank" rel="noopener"
data-cms-ai="0">Accessibility</a> |
<a class="Link" href="https://www.nvidia.com/en-us/about-nvidia/company-policies/" target="_blank"
rel="noopener" data-cms-ai="0">Corporate Policies</a> |
<a class="Link" href="https://www.nvidia.com/en-us/product-security/" target="_blank" rel="noopener"
data-cms-ai="0">Product Security</a> |
<a class="Link" href="https://www.nvidia.com/en-us/contact/" target="_blank" rel="noopener"
data-cms-ai="0">Contact</a>
</p>
</div>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>