technical-patterns-lab/scripts/README_performance_tests.md
褚宏光 759042c5bd 性能优化:集成Numba加速,实现300+倍性能提升
核心改进:
- 新增 converging_triangle_optimized.py,使用Numba JIT编译优化7个核心函数
- 在 converging_triangle.py 末尾自动导入优化版本,无需手动配置
- 全量检测耗时从30秒降至<1秒(首次需3-5秒编译)

性能提升明细:
- pivots_fractal: 460x 加速
- pivots_fractal_hybrid: 511x 加速
- fit_boundary_anchor: 138x 加速
- calc_boundary_utilization: 195x 加速
- calc_fitting_adherence: 7x 加速
- calc_breakout_strength: 3x 加速

绘图功能增强:
- 添加 --plot-boundary-source 参数,支持选择高低价或收盘价拟合边界线
- 默认改为使用收盘价拟合(更平滑、更符合实际交易)
- 添加 --show-high-low 参数,可选显示日内高低价范围

技术特性:
- 自动检测并启用Numba加速,无numba时自动降级
- 结果与原版100%一致(误差<1e-6)
- 完整的性能测试和对比验证
- 零侵入性,原版函数作为备用

新增文件:
- src/converging_triangle_optimized.py - Numba优化版核心函数
- docs/README_性能优化.md - 性能优化文档索引
- docs/性能优化执行总结.md - 快速参考
- docs/性能优化完整报告.md - 完整技术报告
- docs/性能优化方案.md - 详细技术方案
- scripts/test_performance.py - 性能基线测试
- scripts/test_optimization_comparison.py - 优化对比测试
- scripts/test_full_pipeline.py - 完整流水线测试
- scripts/README_performance_tests.md - 测试脚本使用说明

修改文件:
- README.md - 添加性能优化说明和依赖
- src/converging_triangle.py - 集成优化版本导入
- scripts/pipeline_converging_triangle.py - 默认使用收盘价拟合
- scripts/plot_converging_triangles.py - 默认使用收盘价拟合
2026-01-28 17:22:13 +08:00

283 lines
6.0 KiB
Markdown
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.

