基于numba的实验性梯度增强机
pygbm的Python项目详细描述
pygbm
python中的实验性梯度提升机。
这个项目的目标是评估是否有可能实现 纯python高效的梯度增强直方图分块 树(可能有所有的lightgbm优化)同时保持纯 python 3.6+使用numbajit编译器。
pygbm提供了一组scikit学习兼容估计器类 应该很好地使用scikit学习工具和模型选择工具 (网格搜索和随机超参数搜索)。
长期计划包括与DASK和DASK ML集成 在簇上的核外和分布式拟合。
安装
该项目在pypi上可用,可以使用pip
:
pip install pygbm
你至少需要Python3.6。
文档
API文档位于:
您可能还需要查看此repo的examples/
文件夹。
状态
这个项目是实验性的。API可能会发生更改,恕不另行通知。使用风险自负。
我们欢迎github问题跟踪程序中的任何反馈:
https://github.com/ogrisel/pygbm/issues
运行开发版本
使用pip以“可编辑”模式安装:
git clone https://github.com/ogrisel/pygbm.git
cd pygbm
pip install -r requirements.txt
pip install --editable .
使用pytest运行测试:
pip install -r requirements.txt
pytest
基准
benchmarks
文件夹包含一些用于计算的脚本
PYGBM各部分性能。记住,努玛的jit
编译takes
time!
剖面
要分析基准,可以使用 snakeviz获取交互式 HTML报告:
pip install snakeviz
python -m cProfile -o bench_higgs_boson.prof benchmarks/bench_higgs_boson.py
snakeviz bench_higgs_boson.prof
调试numba类型推断
反思numba部分中类型推断步骤的结果 由给定的基准测试脚本调用:
numba --annotate-html bench_higgs_boson.html benchmarks/bench_higgs_boson.py
特别值得注意的是检查
snakeviz分析报告突出显示的热循环具有
期望精度水平(例如,损耗计算的float32
,uint8
)
对于binned特征值,…)。
基于线程的并行性的影响
一些基准可以调用numba函数来利用内置的
具有@njit(parallel=True)
和prange
循环的基于线程的并行性。
在多核计算机上,您可以评估基于线程的并行性
通过显式设置NUMBA_NUM_THREAD
环境进行缩放
变量。例如,尝试:
NUMBA_NUM_THREADS=1 python benchmarks/bench_binning.py
对:
NUMBA_NUM_THREADS=4 python benchmarks/bench_binning.py
致谢
尼古拉斯·赫格的研究得到了国家科学基金会的支持。 根据第1740305号授权书和DARPA根据第DARPA-BAA-16-51号授权书