rust-bert 0.23.0

Ready-to-use NLP pipelines and language models
Documentation
#[macro_use]
extern crate criterion;

use criterion::{black_box, Criterion};
use std::time::{Duration, Instant};
use tch::kind::Kind;
use tch::{Device, Tensor};

fn matrix_multiply(iters: u64, input: &Tensor, weights: &Tensor) -> Duration {
    let mut duration = Duration::new(0, 0);
    for _i in 0..iters {
        let start = Instant::now();
        let _ = input.matmul(weights);
        duration = duration.checked_add(start.elapsed()).unwrap();
    }
    duration
}

fn bench_tensor_ops(c: &mut Criterion) {
    let input = Tensor::rand([32, 128, 512], (Kind::Float, Device::cuda_if_available()));
    let weights = Tensor::rand([512, 512], (Kind::Float, Device::cuda_if_available()));

    let _ = &input.matmul(&weights);
    c.bench_function("Matrix multiply ", |b| {
        b.iter_custom(|iters| black_box(matrix_multiply(iters, &input, &weights)))
    });
}

criterion_group! {
name = benches;
config = Criterion::default().sample_size(100);
targets = bench_tensor_ops
}

criterion_main!(benches);