探讨如何用 Elixir 构建 ML 应用,涉及 MLIR、Arrow、结构化 LLM 等底层技术。对多语言 ML 工程师有参考价值。
elixir、nx、scholar、explorer、livebook
早在 2021 年,Elixir 社区便开始推动 Elixir 与机器学习的结合。自上次盘点以来,我们又有许多激动人心的进展可以分享,包括:支持 MLIR、丰富的 Arrow 类型、传统机器学习、结构化 LLM 等。
Nx 是这一切的起点。它在 Elixir 社区中扮演着与 NumPy 类似的角色,同时支持在 CPU 和 GPU 上进行即时编译(JIT)。
自从我们开始开发 Numerical Elixir 以来,机器学习领域发生了显著变化,其中之一便是 MLIR 的推出。随着 Nx v0.7 最近发布,我们已将 Google XLA(Accelerated Linear Algebra)绑定迁移到 MLIR。这有望为 Numerical Elixir 开启一系列令人期待的新可能性,例如:
感谢 Paulo Valente 和 DockYard 推动这项工作!
另一个关键项目是 Explorer,它为 Elixir 提供 Series 和 DataFrame。虽然它扮演着与 Pandas 类似的角色,但对它影响最大的其实是 Tidyverse 的 dplyr。
在 Explorer v0.8 中,我们现已实现对 Arrow 数值类型的全面兼容。我们还增加了对 list 和 struct 类型的支持,并提供了一系列用于处理这些类型的函数,例如将字符串拆分成列表、把字符串列表连接为单个字符串、检查成员关系、计算长度、解析 JSON 等。
除此之外,我们还改进了多种格式与 S3 兼容存储之间的流式数据读写支持,其中包括 .parquet。总体而言,这些变化让 Explorer 成为数据分析师和工程师使用起来更加顺畅的工具。
虽然深度学习是 Nx 背后的主要驱动力,但 Mateusz Słuszniak 和 Krsto Proroković 一直专注于通过 Scholar 项目探索传统机器学习技术。Scholar 的定位类似于 scikit-learn。
Scholar v0.3 引入了多项新功能:
这些功能将 Numerical Elixir 及其在 CPU 和 GPU 上部署分布式模型服务的能力带到了传统机器学习算法中,让开发者和数据从业者能够在 Elixir 生态系统内解决更多类型的问题。
上面介绍了 Numerical Elixir 组织中的主要项目,而 #machinelearning 社区也在继续开发和发布令人兴奋的新项目。
在这里要特别推荐 Thomas Millar 开发的 instructor_ex。它基于 Elixir 的 Ecto 数据工具包,为 LLM 提供结构化 prompting 支持。Elixir 的 langchain 也获得了更新,不仅支持更多第三方 API,还支持通过 Bumblebee 使用由 Elixir 实现的模型。
在内容创作与学习方面,Andrés Alejos 一直在发布大量有关 Livebook 的内容,其中包括最近发表的一篇文章,介绍 Livebook 如何成为 Elixir 的秘密武器。
最后,别忘了阅读 Sean Moriarity 的《Machine Learning in Elixir》。无论你是刚接触 Elixir,还是刚入门机器学习,这本书都能带你深入了解整个生态系统。如果你还不确定在 Elixir 中使用机器学习能带来什么,不妨观看 Chris Grainger 的演讲《A Year in Production with Machine Learning on the BEAM》。
看到这个生态系统不断发展,并借助 Elixir 开拓一个全新的问题领域,实在令人欣喜。我们下次再见!