/ Модель

Характеристики

Контекст
2 048 токенов
Параметры
189 млн
Лицензия
Apache 2.0
Базовая модель
quipu-moe-1B-A149M
Библиотека
pytorch
Опубликована
13 окт 2026

quipu-moe-1B-A149M-chat-distill

Генерация текстаТекст → текст

Разреженная многоязычная чат-модель AneekC для генерации текста и кода, дообученная с дистилляцией коротких ответов на задачи программирования.

162скачиваний за 30 дней1лайквеса обновлены13 окт 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

AneekC разработала quipu-moe-1B-A149M-chat-distill — чат-модель для генерации текста и кода, полученную дообучением quipu-moe-1B-A149M на человеческих диалогах и 3 100 коротких ответах на задачи программирования от учителя Qwen2.5-Coder-1.5B-Instruct. Это разреженный декодерный трансформер с архитектурой mixture-of-experts: около 998 млн параметров всего и 148,7 млн активных на токен. Модель использует собственный токенизатор и поддерживает английский, индонезийский, малайский, китайский, японский, корейский, тамильский, хинди и романизированный урду.

Модель предназначена для диалогов, продолжения текста и простых задач программирования, в особенности коротких Python-функций. В README отмечен прирост результатов относительно исходной чат-модели на HumanEval и MBPP, но абсолютные показатели низкие: 0,6% и 7,4% соответственно. Генерация может содержать уверенно изложенные ошибки; качество инструкций и улучшения вне коротких задач на код не оценивались. Для запуска предусмотрен собственный загрузчик на PyTorch и safetensors; модель не совместима с AutoModel из Transformers, а последовательный запуск экспертов без KV-кэша медленный. Лицензия репозитория — Apache-2.0.

Сценарии применения

  • генерация ответов в многоязычном чате
  • продолжение текста на поддерживаемых языках
  • создание коротких Python-функций
  • черновая генерация программного кода
  • эксперименты с компактными MoE-моделями

Ограничения

На HumanEval модель решает 0,6% задач, на MBPP — 7,4%; сгенерированный код следует проверять. Другие языки, кроме английского, занимают меньшую долю обучающих данных; модель может смешивать языки, а качество следования инструкциям и дистилляции вне коротких задач на код не оценивалось.

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

quipu-moe-1B-A149M-chat-distill

A mixture-of-experts language model trained from scratch: 998,007,552 parameters in total, 148,660,992 active per token (998.0M total / 148.7M active). Own tokenizer, own data pipeline, no fine-tuned base. Code and ten languages: English, Indonesian, Malay, Simplified and Traditional Chinese, Japanese, Korean, Tamil, Hindi (Devanagari and romanised) and romanised Urdu.

This is the distilled chat model: quipu-moe-1B-A149M after the same short supervised fine-tune as quipu-moe-1B-A149M-chat, with one change: 3,100 coding answers from an open-weight teacher (Qwen/Qwen2.5-Coder-1.5B-Instruct, Apache-2.0) added to the human-written conversations. Every teacher answer kept was run against its unit tests in a sandbox; answers that failed, did not finish, or had no code were dropped (3,277 of 5,000 passed).

greedy pass@1HumanEval (164)MBPP sanitized test (257)
quipu-moe-1B-A149M-chat0.0% (0)1.9% (5)
quipu-moe-1B-A149M-chat-distill0.6% (1)7.4% (19)

Both measured with the same harness, prompts and greedy decoding (see Evaluation). That is still low in absolute terms: reference models of similar total size score far higher (table below). At this size it is often wrong. It is published as an honest record of what a small sparse model learns when pretrained under a $20 compute cap.

Project page: https://quipu-lm.vercel.app · Code: https://github.com/Aneek1/quipu

Architecture

