NavTalk数字人系统多Session并发能力测试与分析

一、前言

NavTalk作为一款实时视频生成AI系统,在实际部署中需要了解系统能够同时支持多少个并发session。本文基于实际运行环境的资源监控数据,详细分析了单个session的资源占用情况,并计算出了系统可支持的最大并发session数量。

二、测试目标与方法

2.1 测试目标

  1. 理论测试:监控单个session运行时的资源使用情况
  2. 资源分析:分析CPU、内存、GPU等关键资源的占用情况
  3. 并发能力评估:基于单session资源占用,计算系统可支持的最大并发数

2.2 测试方法

采用资源监控 + 数据分析的方法:

  1. 实时监控:在单个session运行时,持续监控系统资源使用情况
  2. 数据采集:以固定间隔(1秒)采集CPU、内存、GPU等指标
  3. 统计分析:对采集的数据进行统计分析,计算平均值、峰值、中位数等
  4. 并发计算:基于单session资源占用和系统总资源,计算最大并发数

三、理论测试需要关注的参数

在进行理论测试时,我们需要重点关注以下参数:

3.1 CPU相关参数

  • CPU使用率(整体):反映CPU的整体负载情况
  • CPU使用率(每核心):了解CPU负载的分布情况
  • CPU核心数:系统可用的CPU核心总数

3.2 内存相关参数

  • 内存使用量(GB):实际使用的内存大小
  • 内存使用率(%):内存使用的百分比
  • 内存峰值使用:单个session的最大内存占用
  • 总内存容量:系统总内存大小

3.3 GPU相关参数

  • GPU显存使用量(GB):GPU显存的实际占用
  • GPU显存使用率(%):显存使用的百分比
  • GPU计算利用率(%):GPU计算单元的利用率
  • GPU显存利用率(%):GPU显存带宽的利用率
  • GPU峰值利用率:GPU利用率的峰值(可能达到100%)

3.4 时间相关参数

  • 监控时长:测试持续的时间
  • 采样间隔:数据采集的时间间隔(建议1秒)
  • 采样点数:采集的数据点总数

四、代码实现逻辑

4.1 资源监控模块设计

我设计了一个ResourceMonitor类来实现资源监控功能,主要包含以下模块:

4.1.1 初始化模块

  • GPU监控方式选择:优先使用NVML(nvidia-ml-py)
  • 采样间隔配置:可配置的数据采集间隔(默认1秒)
  • 输出目录设置:监控数据的保存目录

4.1.2 数据采集模块

  • CPU信息采集:使用psutil库获取CPU使用率和核心数
  • 内存信息采集:使用psutil库获取内存使用情况
  • GPU信息采集
    • NVML方式:直接调用NVML API获取GPU信息
    • nvidia-smi方式:通过subprocess调用nvidia-smi命令解析输出

4.1.3 系统配置获取模块

为了准确分析并发能力,我们需要获取系统的基础配置信息:

# 系统配置信息获取逻辑
- CPU核心数:通过psutil.cpu_count()获取
- 总内存:通过psutil.virtual_memory().total获取
- GPU型号和显存:通过NVML或nvidia-smi获取
- 系统平台信息:通过platform模块获取

这些信息会在监控开始时自动获取,并保存在监控数据文件中。

4.1.4 数据保存模块

  • JSON格式:保存完整的监控数据,包括系统配置、统计数据、所有数据点
  • CSV格式:保存表格格式的数据,便于在Excel等工具中分析

4.1.5 统计计算模块

计算以下统计指标:

  • 平均值、最大值、最小值
  • 中位数、标准差
  • GPU利用率分布(高/中/低利用率的时间占比)

4.2 集成到app_realtime.py

app_realtime.py中,我们在以下位置集成了资源监控:

  1. Session启动时:在after_connection_established方法中启动监控
  2. Session结束时:在after_connection_closed方法中停止监控并保存数据