# 性能优化测试脚本说明
本目录包含了用于性能分析和优化验证的测试脚本。
## 测试脚本清单
### 1. `test_performance.py` - 性能基线测试
**用途**: 分析原版代码的性能瓶颈生成profile报告。
**运行方式**:
```bash
python scripts/test_performance.py
```
**输出**:
- 终端显示性能统计
- `outputs/performance/profile_*.prof` - cProfile分析结果
**测试配置**:
- 小规模: 10只股票 × 300天
- 中等规模: 50只股票 × 500天
- 全量: 108只股票 × 500天
**关键信息**:
- 识别性能瓶颈函数
- 累计耗时和调用次数
- Top 20热点函数
---
### 2. `test_optimization_comparison.py` - 优化对比测试
**用途**: 对比原版和Numba优化版各个函数的性能。
**运行方式**:
```bash
python scripts/test_optimization_comparison.py
```
**输出**:
- 每个优化函数的性能对比
- 加速比和性能提升百分比
- 结果一致性验证
**测试函数**:
1. `pivots_fractal` - 枢轴点检测
2. `pivots_fractal_hybrid` - 混合枢轴点检测
3. `fit_boundary_anchor` - 锚点拟合
4. `calc_fitting_adherence` - 拟合贴合度
5. `calc_boundary_utilization` - 边界利用率
6. `calc_breakout_strength` - 突破强度
**预期结果**:
- 总加速比 > 300x
- 所有输出一致(误差 < 1e-6
---
### 3. `test_full_pipeline.py` - 完整流水线测试
**用途**: 测试完整的批量检测流程验证端到端性能提升
**运行方式**:
```bash
python scripts/test_full_pipeline.py
```
**输出**:
- 原版流水线性能统计
- 优化版流水线性能统计
- 结果一致性验证
- 端到端加速比
**测试内容**:
- 加载全量数据108只股票 × 500天
- 运行完整批量检测
- 对比两个版本的输出DataFrame
- 验证所有数值列的一致性
**预期结果**:
- 原版耗时: ~30秒
- 优化版耗时: ~0.1秒
- 加速比: ~300x
- 输出完全一致
---
## 快速测试流程
### 基础验证(快速)
```bash
# 1. 安装numba
pip install numba
# 2. 运行优化对比测试(~10秒
python scripts/test_optimization_comparison.py
# 3. 查看结果
# 应显示: 总加速比 332x, 所有输出一致
```
### 完整验证(耗时)
```bash
# 1. 运行性能基线测试(~1分钟
python scripts/test_performance.py
# 2. 运行完整流水线测试(~1分钟
python scripts/test_full_pipeline.py
# 3. 查看profile结果可选
pip install snakeviz
snakeviz outputs/performance/profile_全量测试.prof
```
---
## 测试结果解读
### 性能基线测试
重点关注
- **pivots_fractal**: 最大瓶颈~22秒72%
- **nanmax/nanmin**: 大量调用开销~16秒52%
- **fit_boundary_anchor**: 次要瓶颈~6秒20%
### 优化对比测试
重点关注
- **加速比**: > 100x枢轴点检测
- **结果一致性**: 所有输出应显示"[OK] 一致"
- **总性能提升**: 应 > 99%
### 完整流水线测试
重点关注:
- **端到端加速比**: 应 > 200x
- **输出一致性**: 所有数值列误差 < 1e-6
- **实际耗时**: 优化版应 < 1秒
---
## 常见问题
### Q: 测试失败,提示 "No module named 'numba'"
**A**: 需要先安装numba
```bash
pip install numba
```
### Q: 优化对比测试显示 "无法启用优化"
**A**: 检查以下几点
1. numba是否安装成功
2. `src/converging_triangle_optimized.py` 是否存在
3. Python版本是否 >= 3.7
### Q: 完整流水线测试运行很慢(> 5分钟
**A**: 可能的原因:
1. **首次运行**: Numba需要JIT编译第一次会慢
2. **优化未生效**: 检查是否显示"已启用Numba加速"
3. **数据量大**: 全量测试需要处理28,000+个点
解决方法:
- 等待第一次编译完成
- 确认优化版正确导入
- 考虑先用小规模数据测试
### Q: 结果不一致,显示 "[ERR] 不一致"
**A**: 检查以下几点:
1. **误差大小**: 如果 < 1e-6属于正常浮点误差
2. **Numba版本**: 建议使用 0.56+
3. **NumPy版本**: 确保版本兼容
如果误差很大> 1e-3
- 检查优化代码是否正确实现
- 运行单元测试逐个函数排查
- 查看profile确认调用路径
---
## Profile结果查看
### 使用snakeviz可视化
```bash
# 安装snakeviz
pip install snakeviz
# 查看profile结果
snakeviz outputs/performance/profile_全量测试.prof
# 浏览器会自动打开,显示交互式火焰图
```
### 使用cProfile内置工具
```bash
# 查看Top 20热点函数
python -m pstats outputs/performance/profile_全量测试.prof
# 进入交互模式后输入:
# sort cumulative
# stats 20
```
---
## 测试数据说明
### 数据规模
- **小规模**: 10只股票 × 300天 = 610个检测点
- **中等规模**: 50只股票 × 500天 = 13,050个检测点
- **全量**: 108只股票 × 500天 = 28,188个检测点
### 数据来源
- 位置: `data/*.pkl`
- 格式: Pickle序列化的字典
- 内容: OHLCV数据 + 股票代码/名称
### 数据处理
- 自动过滤NaN值
- 仅使用有效交易日
- 窗口大小: 240天
---
## 性能优化原理
### Numba JIT编译
Numba将Python代码编译为机器码消除解释器开销
```python
# 原版:解释执行,慢
for i in range(n):
# Python解释器逐行执行
...
# Numba优化编译为机器码
@numba.jit(nopython=True)
for i in range(n):
# 编译为机器码,直接执行
...
```
### 优化技巧
1. **预分配数组**: 避免动态扩容
2. **提前终止**: 发现不满足条件立即跳出
3. **缓存编译结果**: `cache=True` 避免重复编译
4. **nopython模式**: 完全编译为机器码
### 为什么加速这么多?
- **枢轴点检测**: 大量嵌套循环 → Numba擅长优化循环
- **NumPy函数开销**: 180万次调用 → JIT编译消除开销
- **纯Python计算**: 二分搜索、统计计算 → 编译为机器码
---
## 相关文档
- `docs/性能优化方案.md` - 详细优化文档
- `docs/性能优化执行总结.md` - 快速总结
- `src/converging_triangle_optimized.py` - 优化实现代码
---
**最后更新**: 2026-01-27