M7 · NVIDIA Platform ImplementationM7-0323 min read
Lesson 39 of 58 · Module 8 of 10 · Week 6
Threads:The NVIDIA stack thread
TensorRT-LLM and Triton Inference Server for Latency Reduction
TensorRT-LLM optimizes an LLM for fast GPU inference — kernel fusion, precision, and KV-cache handling, resolved once at build time — while Triton Inference Server serves the resulting model with dynamic batching and concurrency, resolved continuously at request time; NIM often runs TensorRT-LLM underneath its own API, but 'optimizes versus serves' is the fixed line separating the two jobs and it is the exam's most direct trap in this pairing.
By the end you can
- 01State the one-sentence job split — TensorRT-LLM optimizes, Triton serves — and apply it to a described scenario without conflating the two roles.
- 02Name TensorRT-LLM's role in latency reduction specifically (kernel fusion, precision, KV-cache handling) and distinguish it from M7-02's batching-configuration discussion, which this lesson does not repeat.
- 03Explain what Triton actually does at request time — dynamic batching and concurrency — and why that is a serving-time property, not a build-time one.
- 04Place NIM correctly relative to both: a NIM container often runs TensorRT-LLM underneath its standard API, which is why the three names get conflated despite each doing a distinct job.
TensorRT-LLM optimizes; Triton serves — the identity split
Identity statement: TensorRT-LLM is the tool that makes a model fast on a specific GPU, resolved once at build time before any request has been served; Triton Inference Server is the tool that accepts live requests and serves that model efficiently to concurrent traffic, resolved continuously for as long as the server runs. [GROUND TRUTH] (Sources/ncp-aai/domain-7-nvidia-platform-implementation.md) states the pairing directly:
| Tool | Role |
|---|---|
| TensorRT-LLM | Optimizes LLMs for fast GPU inference (kernel fusion, precision, KV-cache) |
| Triton Inference Server | Serves models across frameworks with dynamic batching and concurrency |
The same source material is explicit that these "are the performance pieces you reach for when tuning production inference" and that "NIM often uses TensorRT-LLM or vLLM under the hood" — a sentence worth reading twice, because it states the relationship between all three tools in one line: NIM packages, TensorRT-LLM (or vLLM) optimizes underneath that packaging, and Triton can serve what either backend produces. None of the three is redundant with either of the others; each occupies a distinct position in the path from a trained model to a served response.
Why "optimizes versus serves" is the load-bearing distinction
The reason this domain's own material calls this the "most direct trap" in the pairing is that both halves of the split sound, described loosely, like they could be describing the same activity — "make the model fast" covers both a compiler's job and a server's job if you are not precise about which part of "fast" each one is responsible for. TensorRT-LLM's entire job happens before serving begins: it takes a trained model and produces a compiled, hardware-specific engine, and once that engine exists, TensorRT-LLM's work on it is done — it does not itself accept a network request, route traffic, or manage a queue of concurrent users. Triton's entire job happens only once serving has begun: it exposes an endpoint, accepts requests, and decides how to batch and route them to whatever engine is loaded — and it has nothing to say about how that engine was compiled in the first place, only about how to use it efficiently once it exists. A scenario describing kernel fusion, precision calibration, or KV-cache handling for a target GPU is describing TensorRT-LLM's job. A scenario describing accepting requests, batching them dynamically, or managing concurrency across multiple clients is describing Triton's job. Swapping either description onto the other tool's name is exactly the trap this domain flags.
What TensorRT-LLM does for latency reduction
L1 — Intuition: a chef who prepares the kitchen once, before any customer arrives
TensorRT-LLM is the chef who arrives before the restaurant opens and spends the morning rearranging the kitchen for exactly the dishes on tonight's menu — moving the knives that will be used together next to each other, pre-measuring ingredients so nothing is fetched mid-order, and deciding in advance which pan works fastest for each specific dish on this specific stove. None of that preparation happens while a customer is waiting; it happens once, ahead of time, and every order benefits from it afterward without the chef repeating the preparation for each individual customer.
L2 — Mechanism: kernel fusion, precision, and KV-cache handling, at the level this domain tests
[GROUND TRUTH] (Sources/ncp-aai/domain-7-nvidia-platform-implementation.md) names TensorRT-LLM's role as optimizing "LLMs for fast GPU inference (kernel fusion, precision, KV-cache)." Each of the three deserves a precise, identity-level statement, without repeating M7-02's batching-configuration arithmetic, which is a separate concern this lesson leaves entirely to that lesson.
Kernel fusion. A model graph, executed naively, runs as a sequence of separate operations, each one reading its input from GPU memory and writing its output back before the next operation begins. Fusion merges adjacent operations into a single compiled kernel, so an intermediate result never has to round-trip through memory between steps — and because moving data through memory, not the arithmetic itself, is frequently the actual bottleneck on modern GPUs, eliminating that round-trip is often the single largest latency win fusion buys.
Precision. TensorRT-LLM can compile an engine at a reduced numeric precision — FP16, INT8, or another supported precision — using a calibration pass to derive the scale factors a lower-precision representation needs. This is the same precision-reduction discipline this course's model-optimization material treats as a measurable accuracy tradeoff rather than a free win: a precision-reducing build changes the model's numerics and, by the same discipline this course applies everywhere precision changes, obliges re-running an evaluation set before the build ships.
KV-cache handling. Autoregressive generation is a stateful, iterative process, and TensorRT-LLM manages the key-value cache that makes generation linear rather than quadratic in sequence length — the same cache concept M7-02 assumes when it works through cache-budget arithmetic for batching configuration. TensorRT-LLM's KV-cache management, together with its paged-attention feature, is precisely the runtime machinery a general-purpose compiler has no notion of, which is why it is a distinct product from plain TensorRT rather than a rebrand of it.
All three of these are decisions made once, at build time, before any inference request has been served — which is the structural reason TensorRT-LLM sits on the optimizer side of this lesson's central distinction rather than the server side. It produces a compiled artifact; it does not itself accept live traffic.
L3 — The exam-relevant edge case: an engine is tied to the hardware it was tuned against
A detail worth holding precisely because it is exactly the kind of fact a scenario item tests directly: a TensorRT-LLM engine's optimization is specific to the GPU architecture it was built and tuned against, because part of what the build step does is benchmark candidate kernel implementations on the actual target hardware and select whichever measures fastest for that specific device. An engine built for one GPU architecture is not guaranteed to perform well, or even to load correctly, on a different one — the same hardware-specificity fact M7-02 names when it distinguishes a fixed-architecture deployment (which favors TensorRT-LLM's per-GPU tuning) from a heterogeneous fleet (which does not get to amortize that tuning cost as cheaply). A candidate who understands kernel fusion and precision but forgets this architecture-tying fact will still misjudge a scenario that describes migrating a compiled engine to new hardware.
What Triton Inference Server does at serving time
L1 — Intuition: the front-of-house that runs every night, regardless of what the kitchen prepared
Triton is the front-of-house staff who work every single night the restaurant is open, taking orders as they arrive, deciding which orders can be grouped and sent to the kitchen together, and managing however many tables are being served at once — completely independent of which specific kitchen preparation happened that morning. The same front-of-house staff can run a night where the kitchen prepared for one menu, and a different night where it prepared for a completely different one; their job (take orders, batch them sensibly, manage concurrent tables) does not change based on what happened in the kitchen beforehand.
L2 — Mechanism: dynamic batching and concurrency, at the level this domain tests
[GROUND TRUTH] (Sources/ncp-aai/domain-7-nvidia-platform-implementation.md) names Triton's role as serving "models across frameworks with dynamic batching and concurrency." Two properties are doing the work in that phrase.
Serves models across frameworks. Triton is not tied to one model format or one optimization tool — it is a general-purpose serving layer that can host models compiled by TensorRT-LLM, by plain TensorRT, or built in other frameworks entirely, side by side, behind one consistent serving interface. This is a structurally different scope than TensorRT-LLM's, which only ever optimizes; Triton's job is to be the thing that runs whatever it is given, regardless of which tool produced it.
Dynamic batching and concurrency. At request time, Triton can hold arriving requests briefly and assemble them into a batch before dispatching, and it can run multiple models — or multiple instances of the same model — concurrently on shared hardware. Both of these are decisions made continuously, for every request that arrives, in contrast to TensorRT-LLM's build-time decisions that are made once and then fixed for the life of the compiled engine.
L3 — The exam-relevant edge case: Triton has no opinion about how the engine underneath it was optimized
The precise edge case worth holding here is the mirror image of TensorRT-LLM's hardware-tying fact: Triton's serving behavior — how it batches, how it manages concurrency, how it routes requests — is entirely independent of whether the model it is serving was optimized by TensorRT-LLM, by plain TensorRT, or not compiled at all. Triton does not re-optimize a model's kernels, does not change its precision, and does not manage its KV cache — none of that is Triton's job, and a scenario that describes Triton doing any of it has assigned TensorRT-LLM's work to the wrong tool. Triton's value is entirely on the "get requests to a running model efficiently" side of the line; everything about how fast that model runs once it receives a request was decided before Triton ever saw it.
⭐ THE EARNED INSIGHT "TensorRT-LLM optimizes; Triton serves" is easy to memorize as two facts about two products, but the deeper reason it is true is that the two tools are answering questions with fundamentally different amounts of information available to each of them. TensorRT-LLM, at build time, knows everything about the specific GPU it is compiling for and nothing about what traffic will actually arrive later — so its entire job is extracting every bit of speed the hardware allows, in the dark about future load. Triton, at serving time, knows nothing about how the engine underneath it was compiled and everything about what is actually arriving right now — so its entire job is making the best real-time use of whatever speed already exists, informed by live traffic it could never have seen in advance. Neither tool could do the other's job even if you wanted it to, not because of an arbitrary product-boundary decision, but because each one only has access to the information its half of the timeline provides. Once you see the split as an information boundary rather than a marketing distinction, it stops being two facts to memorize and becomes the obvious answer to "why can't one tool just do both."
TensorRT-LLM vs. Triton: the comparison that resolves scenario questions
| Dimension | TensorRT-LLM | Triton Inference Server |
|---|---|---|
| Question it answers | How fast can this model run on this specific GPU? | How do I take live traffic and get it to a running model efficiently? |
| When the decision is made | Once, at build/compile time, before serving begins | Continuously, at every request, while serving is live |
| What it changes | The model's compiled execution: fused kernels, precision, KV-cache handling | Nothing about the model itself — only how requests reach it |
| Output/artifact | A compiled, hardware-specific engine | A running server accepting and routing live requests |
| Portable across GPU architectures? | No — tied to the architecture it was tuned against | Not applicable in the same sense — Triton itself is not compiled per-GPU the way an engine is |
| Framework/backend scope | LLM-specific: this one model's compiled engine | General-purpose: many models, many frameworks, side by side |
| Batching it performs | None at request time — batching-relevant runtime features (in-flight batching) are compiled into the engine M7-02 covers | Dynamic batching, assembled from arriving requests at serving time |
| Is it a serving mechanism? | No — a compilation step | Yes — this is entirely what it is |
The row that resolves the most scenario items fastest is "when the decision is made." A described action that happens once, before any request exists, is TensorRT-LLM's job. A described action that happens for every request, while the server is live, is Triton's job. A stem that blends both — describing kernel fusion and dynamic batching in the same sentence as if one tool did both — is testing whether you can pull the sentence apart into its two halves and assign each to the correct tool.
Two rows deserve a second look because they are the ones most often flattened into a single, wrong idea in casual descriptions. "Portable across GPU architectures" is a question that only makes sense to ask about TensorRT-LLM in the first place — a compiled engine is a hardware-specific artifact, so portability is a real property it either has or lacks, and it lacks it. Triton is not an artifact tied to one GPU architecture in the same sense; it is server software that loads whatever engine it is given, so asking whether Triton "is portable across GPU architectures" is really asking whether the engines it happens to be loading are portable, which routes the question straight back to TensorRT-LLM's row. And "batching it performs" is worth reading carefully because both tools have something batching-shaped associated with them, but at different layers: TensorRT-LLM's in-flight batching (covered in full in M7-02) is a runtime feature compiled into the engine, fixed once the build is done, while Triton's dynamic batching is a serving-time decision, reconfigurable without touching the engine at all. Treating "batching" as one undifferentiated feature that either tool "has" or "lacks" misses that each tool's batching-related capability operates at a different point in the build-versus-serve timeline this whole comparison turns on.
Worked example: tracing one request through both tools
Constructed scenario, illustrative only. Trace a single user's request through a deployment that uses both tools, to make the build-time-versus-serving-time split concrete rather than a description of two separate diagrams.
BEFORE any request exists (build time, once):
A trained 13B-parameter decoder model is compiled with TensorRT-LLM:
- adjacent operations fused into single kernels
- precision reduced from BF16 to INT8, calibrated on a
representative dataset
- KV-cache management and paged attention enabled
Output: one compiled engine, tied to the specific GPU architecture
this build ran against.
AT serving time (continuously, for every request):
The compiled engine is loaded into Triton Inference Server.
Request 1 arrives -> Triton holds it briefly in a queue window.
Requests 2 and 3 arrive within that window -> Triton batches all
three together and dispatches the batch to the loaded engine.
The engine (TensorRT-LLM's compiled artifact) executes the batch,
using the KV-cache handling and precision decided at build time --
Triton did not decide any of that, it only decided to batch these
three requests together and when to dispatch them.
Triton returns each response to its respective caller.
Notice what changed and what did not, reading the two blocks in order. Everything in the first block — fusion, precision, KV-cache handling — happened exactly once, and nothing about it changes as traffic arrives. Everything in the second block — which requests get batched together, how many requests are handled concurrently — happens fresh for every wave of arriving traffic, and none of it required recompiling the engine. If tomorrow's traffic pattern is completely different from today's, Triton's batching behavior adapts without anyone touching the compiled engine; if the model itself needs to run faster on this GPU, that requires a new TensorRT-LLM build, and no amount of retuning Triton's batching window fixes a compiled engine that was never fused or calibrated well in the first place.
Second worked example: a migration that changes only one side of the split
Constructed scenario, illustrative only. A team runs a deployment where a TensorRT-LLM-compiled engine for a 7B-parameter model is served through Triton, handling a steady daytime traffic pattern of short, uniform requests. Two separate changes are proposed, and tracing each one separately shows how cleanly the optimize/serve line separates what each change actually touches.
Change 1 — the traffic pattern shifts. A new product feature introduces requests with wildly varying output lengths — some replies are one sentence, others run to several paragraphs. The team wants better throughput under this new variance.
What actually needs to change: Triton's serving-side configuration --
specifically, whether dynamic batching is tuned appropriately for the
new variance, and whether the batching scheme in use at the engine
level (in-flight batching, which is compiled into a TensorRT-LLM
engine as one of its runtime features) already handles variable
output lengths well.
What does NOT need to change: the compiled engine's kernel fusion or
precision -- nothing about how fast an individual token is produced
changed; what changed is how many sequences of different lengths are
resident together.
Change 2 — the team migrates to a new GPU generation. The organization is replacing its fleet with newer hardware, same model, same traffic pattern.
What actually needs to change: the TensorRT-LLM engine must be
rebuilt for the new GPU architecture, because kernel autotuning
selected implementations specific to the old hardware's streaming
multiprocessor count, cache sizes, and memory hierarchy -- none of
which necessarily carry over to the new generation.
What does NOT need to change: Triton's own configuration -- its
batching window, its concurrency settings, and its model-repository
structure are properties of how it serves requests, not properties
tied to which GPU architecture is running underneath. Triton loads
whichever engine it is given.
The two changes are almost mirror images of each other, and that is deliberate: Change 1 is a serving-time adjustment answered entirely on Triton's side of the line, and Change 2 is a build-time adjustment answered entirely on TensorRT-LLM's side. A team that responded to Change 1 by rebuilding the TensorRT-LLM engine, or responded to Change 2 by only retuning Triton's batching window, would have solved neither problem — because each change lives on exactly one side of the optimize/serve split, and the fix for either one is a no-op on the other.
Decision table: which tool addresses which described need
| Described need in a scenario | Reach for | Why |
|---|---|---|
| A model runs too slowly per individual request on a known, fixed GPU | TensorRT-LLM — rebuild with better fusion, precision, or KV-cache configuration | Per-request execution speed is a build-time property |
| A server needs to accept concurrent requests from many users and batch them efficiently | Triton — configure dynamic batching and concurrency | Handling live, arriving traffic is a serving-time property |
| A compiled engine needs to run on a new GPU generation | TensorRT-LLM — rebuild for the new architecture | Kernel autotuning ties a build to the specific hardware it was benchmarked against |
| Several different models, some TensorRT-LLM engines and some from other frameworks, need one consistent serving endpoint | Triton | General-purpose, multi-framework serving is exactly Triton's scope; TensorRT-LLM only ever optimizes one model |
| A model's quality regressed after a precision-reducing build | TensorRT-LLM's build process, specifically re-running the evaluation set before shipping | The regression is a build-time numeric change, not a serving-configuration issue |
| Throughput needs to improve for highly variable output lengths under existing hardware | Triton's dynamic batching tuning, or the engine's in-flight batching configuration (M7-02) | This is a batching-configuration question, not a re-optimization question |
| A packaged, ready-to-run deployment of a well-known model is needed with minimal setup | NIM, which frequently runs TensorRT-LLM underneath | NIM packages the optimize-and-serve decisions so an operator does not have to make them from scratch |
Why TensorRT-LLM and Triton are on the NCP-AAI exam
NVIDIA Platform Implementation is Domain 7 of the NCP-AAI blueprint at 7%, and [GROUND TRUTH] (Sources/ncp-aai/domain-7-nvidia-platform-implementation.md) names objective 7.4 directly: "leverage TensorRT-LLM and Triton Inference Server for latency reduction." The same source material states the pairing's table — TensorRT-LLM optimizes, Triton serves with dynamic batching and concurrency — as the exact content behind that objective, and explicitly calls out the trap: "Don't conflate the tools. Toolkit = orchestration/dev; NIM = serving microservice; TensorRT-LLM = optimization; Triton = general server; Guardrails = safety. Each has a distinct job." [GROUND TRUTH] (Sources/ncp-aai/domain-7-nvidia-platform-implementation.md) states this five-way distinction directly, and this lesson's pairing is two of the five names in it.
Expect the question to arrive in three recurring shapes. A direct role-identification item asks which of the two tools performs a specifically named action — kernel fusion, precision calibration, or KV-cache handling points to TensorRT-LLM; accepting requests, dynamic batching, or managing concurrency points to Triton. A build-time-versus-serving-time item describes an action and asks whether it happens once, before serving begins, or continuously, while serving is live — the keyed answer follows directly from which tool the action belongs to. And a stack-position item, often the hardest of the three, names all three of NIM, TensorRT-LLM, and Triton in one stem and asks which does which job, testing whether a candidate can hold all three positions — package, optimize, serve — distinct at once rather than collapsing any two of them together.
What the distractors typically look like
Expect TensorRT-LLM described as accepting requests, managing a queue, or load-balancing across replicas — all Triton's job, offered as if they belonged to the optimizer instead. Expect Triton described as fusing kernels, calibrating precision, or managing the KV cache — all TensorRT-LLM's job, offered as if the general-purpose server did the compiling. Expect a TensorRT-LLM engine described as portable across GPU architectures without a rebuild, when kernel autotuning specifically ties the result to the hardware it was benchmarked against. And expect NIM, TensorRT-LLM, and Triton presented as three interchangeable ways to "run a model fast," when each occupies a genuinely distinct position in the same pipeline: NIM packages, TensorRT-LLM (or vLLM) optimizes underneath that packaging, and Triton can serve what either backend produces.
Common mistakes about TensorRT-LLM and Triton
| Mistake | What actually goes wrong | Fix |
|---|---|---|
| Treating TensorRT-LLM as an inference server | A deployment plan lists TensorRT-LLM as the thing that will accept and route production traffic | TensorRT-LLM compiles a model once at build time; it does not itself accept requests — that is Triton's job |
| Believing Triton optimizes or compiles the models it serves | Expecting Triton's configuration to change a model's precision or fuse its kernels | Triton serves whatever engine it is given; optimization happened before the model ever reached Triton |
| Assuming a TensorRT-LLM engine is portable across GPU architectures | An engine built and tuned for one GPU is deployed to a different one and underperforms or fails to load | Kernel autotuning ties the build to the architecture it was benchmarked against; rebuild per target |
Conflating this lesson's optimizer-versus-server split with M7-02's backend-versus-batching-configuration split | Answering a "which backend" question with "Triton," or a "how does Triton batch requests" question with batching-configuration arithmetic from M7-02 | Keep the two pairings distinct: TensorRT-LLM/Triton is optimize-versus-serve; TensorRT-LLM/vLLM is a backend choice within NIM's throughput tuning |
| Assuming NIM, TensorRT-LLM, and Triton are three names for the same layer | Treating any one of the three as interchangeable with the other two in a described scenario | NIM packages; TensorRT-LLM (or vLLM) optimizes underneath that packaging; Triton can serve what either produces — three distinct positions in one path |
| Believing dynamic batching happens inside TensorRT-LLM's compiled engine rather than at Triton's serving layer | Describing a request-time batching decision as something the compiled engine itself decides | Batching-relevant runtime features TensorRT-LLM compiles in (in-flight batching) are fixed at build time; Triton's own dynamic batching is a separate, serving-time mechanism |
Why is TensorRT-LLM not an inference server?
Because its entire job ends the moment a compiled, optimized engine exists. TensorRT-LLM takes a trained model and produces a hardware-specific artifact — fused kernels, a chosen precision, KV-cache handling built in — and once that artifact is produced, TensorRT-LLM has nothing further to do with it. It does not accept a network request, does not manage a queue of concurrent callers, and does not decide how to batch arriving traffic; those are all serving-time responsibilities that belong to a separate piece of infrastructure, which is exactly the role Triton Inference Server fills. A scenario describing an engine accepting live HTTP or gRPC requests has misassigned that behavior to TensorRT-LLM.
Does Triton change how fast a model runs?
Not in the sense TensorRT-LLM changes it. Triton's dynamic batching and concurrency management can improve overall throughput and GPU utilization by grouping requests efficiently and running multiple models or instances side by side, but none of that touches the compiled model's own execution speed — the fused kernels, the chosen precision, the KV-cache handling stay exactly as TensorRT-LLM built them, regardless of how Triton batches requests around that engine. If a model's per-request execution is genuinely too slow, the fix is a better TensorRT-LLM build (different precision, better fusion, a KV-cache configuration matched to the workload), not a Triton configuration change — Triton can only make better use of an engine's existing speed, not increase it.
How do NIM, TensorRT-LLM, and Triton relate to each other?
They occupy three distinct positions in the same path from a trained model to a served response, and none of the three is redundant with either of the others. NIM is a packaging layer: a containerized microservice exposing a standard API, and M7-02 establishes that NIM supports multiple backends underneath that packaging, notably TensorRT-LLM and vLLM. TensorRT-LLM is one of those backends — an optimizer that compiles a model into a fast, hardware-specific engine, tuned once per model-plus-GPU pairing. Triton is a serving layer that can host the engine TensorRT-LLM produces, alongside other models and frameworks, managing dynamic batching and concurrency at request time. A NIM container frequently runs Triton, TensorRT-LLM, or both internally, which is precisely why the three get conflated in casual descriptions despite each doing a genuinely distinct job: NIM packages, TensorRT-LLM (or vLLM) optimizes, Triton serves.
Glossary recap: TensorRT-LLM and Triton terms this lesson introduced
| Term | One-line definition |
|---|---|
| TensorRT-LLM | NVIDIA's LLM-specific optimizer: kernel fusion, precision reduction, and KV-cache handling, compiled once per model-plus-GPU pairing |
| Kernel fusion | Merging adjacent operations into one compiled kernel to eliminate intermediate memory round-trips |
| Precision (in TensorRT-LLM) | Compiling an engine at a reduced numeric precision, using a calibration pass, subject to the same accuracy-measurement discipline as any precision-reducing build |
| KV-cache handling | TensorRT-LLM's management of the key-value cache that makes autoregressive generation linear rather than quadratic |
| Triton Inference Server | NVIDIA's general-purpose serving layer: dynamic batching and concurrency across models and frameworks, at request time |
| Dynamic batching (Triton) | Assembling a batch from arriving requests at serving time, as opposed to a batching scheme compiled into an engine at build time |
| Optimize vs. serve | The fixed distinction between TensorRT-LLM's build-time job and Triton's request-time job |
Key takeaways on TensorRT-LLM and Triton for latency reduction
- TensorRT-LLM optimizes; Triton serves. This is the exact phrase the source material uses, and it is the one line that resolves nearly every scenario item this pairing produces.
- TensorRT-LLM's three named levers are kernel fusion, precision, and KV-cache handling — all decided once, at build time, before any request is served.
- Triton's role is dynamic batching and concurrency, decided continuously, for every request, at serving time — and it works across frameworks, not just for TensorRT-LLM's own output.
- A TensorRT-LLM engine is tied to the GPU architecture it was tuned against and generally must be rebuilt per target architecture.
- NIM often runs TensorRT-LLM (or vLLM) underneath its own API, which is why NIM, TensorRT-LLM, and Triton get conflated despite occupying three distinct positions: package, optimize, serve.
- This lesson's optimize-versus-serve split is distinct from
M7-02's backend-versus-batching-configuration split — keep the two pairings separate rather than answering one with the other's vocabulary.
Optimizing the model and serving it well are two of the jobs an NVIDIA agentic stack needs done correctly. Neither one, by itself, keeps that stack safe — an optimized, well-served model can still say something it should not. Next: M7-04 turns to exactly that piece — NeMo Guardrails as a first-class platform component, sitting between application code and the LLM regardless of how that LLM was optimized or served underneath it.