Downloads · 30 days
92
13% of all-time downloads
Hosstia/AliceAI-T5-35B-A0.6B-MLX-4bit
AliceAI-T5-35B-A0.6B-MLX-4bit is a translation model from Hosstia. Use it when you need text moved from one language to another. It is set up for mlx. The card lists the license as other.
MLX-quantized version of Yandex's AliceAI-T5-35B-A0.6B for Apple Silicon. This is an encoder-decoder Mixture-of-Experts (MoE) T5 translation model with 35B total parameters (0.6B active per token), optimized to run on…
Downloads · 30 days
92
13% of all-time downloads
All-time downloads
692
Public
Parameters
5.8B
39.3 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors19.7 GB · 100%
How the weights are stored.
U324.5B · 78%
From the Hugging Face model README
MLX-quantized version of Yandex's AliceAI-T5-35B-A0.6B for Apple Silicon.
This is an encoder-decoder Mixture-of-Experts (MoE) T5 translation model with 35B total
parameters (0.6B active per token), optimized to run on the Metal GPU via Apple's MLX
framework with fused gather_qmm MoE dispatch.
hidden_size * bits / 32 (288 words for 6-bit) instead of
hidden_size // (32 // bits) (307), which broke mx.dequantize.| Property | Value |
|---|---|
| Architecture | Encoder-decoder MoE T5 |
| Total parameters | 35B |
| Active parameters per token | 0.6B |
| Experts | 512 (top-8 routing) |
| Encoder layers | 16 |
| Decoder layers | 12 |
| Hidden size | 1536 |
| Attention heads (encoder) | 12 |
| KV heads (decoder) | 4 |
| Head dimension | 128 |
| Vocabulary size | 135,040 |
| Expert intermediate size | 512 |
| Activation | silu |
| RoPE type | yarn (YaRN) |
| RoPE original max position | 9984 |
| RoPE scaling factor | 20.0 |
| Shared embeddings | True |
| Tied word embeddings | True |
| Component | Mode | Bits | Group size |
|---|---|---|---|
| Experts | affine | 4 | 64 |
| Attention | affine | 4 | 64 |
| Embeddings | none | — | — |
Description: affine 4-bit g64 (experts + attention)
Benchmarked on Apple M4 Pro (48 GB unified) with MLX 0.32.0.
| Metric | This variant (4bit) | Legacy baseline |
|---|---|---|
| Throughput (batch 1) | 158.89 tok/s | 18.89 tok/s |
| Throughput (batch 8) | 311.81 tok/s | — |
| Median throughput (batch 1) | 159.54 tok/s | 18.56 tok/s |
| Median throughput (batch 8) | 299.26 tok/s | — |
| GPU utilization (batch 1) | 74.2% | 51.2% |
| GPU utilization (batch 8) | 89.6% | — |
| Peak GPU utilization | 100% | 84% |
| Model size on disk | 18.30 GB | 18.30 GB |
| Peak memory | 19.08 GB | 19.87 GB |
| Speedup vs legacy (batch 1) | 8.41x | 1.0x |
| Speedup vs legacy (batch 8) | 16.5x | 1.0x |
The fused gather_qmm MoE dispatch eliminates 224 GPU synchronization
barriers per token (one per expert per layer in the legacy flat-loop
implementation). This achieves a 8.41x speedup at batch 1 and up
to 16.5x at batch 8 compared to the legacy numpy-loop baseline,
while maintaining full numerical parity with the reference quantization
scheme.
from aliceai_mlx import load_model, generate, Translator
# Load the model directly
model = load_model("path/to/AliceAI-T5-35B-A0.6B-MLX-4bit")
# Or use the high-level Translator wrapper
translator = Translator("path/to/AliceAI-T5-35B-A0.6B-MLX-4bit")
# Simple translation (Chinese → Russian)
# min_new_tokens defaults to 0 for translation — no change needed
result = translator.translate("沈安瞠目结舌的看着包拯扬长而去。")
print(result)
# Professor mode: merge two candidate translations
result = translator.professor(zh_text, ru_teacher, ru_student)
print(result["corrected_text"])
# Batch translation for higher throughput
results = translator.complete_batch([zh_text_1, zh_text_2, zh_text_3])
# Q&A mode — ask questions in Russian
# min_new_tokens=128 prevents premature EOS truncation in quantized models
answer = translator.qa("Что такое энтропия в термодинамике?", min_new_tokens=128)
print(answer)
Launch the interactive chat with Q&A, translation, correction, and professor modes:
# Start interactive chat in Q&A mode
python chat.py --model 4bit --task qa
# Available task modes: translate, correct, professor, qa, raw
# Supports multi-turn conversation history, slash commands, and stream cleanup
Slash commands: /task, /model, /temp, /tokens, /min, /clear,
/info, /help, /quit.
Runtime code included: This repository contains the
aliceai_mlxPython package,chat.py,requirements.txt, andARTICLE.md(a detailed technical article about the conversion process). Clone the repo and runpip install -r requirements.txt, thenpython chat.py --model .to start the interactive chat.
min_new_tokens ParameterThe min_new_tokens parameter suppresses the EOS (end-of-sequence) logit for
the first N generated tokens, preventing premature truncation that occurs in
quantized models. This is especially important for Q&A mode, where answers
can be cut off mid-sentence without it.
min_new_tokens=0 (default) — translation produces
concise output and does not need forced continuation.min_new_tokens=128 (default) — ensures answers are complete
and not truncated mid-sentence.min_new_tokens is required for Q&A mode — without it, quantized models
emit EOS prematurely and answers truncate mid-sentence.min_new_tokens parameter to generate_step(), generate(),
complete(), complete_batch(), and stream() — suppresses EOS logit for
the first N tokens to prevent premature truncation in quantized models.
Default 128 for Q&A mode, 0 for translation.parse_qa_answer() cleanup — strips format-spec
markers, echoes of the prompt format, repeated answer blocks, and trailing
noise from the model output.chat.py) with 5 task modes (translate, correct,
professor, qa, raw), multi-turn conversation history for Q&A, slash commands
(/task, /model, /temp, /tokens, /min, /clear, /info, /help,
/quit), and stream cleanup._cut_repetition() in parse_qa_answer()
and parse_corrected() — detects and cuts repeated answer blocks that
quantized models produce after min_new_tokens forces continued generation.parse_qa_answer() before display; other modes use raw streaming for
low latency.parse_qa_answer() — when
min_new_tokens forces the model to continue past its natural answer,
quantized models may echo the format-spec template text (e.g.
- **Ответ**: [Подробный развёрнутый ответ на вопрос]) instead of writing
real content. Such echoes are now stripped anywhere in the output and are
no longer mistaken for repetition markers; dangling trailing markers (e.g.
a bare **Объяснение:** at the end) are removed as well._cut_repetition() — the 4-bit model
sometimes echoes the user's question verbatim before giving the real
answer, separated by a `Ответ:
marker. The parser now detects this (text before the marker ends with?) and discards the question echo, keeping only the real answer. The repetition-cut loop was restructured from finditerto awhile/search` loop to avoid stale match positions
after text reassignment.
_cut_repetition()
— the 6-bit model may repeat the same line (e.g. **Reason**: ...)
multiple times in a row; only the first copy of each run is kept._TRAILING_MARKER_RE to match English marker words
(Reason, Alternative, Explanation, Consequences, Answer) in
addition to Russian ones, so dangling trailing markers are stripped in
both languages.QA_PROMPT — the prompt previously
forced Russian answers for Chinese-related questions, conflicting with
user requests for answers in other languages. The prompt now instructs
the model to answer in the language of the question or as requested by
the user._TRAILING_MARKER_RE for language-specific headers — the
model may write section headers like ### **Ответ на китайском языке**:
but never fill in the content. The regex now matches Ответ на <language> языке patterns (with optional #+ markdown heading prefix) so such
dangling headers are stripped._ANSWER_RE to match English Answer — the leading answer
marker stripper now handles both Russian Ответ and English Answer,
so - Answer: [text] markers are stripped correctly.- Ответ: lines with no content),
parse_qa_answer() now returns a clear fallback message
(QA_FALLBACK_MESSAGE) instead of an empty string. chat.py displays
this message instead of a blank response, and failed answers are no
longer added to the conversation history._cut_repetition()
Rule 1 now splits the output into blocks at real repetition markers
(skipping format-spec echoes), discards question-echo blocks (ending
with ?), strips leading answer markers from each block, and keeps
the longest non-question block (preferring the earliest on ties). This
fixes the 4-bit model's tendency to produce a short first answer
followed by a better, longer one after a repetition marker.<SPAN#N> tokens from all outputs — the model may emit
span tokens like <SPAN#135> in its output. These are now stripped by
_SPAN_TOKEN_RE in _decode_output(), stream(), and
parse_qa_answer(), so they never appear in the final text._QUESTION_ECHO_RE to detect and remove **Вопрос**: / **Question**:
echoes that the prompt template may cause the model to reproduce.
The echo is stripped from the marker to the end of the text.chat.py — answers shorter than 20
characters, fallback messages, and bracket-only markers are no longer
added to the conversation history, preventing poisoned context from
degrading subsequent Q&A turns.**Исправленный перевод**: marker (common for short translations)
and outputs the translation directly followed by `Ответ:, translate()now falls back toparse_qa_answer()` to strip trailing
markers instead of returning raw output.
[Ответ] bracket marker leak in Q&A mode — the 6-bit
model in multi-turn Q&A could degenerate to outputting only [Ответ]
(the format-spec placeholder with the word "Ответ" instead of real
content) after several turns of fabricated answers. Added
_BRACKET_MARKER_RE to strip [Ответ] / [Answer] anywhere in the
output before and after _cut_repetition(). Updated _ANSWER_RE and
_REPETITION_ANSWER_RE with strict alternation
(?:\[\s*(?:Ответ|Answer)\s*\]|(?:Ответ|Answer)) to match bracket
markers exactly without false positives on [Ответ на вопрос 1]-style
references. Updated _TRAILING_MARKER_RE with optional brackets.chat.py
(_MAX_HISTORY_TURNS = 2) — when the model hallucinates in early Q&A
turns, fabricated answers accumulate in the history and cause
progressive degeneration in later turns. Limiting history to the last
2 turns prevents this poisoning while still providing conversation
context.weight.astype(float32) rebuilt a 792 MB tensor
on every token.FastLMHead) reads fp16 weights
and accumulates in float32, halving bandwidth (396 MB vs 792 MB per
token). Self-validates against mx.matmul before installation; falls
back to cached-cast mx.matmul if unavailable.[tgt, tgt], now [tgt, offset+tgt] to account for KV cache).lm_head.py (Metal kernel), profile_decode.py
(ablation profiler), test_lm_head.py (exactness test).transformers (for the tokenizer)huggingface_hub (for automatic download)This model is released under the same license as the original
yandex/AliceAI-T5-35B-A0.6B
model. Please refer to the original model card for license details.
The original model was created and trained by Yandex. This repository contains only the MLX-quantized weights and the inference runtime. If you use this model, please cite the original work:
@misc{yandex-aliceai-t5,
author = {Yandex},
title = {AliceAI-T5-35B-A0.6B},
year = {2025},
url = {https://huggingface.co/yandex/AliceAI-T5-35B-A0.6B},
}
MLX-квантованная версия AliceAI-T5-35B-A0.6B от Яндекса для
Apple Silicon. Это encoder-decoder модель перевода с архитектурой Mixture-of-Experts
(MoE) T5, имеющая 35B всего параметров (0.6B активных на токен), оптимизированная
для работы на Metal GPU через фреймворк MLX от Apple с использованием слитой
диспетчеризации MoE gather_qmm.
hidden_size * bits / 32 (288 слов для 6 бит)
вместо hidden_size // (32 // bits) (307), что ломало mx.dequantize.| Параметр | Значение |
|---|---|
| Архитектура | Encoder-decoder MoE T5 |
| Всего параметров | 35B |
| Активных параметров на токен | 0.6B |
| Эксперты | 512 (top-8 маршрутизация) |
| Слоёв энкодера | 16 |
| Слоёв декодера | 12 |
| Размер скрытого состояния | 1536 |
| Голов внимания (энкодер) | 12 |
| KV-голов (декодер) | 4 |
| Размерность головы | 128 |
| Размер словаря | 135,040 |
| Промежуточный размер эксперта | 512 |
| Активация | silu |
| Тип RoPE | yarn (YaRN) |
| Исходная макс. позиция RoPE | 9984 |
| Коэффициент масштабирования RoPE | 20.0 |
| Общие эмбеддинги | True |
| Связанные эмбеддинги слов | True |
| Компонент | Режим | Биты | Размер группы |
|---|---|---|---|
| Эксперты | affine | 4 | 64 |
| Внимание | affine | 4 | 64 |
| Эмбеддинги | none | — | — |
Описание: affine 4-bit g64 (experts + attention)
Тестирование на Apple M4 Pro (48 GB unified) с MLX 0.32.0.
| Метрика | Этот вариант (4bit) | Базовый (legacy) |
|---|---|---|
| Пропускная способность (batch 1) | 158.89 ток/с | 18.89 ток/с |
| Пропускная способность (batch 8) | 311.81 ток/с | — |
| Медианная пропускная способность (batch 1) | 159.54 ток/с | 18.56 ток/с |
| Медианная пропускная способность (batch 8) | 299.26 ток/с | — |
| Утилизация GPU (batch 1) | 74.2% | 51.2% |
| Утилизация GPU (batch 8) | 89.6% | — |
| Пиковая утилизация GPU | 100% | 84% |
| Размер модели на диске | 18.30 ГБ | 18.30 ГБ |
| Пиковая память | 19.08 ГБ | 19.87 ГБ |
| Ускорение vs legacy (batch 1) | 8.41x | 1.0x |
| Ускорение vs legacy (batch 8) | 16.5x | 1.0x |
Слитая диспетчеризация MoE gather_qmm устраняет 224 барьера синхронизации
GPU на токен (по одному на каждый эксперт на каждый слой в устаревшей
реализации с плоским циклом). Это обеспечивает ускорение в 8.41x
при batch 1 и до 16.5x при batch 8 по сравнению с базовым
вариантом на numpy-циклах, сохраняя полное численное соответствие с
эталонной схемой квантования.
from aliceai_mlx import load_model, generate, Translator
# Загрузка модели напрямую
model = load_model("path/to/AliceAI-T5-35B-A0.6B-MLX-4bit")
# Или высокоуровневая обёртка Translator
translator = Translator("path/to/AliceAI-T5-35B-A0.6B-MLX-4bit")
# Простой перевод (китайский → русский)
# min_new_tokens по умолчанию 0 для перевода — изменять не нужно
result = translator.translate("沈安瞠目结舌的看着包拯扬长而去。")
print(result)
# Режим профессора: объединение двух вариантов перевода
result = translator.professor(zh_text, ru_teacher, ru_student)
print(result["corrected_text"])
# Пакетный перевод для повышения пропускной способности
results = translator.complete_batch([zh_text_1, zh_text_2, zh_text_3])
# Режим вопросов и ответов — задавайте вопросы на русском
# min_new_tokens=128 предотвращает преждевременную обрезку в квантованных моделях
answer = translator.qa("Что такое энтропия в термодинамике?", min_new_tokens=128)
print(answer)
Запуск интерактивного чата с режимами Q&A, перевода, коррекции и профессора:
# Запуск интерактивного чата в режиме Q&A
python chat.py --model 4bit --task qa
# Доступные режимы: translate, correct, professor, qa, raw
# Поддержка многораундовой истории диалога, слэш-команд и очистки потока
Слэш-команды: /task, /model, /temp, /tokens, /min, /clear,
/info, /help, /quit.
Код выполнения включён: Этот репозиторий содержит Python-пакет
aliceai_mlx,chat.py,requirements.txtиARTICLE.md(подробная техническая статья о процессе конвертации). Клонируйте репозиторий и выполнитеpip install -r requirements.txt, затемpython chat.py --model .для запуска интерактивного чата.
min_new_tokensПараметр min_new_tokens подавляет логит EOS (конец последовательности) для
первых N сгенерированных токенов, предотвращая преждевременную обрезку,
которая возникает в квантованных моделях. Это особенно важно для режима
Q&A, где ответы могут обрываться на середине предложения без этого
параметра.
min_new_tokens=0 (по умолчанию) — перевод даёт
лаконичный результат и не требует принудительного продолжения.min_new_tokens=128 (по умолчанию) — гарантирует, что ответы
будут полными и не обрежутся на середине предложения.min_new_tokens обязателен для режима Q&A — без него квантованные модели
преждевременно генерируют EOS, и ответы обрываются на середине предложения.min_new_tokens в generate_step(), generate(),
complete(), complete_batch() и stream() — подавляет логит EOS для
первых N токенов, предотвращая преждевременную обрезку в квантованных
моделях. По умолчанию 128 для режима Q&A, 0 для перевода.parse_qa_answer() — удаляет
маркеры формата, эхо промпта, повторяющиеся блоки ответов и завершающий
шум из вывода модели.chat.py) с 5 режимами (translate, correct,
professor, qa, raw), многораундовой историей диалога для Q&A, слэш-командами
(/task, /model, /temp, /tokens, /min, /clear, /info, /help,
/quit) и очисткой потока._cut_repetition() в
parse_qa_answer() и parse_corrected() — обнаруживает и удаляет
повторяющиеся блоки ответов, которые квантованные модели генерируют после
принудительного продолжения через min_new_tokens.parse_qa_answer() перед отображением; остальные режимы
используют прямую потоковую передачу для минимальной задержки.parse_qa_answer() — когда
min_new_tokens заставляет модель продолжать после естественного конца
ответа, квантованные модели могут повторять текст шаблона формата
(например, - **Ответ**: [Подробный развёрнутый ответ на вопрос]) вместо
реального содержимого. Такие эхо теперь удаляются в любом месте вывода и
не принимаются за маркеры повторов; висячие завершающие маркеры
(например, одиночный **Объяснение:** в конце) также удаляются._cut_repetition() — 4-битная
модель иногда дословно повторяет вопрос пользователя перед ответом,
отделяя его маркером `Ответ:
. Парсер теперь обнаруживает это (текст перед маркером заканчивается на ?) и отбрасывает эхо вопроса, оставляя только реальный ответ. Цикл обрезки повторов переписан с finditerна циклwhile/search` во избежание устаревших позиций
совпадений после переназначения текста.
_cut_repetition() — 6-битная модель может повторять одну и ту же строку
(например, **Reason**: ...) несколько раз подряд; сохраняется только
первая копия в каждой серии._TRAILING_MARKER_RE для сопоставления английских маркерных
слов (Reason, Alternative, Explanation, Consequences, Answer)
в дополнение к русским, так что висячие завершающие маркеры удаляются на
обоих языках.QA_PROMPT — промпт ранее принуждал
модель отвечать по-русски на вопросы, связанные с китайским языком, что
конфликтовало с запросами пользователя на других языках. Теперь промпт
указывает модели отвечать на языке вопроса или на запрошенном языке._TRAILING_MARKER_RE для языковых заголовков — модель может
писать заголовки разделов вроде ### **Ответ на китайском языке**:, но
не заполнять содержимое. Регулярное выражение теперь сопоставляет шаблоны
Ответ на <язык> языке (с опциональным префиксом заголовка #+), так
что такие висячие заголовки удаляются._ANSWER_RE для сопоставления английского Answer —
удаление ведущего маркера ответа теперь обрабатывает как русское
Ответ, так и английское Answer, так что маркеры - Answer: [текст]
корректно удаляются.- Ответ: без
содержимого), parse_qa_answer() теперь возвращает понятное резервное
сообщение (QA_FALLBACK_MESSAGE) вместо пустой строки. chat.py
показывает это сообщение вместо пустого ответа, а неудачные ответы
больше не попадают в историю диалога._cut_repetition() теперь разбивает вывод на блоки по реальным маркерам
повторов (пропуская эхо формата), отбрасывает блоки-эхо вопросов
(заканчивающиеся на ?), удаляет ведущие маркеры ответа из каждого
блока и сохраняет самый длинный блок без эха вопроса (при равенстве —
самый ранний). Это исправляет склонность 4-битной модели выдавать
короткий первый ответ, за которым после маркера повтора следует более
полный.<SPAN#N> из всех выводов — модель может выдавать
span-токены вроде <SPAN#135> в своём выводе. Теперь они удаляются
регулярным выражением _SPAN_TOKEN_RE в _decode_output(), stream()
и parse_qa_answer(), так что никогда не появляются в итоговом тексте._QUESTION_ECHO_RE
для обнаружения и удаления эхо **Вопрос**: / **Question**:, которые
шаблон промпта может заставить модель воспроизвести. Эхо удаляется от
маркера до конца текста.chat.py — ответы короче 20
символов, резервные сообщения и маркеры из одних скобок больше не
попадают в историю диалога, что предотвращает отравление контекста и
деградацию последующих раундов Q&A.**Исправленный перевод**: (частое явление для
коротких переводов) и выводит перевод напрямую, после которого следует
`Ответ:, метод translate()теперь использует parse_qa_answer()` для удаления висячих маркеров вместо возврата
необработанного вывода.
[Ответ] в квадратных скобках в режиме
Q&A — 6-битная модель в многораундовом Q&A могла вырождаться в вывод
только [Ответ] (плейсхолдер формата со словом "Ответ" вместо
реального содержимого) после нескольких раундов сфабрикованных ответов.
Добавлено регулярное выражение _BRACKET_MARKER_RE для удаления
[Ответ] / [Answer] в любом месте вывода до и после
_cut_repetition(). Обновлены _ANSWER_RE и _REPETITION_ANSWER_RE
строгой альтернацией
(?:\[\s*(?:Ответ|Answer)\s*\]|(?:Ответ|Answer)) для точного
сопоставления маркеров в скобках без ложных срабатываний на ссылки вида
[Ответ на вопрос 1]. Обновлён _TRAILING_MARKER_RE опциональными
скобками.chat.py
(_MAX_HISTORY_TURNS = 2) — когда модель галлюцинирует в ранних раундах
Q&A, сфабрикованные ответы накапливаются в истории и вызывают
прогрессирующую деградацию в последующих раундах. Ограничение истории
последними 2 раундами предотвращает это отравление, сохраняя при этом
контекст диалога.weight.astype(float32) перестраивал
тензор размером 792 МБ на каждый токен.FastLMHead) читает веса в fp16 и накапливает в float32,
сокращая пропускную способность вдвое (396 МБ против 792 МБ на токен).
Самопроверка через mx.matmul перед установкой; откат к кэшированному
mx.matmul, если ядро недоступно.[tgt, tgt], теперь [tgt, offset+tgt]
для учёта KV-кэша).lm_head.py (Metal-ядро), profile_decode.py
(профайлер абляции), test_lm_head.py (тест точности).transformers (для токенизатора)huggingface_hub (для автоматической загрузки)Эта модель распространяется под той же лицензией, что и исходная модель
yandex/AliceAI-T5-35B-A0.6B.
Подробности лицензии см. в карточке оригинальной модели.
Оригинальная модель создана и обучена компанией Яндекс. Этот репозиторий содержит только MLX-квантованные веса и среду выполнения. При использовании этой модели, пожалуйста, цитируйте оригинальную работу:
@misc{yandex-aliceai-t5,
author = {Yandex},
title = {AliceAI-T5-35B-A0.6B},
year = {2025},
url = {https://huggingface.co/yandex/AliceAI-T5-35B-A0.6B},
}