模型配置文件#

NIM 模型配置文件定义了两件事 – NIM 可以使用哪些模型引擎,以及 NIM 应该使用哪些标准来选择这些引擎。基于配置文件内容哈希的唯一字符串标识每个配置文件。

NVIDIA 针对流行的数据中心 GPU 模型、不同的 GPU 数量和特定的数值精度提供了优化的模型配置文件。优化的模型配置文件具有模型特定和硬件特定的优化,以提高模型性能。NIM for LLMs 为优化的配置文件下载预编译的 TensorRT-LLM 引擎。对于给定的系统,可能存在几个不同的有效优化模型配置文件,在这种情况下,您可以按照“配置文件选择”中的步骤在部署时选择一个配置文件。如果用户在部署时未手动选择配置文件,NIM 将根据“自动配置文件选择”中列出的规则自动选择配置文件。

NVIDIA 还提供了通用模型配置文件,这些配置文件可在任何具有足够内存容量的 NVIDIA GPU(或 GPU 集)上运行。通用模型配置文件可以通过配置文件名称中是否存在 local_buildvllm 来识别。在没有兼容的优化配置文件的系统上,将自动选择通用配置文件。在优化配置文件可用时,它们优先于通用配置文件,但是您也可以按照“配置文件选择”中的步骤在任何系统上选择部署通用配置文件。

模型配置文件嵌入在 NIM 容器中的模型清单文件中,默认情况下,该文件位于容器文件系统内的 /opt/nim/etc/default/model_manifest.yaml

配置文件选择#

要选择用于部署的配置文件,请使用 -e NIM_MODEL_PROFILE=ID 设置特定的配置文件 ID,其中 IDlist-model-profiles 实用工具返回的配置文件 ID,如以下示例所示

# $IMG_NAME must be a valid NIM container profile ID,
# such as 
#751382df4272eafc83f541f364d61b35aed9cce8c7b0c869269cea5a366cd08c
# in the following example
docker run --rm --gpus=all -e NGC_API_KEY=$NGC_API_KEY $IMG_NAME list-model-profiles

输出

MODEL PROFILES
- Compatible with system and runnable:
  - a93a1a6b72643f2b2ee5e80ef25904f4d3f942a87f8d32da9e617eeccfaae04c (tensorrt_llm-A100-fp16-tp2-latency)
  - 751382df4272eafc83f541f364d61b35aed9cce8c7b0c869269cea5a366cd08c (tensorrt_llm-A100-fp16-tp1-throughput)
  - 19031a45cf096b683c4d66fff2a072c0e164a24f19728a58771ebfc4c9ade44f (vllm-fp16-tp2)
  - 8835c31752fbc67ef658b20a9f78e056914fdef0660206d82f252d62fd96064d (vllm-fp16-tp1)

要选择 ,您可以设置 -e NIM_MODEL_PROFILE="tensorrt_llm-A100-fp16-tp1-throughput"-e NIM_MODEL_PROFILE="751382df4272eafc83f541f364d61b35aed9cce8c7b0c869269cea5a366cd08c" 以运行 A100 TP1 配置文件。

docker run -it --rm --name=$CONTAINER_NAME \
  --gpus all \
  --shm-size=16GB \
  -e NGC_API_KEY=$NGC_API_KEY \
  -e NIM_MODEL_PROFILE="tensorrt_llm-A100-fp16-tp1-throughput \
  -v "$LOCAL_NIM_CACHE:/opt/nim/.cache" \
  -u $(id -u) \
  -p 8000:8000 \
  $IMG_NAME

自动配置文件选择#

如果未明确选择配置文件,NIM 旨在根据检测到的硬件,从兼容配置文件列表中自动选择最合适的配置文件。每个配置文件都包含不同的参数,这些参数会影响选择过程。下面概述了基于所涉及参数的排序逻辑

  1. 自定义配置文件:首先,如果存在缓存的微调自定义配置文件,则将选择它。

  2. 优化配置文件:如果检测到的 GPU 存在任何优化配置文件,则将根据以下内容选择一个

    1. 精度:在可用时,较低精度的配置文件是首选。例如,NIM 将自动选择 FP8 配置文件而不是 FP16。对于相同位数的数值类型,浮点精度也优于其他数值类型。例如,FP8 优于 INT8FP16 优于 BF16。有关更多详细信息,请参阅量化部分。

    2. 优化目标:默认情况下,延迟优化配置文件优先于吞吐量优化配置文件。

    3. 张量并行度:具有较高张量并行度 (TP) 值的配置文件是首选。例如,TP 值为 8 的配置文件(需要 8 个 GPU 才能运行)将优先于 TP 值为 4 的配置文件,前提是有足够的 GPU 可用于运行两者。

  3. 通用配置文件:如果没有兼容的优化配置文件,将根据以下标准选择通用配置文件

    1. 后端:NIM 将默认使用 tensorrt_llm-local_build 配置文件而不是 vllm 配置文件。

    2. 精度:在可用时,较低精度的配置文件是首选。有关详细信息,请参阅优化配置文件部分。

    3. 张量并行度:具有较高张量并行度 (TP) 值的配置文件是首选。有关详细信息,请参阅优化配置文件部分。

