mrsaynothing.dev
GGUF против safetensors — решает среда выполнения, а не формат

> GGUF против safetensors — решает среда выполнения, а не формат▋

Одна модель в трёх контейнерах: 397 MB GGUF Q4_K_M, 1.20 GB GGUF BF16, 1.50 GB safetensors BF16. Байты — честные числа открытых данных, решает среда выполнения.

mrsaynothing· 14 октября 2026 г.· 5 мин чтения последняя проверка 2026-10-14

DuckDuckGo автодополняет gguf vs safetensors так, будто это клеточный бой двух файловых расширений. Это проверка на входе. Выбираете GGUF — открывается одна полка сред выполнения: llama.cpp, Ollama, LM Studio, Jan. Выбираете safetensors — открывается другая: transformers, vLLM, ComfyUI. Формат — это список дверей, которые откроются; всё остальное следует за ним. Ложь, которую этот текст отказывается повторять: будто бой решают числа скорости, которые никто не воспроизводил на одной и той же машине. Что открытые данные дают бесплатно — и что большинство аргументов пропускает — так это вес каждого контейнера и то, где его вообще можно открыть.

Между чем вы вообще выбираете?

GGUF — однофайловый контейнер от авторов llama.cpp, и квантование запечено в него потензорно — лестница квантования, о которой спорят все, существует только внутри этого формата. Один файл несёт веса, токенизатор и шаблон чата: файл и есть дистрибутив. Safetensors — контейнер сериализации: JSON-заголовок плюс сырые байты тензоров — и он несёт ту точность, с которой её отгрузил репозиторий обучения, обычно BF16 или FP16. Он не квантует; он хранит.

Safetensors назван в честь своей единственной задачи: чтобы при загрузке модели никто не оказался засолен pickle'ом. Pickle в Python исполняет код при распаковке; safetensors не исполняет ничего — в этом весь аргумент безопасности, и потому экосистема Hugging Face сделала его стандартом.

Взвесьте одну и ту же модель в каждом контейнере — и философии видны в байтах. 14 октября 2026 один и тот же Qwen3-0.6B отгружался как: GGUF Q4_K_M — 396,705,472 байта (397 MB) · GGUF BF16 — 1,198,182,848 байта (1.20 GB) · safetensors BF16 — 1,503,300,328 байта (1.50 GB). Квантованный контейнер держит четверть полноточного, потому что держит четверть точности — и каждое из этих чисел в одном curl -I от вашего терминала, без стендового хозяйства. Теряет ли недостающая точность качество — вопрос верности, на который байты не отвечают; статья об уровнях квантования разбирает, что отдаёт каждая ступень.

Формат — не предпочтение. Это список сред выполнения, которые откроют ваш файл.

Что говорят байты?

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

КонтейнерТочностьБайт отгруженоДоля от полноточного
GGUF Q4_K_Mквантование 4 бита396,705,472 (397 MB)26%
GGUF BF16полная, упаковка llama.cpp1,198,182,848 (1.20 GB)80%
safetensors BF16полная, сырые тензоры1,503,300,328 (1.50 GB)100%

проверка: curl -sIL https://huggingface.co/unsloth/Qwen3-0.6B-GGUF/resolve/main/Qwen3-0.6B-Q4_K_M.gguf | grep -i content-length → число байт, в тот же день или в любой · та же команда против файлов BF16 и safetensors

Читайте таблицу честно. 26% — вся обещанная лестницей квантования сила: четыре бита там, где было шестнадцать, на диске и в ОЗУ. Разрыв между двумя полноточными строками — 1.20 против 1.50 GB — это накладные расходы упаковки, не физика: BF16-упаковка llama.cpp хранит те же тензоры стройнее сырого дампа. Чего байты сказать не могут — скорость и качество; колонка tokens-per-second без выровненной машины за ней — форумный шум, и этот текст отказывается её печатать. Разбор llama.cpp против Ollama ударился о ту же стену с другой стороны — со стороны движка: тот же файл, та же математика, другая обёртка.

Чего открытые данные сказать не могут

Три стены, сказанные прямо. Первая: качество — Q4 против BF16 — компромисс верности, и никакое число байт его не меряет. Вторая: скорость — времена загрузки и токены в секунду принадлежат выровненному бенчу на названной машине, которого у этого текста нет, потому он не печатает ничего. Третья: масштаб — байтовые пропорции модели 0.6B сохраняют форму и на 70B, но абсолютные ожидания, которые вы почувствуете на 70B, — другая статья на другом железе.

Где каждый формат реально запускается?

Вот часть, которая решает на самом деле. GGUF открывается в llama.cpp, Ollama, LM Studio, Jan — однофайловая локальная экосистема. vLLM тоже читает GGUF — через плагин, на GPU, с оговорками. Safetensors открывается в transformers, в vLLM нативно, в ComfyUI и MLX-инструментарии Apple. Пересечение на краях показательно: Ollama — бытовой прибор, построенный на движке GGUF, — всё равно возит MLX-runner, чтобы пользователи Apple Silicon грузили веса, производные от safetensors. Даже прибор страхуется.

У вас уже работаетФормат выберется самПочему
Ollama, LM Studio или llama-serverGGUFИх движки едят GGUF нативно; квантованные файлы влезают на малые диски
Python/transformers-пайплайнsafetensorsfrom_pretrained — родной путь; нет шага конверсии в обслуживании
vLLM на GPU-сервереsafetensorsНативно, без плагина, без оговорок GGUF — сами оговорки GGUF
ComfyUI или пайплайн картинокsafetensorsДиффузионная экосистема торгует чекпойнтами safetensors
Малый диск и малая машинаGGUF Q4_K_M397 MB против 1.50 GB за те же веса

GGUF делает квантование дефолтом; safetensors делает дефолтом полную точность. Этот дефолт — большая часть решения.

Какой из них запускать у себя?

Проверьте, что уже установлено, прежде чем сверяться с любой таблицей. Если машина отзывается на ollama run, вы живёте в стране GGUF — берите файл Q4_K_M и перестаньте читать форумы. Если ваш день — Python или ваш сервировочный слой — vLLM, safetensors никогда и не был выбором; это родной язык экосистемы. Конвертация между ними возможна и почти никогда не стоит того: каждая конвертация — новое место, где веса могут тихо разойтись.

Обязательная строка честности, по-домашнему: Я прочитал открытые данные, а не прогонял их. Каждое число на этой странице — из файлов как отгружено, снято утром выхода поста — без стендового хозяйства, без косплей tokens-per-second. Что открытые данные всё же устанавливают — форму размена: четверть байтов у квантованного контейнера, две среды выполнения, почти не пересекающиеся, и дефолтная точность по обе стороны, которая тихо решает за большинство. Весь кластер — раннеры, форматы, уровни квантования, всё — проиндексирован в хабе local-LLM.

Никто никогда не менял формат ради скорости. Меняли среду выполнения ради фичи, а формат приезжал вместе с ней, как билет.

Итак, два вопроса обратно через стену: какой формат реально открывает ваша ежедневная машина — и как выглядел бы честный бенч этих трёх контейнеров на вашем железе? Назовите машину и модель в комментариях; лучше всех описанная задаст спецификацию следующего материала.

$ Следующий аргумент — на почту

Одно письмо на пост. Согласиться или разобрать.

self-hosted · никаких третьих сторон · отписка в один клик

Одно письмо, еженедельная сводка. Ноль пикселей.

что это?