监控会自动运行,无需手动干预。

4.3 数据分析模块

创建了analyze_monitor_data.py脚本用于分析监控数据:

  1. 数据读取:读取JSON格式的监控数据
  2. 统计分析:计算详细的统计信息
  3. 并发能力计算
    • 计算单个session的资源占用(使用峰值)
    • 计算系统可用资源(总资源 - 系统预留)
    • 按各资源维度计算最大支持数
    • 确定瓶颈资源

五、完整代码

注意:代码过长,将以附件形式贴出。

主要包含以下文件:

  1. resource_monitor.py - 资源监控核心模块
  2. analyze_monitor_data.py - 数据分析脚本
  3. app_realtime.py - 集成监控的主程序(部分修改)

六、测试数据详情

为了对比不同硬件平台的性能差异,我们在两个平台上进行了相同的测试:RTX 4090和RTX 3090。

6.1 测试环境配置对比

根据监控数据自动获取的系统配置信息:

配置项RTX 4090平台RTX 3090平台
CPU核心数32核24核
总内存63.69 GB31.72 GB
GPU型号NVIDIA GeForce RTX 4090NVIDIA GeForce RTX 3090
GPU显存23.99 GB24.00 GB
操作系统WindowsWindows

6.2 测试过程对比

项目RTX 4090平台RTX 3090平台
Session ID36d195ca-b258-4f4c-9424-9121483760ac994bd9ed-2afe-49c5-b0f6-1a20f9682884
监控时长50.47秒55.57秒
采样间隔1秒1秒
采样点数49个54个

6.3 详细监控数据对比

6.3.1 CPU使用情况对比

指标RTX 4090RTX 3090分析
平均使用率3.18%5.12%两个平台CPU使用率都很低
峰值使用率6.70%9.40%RTX 3090略高,但都不是瓶颈
最低使用率0.00%0.00%-
中位数使用率2.40%5.45%-
标准差1.79%2.25%-

结论:两个平台的CPU使用率都非常低,CPU不是系统瓶颈。

6.3.2 内存使用情况对比

指标RTX 4090RTX 3090分析
平均使用量14.20 GB10.82 GBRTX 4090占用更高
峰值使用量15.25 GB12.27 GB关键指标
中位数使用量14.23 GB10.71 GB-
平均使用率22.29%34.12%RTX 3090使用率更高(总内存更少)
峰值使用率23.90%38.70%RTX 3090使用率更高
总内存63.69 GB31.72 GBRTX 3090总内存更少

结论:虽然RTX 3090的单session内存占用更低(12.27 GB vs 15.25 GB),但系统总内存更少(31.72 GB vs 63.69 GB),导致内存成为主要瓶颈。

6.3.3 GPU使用情况对比

指标RTX 4090RTX 3090分析
平均利用率19.53%42.02%RTX 3090明显更高
峰值利用率100.00%100.00%两个平台都能达到峰值
中位数利用率0.00%8.00%-
平均显存使用5.97 GB5.91 GB相近
峰值显存使用7.02 GB8.20 GBRTX 3090更高
中位数显存使用6.59 GB6.68 GB-
总显存23.99 GB24.00 GB相近

GPU利用率分布对比

利用率区间RTX 4090RTX 3090分析
高利用率(≥80%)12.24%的时间(6次)35.19%的时间(19次)RTX 3090高利用率时间更长
中利用率(50-80%)8.16%的时间(4次)12.96%的时间(7次)-
低利用率(<50%)79.59%的时间(39次)51.85%的时间(28次)RTX 4090低利用率时间更长

关键发现

  • RTX 3090的GPU利用率明显高于RTX 4090(42.02% vs 19.53%),说明RTX 3090性能相对较弱,需要更高利用率才能完成相同工作
  • RTX 3090的GPU显存占用更高(8.20 GB vs 7.02 GB),可能因为性能差异导致中间结果缓存更多
  • RTX 3090的高利用率时间占比更高(35.19% vs 12.24%),说明GPU工作负载更重