此选择将在启动时记录。例如

Detected 2 compatible profile(s).
Valid profile: 751382df4272eafc83f541f364d61b35aed9cce8c7b0c869269cea5a366cd08c (tensorrt_llm-A100-fp16-tp1-throughput) on GPUs [0]
Valid profile: 8835c31752fbc67ef658b20a9f78e056914fdef0660206d82f252d62fd96064d (vllm-fp16-tp1) on GPUs [0]
Selected profile: 751382df4272eafc83f541f364d61b35aed9cce8c7b0c869269cea5a366cd08c (tensorrt_llm-A100-fp16-tp1-throughput)
Profile metadata: precision: fp16
Profile metadata: feat_lora: false
Profile metadata: gpu: A100
Profile metadata: gpu_device: 20b2:10de
Profile metadata: tp: 1
Profile metadata: llm_engine: tensorrt_llm
Profile metadata: pp: 1
Profile metadata: profile: throughput

配置文件详细信息#

优化配置文件与本地构建配置文件#

优化配置文件和通用本地构建配置文件都使用 TensorRT-LLM,但它们在某些方面有所不同。

优化配置文件利用 GPU 特定的 TensorRT-LLM 选项,以实现最佳吞吐量和延迟,并且使用优化配置文件会导致 NIM 下载预编译的 TensorRT-LLM 引擎。

本地构建配置文件使用启发式方法来选择一组平衡的选项,并且使用本地构建配置文件会导致 NIM 下载原始模型权重并在本地系统上执行编译。当使用以前未部署和缓存的本地构建配置文件进行部署时,这可能会导致更长的启动时间。

优化目标#

optimized 配置文件可以具有不同的优化目标,旨在最大限度地减少延迟或最大限度地提高吞吐量。这些引擎配置文件在配置文件名称和 NIM 附带的模型清单文件中分别标记为 latencythroughput

latency 配置文件旨在最大限度地减少

  • 首个令牌时间 (TTFT):从初始推理请求到模型到返回第一个令牌之间的延迟。

  • 令牌间延迟 (ITL):第一个令牌之后每个令牌之间的延迟。

throughput 配置文件旨在最大限度地提高

  • 每个 GPU 的总吞吐量:NIM 每秒生成的令牌总数,除以使用的 GPU 数量。

虽然吞吐量和延迟变体之间可能存在许多差异以满足这些不同的标准,但最显着的差异之一是吞吐量变体利用托管模型所需的最小 GPU 数量(通常受内存利用率的限制)。延迟变体使用额外的 GPU 来减少请求延迟,但代价是相对于吞吐量变体,每个 GPU 的总吞吐量减少。

量化#

对于某些模型和 GPU 配置,可以使用具有降低数值精度的量化引擎。这些可以通过配置文件名称中包含的数字格式来识别。例如,fp8 用于已量化为 8 位浮点值的模型,而 fp16 用于非量化的 16 位浮点值。所有量化引擎都经过严格测试,以满足与默认 fp16 引擎相同的精度标准。由于这种精度测试,并且由于量化导致内存需求降低,从而显着提高了延迟和吞吐量,因此在可用时默认选择 fp8 模型。

量化配置文件分为三个主要类别:optimizedtrtllm-buildablegeneric,类似于全精度配置文件。带有量化标签的 trtllm-buildable 配置文件支持在引擎构建过程中对 fp16bf16 模型进行即时量化。此步骤可能暂时需要额外的 GPU 内存来保存原始 fp16 权重并执行必要的校准。但是,由于精度较低,生成的量化引擎会减少推理期间的 GPU 内存使用量。重要的是,一旦量化引擎在首次启动推理服务器后被缓存,后续启动将仅需要足够的 GPU 内存用于推理,从而消除了初始量化期间使用的额外内存的需求。NIM 目前支持 HF 和 Nemotron 模型的 fp8 量化。

对于 trtllm-buildable 配置文件中的校准步骤,用户需要下载 cnn_dailymail 数据集或任何自定义数据集以获得更好的精度。我们建议对我们目前支持的模型使用 cnn_dailymail

注意

用户有责任检查数据集许可证是否适合预期用途。

  1. 运行 git clone http://hugging-face.cn/datasets/abisee/cnn_dailymail

  2. 挂载数据集并使用设置的 NIM_QUANTIZATION_CALIBRATION_DATASET 启动 NIM,

请注意,容器中挂载的路径应包含字符串 cnn_dailymail。请注意,cnn_dailymail 存储库根文件夹名称不应更改。

docker run ...
-v /path/to/downloaded/cnn_dailymail:/datasets/cnn_dailymail
-e NIM_QUANTIZATION_CALIBRATION_DATASET=/datasets/cnn_dailymail
...

要部署非量化的 fp16 引擎,请按照“配置文件选择”步骤操作。