1个不稳定版本

新版本 0.4.0 2024年8月23日

#252 in 机器学习


2 个crate中使用 (通过 nox)

MIT/Apache

515KB
12K SLoC

C++ 7.5K SLoC // 0.1% comments Rust 3.5K SLoC // 0.0% comments CUDA 247 SLoC // 0.2% comments Bazel 48 SLoC // 0.2% comments

noxla

最初基于 https://github.com/LaurentMazare/xla-rs

noxla 是围绕 XLA(机器学习和线性代数的编译器)的 Rust 包装器。该项目的目标是创建一组接近 XLA C++ API 的安全绑定。这个crate预期用于其他高级线性代数和机器学习crate中。它也可以单独使用,但并不保证它是最舒适或最文档完善的。

为何分叉?

这个crate与原始的 xla-rs 在几个关键方面有所不同。最大的是,绑定被重写为使用cpp和cxx crates。这允许我们的绑定与Rust代码保持一致,并具有更清晰的类型。另一个重大变化是,我们正在使用 xla_extension 的分叉,这使得可以构建一个完全静态的二进制文件。这更适合noxla作为其他高级库的低级crate的预期用途。


lib.rs:

XLA(加速线性代数)的Rust绑定。

XLA 是一个机器学习编译器库。它可以用于在GPU、TPU和CPU上高效运行模型。

XlaOp 用于构建计算图。这个图可以构建成 XlaComputation。这个计算可以编译成 PjRtLoadedExecutable,然后这个可执行文件可以在 PjRtClient 上运行。 Literal 值用于在主机内存中表示张量,而 PjRtBuffer 代表在目标设备上的张量/内存视图。

以下示例说明如何构建和运行一个简单的计算。

// Create a CPU client.
let client = xla::PjRtClient::cpu()?;

// A builder object is used to store the graph of XlaOp.
let builder = xla::XlaBuilder::new("test-builder");

// Build a simple graph summing two constants.
let cst20 = xla_builder.constant_r0(20f32);
let cst22 = xla_builder.constant_r0(22f32);
let sum = (cst20 + cst22)?;

// Create a computation from the final node.
let sum= sum.build()?;

// Compile this computation for the target device and then execute it.
let result = client.compile(&sum)?;
let result = &result.execute::<xla::Literal>(&[])?;

// Retrieve the resulting value.
let result = result[0][0].to_literal_sync()?.to_vec::<f32>()?;

依赖项

~64MB
~816K SLoC