CodeGeex的rust编写

这是2023左右编写的 现在来做个笔录

模型的结构

我们关注Config结构体

pub struct Config {
	/// Transformer 层数
    pub num_layers: usize,
	/// 对齐后词汇表大小
    pub padded_vocab_size: usize,
	/// 隐藏层维度
    pub hidden_size: usize,
	/// 前馈网络的内部维度
    pub ffn_hidden_size: usize,
	/// 每个注意头的维度
    pub kv_channels: usize,
	/// 注意力头数
    pub num_attention_heads: usize,
	/// 序列长度
    pub seq_length: usize,
	/// LayerNorm的epsilon值(防止除以0)
    pub layernorm_epsilon: f64,
	/// 是否用RMSNorm代替LayerNorm
    pub rmsnorm: bool,
	/// 残差连接位置
    pub apply_residual_connection_post_layernorm: bool,
	/// 是否使用Post-LN
    pub post_layer_norm: bool,
	/// 全连接层是否偏置
    pub add_bias_linear: bool,
	/// Q/K/V是否有偏置
    pub add_qkv_bias: bool,
	///是否融合偏置+dropout
    pub bias_dropout_fusion: bool,
	/// 是否使用多查询注意力
    pub multi_query_attention: bool,
	/// 多查询注意力中共享kv的组数
    pub multi_query_group_num: usize,
	/// 是否额外缩放QK
    pub apply_query_key_layer_scaling: bool,
	/// softmax是否在fp32精度
    pub attention_softmax_in_fp32: bool,
	/// 残差连接是否保持FP32
    pub fp32_residual_connection: bool,
    #[serde(default = "default_one")]
	/// 旋转位置编码(RoPE)比例系数
    pub rope_ratio: usize,
}