因为我不是科班出身编程比较差劲。这里只是记录自己的实践过程。类似一个日记。然后会把一些文件放在文章中。

    我想实现一个golang调用python lightgbm包保存的模型的功能,然后我首先找的是现成的轮子,我找到了https://github.com/dmitryikh/leaves这个库,最开始的使用体验十分的好。因为完美的实现了我的需求。从txt文件中加载模型,然后调用接口预测,但是当我后来模型tree变多的时候发现了问题,就是每一次预测要150微秒左右,这大大超出了我能容忍的范围。

    经过研究我发现有几个解决方案。第一个是缩小模型,当tree的数量在300左右,大概可以取得一个性能和预测效果的平衡。第二个是改进包的性能,因为我发现他是完全的串行计算,而lgb前后并没有依赖。所以我想会不会并行会好一点。

    我肯定是希望通过第二个方案来解决这个问题的,所以我决定先从第一步做起,先把model.txt的配置完全搞懂,接着研究一下如何从这里面加载文件,但是这部分的性能并不是很重要,因为我都是冷加载,只在整个系统最开始加载一起,所以这部分的性能是不重要的,搞懂就可以了然后把https://github.com/dmitryikh/leaves包中lgb的部分摘出来逐个函数分析,把可能引起gc以及并行加速的部分改掉。

    然后因为之前一直看的各种公众号分析lightgbm的原理,没有看过源码,也没有看过原论文,也希望借这个机会可以深入了解一下。