V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
huangyezhufeng
V2EX  ›  分享创造

Rust 用于机器学习的一个小的尝试: bleuscore

  •  1
     
  •   huangyezhufeng ·
    shenxiangzhuang · 102 天前 · 1975 次点击
    这是一个创建于 102 天前的主题,其中的信息可能已经有所发展或是发生改变。

    TLDR

    Why

    • Huggingface 的 Evaluate 库真的不好用,且慢,见issue
    • Talk is cheap: 看了太多和 Rust 相关的争论,还是决定动手写一下再做判断
    • BLEU 的计算是难度相对较低,比较适合作练习的项目

    Overview

    • Rust 实现 BLEU Score 计算(采用和 Huggingface evaluate完全一致的算法),通过 Binding 构建 Python 库

    • 做了大量的结果对比测试来保证此 Rust 实现的结果和 Huggingface 结果是一致的

      • 基于 Hypothesis ,一个仿 Haskell QuickCheck 的 property test 库
    • 做了较为充分的 Benchmark 来测试当前 Rust 实现的性能

    初步结论

    • 开发体验: 总体的过程(编译,测试,文档,依赖管理等)还是很丝滑的(个人之前并没有太多 Rust 基础),主要得益于 Rust 完整的生态
    • 机器学习: 当算法正已经在 Python 实现,想追求更好的性能时,用 Rust 来实现算法可以有效提升算法运行效率(同时可以用 Python 实现来验证当前 Rust 实现的正确性)。另外就是Rust 实现后通过 Binding 构建 Python 库是非常简单的(PyO3/Maturin),线上的业务一样可以依赖 Python 开发, 这点对于机器学习系统来说还是非常友好的。
    • 性能: 当前 bleuscore 的性能提升在大规模数据集上更为显著,性能提升主要来自目前的实现用了多核并行(基于 rayon)。在数据集本身比较小或没有使用多核时,其实性能提升并不大(详情见 Benchmark )

    最后

    欢迎理性讨论,欢迎 PR !

    3 条回复    2024-08-14 13:46:39 +08:00
    huangyezhufeng
        1
    huangyezhufeng  
    OP
       102 天前
    如果想进一步探索 Rust 用于机器学习的最佳实践,可以通过这个 issue(及其背后的项目)来进一步了解: https://github.com/dustalov/evalica/issues/5

    这是一位能力很强的老哥,代码质量也很高。
    Contextualist
        2
    Contextualist  
       102 天前   ❤️ 1
    感谢分享!支持一下 Rust for ML 和 PyO3
    上次看相关方面还是 https://www.arewelearningyet.com ,不知道现在的生态怎么样了
    能想到的 Rust for ML 的代表项目应该是 huggingface/safetensors 了
    huangyezhufeng
        3
    huangyezhufeng  
    OP
       102 天前   ❤️ 1
    @Contextualist 感觉现在相关的生态都在快速的完善起来吧。Huggingface 在挺多的项目上都在拥抱 Rust: https://github.com/huggingface?q=&type=all&language=rust&sort=, 其中 candle ,tokenizer ,text-embeddings-inference 是比较知名的。

    其他我了解到的比如 Grafana 也在用 Rust 做 ML 相关的工作,比如 https://github.com/grafana/augurs, 用在 Grafana 时序数据的预测和异常检测等。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2805 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 07:56 · PVG 15:56 · LAX 23:56 · JFK 02:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.