性能分析
NVIDIA Nsight Systems 在应用层面的报告信息丰富。随着代际更新,指标采样能力不断增强,提供了在时间分析和使用 NVIDIA Nsight Compute 进行内核级深入分析之间的清晰中间地带。
考虑到大型语言模型(LLMs)可能具有较长的运行时间以及模型在单次推理过程或二进制执行期间可能经历的工作负载多样性,我们向TensorRT-LLM添加了功能,以充分利用Nsight Systems的能力。本文档概述了这些功能,并提供了如何最好地利用它们来理解您的应用程序的示例。
功能描述
主要功能如下:
依赖于切换CUDA分析器运行时API的开启和关闭。
提供了一种理解用户可能想要关注的区域的方法。
切换CUDA分析器运行时API的开关:
允许用户确切地知道分析区域对应的内容。
生成较小的文件以便进行后处理(用于指标提取或类似操作)。
用法
推理时间命令行选项
--log_iteration_data,用于gptManagerBenchmark。运行时决定每个解码器迭代启动的具体细节。此选项将每个解码器迭代的元数据打印到stdout:
[TensorRT-LLM][INFO] {"Active Request Count":249,"Context Requests":8,"Free KV cache blocks":0,"Generation Requests":231,"Iteration Counter":90,"Max KV cache blocks":2448,"Max Request Count":256,"MicroBatch ID":0,"Runtime CPU Memory Usage":28784,"Runtime GPU Memory Usage":540173600,"Runtime Pinned Memory Usage":0,"Scheduled Requests":239,"Timestamp":"12-13-2023 14:55:14","Tokens per KV cache block":128,"Total Context Tokens":6904,"Used KV cache blocks":2448}
推理时间环境变量
TLLM_GPTM_PROFILE_START_STOP,一个用于触发gptManagerBenchmark开始/停止的迭代次数的csv文件(对应于上面输出中的“迭代计数器”)。每个值可以使用“-”分隔符表示一个范围,例如0-10。在范围的情况下,该范围内的所有迭代将被放置在同一个nsys文件中。TLLM_GPTS_PROFILE_START_STOP,一个包含静态批处理迭代索引的csv文件,用于触发gptSessionBenchmark的启动/停止
与NVIDIA Nsight Systems启动协调
请查阅Nsight Systems用户指南以获取选项的完整概述。
假设我们想要使用gptSessionBenchmark来分析模型的上下文阶段和第一个输出令牌的计算。
为了仅分析这些迭代,除了设置TLLM_GPTS_PROFILE_START_STOP="0,1"之外:
我们需要告诉Nsight Systems寻找显式的API触发器来进行性能分析(
-c cudaProfilerApi)我们需要告诉Nsight Systems在看到分析停止API调用后继续进行分析(
--capture-range-end="repeat[]")
示例
请查阅Nsight Systems用户指南以获取MPI相关选项的完整概述。
在多GPU模型的单个等级上执行的单个IFB迭代的性能分析
假设我们已经使用 --log_iteration_data 运行过一次,并希望基于元数据输出分析第 0、63 和 127 次迭代。我们还希望以更高的分辨率捕获指标。为此,我们按照 Nsight Systems 用户指南中的描述创建一个 bash 文件:
#!/bin/bash
# Use $PMI_RANK for MPICH and $SLURM_PROCID with srun.
if [ $OMPI_COMM_WORLD_LOCAL_RANK -eq 0 ]; then
nsys profile -e "NSYS_MPI_STORE_TEAMS_PER_RANK=1" -t cuda,nvtx --gpu-metrics-device=${OMPI_COMM_WORLD_LOCAL_RANK} -c cudaProfilerApi --capture-range-end="repeat[]" --gpu-metrics-frequency=100000 "$@"
else
"$@"
fi
我们将此文件命名为 profile_rank_0.bash,然后启动我们的应用程序,指定要捕获的迭代次数:
mpirun -n 2 env TLLM_GPTM_PROFILE_START_STOP="0,63,127" ./profile_rank_0.bash ./benchmarks/gptManagerBenchmark <benchmark/model options>