Text Generation
Transformers
Safetensors
huginn_raven
depth-recurrent
latent-reasoning
huginn
raven
test-time-compute
recurrent-depth
custom_code
Instructions to use irafm-llm/Recurrent-Llama-3.2-1B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use irafm-llm/Recurrent-Llama-3.2-1B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="irafm-llm/Recurrent-Llama-3.2-1B", trust_remote_code=True)# Load model directly from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("irafm-llm/Recurrent-Llama-3.2-1B", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use irafm-llm/Recurrent-Llama-3.2-1B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "irafm-llm/Recurrent-Llama-3.2-1B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "irafm-llm/Recurrent-Llama-3.2-1B", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/irafm-llm/Recurrent-Llama-3.2-1B
- SGLang
How to use irafm-llm/Recurrent-Llama-3.2-1B with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "irafm-llm/Recurrent-Llama-3.2-1B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "irafm-llm/Recurrent-Llama-3.2-1B", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "irafm-llm/Recurrent-Llama-3.2-1B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "irafm-llm/Recurrent-Llama-3.2-1B", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use irafm-llm/Recurrent-Llama-3.2-1B with Docker Model Runner:
docker model run hf.co/irafm-llm/Recurrent-Llama-3.2-1B
Recurrent-Llama-3.2-1B: surgery from Llama-3.2-1B + healing (FineWeb-Edu, ~98M tok)
eefd08c verified Download raven_config_minimal.py from irafm-llm/Recurrent-Llama-3.2-1B: direct link, hf CLI and curl.
- Browser
- Download file 5.57 kB
-
https://huggingface.co/irafm-llm/Recurrent-Llama-3.2-1B/resolve/main/raven_config_minimal.py
- Command line
-
hf download hf://irafm-llm/Recurrent-Llama-3.2-1B/raven_config_minimal.py
-
curl -L -o raven_config_minimal.py https://huggingface.co/irafm-llm/Recurrent-Llama-3.2-1B/resolve/main/raven_config_minimal.py
5.57 kB
| """A HuggingFace-style model configuration.""" | |
| from transformers import PretrainedConfig | |
| from math import sqrt | |
| class RavenConfig(PretrainedConfig): | |
| model_type = "huginn_raven" | |
| keys_to_ignore_at_inference = [""] | |
| attribute_map = {"num_attention_heads": "n_heads", "hidden_size": "n_embd", "num_hidden_layers": "n_layers"} | |
| def __init__( | |
| self, | |
| n_embd: int = 5280, | |
| n_heads: int = 55, | |
| n_layers: int = 8, # total of prelude + recurrent + coda | |
| block_size: int = 4096, | |
| vocab_size: int = 65536, | |
| padding_multiple: int = 4096, | |
| tie_embeddings: bool = True, | |
| intermediate_size: int = 17920, | |
| bias: bool = False, | |
| architecture_class_name: str = "RecurrentGPT", | |
| block_class_name: str = "SandwichBlock", | |
| norm_class_name: str = "RMSNorm_llama", | |
| norm_eps: float = 0.000001, | |
| mlp_class_name: str = "GatedMLP", | |
| nonlin_name: str = "SiLU", | |
| init_strategy: str = "takase", | |
| init_orthogonal: bool = False, | |
| state_init: str = "like-init", | |
| injection_type: str = "linear", | |
| n_layers_in_recurrent_block: int = 4, | |
| mean_recurrence: int = 32, | |
| sampling_scheme: str = "poisson-lognormal-filling", | |
| mean_backprop_depth: int = 8, | |
| n_layers_in_prelude: int = 2, | |
| n_layers_in_coda: int = 2, | |
| qk_bias: bool = True, | |
| activation_checkpoint_impl: str = "per-iteration", | |
| rope_base: float = 50_000, | |
| torch_dtype: str = "bfloat16", | |
| transformers_version: str = "4.47.1", | |
| # --- generic-surgery extensions (defaults preserve Huginn/Llama behaviour) --- | |
| head_dim: "int | None" = None, | |
| num_key_value_heads: "int | None" = None, | |
| norm_type: str = "llama", # "llama" (w) or "gemma" ((1+w), fp32) | |
| embed_scale: "float | None" = None, # None -> sqrt(n_embd) default below | |
| attn_logit_softcapping: "float | None" = None, | |
| final_logit_softcapping: "float | None" = None, | |
| query_pre_attn_scalar: "float | None" = None, | |
| attn_impl: str = "sdpa", # "sdpa" or "eager" (eager required for attn softcapping) | |
| source_arch: str = "huginn", # provenance tag: huginn|llama|gemma2|... | |
| block_type: str = "prenorm", # "prenorm" (Llama) or "gemma" (4-norm sandwich) | |
| compare_mode: bool = False, # validation only: feed-forward-equivalent (bypass adapter) | |
| **kwargs, | |
| ): | |
| self.n_embd = n_embd | |
| self.n_heads = n_heads | |
| self.n_layers = n_layers | |
| self.block_size = block_size | |
| self.vocab_size = self.padded_vocab_size = vocab_size | |
| self.padding_multiple = padding_multiple | |
| self.tie_embeddings = tie_embeddings | |
| self.intermediate_size = intermediate_size | |
| self.bias = bias | |
| self.architecture_class_name = architecture_class_name | |
| self.block_class_name = block_class_name | |
| self.norm_class_name = norm_class_name | |
| self.norm_eps = norm_eps | |
| self.mlp_class_name = mlp_class_name | |
| self.nonlin_name = nonlin_name | |
| self.init_strategy = init_strategy | |
| self.init_orthogonal = init_orthogonal | |
| self.state_init = state_init | |
| self.injection_type = injection_type | |
| self.n_layers_in_recurrent_block = n_layers_in_recurrent_block | |
| self.mean_recurrence = mean_recurrence | |
| self.sampling_scheme = sampling_scheme | |
| self.mean_backprop_depth = mean_backprop_depth | |
| self.n_layers_in_prelude = n_layers_in_prelude | |
| self.n_layers_in_coda = n_layers_in_coda | |
| self.qk_bias = qk_bias | |
| self.activation_checkpoint_impl = activation_checkpoint_impl | |
| self.rope_base = rope_base | |
| self.torch_dtype = torch_dtype # Added from JSON | |
| self.transformers_version = transformers_version # Added from JSON | |
| # --- generic-surgery extensions --- | |
| self.norm_type = norm_type | |
| self.attn_logit_softcapping = attn_logit_softcapping | |
| self.final_logit_softcapping = final_logit_softcapping | |
| self.query_pre_attn_scalar = query_pre_attn_scalar | |
| self.attn_impl = attn_impl | |
| self.source_arch = source_arch | |
| self.block_type = block_type | |
| self.compare_mode = compare_mode | |
| # inference | |
| self.test_time_noise = 0 | |
| self.test_time_noise_type = "fixed" | |
| # Derived | |
| self.num_key_value_heads = num_key_value_heads if num_key_value_heads is not None else n_heads | |
| self.num_attention_heads = n_heads | |
| self.head_dim = head_dim if head_dim is not None else (n_embd // n_heads) | |
| self.effective_expected_depth = ( | |
| self.n_layers_in_prelude + self.n_layers_in_coda + self.n_layers_in_recurrent_block * self.mean_recurrence | |
| ) | |
| self.init_values = { | |
| "std": sqrt(2 / (5 * self.n_embd)), | |
| "out_proj": sqrt(2 / (5 * self.n_embd)) / sqrt(2 * self.effective_expected_depth), | |
| "embedding": sqrt(2 / (5 * self.n_embd)), | |
| "embed_scale": embed_scale if embed_scale is not None else sqrt(self.n_embd), | |
| } | |
| # Huginn uses `tie_embeddings`; drop the HF alias if present in a saved config so it does | |
| # not collide with the explicit value below (PretrainedConfig writes tie_word_embeddings). | |
| kwargs.pop("tie_word_embeddings", None) | |
| super().__init__( | |
| # pad_token_id=65509, | |
| # bos_token_id=65504, | |
| # eos_token_id=65505, | |
| tie_word_embeddings=tie_embeddings, | |
| **kwargs, | |
| ) | |