4 个稳定版本
1.0.3 | 2020 年 6 月 19 日 |
---|---|
1.0.1 | 2020 年 6 月 18 日 |
#367 in 机器学习
185KB
2.5K SLoC
l2 • 🤖
一个用 Rust 编写的 Pytorch-style Tensor+Autograd 库
由 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》)教授了如何制作自己的深度学习库的很多内容
在制作此库时,我发现以下资源很有用
- http://blog.ezyang.com/2019/05/pytorch-internals/
- https://pytorch.ac.cn/tutorials/beginner/nn_tutorial.html
- https://eisenjulian.github.io/deep-learning-in-100-lines/
- https://medium.com/@florian.caesar/how-to-create-a-machine-learning-framework-from-scratch-in-491-steps-93428369a4eb
- https://medium.com/@johan.mabille/how-we-wrote-xtensor-1-n-n-dimensional-containers-f79f9f4966a7
- https://erikpartridge.com/2019-03/rust-ml-simd-blas-lapack
- https://medium.com/@GolDDranks/things-rust-doesnt-let-you-do-draft-f596a3c740a5
- https://datascience.stackexchange.com/questions/20139/gradients-for-bias-terms-in-backpropagation
- https://cs231n.github.io/optimization-2/
- https://cs231n.github.io/neural-networks-case-study/#grad
- https://stackoverflow.com/questions/38082835/backpropagation-in-gradient-descent-for-neural-networks-vs-linear-regression
- https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b
- https://stackoverflow.com/questions/38082835/backpropagation-in-gradient-descent-for-neural-networks-vs-linear-regression
- https://github.com/karpathy/micrograd
- https://rufflewind.com/2016-12-30/reverse-mode-automatic-differentiation
- https://discuss.pytorch.org/t/is-pytorch-autograd-tape-based/13992/3
- https://www.reddit.com/r/MachineLearning/comments/8ep130/d_how_does_autograd_work/
- https://github.com/mattjj/autodidact
- https://github.com/karpathy/recurrentjs
- https://github.com/karpathy/randomfun
- https://medium.com/@ralphmao95/simple-autograd-implementation-understand-automatic-differentiation-hand-by-hand-9e86f6d703ab
- https://evcu.github.io/ml/autograd/
- https://blog.paperspace.com/pytorch-101-understanding-graphs-and-automatic-differentiation/
- https://github.com/maciejkula/wyrm
- https://medium.com/@maciejkula/building-an-autodifferentiation-library-9ccf32c7a658
- https://github.com/evcu/numpy_autograd/blob/master/my_autograd.py#L147
- https://github.com/evcu/numpy_autograd/blob/master/Autograd.ipynb
- https://cs231n.github.io/optimization-2/
- https://github.com/explosion/thinc
- https://github.com/joelgrus/joelnet
- https://github.com/QuantStack/xtensor
- https://github.com/ThinkingTransistor/Sigma
- https://github.com/mratsim/Arraymancer
- https://github.com/siekmanj/sieknet
- https://github.com/siekmanj/sieknet_2.0
- https://github.com/Daniel-Liu-c0deb0t/Java-Machine-Learning
- https://github.com/karpathy/micrograd
此 README 是基于
- https://github.com/bkkaggle/pytorch_zoo
- https://github.com/bkkaggle/grover
- https://github.com/rish-16/gpt2client
- https://github.com/mxbi/mlcrate
- https://github.com/athityakumar/colorls
- https://github.com/amitmerchant1990/electron-markdownify
我使用 carbon.now.sh 和 "Shades of Purple" 主题制作了此 README 开头的截图
本项目包含约 4300 行代码
依赖关系
~1MB
~25K SLoC