Files
Test_AI/run_optimized_stress_test.py
2026-01-20 10:54:30 +08:00

159 lines
5.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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()