#deep-learning #tensor #autograd #broadcasting #machine-learning #ai #pytorch-style

bin+lib l2

L2 是一个用 Rust 编写的 Pytorch-style Tensor+Autograd 库

4 个稳定版本

1.0.3 2020 年 6 月 19 日
1.0.1 2020 年 6 月 18 日

#367 in 机器学习

MIT 许可证

185KB
2.5K SLoC

l2 • 🤖

一个用 Rust 编写的 Pytorch-style Tensor+Autograd 库

Rust: CI License: MIT docs.rs l2 badge

安装贡献作者许可证致谢

Bilal Khan 制作 • https://bilal.software

l2 是什么?

l2 命名来源于 l2 或欧几里得距离,这是深度学习中常用的距离函数

l2 是一个用 Rust 编写的 Pytorch-style Tensor+Autograd 库。它包含一个多维数组类 Tensor,支持步进数组、NumPy 风格的数组切片、广播和大多数主要的数学运算(包括快速、BLAS 加速的矩阵乘法!)。在此基础上,l2 还有一个内置的高效图基于 autograd 引擎,该引擎跟踪对张量执行的所有操作,并对图进行拓扑排序和遍历以计算梯度。

我去年还制作了一个更简化的 C++ 版本的 l2,你可以在这里查看 这里

快速开始

l2 = "1.0.3" 添加到你的 Cargo.toml 文件中,并将以下内容添加到 main.rs

use l2::tensor::*;

let x: Tensor = Tensor::normal(&[2, 4], 0.0, 1.0)?;
let y: Tensor = Tensor::normal(&[4, 1], 0.0, 1.0)?;

let z: Tensor = l2::matmul(&x, &y)?;

z.backward();

println!("{}", z);

设计选择

我制作 l2 是为了更好地使用 Rust 并了解像 Pytorch 和 Tensorflow 这样的库背后的工作原理,所以不要期望这个库是生产就绪的 :)

l2 的速度令人惊讶,尤其是在我没有特别努力优化所有运算符的情况下,在大多数我运行的基准测试中,它通常只比 Pytorch 慢一个数量级。目前 l2 只支持 CPU 后端,因为我对 Rust 的熟悉程度还不够,无法开始使用 CUDA 和 cudnn。到目前为止,l2 没有任何 Pytorch 风格的抽象,例如 Parameter、Layer 或 Module 类。在转置运算符和调用 .backward() 对具有更多维度的张量时,可能仍然存在一些错误。我曾对使用 Rust 的 Const Generics 来进行编译时形状检查感兴趣,但我决定留待以后再处理。

贡献

此存储库仍在开发中,因此如果您发现错误、认为缺少某些内容或对新增功能有任何建议,请随时提交 issue 或 pull request。您可以在自己的项目中自由使用该库或其中的代码,如果您觉得此项目中使用的某些代码没有得到适当认可,请提交 issue。

作者

  • 比拉尔·汗

许可证

本项目采用 MIT 许可证 - 有关详细信息,请参阅 许可证文件

致谢

fast.ai 深度学习基础课程(《https://course.fast.ai/part2》)教授了如何制作自己的深度学习库的很多内容

在制作此库时,我发现以下资源很有用

此 README 是基于

我使用 carbon.now.sh 和 "Shades of Purple" 主题制作了此 README 开头的截图

本项目包含约 4300 行代码

依赖关系

~1MB
~25K SLoC