Instructions to use User01110/CMA-1M-Mini with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use User01110/CMA-1M-Mini with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="User01110/CMA-1M-Mini", trust_remote_code=True, device_map="auto")# Load model directly from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("User01110/CMA-1M-Mini", trust_remote_code=True, dtype="auto", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use User01110/CMA-1M-Mini with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "User01110/CMA-1M-Mini" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "User01110/CMA-1M-Mini", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/User01110/CMA-1M-Mini
- SGLang
How to use User01110/CMA-1M-Mini 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 "User01110/CMA-1M-Mini" \ --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": "User01110/CMA-1M-Mini", "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 "User01110/CMA-1M-Mini" \ --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": "User01110/CMA-1M-Mini", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use User01110/CMA-1M-Mini with Docker Model Runner:
docker model run hf.co/User01110/CMA-1M-Mini
CMA-1M Mini
Experimental research model, generations are fully unreliable. CMA-1M Mini exists only as a test bed for understanding how Channel-Mixing Attention works, where it helps, and where its limits and failure modes appear. Do not treat its output as factual, safe, coherent, or suitable for production or real-world decisions.
CMA-1M Mini is a 958,692-parameter base causal language model built to test Channel-Mixing Attention (CMA) at very small scale. It combines causal grouped-query token attention with content-dependent mixing across each token's hidden channels. The model uses a lossless byte-level tokenizer, tied embeddings, native BF16 weights, and a 2,048-token context window.
| Parameters | 958,692 |
| Architecture | Decoder-only CMA causal LM |
| Context | 2,048 byte tokens |
| Vocabulary | 260 tokens: 256 bytes + PAD/BOS/EOS/UNK |
| Weight format | BF16 Safetensors |
| Intended interface | Plain-text completion |
This is a pretrained base model, not a chat or instruction model. Give it ordinary text to continue; no chat template or role markers are required.
Quick start
The architecture is provided as custom Transformers code, so
trust_remote_code=True is required. PyTorch 2.5 or newer is recommended.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
repo_id = "User01110/CMA-1M-Mini"
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = (
torch.bfloat16
if device == "cuda" and torch.cuda.is_bf16_supported()
else torch.float32
)
tokenizer = AutoTokenizer.from_pretrained(
repo_id,
trust_remote_code=True,
)
model = AutoModelForCausalLM.from_pretrained(
repo_id,
trust_remote_code=True,
dtype=dtype,
).to(device).eval()
prompt = "The process of photosynthesis"
inputs = tokenizer(prompt, return_tensors="pt")
inputs = {name: tensor.to(device) for name, tensor in inputs.items()}
with torch.inference_mode():
output = model.generate(
**inputs,
max_new_tokens=96,
do_sample=False,
)
print(tokenizer.decode(output[0], skip_special_tokens=True))
The tokenizer automatically prepends <bos> during normal encoding. It does not
append <eos> to a prompt; generation ends when the model emits EOS or reaches the
requested length. If you deliberately use add_special_tokens=False, prepend BOS
yourself.
Generation options
The included generation defaults are deterministic decoding with a repetition penalty of 1.2. Override them per request as needed.
| Goal | Recommended settings |
|---|---|
| Reproducible completion | do_sample=False |
| Balanced sampling | do_sample=True, temperature=0.8, top_p=0.9, top_k=50 |
| More varied text | do_sample=True, temperature=1.0, top_p=0.95 |
| Reduce loops | repetition_penalty=1.1 to 1.2 |
| Beam search | do_sample=False, num_beams=4 |
| Output length | Set max_new_tokens; keep prompt + output within 2,048 tokens |
Example with sampling:
with torch.inference_mode():
output = model.generate(
**inputs,
max_new_tokens=128,
do_sample=True,
temperature=0.8,
top_p=0.9,
top_k=50,
repetition_penalty=1.15,
)
For the high-level pipeline API:
import torch
from transformers import pipeline
generator = pipeline(
"text-generation",
model="User01110/CMA-1M-Mini",
tokenizer="User01110/CMA-1M-Mini",
trust_remote_code=True,
dtype="auto",
device=0 if torch.cuda.is_available() else -1,
)
result = generator(
"In a distant future,",
max_new_tokens=80,
do_sample=True,
temperature=0.8,
top_p=0.9,
)
print(result[0]["generated_text"])
To score text rather than generate it:
encoded = tokenizer("CMA models text one byte at a time.", return_tensors="pt")
encoded = {name: tensor.to(device) for name, tensor in encoded.items()}
with torch.inference_mode():
result = model(**encoded, labels=encoded["input_ids"])
print(float(result.loss))
Tokenizer and context
- Every UTF-8 byte has a token, so ordinary text cannot become out-of-vocabulary.
- The four control tokens are
<pad>(0),<bos>(1),<eos>(2), and<unk>(3). - The context limit is 2,048 byte tokens, not 2,048 words or subword tokens.
- Non-ASCII text usually consumes multiple byte tokens per character.
- For long inputs, explicitly keep the most recent 2,048 tokens rather than relying on implicit truncation.
- The tokenizer has no arithmetic-specific splitting, chat template, or hidden prompt transformation.
Architecture
| Component | Configuration |
|---|---|
| Hidden width / layers | 128 / 6 |
| Token attention | 4 query heads, 2 key-value heads |
| Position encoding | Contiguous-half rotary embeddings, no scaling |
| CMA layout | 8 channel slots x 16 channels |
| CMA routing | 2 heads, expansion 2, content-dependent softmax mixing |
| CMA initialization | 90% diagonal routing prior with a dense base path |
| Feed-forward gate | SiLU-gated routed values |
| Normalization | RMSNorm |
| Embeddings | Input and output weights tied |
| Attention runtime | Native PyTorch scaled-dot-product attention |
For each token, CMA projects dense values, reshapes them into channel slots, and learns a softmax mixing matrix between those slots. A bounded learned coefficient controls the routed difference from the dense base value, so routing enriches rather than replaces the fallback path.
The exported generation implementation does not maintain a KV cache. This keeps the custom model compact and straightforward, but long autoregressive generations will recompute the active context and are slower than cached generation.
Training data
The model was pretrained as a general causal language model on the following mixture. Percentages describe the trained-token mixture.
| Source | Share |
|---|---|
| FineWeb-Edu 100BT | 45% |
| DCLM-Baseline 1.0 | 25% |
| DCLM-Edu | 10% |
| Cosmopedia v2 | 10% |
| FineMath 4+ | 10% |
No benchmark-specific prompts, task detectors, arithmetic vocabulary, or inference-time answer rules are built into the model.
Evaluation
Evaluation is zero-shot. The four lm-eval tasks use normalized accuracy when provided by lm-eval 0.4.12. ArithMark-2 uses raw continuation log-likelihood sums. Weights are evaluated in BF16 with FP32 likelihood softmax and an automatic BOS prefix.
| Benchmark | Accuracy |
|---|---|
| HellaSwag | 29.35% |
| ARC-Easy | 29.29% |
| ARC-Challenge | 21.76% |
| PIQA | 54.62% |
| ArithMark-2 | 27.44% |
| Open SLM Leaderboard-style average | 34.23% |
The combined score is
(HellaSwag + mean(ARC-Easy, ARC-Challenge) + PIQA + ArithMark-2) / 4.
This is a report-only reproduction of the leaderboard formula, not an official
leaderboard submission. WikiText-103 normalized validation BPB is 1.6974.
Exact machine-readable results are available in
benchmark_results.json.
Intended use and limitations
CMA-1M Mini is intended for architecture research, educational experiments, lightweight language-model tooling, and controlled comparisons at tiny scale.
- At fewer than one million parameters, generations are short-range and frequently incoherent; the model should not be treated as a knowledge source.
- It is not instruction-tuned, conversationally aligned, tool-using, or safety-tuned.
- Training data is predominantly English even though byte tokenization can represent any UTF-8 text.
- Outputs may reproduce biases, inaccuracies, or undesirable patterns from public training corpora.
- Do not use it for consequential medical, legal, financial, or safety decisions.
- Loading custom code executes files from the repository. Review the code or pin a trusted revision in security-sensitive environments.
Repository contents
model.safetensors— BF16 model weightsmodeling_cma.py— Transformers-compatible CMA implementationconfig.jsonandgeneration_config.json— architecture and decoding defaultstokenizer.jsonandtokenizer_config.json— deterministic byte tokenizerbenchmark_results.json— exact evaluation metrics and protocol metadatatraining_config.json— reproducibility configuration
- Downloads last month
- -