NavTalk数字人系统多Session并发能力测试与分析
NavTalk数字人系统多Session并发能力测试与分析
一、前言
NavTalk作为一款实时视频生成AI系统,在实际部署中需要了解系统能够同时支持多少个并发session。本文基于实际运行环境的资源监控数据,详细分析了单个session的资源占用情况,并计算出了系统可支持的最大并发session数量。
二、测试目标与方法
2.1 测试目标
- 理论测试:监控单个session运行时的资源使用情况
- 资源分析:分析CPU、内存、GPU等关键资源的占用情况
- 并发能力评估:基于单session资源占用,计算系统可支持的最大并发数
2.2 测试方法
采用资源监控 + 数据分析的方法:
- 实时监控:在单个session运行时,持续监控系统资源使用情况
- 数据采集:以固定间隔(1秒)采集CPU、内存、GPU等指标
- 统计分析:对采集的数据进行统计分析,计算平均值、峰值、中位数等
- 并发计算:基于单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中,我们在以下位置集成了资源监控:
- Session启动时:在
after_connection_established方法中启动监控 - Session结束时:在
after_connection_closed方法中停止监控并保存数据
监控会自动运行,无需手动干预。
4.3 数据分析模块
创建了analyze_monitor_data.py脚本用于分析监控数据:
- 数据读取:读取JSON格式的监控数据
- 统计分析:计算详细的统计信息
- 并发能力计算:
- 计算单个session的资源占用(使用峰值)
- 计算系统可用资源(总资源 - 系统预留)
- 按各资源维度计算最大支持数
- 确定瓶颈资源
五、完整代码
注意:代码过长,将以附件形式贴出。
主要包含以下文件:
- resource_monitor.py - 资源监控核心模块
- analyze_monitor_data.py - 数据分析脚本
app_realtime.py- 集成监控的主程序(部分修改)
六、测试数据详情
为了对比不同硬件平台的性能差异,我们在两个平台上进行了相同的测试:RTX 4090和RTX 3090。
6.1 测试环境配置对比
根据监控数据自动获取的系统配置信息:
| 配置项 | RTX 4090平台 | RTX 3090平台 |
|---|---|---|
| CPU核心数 | 32核 | 24核 |
| 总内存 | 63.69 GB | 31.72 GB |
| GPU型号 | NVIDIA GeForce RTX 4090 | NVIDIA GeForce RTX 3090 |
| GPU显存 | 23.99 GB | 24.00 GB |
| 操作系统 | Windows | Windows |
6.2 测试过程对比
| 项目 | RTX 4090平台 | RTX 3090平台 |
|---|---|---|
| Session ID | 36d195ca-b258-4f4c-9424-9121483760ac | 994bd9ed-2afe-49c5-b0f6-1a20f9682884 |
| 监控时长 | 50.47秒 | 55.57秒 |
| 采样间隔 | 1秒 | 1秒 |
| 采样点数 | 49个 | 54个 |
6.3 详细监控数据对比
6.3.1 CPU使用情况对比
| 指标 | RTX 4090 | RTX 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 4090 | RTX 3090 | 分析 |
|---|---|---|---|
| 平均使用量 | 14.20 GB | 10.82 GB | RTX 4090占用更高 |
| 峰值使用量 | 15.25 GB | 12.27 GB | 关键指标 |
| 中位数使用量 | 14.23 GB | 10.71 GB | - |
| 平均使用率 | 22.29% | 34.12% | RTX 3090使用率更高(总内存更少) |
| 峰值使用率 | 23.90% | 38.70% | RTX 3090使用率更高 |
| 总内存 | 63.69 GB | 31.72 GB | RTX 3090总内存更少 |
结论:虽然RTX 3090的单session内存占用更低(12.27 GB vs 15.25 GB),但系统总内存更少(31.72 GB vs 63.69 GB),导致内存成为主要瓶颈。
6.3.3 GPU使用情况对比
| 指标 | RTX 4090 | RTX 3090 | 分析 |
|---|---|---|---|
| 平均利用率 | 19.53% | 42.02% | RTX 3090明显更高 |
| 峰值利用率 | 100.00% | 100.00% | 两个平台都能达到峰值 |
| 中位数利用率 | 0.00% | 8.00% | - |
| 平均显存使用 | 5.97 GB | 5.91 GB | 相近 |
| 峰值显存使用 | 7.02 GB | 8.20 GB | RTX 3090更高 |
| 中位数显存使用 | 6.59 GB | 6.68 GB | - |
| 总显存 | 23.99 GB | 24.00 GB | 相近 |
GPU利用率分布对比:
| 利用率区间 | RTX 4090 | RTX 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平台:
- 文件名:monitor_36d195ca-b258-4f4c-9424-9121483760ac_20260114_221810.json
- 内容:包含系统配置、统计数据、49个详细数据点
RTX 3090平台:
- 文件名:monitor_994bd9ed-2afe-49c5-b0f6-1a20f9682884_20260114_235322.json
- 内容:包含系统配置、统计数据、54个详细数据点
七、数据分析代码说明
7.1 分析脚本功能
analyze_monitor_data.py脚本主要实现以下功能:
- 数据读取与解析:读取JSON格式的监控数据
- 统计计算:
- 计算平均值、最大值、最小值、中位数、标准差
- 分析GPU利用率分布
- 并发能力计算:
- 确定单个session的资源占用(使用峰值)
- 计算系统预留资源(操作系统和其他服务)
- 计算各资源维度的最大支持数
- 识别瓶颈资源
7.2 并发能力计算逻辑
7.2.1 单Session资源占用
使用峰值值作为单session资源占用,确保系统在负载高峰时也能稳定运行。
两个平台的单Session资源占用对比:
| 资源类型 | RTX 4090 | RTX 3090 | 说明 |
|---|---|---|---|
| CPU | 6.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 4090 | RTX 3090 |
|---|---|---|
| 可用CPU | 80% (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平台各维度最大支持数:
| 资源维度 | 计算过程 | 结果 |
|---|---|---|
| CPU | 80% / 6.70% | 11个 |
| 内存 | 55.69 GB / 15.25 GB | 3个 |
| GPU显存 | 21.99 GB / 7.02 GB | 3个 |
| GPU利用率 | 90% / 29.30% | 3个 |
RTX 3090平台各维度最大支持数:
| 资源维度 | 计算过程 | 结果 | 说明 |
|---|---|---|---|
| CPU | 80% / 9.40% | 8个 | - |
| 内存 | 24.72 GB / 12.27 GB | 2个(瓶颈) | 实际限制因素 |
| GPU显存 | 22.00 GB / 8.20 GB | 2个 | - |
| GPU利用率 | 90% / 63.03% | 1个 | 理论估算值,实际可支持更多 |
关于GPU利用率计算的说明:
GPU利用率63.03%是估算值(平均利用率42.02% × 1.5),用于保守估算。但GPU利用率有以下特点:
-
不是简单线性叠加:
- GPU可以并行处理多个任务,多个session可能共享GPU资源
- 不同session的GPU计算可能在不同时间进行,或者GPU可以同时处理多个计算流
-
实际测试验证:
- 实际测试中,2个session可以稳定运行
- 说明GPU利用率不是简单的63% × 2 = 126%
- 实际运行时,GPU可能在不同时间处理不同session的任务,或者可以并行处理
7.2.5 瓶颈资源识别
取各维度计算结果的最小值,即为系统的最大并发数,对应的资源维度即为瓶颈资源。
结果对比:
| 平台 | 最大并发数 | 瓶颈资源 | 限制原因 |
|---|---|---|---|
| RTX 4090 | 3个session | 内存 | 可用内存55.69 GB,单session占用15.25 GB |
| RTX 3090 | 2个session | 内存 | 可用内存24.72 GB,单session占用12.27 GB |
八、最终分析结果
8.1 系统配置总结
通过代码自动获取的系统配置信息(两个平台对比):
| 配置项 | RTX 4090平台 | RTX 3090平台 |
|---|---|---|
| CPU核心数 | 32核心 | 24核心 |
| 总内存 | 63.69 GB | 31.72 GB |
| GPU型号 | NVIDIA GeForce RTX 4090 | NVIDIA GeForce RTX 3090 |
| GPU显存 | 23.99 GB | 24.00 GB |
如何获取系统配置?
代码中通过以下方式自动获取:
-
CPU核心数:
cpu_count = psutil.cpu_count() # RTX 4090返回32,RTX 3090返回24 -
总内存:
mem = psutil.virtual_memory() total_memory_gb = mem.total / (1024 ** 3) # RTX 4090返回63.69 GB,RTX 3090返回31.72 GB -
GPU信息:
- 优先使用NVML API获取GPU名称和显存
- 如果NVML不可用,则通过nvidia-smi命令获取
- 从监控数据的第一条记录中获取GPU总显存
这些信息都会自动保存在监控数据的system_info字段中。
8.2 单Session资源占用总结
两个平台对比:
| 资源类型 | RTX 4090峰值占用 | RTX 3090峰值占用 | 说明 |
|---|---|---|---|
| CPU | 6.70% | 9.40% | 两个平台都很低,不是瓶颈 |
| 内存 | 15.25 GB | 12.27 GB | 两个平台的主要瓶颈 |
| GPU显存 | 7.02 GB | 8.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各维度最大支持数:
| 资源维度 | 计算过程 | 结果 |
|---|---|---|
| CPU | 80% / 9.40% | 8个 |
| 内存 | 23.72 GB / 12.27 GB | 2个(瓶颈) |
| GPU显存 | 22 GB / 8.20 GB | 2个 |
| GPU利用率 | 90% / 63.03% | 1个 |
8.3.3 两个平台对比总结
| 项目 | RTX 3090 | RTX 4090 |
|---|---|---|
| 最大并发数 | 2个 | 3个 |
| 瓶颈资源 | 内存 | 内存 |
| 系统总内存 | 31.72 GB | 63.69 GB |
| 系统预留内存 | 约7 GB | 8 GB |
| 可用内存 | 24.72 GB | 55.69 GB |
| 单session内存占用 | 12.27 GB | 15.25 GB |
| GPU平均利用率 | 42.02% | 19.53% |
| GPU峰值显存占用 | 8.20 GB | 7.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平台优化建议
-
如果要支持更多session:
- 增加内存:当前内存是主要瓶颈,增加内存可以显著提升并发能力
- 例如:如果内存增加到128 GB,可支持约7个session
-
GPU利用率优化:
- GPU利用率波动较大,可以优化推理流程,使GPU负载更均匀
- 考虑使用批处理或流水线技术提高GPU利用率
-
实际部署建议:
- 建议先测试2个并发session,观察稳定性
- 如果稳定,再逐步增加到3个
- 监控实际运行情况,根据实际情况调整
8.5.2 RTX 3090平台优化建议
-
内存优化:
- 在关闭其他软件的情况下,RTX 3090可以支持2个并发session
- 系统预留内存可以降到约7 GB(关闭其他软件后)
- 如果希望支持更多session,建议将内存增加到至少64 GB,可支持3-4个并发session
- 如果内存增加到128 GB,可支持约7个session
-
GPU性能考虑:
- RTX 3090的GPU利用率明显高于RTX 4090(42.02% vs 19.53%)
- 说明RTX 3090性能相对较弱,需要更高利用率才能完成相同工作
- 在运行2个session时,GPU利用率可能接近或超过100%,可能成为实际瓶颈
- 建议在实际部署时监控GPU利用率,如果持续接近100%,可能需要降低并发数
-
实际部署建议:
- 当前配置下(关闭其他软件),可以运行2个session
- 建议先测试2个并发session,观察稳定性和GPU利用率
- 如果GPU利用率持续接近100%,建议只运行1个session或优化GPU使用
- 如果希望支持更多session,优先增加内存到64 GB以上
九、测试数据文件
9.1 监控数据文件
- 文件名:monitor_36d195ca-b258-4f4c-9424-9121483760ac_20260114_221810.json
- 内容:包含系统配置、统计数据、49个详细数据点
- 大小:约2482行
9.2 分析结果文件
RTX 4090平台:
- 文件名:monitor_36d195ca-b258-4f4c-9424-9121483760ac_20260114_221810_analysis.json
- 内容:详细的分析结果和并发能力计算结果
RTX 3090平台:
- 文件名:monitor_994bd9ed-2afe-49c5-b0f6-1a20f9682884_20260114_235322_analysis.json
- 内容:详细的分析结果和并发能力计算结果
十、总结
通过本次在两个平台上的测试,我们得出以下结论:
10.1 单Session资源占用对比
| 资源类型 | RTX 4090 | RTX 3090 | 结论 |
|---|---|---|---|
| CPU峰值 | 6.70% | 9.40% | 两个平台都很低,不是瓶颈 |
| 内存峰值 | 15.25 GB | 12.27 GB | 两个平台都较高,是主要瓶颈 |
| GPU显存峰值 | 7.02 GB | 8.20 GB | 中等占用 |
| GPU平均利用率 | 19.53% | 42.02% | RTX 3090明显更高 |
10.2 并发能力评估对比
| 项目 | RTX 4090平台 | RTX 3090平台 |
|---|---|---|
| 最大并发数 | 3个session | 2个session |
| 瓶颈资源 | 内存 | 内存(GPU利用率可能成为实际瓶颈) |
| 系统总内存 | 63.69 GB | 31.72 GB |
| 系统预留内存 | 8 GB | 约7 GB(关闭其他软件后) |
| 可用内存 | 55.69 GB | 24.72 GB |
| 单session内存占用 | 15.25 GB | 12.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 优化方向
-
内存优化:
- 增加内存可显著提升并发能力
- RTX 3090平台当前可支持2个session(关闭其他软件后),如增加到64 GB可支持3-4个session
- RTX 4090平台如增加到128 GB,可支持约7个session
-
GPU利用率优化:
- RTX 3090的GPU利用率明显高于RTX 4090,说明性能相对较弱
- 可以优化推理流程,使GPU负载更均匀
- 考虑使用批处理或流水线技术提高GPU利用率
本次测试为NavTalk系统在不同硬件平台上的部署和扩容提供了重要的数据支撑,有助于合理规划系统资源。
- 感谢你赐予我前进的力量