TypeDecoder-only transformer, sparse mixture of experts
Parameters998,007,552 total / 148,660,992 active per token (998.0M / 148.7M; embeddings tied, counted once)
Layers / width16 layers, d_model 768
Attentiongrouped-query, 12 query / 4 key-value heads, head dim 64, RoPE base 10000
Feed-forward1 shared expert(s) (hidden 768) + 64 routed experts (hidden 384), top-4
Routingsoftmax router, Top-k on score + bias, weights renormalised over the chosen experts; Quantile Balancing (auxiliary-loss-free bias)
Expert activationSwiGLU. The A/B rule kept SiTU-GLU (pair 3, below), but the full run was overridden to SwiGLU: a 0.047 loss gain did not pay for its lower tokens/s
Depth mixingplain pre-norm residual (Block Attention Residuals not used) (per the A/B winners, results/moe/run_config.toml)
OptimizerMuon (Newton-Schulz orthogonalised per attention head) for weight matrices, AdamW for the rest (per the A/B winners, results/moe/run_config.toml)
Training precisionbf16 (router and balancing math in fp32; per the A/B winners, results/moe/run_config.toml)
Context2,048 tokens
Tokenizerbyte-level BPE, 49,152 tokens, trained for this model (code-aware whitespace, ten languages)

Data

sourcedatasetrevisionlicence
codecodeparrot/github-code-cleanc48d40f9e70fthe permissive subset of codeparrot/github-code-clean (each file keeps its own licence)
englishHuggingFaceFW/fineweb-edu87f09149ef47HuggingFaceFW/fineweb-edu, ODC-By 1.0
fineweb2HuggingFaceFW/fineweb-2af9c13333eb9HuggingFaceFW/fineweb-2, ODC-By 1.0

Mix achieved (share of training tokens): code 60.0%, eng_Latn 28.0%, other_languages 12.0%.

Training tokens in the shard set: 8,300,000,000 (the train split; validation and evaluation splits are separate).

Code licences kept: mit, apache-2.0, bsd-2-clause, bsd-3-clause, isc, cc0-1.0, unlicense.

Language identification: every text document was checked with the fastText specialist from AneekC/lid-specialists-9plus1 (MIT, revision 117966eb565a), the owner's own model; a document whose top label is not its source language was dropped, and FineWeb-2's cmn_Hani was split into Simplified and Traditional Chinese by its labels.

languagekeptdroppedkept while unsure
English2,118,5409200
Urdu (romanised)13,69255,6290
Hindi (romanised)80,9685,1880
Tamil98,3485360
Malay130,6385,7830
Hindi (Devanagari)107,08763,6750
Korean107,2191,0860
Indonesian103,6642,8460
Japanese102,5102220
Chinese (script not split)230,7661660

Benchmark decontamination

