Files
Test_AI/run_optimized_stress_test.py

159 lines
5.1 KiB
Python
Raw Normal View History

2026-01-20 10:54:30 +08:00
"""
RTX 3050 优化压力测试启动脚本
目标
- 使用原生 TensorRT API 而不是 Ultralytics 封装
- 达到 GPU 利用率 70%+ 而不是 30%
- 测试真正的 GPU 并发性能极限
测试内容
1. 不同分辨率下最大每秒处理帧数
2. 最大接入摄像头路数
3. 不同摄像头数量下单路最大帧数
4. 不同抽帧率下最大摄像头数
优化策略
- 多流并行推理 (2-8个CUDA流)
- 大批次处理 (4-32批次)
- 原生 TensorRT API
- 优化内存管理
运行方式
python run_optimized_stress_test.py
"""
import sys
import os
# 添加当前目录到路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
def check_requirements():
"""检查必要的依赖"""
missing = []
tensorrt_available = False
try:
import tensorrt
print(f"✅ TensorRT: {tensorrt.__version__}")
tensorrt_available = True
except (ImportError, FileNotFoundError) as e:
print(f"⚠️ TensorRT: 不可用 ({str(e)[:50]}...)")
print(" 将使用 Ultralytics 优化模式")
try:
import torch
print(f"✅ PyTorch: {torch.__version__}")
if torch.cuda.is_available():
print(f"✅ CUDA: {torch.version.cuda}")
print(f"✅ GPU: {torch.cuda.get_device_name(0)}")
else:
missing.append("CUDA")
except ImportError:
missing.append("torch")
try:
import ultralytics
print(f"✅ Ultralytics: {ultralytics.__version__}")
except ImportError:
missing.append("ultralytics")
if missing:
print(f"\n❌ 缺少关键依赖: {', '.join(missing)}")
return False
if not tensorrt_available:
print(f"\n⚠️ 注意: 将使用 Ultralytics 优化模式而不是原生 TensorRT")
print(f" 仍然可以通过以下方式提升性能:")
print(f" • 多线程并行推理")
print(f" • 大批次处理")
print(f" • GPU 预处理")
print(f" • 优化内存管理")
return True
def main():
print("=" * 60)
print("RTX 3050 优化压力测试")
print("=" * 60)
print("目标: GPU 利用率 70%+ (vs 之前的 30%)")
print("策略: 原生 TensorRT + 多流并行 + 大批次")
print("=" * 60)
# 检查依赖
print("\n🔍 检查依赖...")
if not check_requirements():
return
# 模型路径
MODEL_PATH = "C:/Users/16337/PycharmProjects/Security_project/yolov8n.pt"
OUTPUT_DIR = "./optimized_stress_results"
print(f"\n📁 配置:")
print(f" 模型: {MODEL_PATH}")
print(f" 输出: {OUTPUT_DIR}")
if not os.path.exists(MODEL_PATH):
print(f"\n❌ 模型文件不存在: {MODEL_PATH}")
return
print(f"\n🚀 优化策略:")
print(f" • 原生 TensorRT API (避免 Ultralytics 封装损失)")
print(f" • 多 CUDA 流并行 (2-8个流)")
print(f" • 大批次处理 (4-32批次)")
print(f" • 优化内存管理")
print(f" • 2GB TensorRT 工作空间")
print(f"\n📊 测试内容:")
print(f" 1. 最大处理帧数 (320x320, 480x480)")
print(f" 2. 最大摄像头接入数")
print(f" 3. 不同摄像头数量下单路最大帧数")
print(f" 4. 不同抽帧率下最大摄像头数")
print(f"\n⏱️ 预计时间: 15-25 分钟")
print(f"💾 结果自动保存Ctrl+C 中断不丢数据")
print("=" * 60)
# 确认开始
try:
input("\n按 Enter 开始测试,或 Ctrl+C 取消...")
except KeyboardInterrupt:
print("\n❌ 测试取消")
return
# 运行优化测试
try:
# 检查是否可以使用原生 TensorRT
try:
import tensorrt
from benchmark.optimized_stress_test import run_optimized_stress_test
print(f"\n🚀 使用原生 TensorRT 优化测试...")
run_optimized_stress_test(MODEL_PATH, OUTPUT_DIR)
except (ImportError, FileNotFoundError):
# 使用 Ultralytics 优化模式
from benchmark.ultralytics_optimized_stress import run_ultralytics_optimized_test
print(f"\n🚀 使用 Ultralytics 优化测试...")
run_ultralytics_optimized_test(MODEL_PATH, OUTPUT_DIR)
print(f"\n🎉 测试完成!")
print(f"📊 查看结果:")
print(f" - JSON 数据: {OUTPUT_DIR}/*_results_*.json")
print(f" - 测试报告: {OUTPUT_DIR}/*_report_*.md")
# 生成可视化
print(f"\n🎨 生成可视化图表...")
try:
from benchmark.optimized_visualizer import generate_optimized_charts
chart_files = generate_optimized_charts(OUTPUT_DIR)
print(f"✅ 生成了 {len(chart_files)} 个图表")
except Exception as e:
print(f"⚠️ 可视化生成失败: {e}")
print(f"💡 可以手动运行: python generate_optimized_charts.py")
except Exception as e:
print(f"\n❌ 测试失败: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
main()