mirror of
https://github.com/huggingface/candle.git
synced 2025-06-20 04:00:28 +00:00
More kv-cache testing.
This commit is contained in:
@ -228,7 +228,7 @@ impl RotatingCache {
|
|||||||
self.offset = 0;
|
self.offset = 0;
|
||||||
} else {
|
} else {
|
||||||
let rem_len = self.max_seq_len - self.offset;
|
let rem_len = self.max_seq_len - self.offset;
|
||||||
if rem_len <= seq_len {
|
if seq_len <= rem_len {
|
||||||
ad.slice_set(src, self.dim, self.offset)?;
|
ad.slice_set(src, self.dim, self.offset)?;
|
||||||
self.offset = (self.offset + seq_len) % self.max_seq_len;
|
self.offset = (self.offset + seq_len) % self.max_seq_len;
|
||||||
} else {
|
} else {
|
||||||
|
@ -30,3 +30,29 @@ fn kv_cache() -> Result<()> {
|
|||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn rotating_kv_cache() -> Result<()> {
|
||||||
|
let mut cache = candle_nn::kv_cache::RotatingCache::new(0, 6);
|
||||||
|
for _ in [0, 1] {
|
||||||
|
assert_eq!(cache.current_seq_len(), 0);
|
||||||
|
let data = cache.current_data()?;
|
||||||
|
assert!(data.is_none());
|
||||||
|
let t = Tensor::new(&[1f32, 2., 3.], &Device::Cpu)?;
|
||||||
|
cache.append(&t)?;
|
||||||
|
let data = cache.current_data()?.unwrap();
|
||||||
|
assert_eq!(data.to_vec1::<f32>()?, [1., 2., 3.]);
|
||||||
|
let t = Tensor::new(&[4f32], &Device::Cpu)?;
|
||||||
|
cache.append(&t)?;
|
||||||
|
let data = cache.current_data()?.unwrap();
|
||||||
|
assert_eq!(data.to_vec1::<f32>()?, [1., 2., 3., 4.]);
|
||||||
|
let t = Tensor::new(&[0f32, 5., 6., 7.], &Device::Cpu)?;
|
||||||
|
cache.append(&t)?;
|
||||||
|
let data = cache.current_data()?.unwrap();
|
||||||
|
assert_eq!(data.to_vec1::<f32>()?, [6., 7., 3., 4., 0., 5.]);
|
||||||
|
assert_eq!(cache.current_seq_len(), 8);
|
||||||
|
assert_eq!(cache.offset(), 2);
|
||||||
|
cache.reset();
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user