Documents dropped because they contain a HumanEval or MBPP problem (rule, from the shard manifest: a document is dropped when it contains a problem's text (HumanEval: prompt, canonical_solution; MBPP: code, task text) as a whitespace-collapsed substring of at least 60 characters, or, for one of the problem's n-gram texts (its solution; HumanEval also its prompt and each docstring in it), at least 50% and at least 2 of that text's distinct 13-grams (tokens: \w+ runs and single punctuation characters; a text with fewer than 2 13-grams takes no part)):

splithumanevalmbpp
train_code7944
train_text01
code_val00
val00
val_lang00

Chat fine-tuning data

Human-written conversations plus execution-verified teacher answers; from the SFT data manifest:

sourcedatasetrevisionlicenceexamplestokens
ayaCohereForAI/aya_datasetf9ea04583f02Apache-2.039,4877,100,208
oasst2OpenAssistant/oasst2179dd21fc551Apache-2.06,0842,677,174
stepbuilddata/stepbuild-per repository (permissive; the row's licence field)397652,045
distillteacher answers (below)-problems: OpenCodeInstruct CC-BY-4.0, APPS MIT; answers: Apache-2.0 teacher3,1001,039,887

The distill source. 5,000 function-style problems (4,000 from nvidia/OpenCodeInstruct, rows with average_test_score == 1.0; 1,000 from codeparrot/apps), decontaminated against HumanEval and MBPP. The teacher, Qwen/Qwen2.5-Coder-1.5B-Instruct at revision 2e1fd397ee46, answered each once (greedy). An answer was kept only if it finished on its own, had a code block defining the expected function, and passed every assert in a sandbox: 3,277 kept (65.5%; OpenCodeInstruct 74.2%, APPS 31.0%). Reference solutions were never shown to the teacher or written to the training data. 3,100 kept answers are in the train split after decontamination; the held-out distill split is below.

Training

Pretraining (the base model, unchanged):

Tokens trained4,261,937,152 (8,129 steps)
Throughput44,331 tokens/s (throughput gate)
Hardware1 x RTX 5090 32 GB (rented, Vast.ai)
Cost$18.75 from the spend ledger: GPU session (hourly); excludes Vast bandwidth charges. The GPU box's hours (setup, A/B runs, the full run, the chat fine-tune, evaluation) plus the CPU shard-build box
Schedulepeak LR 0.0006, warmup 500 steps, cosine to 6e-05; batch 524,288 tokens

Chat fine-tune (this model):

Initialised fromquipu-moe-1B-A149M, final pretraining step 8,129
Steps / tokens308 steps, 40,370,176 tokens (the SFT epoch cap: about 3 passes over 13.5M tokens of data)
Schedulepeak LR 6e-05 (Muon 0.002), warmup 20 steps, cosine to 0; batch 131,072 tokens
Expert activationSwiGLU, pinned to match the base model's weights
Hardware1 x RTX 5090 (rented, Vast.ai)
Costin a separate session capped at $3.00 (teacher answers, sandbox checks, this fine-tune); not in the $18.75 above

A/B tests (run before the full run, results kept either way)

Runs (from results/ab/summary.md, verbatim)

#runconfig difftokensstatusfinal loss (decision)english valbpbtokens/sspikesskippedstartup soverhead scompiledecision
1p1-adamw(config)200,000,000completed4.05994.92181.601693,145005612offpair 1: not kept
2p1-muonoptimizer=muon200,000,000completed3.32074.40591.433791,394005914offpair 1: kept; pair 2: kept; pair 3: not kept
3p1-muon-seed1338optimizer=muon, seed=1338200,000,000completed3.34874.41671.437291,494005915offseed re-run of p1-muon
4p2-attnresoptimizer=muon, attnres_blocks=4200,000,000completed3.03224.20761.369277,266007019offpair 2: not kept
5p3-situ_gluoptimizer=muon, activation=situ_glu200,000,000completed3.27334.37921.425083,595006521offpair 3: kept

Decisions (from results/ab/summary.md, verbatim)

pairsimplerotherkeptnoisereason
1 optimizerp1-adamwp1-muonoptimizer=muon (p1-muon)0.0280lower loss by 0.7392, beyond noise 0.0280
2 attnresp1-muonp2-attnresattnres_blocks=0 (p1-muon)0.0280AttnRes throughput cost 15.5% is over the 10% limit [shared noise: pair 1's seed re-run]
3 activationp1-muonp3-situ_gluactivation=situ_glu (p3-situ_glu)0.0280lower loss by 0.0474, beyond noise 0.0280 [shared noise: pair 1's seed re-run]

Rules (on the decision loss above): the other option needs lower final loss by more than the seed noise; AttnRes <= 10% tokens/s cost; SiTU-GLU no more spikes (step loss > 1.5 x EMA, beta 0.98); FP8 >= 1.2x tokens/s, loss within noise, no more spikes. A missing arm keeps the simpler option (AdamW, no AttnRes, SwiGLU, bf16).

FP8

FP8 training was not tried in the paid run: the owner decided (2026-09-29) not to spend A/B time on the FP8 pair, so the run is bf16. The FP8 option exists in the training code (quipu/fp8.py) and was only checked on the laptop.

Evaluation

Bits per byte per language (base model, during pretraining)

Bits per byte (lower is better; comparable across tokenizers) on held-out text per language and held-out code. Definition: summed next-token loss in bits over the UTF-8 bytes of the target tokens. Every <|endoftext|> document separator is a target too: its loss counts but it is 0 bytes of text, so these numbers are slightly higher (more pessimistic) than a separator-free measure.

checkpointstepEnglishIndonesianMalayChinese (Simplified)Chinese (Traditional)JapaneseKoreanTamilHindi (Devanagari)Hindi (romanised)Urdu (romanised)Code
step_0001631631.9192.5032.5323.7973.7402.6692.7741.0251.2942.8443.1561.993
step_0004074071.4211.7551.7922.8602.8061.9241.9680.7390.8942.0922.4590.925
step_0008138131.2321.6111.6172.4872.3931.6891.6840.6520.7801.8122.2200.712
step_0016261,6261.1311.4091.4212.3872.2641.5461.5420.6020.7021.6502.0300.609
step_0032523,2521.0541.2961.3032.0262.0021.4021.3800.5540.6441.4701.8070.534
step_0056905,6900.9901.2081.2081.8431.8131.2951.2520.5130.5951.3161.6560.477
step_0081298,1290.9591.1571.1621.7681.7281.2341.1990.4910.5681.2551.5820.448

Code: HumanEval and MBPP

modelparamsmetric / settingHumanEval pass@1HumanEval pass@10MBPP pass@1MBPP pass@10source
quipu-moe-1B-A149M-chat-distill998.0M total / 148.7M activegreedy pass@1 (T=0, one completion); HumanEval 164; MBPP sanitized test (257); chat template0.6-7.4-measured here
quipu-moe-1B-A149M-chat (before distillation)998.0M total / 148.7M activegreedy pass@1 (T=0, one completion); HumanEval 164; MBPP sanitized test (257); chat template; same harness0.0-1.9-measured here
CodeGen-350M-mono350Msampled, top-p 0.95, best of T in {0.2, 0.6, 0.8} per k (Table 1 caption); HumanEval 164; 0-shot; no MBPP in that table12.823.1--published, not re-run: Nijkamp et al., CodeGen (ICLR 2023), arXiv:2203.13474, Table 1
SantaCoder-1.1B1.1Bsampled n=200, T=0.2 for pass@1 and T=0.8 for pass@10 (paper, sec. on evaluation); HumanEval and MBPP as MultiPL-E's Python versions, MBPP derived from the sanitized subset (paper), not necessarily our 257-problem test split18.029.035.058.0published, not re-run: bigcode/santacoder model card (self-reported; Allal et al., arXiv:2301.03988)
SmolLM-135M135Mno number in the text (HumanEval shown as a chart only)----published, not re-run: huggingface.co/blog/smollm; cheap to re-run on the laptop
SmolLM-360M360Mno number in the text (HumanEval shown as a chart only)----published, not re-run: huggingface.co/blog/smollm; cheap to re-run on the laptop
Qwen2.5-Coder-1.5B (base)1.5Bunverified setting: the report does not state the decoding for this table (the word 'greedy' does not appear) nor which MBPP problems or how many shots this column uses (a separate MBPP 3-shot column exists); HumanEval (164) and MBPP are reported beside EvalPlus's HumanEval+ / MBPP+43.9-69.2-published, not re-run: Hui et al., Qwen2.5-Coder Technical Report, arXiv:2409.12186, Table 5

Published numbers are copied from their sources with the setting each source states; they were produced with other prompts, decoding and harnesses, so compare them with care (a row's setting says what differs).

Protocol (both quipu rows; results/code_eval_local/quipu-moe-1B-A149M-chat-distill.json and quipu-moe-1B-A149M-chat.json, run on the same laptop)

  • Mode: chat.
  • HumanEval prompt: chat template <|user|>...<|end|><|assistant|>; the user turn asks to complete the function and shows the published prompt in a ```python fence; the reply's first code block (or the whole reply) is the code.
  • HumanEval stop sequences: none.
  • MBPP prompt: chat template; the user turn is the task text, 'Your code should pass this test:' and the first assert; the reply's first code block is the code.
  • MBPP stop sequences: none.
  • Stop tokens: <|end|>, <|endoftext|>; at most 384 new tokens.
  • Greedy: temperature 0 (argmax), one completion per problem -> greedy pass@1.
  • Sampled: not run (greedy only).
  • Execution: 10.0 s timeout per program; subprocess python -I in a temporary directory with a reliability guard (no deleting / renaming files, no writing outside the temp dir, no subprocesses, sockets cannot connect, resource limits on POSIX); best effort, not a security boundary: run it only where executing untrusted model output is acceptable.

Held-out chat loss

Held-out chat loss per source (the SFT's validation conversations, micro-batch 1), this model vs the chat model without distillation:

sourcethis modelquipu-moe-1B-A149M-chatassistant tokens
aya2.23472.2564106,935
oasst22.11622.118538,773
stepbuild0.27390.26582,525
distill0.3466-21,394

Expert usage, fixed-prompt chat samples and int4 were not re-measured for this model; the base and chat model cards have them for the models they describe. No int4 file is shipped here.

Standalone-loader parity (max |logit difference| against the training code, fp32, real validation tokens): 2.6e-05, with logits up to about 22 and the top token agreeing at every position. The export check's tolerance was 5e-05 for this model (1e-05 for the others).

Usage

pip install torch safetensors tokenizers huggingface_hub
from huggingface_hub import hf_hub_download
import importlib.util, sys

path = hf_hub_download("AneekC/quipu-moe-1B-A149M-chat-distill", "modeling_quipu_moe.py")
spec = importlib.util.spec_from_file_location("modeling_quipu_moe", path)
mq = importlib.util.module_from_spec(spec)
sys.modules["modeling_quipu_moe"] = mq
spec.loader.exec_module(mq)

model = mq.load("AneekC/quipu-moe-1B-A149M-chat-distill")                                    # fp32
tok = mq.load_tokenizer("AneekC/quipu-moe-1B-A149M-chat-distill")
print(mq.chat(model, tok, [{"role": "user", "content": "Write a Python function that reverses a string."}]))

This is not a transformers model; there is no AutoModel class for it. The loader runs the experts one after another without a KV cache: correct, not fast.

Limitations

  • Small: 148,660,992 parameters are active per token. It states false things with confidence; do not use its output as information.
  • The nine languages other than English together are 12.0% of the training tokens (English 28.0%, code 60.0%; shard manifest, mix achieved). Expect weaker output in them than in English, and some mixing of languages.
  • Code: greedy decoding solves 0.6% of HumanEval and 7.4% of MBPP problems (see above). Treat generated code as untested.
  • The distillation data is Python, function-style and fairly short; gains outside that kind of task were not measured.
  • Trained on web text and public code, which carry their biases; no safety tuning.
  • How well it follows instructions was not measured beyond the held-out chat loss per source and the chat-mode HumanEval / MBPP numbers above.

Credits and licence

Weights and code: Apache-2.0. Language identification of the training text used AneekC/lid-specialists-9plus1 (MIT). Training data: FineWeb-Edu and FineWeb-2 (ODC-By 1.0, © Hugging Face) and the permissively licensed subset of codeparrot/github-code-clean (files keep their licences). Chat fine-tuning data: CohereForAI/aya_dataset (Apache-2.0), OpenAssistant/oasst2 (Apache-2.0), the stepbuild train split (FILE-block replies mined from permissively licensed public repositories, each keeping its repository's licence; built for this project, its test split and benchmark apps held out), and execution-verified answers from Qwen/Qwen2.5-Coder-1.5B-Instruct (Apache-2.0) to problems from nvidia/OpenCodeInstruct (CC-BY-4.0) and codeparrot/apps (MIT). HumanEval (MIT) and MBPP (CC-BY-4.0) were used for evaluation only and filtered (substring / 13-gram matching) from the training data.

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · pytorch

Нельзя запустить

Архитектура ? неизвестна transformers в образе рантайма.

Ревизия весов
6277683

0 моделей