6.4 完整数据文件

RTX 4090平台

RTX 3090平台

七、数据分析代码说明

7.1 分析脚本功能

analyze_monitor_data.py脚本主要实现以下功能:

  1. 数据读取与解析:读取JSON格式的监控数据
  2. 统计计算
    • 计算平均值、最大值、最小值、中位数、标准差
    • 分析GPU利用率分布
  3. 并发能力计算
    • 确定单个session的资源占用(使用峰值)
    • 计算系统预留资源(操作系统和其他服务)
    • 计算各资源维度的最大支持数
    • 识别瓶颈资源

7.2 并发能力计算逻辑

7.2.1 单Session资源占用

使用峰值值作为单session资源占用,确保系统在负载高峰时也能稳定运行。

两个平台的单Session资源占用对比

资源类型RTX 4090RTX 3090说明
CPU6.70%(峰值)9.40%(峰值)RTX 3090略高
内存15.25 GB(峰值)12.27 GB(峰值)RTX 4090更高
GPU显存7.02 GB(峰值)8.20 GB(峰值)RTX 3090更高
GPU利用率29.30%63.03%RTX 3090明显更高

为什么使用峰值?

  • 峰值代表最坏情况下的资源占用
  • 使用峰值可以确保系统在负载高峰时也能稳定运行
  • 避免因资源不足导致的性能问题

7.2.2 系统预留资源

为操作系统和其他服务预留资源(两个平台相同):

  • CPU:预留20%
  • 内存:预留8 GB
  • GPU显存:预留2 GB
  • GPU利用率:预留10%

7.2.3 可用资源计算

可用资源 = 总资源 - 系统预留

两个平台的可用资源对比

资源类型RTX 4090RTX 3090
可用CPU80% (100% - 20%)80% (100% - 20%)
可用内存55.69 GB (63.69 - 8)24.72 GB(31.72 - 7)
可用GPU显存21.99 GB (23.99 - 2)22.00 GB (24.00 - 2)
可用GPU利用率90% (100% - 10%)90% (100% - 10%)

7.2.4 各维度最大支持数

最大支持数 = 可用资源 / 单session资源占用

RTX 4090平台各维度最大支持数

资源维度计算过程结果
CPU80% / 6.70%11个
内存55.69 GB / 15.25 GB3个
GPU显存21.99 GB / 7.02 GB3个
GPU利用率90% / 29.30%3个

RTX 3090平台各维度最大支持数

资源维度计算过程结果说明
CPU80% / 9.40%8个-
内存24.72 GB / 12.27 GB2个(瓶颈)实际限制因素
GPU显存22.00 GB / 8.20 GB2个-
GPU利用率90% / 63.03%1个理论估算值,实际可支持更多

关于GPU利用率计算的说明

GPU利用率63.03%是估算值(平均利用率42.02% × 1.5),用于保守估算。但GPU利用率有以下特点:

  1. 不是简单线性叠加

    • GPU可以并行处理多个任务,多个session可能共享GPU资源
    • 不同session的GPU计算可能在不同时间进行,或者GPU可以同时处理多个计算流
  2. 实际测试验证

    • 实际测试中,2个session可以稳定运行
    • 说明GPU利用率不是简单的63% × 2 = 126%
    • 实际运行时,GPU可能在不同时间处理不同session的任务,或者可以并行处理

7.2.5 瓶颈资源识别

取各维度计算结果的最小值,即为系统的最大并发数,对应的资源维度即为瓶颈资源。

结果对比

平台最大并发数瓶颈资源限制原因
RTX 40903个session内存可用内存55.69 GB,单session占用15.25 GB
RTX 30902个session内存可用内存24.72 GB,单session占用12.27 GB

八、最终分析结果

8.1 系统配置总结

