8 个版本
使用旧的 Rust 2015
0.0.8 | 2016 年 2 月 21 日 |
---|---|
0.0.7 | 2015 年 12 月 21 日 |
0.0.3 | 2015 年 11 月 30 日 |
#413 在 机器学习 中
54 每月下载量
在 6 crates 中使用
285KB
5.5K SLoC
Collenchyma •
Collenchyma 是一个可扩展的、可插入的、后端无关的框架,用于在 CUDA、OpenCL 和通用宿主 CPU 上进行并行、高性能计算。它运行速度快,易于构建,并提供了可扩展的 Rust 结构来在几乎任何机器上执行操作,即使这些机器没有 CUDA 或 OpenCL 兼容的设备。
Collenchyma 抽象了不同的计算语言(原生、OpenCL、Cuda),并允许您在服务器、桌面或移动设备上运行高性能代码,而无需为部署到的机器调整您的代码。Collenchyma 在机器上不需要 OpenCL 或 Cuda,并自动回退到原生宿主 CPU,使您的应用程序非常灵活且构建速度快。
Collenchyma 是在 Autumn 开始的,旨在支持机器智能框架 Leaf,以实现后端无关、最先进的性能。
-
__并行化性能__
Collenchyma 可以轻松地在您的机器上并行化计算,充分利用您 CPU/GPU 的所有可用核心。Collenchyma 通过插件提供优化操作,您可以直接使用这些操作来加速您的应用程序。 -
__易于扩展__
使用 Collenchyma 为 GPU 执行编写自定义操作变得非常简单,因为它已经处理了框架的特定之处、内存管理、安全性以及其他开销。Collenchyma 提供了插件(见下文示例),您可以使用它们来扩展 Collenchyma 后端,添加您自己业务特定的操作。 -
__丝滑构建__
由于 Collenchyma 不需要安装各种框架和库,它不会显著增加您的应用程序构建时间。Collenchyma 在运行时检查这些框架是否可用,如果不能使用,则优雅地回退到标准的本地主机 CPU。您和您的用户无需经历漫长且痛苦的构建过程。
更多信息,
免责声明:Collenchyma 目前处于非常早期且高度的开发阶段。如果您遇到任何不是由于尚未实现的功能导致的错误,请随时创建一个问题。
入门指南
如果您使用 Cargo,只需将 Collenchyma 添加到您的 Cargo.toml 文件中
[dependencies]
collenchyma = "0.0.8"
如果您使用Cargo Edit,您可以调用
$ cargo add collenchyma
插件
您可以通过插件轻松扩展 Collenchyma 的 Backend
以支持更多与后端无关的操作。插件提供了一组相关操作 - BLAS 是一个好例子。要将插件中的操作扩展到 Collenchyma 的 Backend
,只需将所需的插件包添加到您的 Cargo.toml 文件中。以下是可用的 Collenchyma 插件列表,您可以直接用于自己的应用程序,或者作为您创建自己的插件的起点。
您可以轻松编写自己的后端无关的并行操作,并通过插件提供给其他人。我们很乐意在这里展示您的插件,只需向我们发送一个 PR。
示例
Collenchyma 不包含任何操作。以下示例假设您已经将 collenchyma
和 Collenchyma 插件 collenchyma-nn
添加到您的 Cargo 清单中。
extern crate collenchyma as co;
extern crate collenchyma_nn as nn;
use co::prelude::*;
use nn::*;
fn write_to_memory<T: Copy>(mem: &mut MemoryType, data: &[T]) {
if let &mut MemoryType::Native(ref mut mem) = mem {
let mut mem_buffer = mem.as_mut_slice::<T>();
for (index, datum) in data.iter().enumerate() {
mem_buffer[index] = *datum;
}
}
}
fn main() {
// Initialize a CUDA Backend.
let backend = Backend::<Cuda>::default().unwrap();
// Initialize two SharedTensors.
let mut x = SharedTensor::<f32>::new(backend.device(), &(1, 1, 3)).unwrap();
let mut result = SharedTensor::<f32>::new(backend.device(), &(1, 1, 3)).unwrap();
// Fill `x` with some data.
let payload: &[f32] = &::std::iter::repeat(1f32).take(x.capacity()).collect::<Vec<f32>>();
let native = Backend::<Native>::default().unwrap();
x.add_device(native.device()).unwrap(); // Add native host memory
x.sync(native.device()).unwrap(); // Sync to native host memory
write_to_memory(x.get_mut(native.device()).unwrap(), payload); // Write to native host memory.
x.sync(backend.device()).unwrap(); // Sync the data to the CUDA device.
// Run the sigmoid operation, provided by the NN Plugin, on your CUDA enabled GPU.
backend.sigmoid(&mut x, &mut result).unwrap();
// See the result.
result.add_device(native.device()).unwrap(); // Add native host memory
result.sync(native.device()).unwrap(); // Sync the result to host memory.
println!("{:?}", result.get(native.device()).unwrap().as_native().unwrap().as_slice::<f32>());
}
贡献
想要贡献?太棒了!我们有指南可以帮助您开始贡献代码或文档。我们还有一些优先级较高的问题需要您的帮助。
我们有一个主要是实时协作的文化,在这里的 GitHub 上以及Collenchyma Gitter 频道上发生。您也可以联系维护者 {@MJ,@hobofan}。
除非您明确声明,否则您提交给工作内容的任何贡献,如 Apache-2.0 许可证中定义的,将按照以下方式双重许可,不附加任何额外的条款或条件。
变更日志
您可以在根文件 CHANGELOG.md 中找到发布历史。
变更日志是记录项目所做的所有更改的日志或记录,例如网站或软件项目,通常包括错误修复、新功能等记录 - 维基百科
我们使用Clog,Rust 自动生成 CHANGELOG 文件的工具。
许可证
许可协议为以下之一
- Apache许可证2.0版本,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖项
~550–780KB
~18K SLoC