Safe CUDA cuDNN wrapper for the Rust language.
Rust
Clone or download
homu Auto merge of #24 - DiamondLovesYou:dev-deps, r=MichaelHirn
Add collenchyma as a dev dep so the tests can build.
Latest commit 68a3b4e Apr 13, 2016
Permalink
Failed to load latest commit information.
.travis fix/travis: fix travis to build with cudnn library Dec 6, 2015
cudnn-sys
cudnn Add collenchyma as a dev dep so the tests can build. Apr 11, 2016
.clog.toml chore/changelog: add CHANGELOG.md Feb 2, 2016
.gitattributes fix/travis: fix travis to build with cudnn library Dec 6, 2015
.gitignore feat/convolution: implement backward _data _filter _bias Jan 29, 2016
.travis.yml
CHANGELOG.md chore/release: prepare 1.3.1 release Mar 2, 2016
CONTRIBUTING.md init Dec 5, 2015
README.md chore/release: prepare 1.3.1 release Mar 2, 2016
rustfmt.toml init Dec 5, 2015

README.md

rust-cuDNN • Join the chat at https://gitter.im/autumnai/collenchyma Build Status Coverage Status Crates.io License

rust-cuDNN provides safe wrapper for CUDA's cuDNN library, so you can use it comfortably and safely in your Rust application.

As cuDNN relies on CUDA to allocate memory on the GPU, you might also look into rust-cuda.

rust-cudnn was developed at Autumn for the Rust Machine Intelligence Framework Leaf.

rust-cudnn is part of the High-Performance Computation Framework Collenchyma, for the [Neural Network Plugin][nn]. For an easy, unified interface for NN operations, such as those provided by cuDNN, you might check out Collenchyma.

For more information,

Getting Started

If you're using Cargo, just add rust-cuDNN to your Cargo.toml:

[dependencies]
cudnn = "1.3.1"

If you're using Cargo Edit, you can call:

$ cargo add cudnn

Example

Using the high-level Cudnn interface.

extern crate cudnn;
extern crate libc;
use cudnn::{Cudnn, TensorDescriptor};
use cudnn::utils::{ScalParams, DataType};
fn main() {
    // Initialize a new cuDNN context and allocates resources.
    let cudnn = Cudnn::new().unwrap();
    // Create a cuDNN Tensor Descriptor for `src` and `dest` memory.
    let src_desc = TensorDescriptor::new(&[2, 2, 2], &[4, 2, 1], DataType::Float).unwrap();
    let dest_desc = TensorDescriptor::new(&[2, 2, 2], &[4, 2, 1], DataType::Float).unwrap();
    // Obtain the `src` and memory pointer on the GPU.
    // NOTE: You wouldn't do it like that. You need to really allocate memory on the GPU with e.g. CUDA or Collenchyma.
    let src_data: *const ::libc::c_void = ::std::ptr::null();
    let dest_data: *mut ::libc::c_void = ::std::ptr::null_mut();
    // Now you can compute the forward sigmoid activation on your GPU.
    cudnn.sigmoid_forward::<f32>(&src_desc, src_data, &dest_desc, dest_data, ScalParams::default());
}

Building

rust-cudnn depends on the cuDNN runtime libraries, which can be obtained from NVIDIA.

Manual Configuration

rust-cudnn's build script will by default attempt to locate cudnn via pkg-config. This will not work in some situations, for example,

  • on systems that don't have pkg-config,
  • when cross compiling, or
  • when cuDNN is not installed in the default system library directory (e.g. /usr/lib).

Therefore the build script can be configured by exporting the following environment variables:

  • CUDNN_LIB_DIR
    If specified, a directory that will be used to find cuDNN runtime libraries. e.g. /opt/cuda/lib

  • CUDNN_STATIC
    If specified, cuDNN libraries will be statically rather than dynamically linked.

  • CUDNN_LIBS
    If specified, will be used to find cuDNN libraries under a different name.

If either CUDNN_LIB_DIR or CUDNN_INCLUDE_DIR are specified, then the build script will skip the pkg-config step.

If your also need to run the compiled binaries yourself, make sure that they are available:

# Linux; for other platforms consult the instructions that come with cuDNN
cd <cudnn_installpath>
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH

Contributing

Want to contribute? Awesome! We have instructions to help you get started contributing code or documentation. And high priority issues, that we could need your help with.

We have a mostly real-time collaboration culture and happens here on Github and on the Collenchyma Gitter Channel. You can also reach out to the Maintainers {@MJ, @hobofan}.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as below, without any additional terms or conditions.

License

Licensed under either of

at your option.