AliceAI-T5-35B-A0.6B-MLX-6bit

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.


Model Card

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

Quantization Configuration

Component Mode Bits Group size
Experts affine 6 64
Attention affine 6 64
Embeddings none

Description: affine 6-bit g64 (experts + attention)

Performance

Benchmarked on Apple M4 Pro (48 GB unified) with MLX 0.32.0.

Metric This variant (6bit) Legacy baseline
Throughput (batch 1) 159.85 tok/s 18.89 tok/s
Throughput (batch 8) 332.29 tok/s
Median throughput (batch 1) 159.19 tok/s 18.56 tok/s
Median throughput (batch 8) 315.63 tok/s
GPU utilization (batch 1) 73.1% 51.2%
GPU utilization (batch 8) 89.2%
Peak GPU utilization 100% 84%
Model size on disk 26.25 GB 18.30 GB
Peak memory 27.03 GB 19.87 GB
Speedup vs legacy (batch 1) 8.46x 1.0x
Speedup vs legacy (batch 8) 17.59x 1.0x

Key Finding

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.46x speedup at batch 1 and up to 17.59x at batch 8 compared to the legacy numpy-loop baseline, while maintaining full numerical parity with the reference quantization scheme.

Usage

from aliceai_mlx import load_model, generate, Translator

# Load the model directly
model = load_model("path/to/AliceAI-T5-35B-A0.6B-MLX-6bit")

# Or use the high-level Translator wrapper
translator = Translator("path/to/AliceAI-T5-35B-A0.6B-MLX-6bit")

# 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)

Interactive Chat

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_mlx Python package, chat.py, requirements.txt, and ARTICLE.md (a detailed technical article about the conversion process). Clone the repo and run pip install -r requirements.txt, then python chat.py --model . to start the interactive chat.

min_new_tokens Parameter

The 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.

  • Translation mode: min_new_tokens=0 (default) — translation produces concise output and does not need forced continuation.
  • Q&A mode: min_new_tokens=128 (default) — ensures answers are complete and not truncated mid-sentence.

Known Limitations

  • 6-bit variant has lower Q&A quality than 4-bit: answers tend to be shorter and exhibit more repetition.
  • MXFP4 variant suffers from repetition degeneration — it loops on approximately 10% of paragraphs and is not recommended for production use. Use 4bit or 6bit instead.
  • min_new_tokens is required for Q&A mode — without it, quantized models emit EOS prematurely and answers truncate mid-sentence.
  • Translation mode may truncate on longer inputs in quantized variants; consider splitting very long source texts into shorter segments.
  • Chinese-language Q&A output is unreliable — quantized models cannot reliably generate Chinese text in Q&A mode. The 6-bit model degenerates into empty marker loops; the 4-bit model produces garbled characters. The model is primarily trained for Chinese→Russian translation, not multilingual Q&A. Russian Q&A works well.

