3 个版本 (重大更改)
0.3.0 | 2022年7月30日 |
---|---|
0.2.0 | 2020年3月16日 |
0.1.0 | 2019年7月21日 |
#236 in 机器学习
48KB
834 行
Rust 的 OpenCL 加速 2D 卷积
此库提供了使用 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