refactor(项目结构) 重构为 workspace 多成员项目
- 将项目拆分为三个 crate:minicpm-core(核心模型)、minicpm-convert(转换功能)、minicpm-inference(推理功能) - 添加两个示例:minimal-inference(最小推理)和 convert(模型转换) - 转换后自动拷贝 config.json 和 tokenizer.json 到 model 目录 - 更新 README 说明 workspace 结构和使用方式
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
use burn::module::{Module, Param};
|
||||
use burn::nn::Initializer;
|
||||
use burn::tensor::backend::Backend;
|
||||
use burn::tensor::{Float, Tensor};
|
||||
|
||||
#[derive(Module, Debug)]
|
||||
pub struct RmsNorm<B: Backend> {
|
||||
pub weight: Param<Tensor<B, 1, Float>>,
|
||||
pub eps: f64,
|
||||
}
|
||||
|
||||
impl<B: Backend> RmsNorm<B> {
|
||||
pub fn new(dim: usize, eps: f64, device: &B::Device) -> Self {
|
||||
let weight = Initializer::Ones.init([dim], device);
|
||||
Self {
|
||||
weight,
|
||||
eps,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn forward<const D: usize>(&self, x: Tensor<B, D, Float>) -> Tensor<B, D, Float> {
|
||||
let variance = x.clone().powf_scalar(2.0).mean_dim(D - 1);
|
||||
let rms = (variance + self.eps).sqrt();
|
||||
let x_norm = x / rms;
|
||||
|
||||
let weight = self.weight.val().clone().unsqueeze();
|
||||
x_norm * weight
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user