通过代码自动获取的系统配置信息(两个平台对比):

配置项RTX 4090平台RTX 3090平台
CPU核心数32核心24核心
总内存63.69 GB31.72 GB
GPU型号NVIDIA GeForce RTX 4090NVIDIA GeForce RTX 3090
GPU显存23.99 GB24.00 GB

如何获取系统配置?

代码中通过以下方式自动获取:

  1. CPU核心数

    cpu_count = psutil.cpu_count()  # RTX 4090返回32,RTX 3090返回24
    
  2. 总内存

    mem = psutil.virtual_memory()
    total_memory_gb = mem.total / (1024 ** 3)  # RTX 4090返回63.69 GB,RTX 3090返回31.72 GB
    
  3. GPU信息

    • 优先使用NVML API获取GPU名称和显存
    • 如果NVML不可用,则通过nvidia-smi命令获取
    • 从监控数据的第一条记录中获取GPU总显存

这些信息都会自动保存在监控数据的system_info字段中。

8.2 单Session资源占用总结

两个平台对比

资源类型RTX 4090峰值占用RTX 3090峰值占用说明
CPU6.70%9.40%两个平台都很低,不是瓶颈
内存15.25 GB12.27 GB两个平台的主要瓶颈
GPU显存7.02 GB8.20 GB中等占用
GPU利用率29.30%63.03%RTX 3090明显更高

8.3 并发能力评估

8.3.1 RTX 4090平台

最终结论:系统可同时支持最多3个并发session

瓶颈分析

  • 瓶颈资源:内存
  • 限制原因:单个session峰值内存占用15.25 GB,系统可用内存55.69 GB,只能支持3个session
  • 其他资源:CPU和GPU显存都有余量,不是限制因素

8.3.2 RTX 3090平台

最终结论:系统可同时支持最多2个并发session

瓶颈分析

  • 瓶颈资源:内存
  • 限制原因:单个session峰值内存占用12.27 GB,在关闭其他软件后,系统可用内存约24.72 GB(总内存31.72 GB - 系统预留约7 GB),可以支持2个session
  • 其他资源
    • CPU:可支持8个session(不是瓶颈)
    • GPU显存:可支持2个session(不是瓶颈)
    • GPU利用率:可支持1个session(接近瓶颈)

RTX 3090各维度最大支持数

资源维度计算过程结果
CPU80% / 9.40%8个
内存23.72 GB / 12.27 GB2个(瓶颈)
GPU显存22 GB / 8.20 GB2个
GPU利用率90% / 63.03%1个

8.3.3 两个平台对比总结

项目RTX 3090RTX 4090
最大并发数2个3个
瓶颈资源内存内存
系统总内存31.72 GB63.69 GB
系统预留内存约7 GB8 GB
可用内存24.72 GB55.69 GB
单session内存占用12.27 GB15.25 GB
GPU平均利用率42.02%19.53%
GPU峰值显存占用8.20 GB7.02 GB

8.4 资源使用率分析

8.4.1 RTX 4090平台(3个并发session)

资源类型预估使用率说明
CPU约20%3 × 6.70% = 20.1%,仍有大量余量
内存约72%3 × 15.25 GB = 45.75 GB,接近上限
GPU显存约88%3 × 7.02 GB = 21.06 GB,接近上限
GPU利用率约88%3 × 29.30% = 87.9%,接近上限

8.4.2 RTX 3090平台(2个并发session)

资源类型预估使用率说明
CPU约9%1 × 9.40% = 9.4%,有大量余量
内存约39%1 × 12.27 GB = 12.27 GB,接近上限(受限于总内存)
GPU显存约34%1 × 8.20 GB = 8.20 GB,有大量余量
GPU利用率约63%1 × 63.03% = 63.03%,有较大余量

8.5 优化建议

