通过控制台使用AI Profiling

LLM的普及推动了对AI训练与推理的精细化性能检测与调优需求,众多在GPU节点上运行的业务,期望对GPU容器进行在线性能分析。AI Profiling作为基于eBPF和动态进程注入的无侵入式性能分析工具,原生面向Kubernetes容器场景提供,支持对运行GPU任务的容器进程进行在线检测,涵盖多方面的数据采集能力,可以在正在运行的GPU任务上动态启停性能数据采集。而对线上业务来说,可动态挂卸载的Profiling工具可以实时地对在线业务进行较为细致的分析,且无需对业务代码进行修改。本文介绍如何通过控制台触发AI Profiling并查看结果。

操作步骤

重要

AI Profiling 控制台现采用白名单机制,存量用户UID已自动纳入白名单,新用户需通过提交工单申请加入白名单后方可使用。

步骤一:发起诊断

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择巡检和诊断 > 故障诊断

  3. 故障与性能诊断页面,单击AI Profiling进入AI Profiling页面。

  4. 单击诊断进入AI Profiling配置页面,按照页面提示完成配置。重点配置如下表,配置完成后,单击发起诊断

    配置项

    说明

    示例值

    Profiling 配置

    检测项

    需要选择对应检测项,目前检测项支持cpu(CPU调用)、 python(Python进程)、syscall(系统调用)、cuda_kernel(CUDA核函数)。可多选。

    • cpupythonsyscalleBPF采集项,需确保目标节点的内核版本大于5.10。

    • python采集项要求目标业务进程的Python解释器启用USDT特性。您可以登录目标业务容器运行python -c "import sysconfig; print(sysconfig.get_config_var('WITH_DTRACE'))"命令,若输出为1 ,则可以开启python采集项,若为0,请勿开启python采集项,否则会导致本次采集失败。

    • cuda_kernel基于动态注入的采集项,需确保目标进程正在使用GPU,才可以成功收集相关数据。

    cpu,cuda_kernel

    检测时长

    检测时长建议控制在60s以内,Profiling为实时采集,采集数据过多可能会对您的内存和磁盘产生压力。

    5

步骤二:结果展示

  1. 等待状态栏变为成功后,可单击诊断详情,查看相应信息。

    image

  2. AI Profiling默认使用SysOM对采集结果进行分析和图表展示,单击诊断结果下的点击查看图表,跳转至SysOM控制台查看分析结果。image

    可以看到如下效果展示:

    • 数据分析总览

      image

    • GPU CUDA核函数的细节分析image

    • CPU/GPU Tracing分析image

步骤三:结果分析

可参见AI Profiling性能分析示例对结果进行分析。

Profiling Overhead影响数据参考

vLLM推理Overhead数据参考

测试环境

  • 推理框架:vLLM-0.6.4

  • 推理模型:Qwen2-1.5B

  • GPU卡型:NVIDIA A10

  • 测试机型:ecs.ebmgn7ix.32xlarge

  • 测试参数:采集时长30 s,Buffer Size 10

  • 评测标准:outputToken/s

  • 百分比含义:(baseline output token数 - 开启profilingoutput token数)/ baseline output token数 * 100%

测试数据

说明

测试数据内容包含cuda采集项,可参见通过命令行使用AI Profiling获取cuda采集项信息。

  • Benchmark Batchsize = 1

    eBPF采集项

    Baseline(无任何采集)

    不开启CUDA核函数采集

    开启CUDA核函数采集

    eBPF采集

    55.77

    44.64(19.96%)

    cpu

    55.32(0.81%)

    45.2(18.29%)

    syscall

    55.21(1.00%)

    47.78(13.63%)

    cuda

    49.15(11.87%)

    43.4(21.55%)

    python

    29.72(46.71%)

    25.5(53.90%)

    cpu + syscall + cuda + python

    26.93(51.71%)

    21.66(60.85%)

  • Benchmark Batchsize = 16

    eBPF采集项

    Baseline(无任何采集)

    不开启CUDA核函数采集

    开启CUDA核函数采集

    eBPF采集

    266.83

    240.08(10.02%)

    cpu

    258.45(3.14%)

    240.35(9.92%)

    syscall

    261.76(1.9%)

    250.49(3.08%)

    cuda

    253.14(5.13%)

    236.49(11.37%)

    python

    186.1(30.26%)

    173.8(32.75%)

    cpu + syscall + cuda + python

    178.8(32.99%)

    157.02(39.24%)