Changelog

  • Added 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.
  • Added Q&A mode with parse_qa_answer() cleanup — strips format-spec markers, echoes of the prompt format, repeated answer blocks, and trailing noise from the model output.
  • Added interactive chat (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.
  • Added repetition cutting via _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.
  • Added stream cleanup for Q&A mode — stream output is buffered and cleaned via parse_qa_answer() before display; other modes use raw streaming for low latency.
  • Fixed format-spec echo handling in 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.
  • Fixed question-echo handling in _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.

  • Added consecutive-duplicate-line deduplication in _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.
  • Extended _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.
  • Removed language constraint from 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.
  • Extended _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.
  • Extended _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.
  • Added Q&A fallback message — when the model degenerates into empty answer markers (e.g. 28+ bare - Ответ: 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.
  • Smart repetition cut keeps the best answer block_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.
  • Stripped <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.
  • Stripped question echoes from Q&A output — added _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.
  • Added history quality guard in 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.
  • Fixed trailing markers in translation mode — when the model skips the **Исправленный перевод**: 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.

  • Fixed bare [Ответ] 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.
  • Limited conversation history to 2 turns in 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.

Phase 29 — LM head optimization (2.2× decode speedup)

  • Problem: The tied LM head classifier (135040×1536) consumed 68% of decode-step time because weight.astype(float32) rebuilt a 792 MB tensor on every token.
  • Fix 1: Cache the float32 cast — bit-identical to per-step casting, 1.7× speedup.
  • Fix 2: Custom Metal matvec kernel (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.
  • Fix 3: Corrected causal mask for multi-token decode (was square [tgt, tgt], now [tgt, offset+tgt] to account for KV cache).
  • Result: 6-bit batch-1 throughput 73.6 → 159.9 tok/s (2.17×), 4-bit batch-1 72.7 → 158.9 tok/s (2.19×). All greedy outputs bit-identical (10/10 paragraphs).
  • New files: lm_head.py (Metal kernel), profile_decode.py (ablation profiler), test_lm_head.py (exactness test).

Requirements

  • MLX 0.32.0 or later
  • Apple Silicon (M1, M2, M3, M4 family)
  • macOS 14.0 (Sonoma) or later
  • Unified memory: ≥27 GB recommended
  • Python 3.10+
  • transformers (for the tokenizer)
  • huggingface_hub (for automatic download)

License

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.

Citation / Credit

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.


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

Параметр Значение
Архитектура 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 6 64
Внимание affine 6 64
Эмбеддинги none

Описание: affine 6-bit g64 (experts + attention)

Производительность

Тестирование на Apple M4 Pro (48 GB unified) с MLX 0.32.0.

Метрика Этот вариант (6bit) Базовый (legacy)
Пропускная способность (batch 1) 159.85 ток/с 18.89 ток/с
Пропускная способность (batch 8) 332.29 ток/с
Медианная пропускная способность (batch 1) 159.19 ток/с 18.56 ток/с
Медианная пропускная способность (batch 8) 315.63 ток/с
Утилизация GPU (batch 1) 73.1% 51.2%
Утилизация GPU (batch 8) 89.2%
Пиковая утилизация GPU 100% 84%
Размер модели на диске 26.25 ГБ 18.30 ГБ
Пиковая память 27.03 ГБ 19.87 ГБ
Ускорение vs legacy (batch 1) 8.46x 1.0x
Ускорение vs legacy (batch 8) 17.59x 1.0x

Ключевой результат

Слитая диспетчеризация MoE gather_qmm устраняет 224 барьера синхронизации GPU на токен (по одному на каждый эксперт на каждый слой в устаревшей реализации с плоским циклом). Это обеспечивает ускорение в 8.46x при batch 1 и до 17.59x при batch 8 по сравнению с базовым вариантом на numpy-циклах, сохраняя полное численное соответствие с эталонной схемой квантования.

Использование

from aliceai_mlx import load_model, generate, Translator

# Загрузка модели напрямую
model = load_model("path/to/AliceAI-T5-35B-A0.6B-MLX-6bit")

# Или высокоуровневая обёртка Translator
translator = Translator("path/to/AliceAI-T5-35B-A0.6B-MLX-6bit")

# Простой перевод (китайский → русский)
# 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 (по умолчанию) — перевод даёт лаконичный результат и не требует принудительного продолжения.
  • Режим Q&A: min_new_tokens=128 (по умолчанию) — гарантирует, что ответы будут полными и не обрежутся на середине предложения.

Известные ограничения

  • 6-битный вариант имеет более низкое качество Q&A, чем 4-битный: ответы склонны быть короче и содержать больше повторов.
  • MXFP4 вариант страдает от деградации повторами — зацикливается примерно на 10% абзацев и не рекомендуется для производственного использования. Используйте 4bit или 6bit.
  • min_new_tokens обязателен для режима Q&A — без него квантованные модели преждевременно генерируют EOS, и ответы обрываются на середине предложения.
  • Режим перевода может обрезать длинные входные тексты в квантованных вариантах; рекомендуется разбивать очень длинные исходные тексты на более короткие сегменты.
  • Ответы на китайском языке в режиме Q&A ненадёжны — квантованные модели не могут надёжно генерировать китайский текст в режиме Q&A. 6-битная модель деградирует в пустые циклы маркеров; 4-битная модель выдаёт искажённые символы. Модель в первую очередь обучена для перевода китайский→русский, а не для многоязычного Q&A. Q&A на русском работает корректно.

История изменений

  • Добавлен параметр min_new_tokens в generate_step(), generate(), complete(), complete_batch() и stream() — подавляет логит EOS для первых N токенов, предотвращая преждевременную обрезку в квантованных моделях. По умолчанию 128 для режима Q&A, 0 для перевода.
  • Добавлен режим Q&A с очисткой через 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.
  • Добавлена очистка потока для режима Q&A — потоковый вывод буферизуется и очищается через 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: [текст] корректно удаляются.
  • Добавлено резервное сообщение в Q&A — когда модель вырождается в пустые маркеры ответа (например, 28+ пустых строк - Ответ: без содержимого), parse_qa_answer() теперь возвращает понятное резервное сообщение (QA_FALLBACK_MESSAGE) вместо пустой строки. chat.py показывает это сообщение вместо пустого ответа, а неудачные ответы больше не попадают в историю диалога.
  • Умная обрезка повторов сохраняет лучший блок ответа — правило 1 _cut_repetition() теперь разбивает вывод на блоки по реальным маркерам повторов (пропуская эхо формата), отбрасывает блоки-эхо вопросов (заканчивающиеся на ?), удаляет ведущие маркеры ответа из каждого блока и сохраняет самый длинный блок без эха вопроса (при равенстве — самый ранний). Это исправляет склонность 4-битной модели выдавать короткий первый ответ, за которым после маркера повтора следует более полный.
  • Удалены токены <SPAN#N> из всех выводов — модель может выдавать span-токены вроде <SPAN#135> в своём выводе. Теперь они удаляются регулярным выражением _SPAN_TOKEN_RE в _decode_output(), stream() и parse_qa_answer(), так что никогда не появляются в итоговом тексте.
  • Удалены эхо вопросов из вывода Q&A — добавлено _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 опциональными скобками.
  • Ограничение истории диалога до 2 раундов в chat.py (_MAX_HISTORY_TURNS = 2) — когда модель галлюцинирует в ранних раундах Q&A, сфабрикованные ответы накапливаются в истории и вызывают прогрессирующую деградацию в последующих раундах. Ограничение истории последними 2 раундами предотвращает это отравление, сохраняя при этом контекст диалога.

Фаза 29 — Оптимизация LM head (ускорение декодирования в 2.2×)

  • Проблема: Связанный классификатор LM head (135040×1536) занимал 68% времени шага декодирования, так как weight.astype(float32) перестраивал тензор размером 792 МБ на каждый токен.
  • Исправление 1: Кэширование приведения к float32 — побитово идентично приведению на каждом шаге, ускорение в 1.7×.
  • Исправление 2: Пользовательское Metal-ядро матрично-векторного умножения (FastLMHead) читает веса в fp16 и накапливает в float32, сокращая пропускную способность вдвое (396 МБ против 792 МБ на токен). Самопроверка через mx.matmul перед установкой; откат к кэшированному mx.matmul, если ядро недоступно.
  • Исправление 3: Исправлена причинная маска для многосимвольного декодирования (была квадратной [tgt, tgt], теперь [tgt, offset+tgt] для учёта KV-кэша).
  • Результат: Пропускная способность 6-bit batch-1 73.6 → 159.9 ток/с (2.17×), 4-bit batch-1 72.7 → 158.9 ток/с (2.19×). Все жадные выводы побитово идентичны (10/10 абзацев).
  • Новые файлы: lm_head.py (Metal-ядро), profile_decode.py (профайлер абляции), test_lm_head.py (тест точности).

Системные требования

  • MLX 0.32.0 или новее
  • Apple Silicon (M1, M2, M3, M4)
  • macOS 14.0 (Sonoma) или новее
  • Единая память: ≥27 ГБ рекомендуется
  • Python 3.10+
  • 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},
}
Downloads last month
139
Safetensors
Model size
34B params
Tensor type
F16
·
U32
·
MLX
Hardware compatibility
Log In to add your hardware

Quantized

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Hosstia/AliceAI-T5-35B-A0.6B-MLX-6bit

Finetuned
(4)
this model