3 个版本 (重大更改)

0.3.0 2022年7月30日
0.2.0 2020年3月16日
0.1.0 2019年7月21日

#236 in 机器学习

MIT/Apache

48KB
834

Rust 的 OpenCL 加速 2D 卷积

Build Status License: MIT OR Apache-2.0 rust 1.57+ required

文档: Docs.rs crate 文档 (master)

此库提供了使用 OpenCL 加速的 2D 卷积。卷积对于深度学习任务(如图像识别)特别有用;它们是卷积神经网络的基本构建块。

此库主要用于深度学习研究中的快速原型设计,其中需要一个独立的空间卷积原语。全规模的深度学习框架(TensorFlow、PyTorch 等)可能对于更高级别的任务来说是一个更健壮和可扩展的工具。

用法

将以下内容添加到您的 Crate.toml

[dependencies]
ocl-convolution = "0.3.0"

基本浮点卷积可以按如下方式实现

use ndarray::Array4;
use rand::{Rng, thread_rng};
use ocl_convolution::{Convolution, FeatureMap, Params};

let convolution = Convolution::f32(3)?.build(Params {
    strides: [1, 1],
    pads: [0; 4],
    dilation: [1, 1],
    groups: 1,
})?;

// Generate random signal with 6x6 spatial dims and 3 channels.
let mut rng = thread_rng();
let signal = Array4::from_shape_fn([1, 6, 6, 3], |_| rng.gen_range(-1.0..=1.0));
// Construct two 3x3 spatial filters.
let filters = Array4::from_shape_fn([2, 3, 3, 3], |_| rng.gen_range(-1.0..=1.0));
// Perform the convolution. The output must have 4x4 spatial dims
// and contain 2 channels (1 per each filter). The output layout will
// be the same as in the signal.
let output = convolution.compute(
    // `FeatureMap` wraps `ArrayView4` with information about
    // memory layout (which is "channels-last" / NHWC in this case).
    FeatureMap::nhwc(&signal),
    &filters,
)?;
assert_eq!(output.shape(), [1, 4, 4, 2]);

Ok::<_, ocl::Error>(())

请参阅 crate 文档以获取更多用法示例。

安装 OpenCL

OpenCL 有多种实现方式。为了快速测试,您可以使用 POCL;它是一个开源项目,不依赖于硬件(但代价是它是基于 CPU 的,即比 GPU 供应商的 OpenCL 实现慢得多)。POCL 可以通过类似以下命令从源代码安装 安装脚本(在 Ubuntu 22.04 上进行了测试)。

许可协议

根据您的选择,此库受Apache 许可证 2.0 版MIT 许可证的许可。

除非您明确表示,否则您提交给 ocl-convolution 的任何有意贡献,根据 Apache-2.0 许可证定义,都应按上述方式双重许可,而不附加任何额外的条款或条件。

依赖关系

~4MB
~75K SLoC