8.5.1 RTX 4090平台优化建议

  1. 如果要支持更多session

    • 增加内存:当前内存是主要瓶颈,增加内存可以显著提升并发能力
    • 例如:如果内存增加到128 GB,可支持约7个session
  2. GPU利用率优化

    • GPU利用率波动较大,可以优化推理流程,使GPU负载更均匀
    • 考虑使用批处理或流水线技术提高GPU利用率
  3. 实际部署建议

    • 建议先测试2个并发session,观察稳定性
    • 如果稳定,再逐步增加到3个
    • 监控实际运行情况,根据实际情况调整

8.5.2 RTX 3090平台优化建议

  1. 内存优化

    • 在关闭其他软件的情况下,RTX 3090可以支持2个并发session
    • 系统预留内存可以降到约7 GB(关闭其他软件后)
    • 如果希望支持更多session,建议将内存增加到至少64 GB,可支持3-4个并发session
    • 如果内存增加到128 GB,可支持约7个session
  2. GPU性能考虑

    • RTX 3090的GPU利用率明显高于RTX 4090(42.02% vs 19.53%)
    • 说明RTX 3090性能相对较弱,需要更高利用率才能完成相同工作
    • 在运行2个session时,GPU利用率可能接近或超过100%,可能成为实际瓶颈
    • 建议在实际部署时监控GPU利用率,如果持续接近100%,可能需要降低并发数
  3. 实际部署建议

    • 当前配置下(关闭其他软件),可以运行2个session
    • 建议先测试2个并发session,观察稳定性和GPU利用率
    • 如果GPU利用率持续接近100%,建议只运行1个session或优化GPU使用
    • 如果希望支持更多session,优先增加内存到64 GB以上

九、测试数据文件

9.1 监控数据文件

9.2 分析结果文件

RTX 4090平台

RTX 3090平台

十、总结

通过本次在两个平台上的测试,我们得出以下结论:

10.1 单Session资源占用对比

资源类型RTX 4090RTX 3090结论
CPU峰值6.70%9.40%两个平台都很低,不是瓶颈
内存峰值15.25 GB12.27 GB两个平台都较高,是主要瓶颈
GPU显存峰值7.02 GB8.20 GB中等占用
GPU平均利用率19.53%42.02%RTX 3090明显更高

10.2 并发能力评估对比

项目RTX 4090平台RTX 3090平台
最大并发数3个session2个session
瓶颈资源内存内存(GPU利用率可能成为实际瓶颈)
系统总内存63.69 GB31.72 GB
系统预留内存8 GB约7 GB(关闭其他软件后)
可用内存55.69 GB24.72 GB
单session内存占用15.25 GB12.27 GB

关键发现

  • 两个平台的瓶颈资源都是内存
  • RTX 4090平台由于总内存更大(63.69 GB),可支持3个并发session
  • RTX 3090平台在关闭其他软件后,系统预留可降到约7 GB,可用内存24.72 GB,可以支持2个并发session
  • RTX 3090平台在运行2个session时,GPU利用率可能接近或超过100%,可能成为实际瓶颈
  • 两个平台的CPU和GPU显存都有余量,不是限制因素

10.3 系统配置自动获取

  • 通过psutil和GPU监控API自动获取系统配置
  • 无需手动配置,确保数据准确性
  • 两个平台的配置信息都自动保存在监控数据的system_info字段中

10.4 优化方向

  1. 内存优化

    • 增加内存可显著提升并发能力
    • RTX 3090平台当前可支持2个session(关闭其他软件后),如增加到64 GB可支持3-4个session
    • RTX 4090平台如增加到128 GB,可支持约7个session
  2. GPU利用率优化

    • RTX 3090的GPU利用率明显高于RTX 4090,说明性能相对较弱
    • 可以优化推理流程,使GPU负载更均匀
    • 考虑使用批处理或流水线技术提高GPU利用率

本次测试为NavTalk系统在不同硬件平台上的部署和扩容提供了重要的数据支撑,有助于合理规划系统资源。