Gorse v0.2.6更新

730 阅读3分钟

Github Releases: Gorse v0.2.6

对于一个推荐系统来说,需要处理的数据量是在不断增长中的,为了能够更好地处理数据量略大的推荐场景,v0.2.6版本对内存和CPU使用进行了优化。

新特性

本次更新只关注性能优化,不包含任何新特性。

性能优化

  • 优化了工作节点从数据库重复读取物品信息的问题

将GitRec为全体用户生成离线推荐的时间从6分11秒优化到了3分29秒。

  • 在训练CCD算法的时候跳过冷物品和冷用户的计算

将GitRec的模型参数搜索时间从10分23秒优化到2分41秒。

  • 实现了增量更新用户和物品近邻

系统记录了用户和物品最近发生事件的时间戳,如果上次近邻更新时间晚于该时间戳才会触发近邻寻找和更新。

  • 通过流式读取数据增加了数据读取效率

旧版本通过翻页的方法读取数据库的全部数据,这种方法需要反复和数据库建立连接,同时数据库需要反复定位数据扫描起始位置。新版本以流的形式一次性从数据库拉取数据,消除了主节点侧的I/O瓶颈。

  • 通过修改数据结构优化内存使用量

首先使用32位整型表示用户和物品在推荐系统内部的ID,32位有符号整形可以表示20亿的用户和物品,对绝大多数场景足够。另外,也通过“时间换取空间”的方法消除了一些冗余的数据结构。

修复问题

  • 修复了控制台服务在读取数据完成后启动的问题

在之前版本中,需要等待数据读取完成之后才能访问控制台,v0.2.6修复了这个问题。并且,控制台会显示数据读取的实时进度。

  • 修复了主节点无法分发大模型的问题

新版本调大了gRPC发送消息的大小限制,不过依然存在编码过程消耗内存过多的问题,下一版本将采用流式传输解决此问题。

  • 修复了设置API密钥后控制台无法访问的问题

新版本控制台API不需要密钥即可访问。

  • 修复了导入中文乱码的问题 (由@amaaazing贡献)
  • 修复了不兼容低版本MySQL 8.0语法的问题 (由@hetao29贡献)
  • 修复了Swagger API文档返回信息缺失的问题 (由@ccfish86贡献)

欢迎参与贡献

Gorse的发展离不开各位的反馈和贡献,并不是少数几个人可以完成的事。在GitHub仓库的issue列表中,一些比较简单的功能需求已经被标注了“需要帮助”的标签,这些需求实现起来相对简单,但是对系统的性能和易用性有着非常重要的影响,欢迎有缘人参与贡献代码。 1632575723078-f0l.png