1个不稳定版本
新版本 0.4.0 | 2024年8月23日 |
---|
#252 in 机器学习
在 2 个crate中使用 (通过 nox)
515KB
12K SLoC
noxla
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