use burn_core::{
Tensor,
module::{ModuleMapper, Param},
};
use crate::{Learner, LearnerModel};
pub struct ModuleSharder;
impl ModuleMapper for ModuleSharder {
fn map_float<const D: usize>(&mut self, param: Param<Tensor<D>>) -> Param<Tensor<D>> {
let (id, tensor, mapper) = param.consume();
let tensor = tensor.set_distributed(id);
Param::from_mapped_value(id, tensor, mapper)
}
}
impl<M: LearnerModel> Learner<M> {
pub fn grad_sharded(&mut self) {
self.model = self.model.clone().map(&mut ModuleSharder);
}
}