Class: Ignis::AI::Transformer::ModernBlock
- Inherits:
-
NN::Module
- Object
- NN::Module
- Ignis::AI::Transformer::ModernBlock
- Defined in:
- lib/nnw/ai/transformer/modern.rb
Overview
Llama/Qwen-style block: x = attn(rmsnorm(x)); x = swiglu(rmsnorm(x)).
Instance Attribute Summary
Attributes inherited from NN::Module
Instance Method Summary collapse
- #forward(x) ⇒ Tensor
-
#initialize(embed_dim, num_heads, num_kv_heads:, ff_dim:, rope_base: 10000.0, rope_scaling: nil, head_dim: nil, eps: 1e-6, device_id: 0) ⇒ ModernBlock
constructor
A new instance of ModernBlock.
- #to_s ⇒ String
Methods inherited from NN::Module
#call, #eval!, #load_state_dict, #named_parameters, #num_parameters, #parameters, #state_dict, #to, #train!, #zero_grad!
Constructor Details
#initialize(embed_dim, num_heads, num_kv_heads:, ff_dim:, rope_base: 10000.0, rope_scaling: nil, head_dim: nil, eps: 1e-6, device_id: 0) ⇒ ModernBlock
Returns a new instance of ModernBlock.
106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/nnw/ai/transformer/modern.rb', line 106 def initialize(, num_heads, num_kv_heads:, ff_dim:, rope_base: 10000.0, rope_scaling: nil, head_dim: nil, eps: 1e-6, device_id: 0) super() @attn = register_module("attn", RopeGqaAttention.new(, num_heads, num_kv_heads: num_kv_heads, head_dim: head_dim, rope_base: rope_base, rope_scaling: rope_scaling, device_id: device_id)) @mlp = register_module("mlp", SwiGLU.new(, ff_dim, device_id: device_id)) @norm1 = register_module("norm1", NN::RMSNorm.new(, eps: eps, device_id: device_id)) @norm2 = register_module("norm2", NN::RMSNorm.new(, eps: eps, device_id: device_id)) end |
Instance Method Details
#forward(x) ⇒ Tensor
120 121 122 123 |
# File 'lib/nnw/ai/transformer/modern.rb', line 120 def forward(x) x = x + @attn.call(@norm1.call(x)) x + @mlp.call(@norm2.call(x)) end |
#to_s ⇒ String
126 127 128 |
# File 'lib/nnw/ai/transformer/modern.rb', line 126 def to_s "ModernBlock(#{@attn}, #{@mlp})" end |