1 июля 2025 г. • Авторы: Daniel и Michael
1 июля 2025 г.
Авторы: Daniel и Michael
Gemma 3n — это новые мультимодальные (текст, зрение и аудио) модели от Google. Модели Gemma 3n, доступные в размерах 2B и 4B, имеют контекстное окно 32K, поддерживают несколько языков и теперь поддерживаются в Unsloth.
- Выполните тонкую настройку Gemma-3n-E2B бесплатно, используя наш блокнот Colab.
- Unsloth — единственный фреймворк, поддерживающий инференс и обучение Gemma 3n на графических процессорах с поддержкой f16.
- Мы загрузили все версии Gemma 3n, включая динамические GGUF, 4-битные и 16-битные версии, на Hugging Face здесь. В настоящее время GGUF поддерживают только текст.
- Ознакомьтесь с нашим подробным руководством о том, как запускать и настраивать Gemma 3n, здесь.
Огромное спасибо команде Gemma за поддержку! Также было замечательно встретиться со всеми вами на нашем митапе разработчиков Gemma с Google!
✨Исправления Gemma 3n
♾️Бесконечности, NaN-градиенты и активации
Gemma 3n, как и Gemma 3, имеет проблемы при работе на графических процессорах FP16 (например, Tesla T4 в Colab). Для Gemma 3 мы обнаружили, что активации превышают максимальный диапазон float16, равный 65504. В Gemma 3N проблема с активацией была устранена, но мы все равно столкнулись с бесконечностями!
Вместо этого мы построили график абсолютных максимальных значений весов для Gemma 3N, и вот что мы увидели:
Ниже приведена таблица для весов Conv2D, которые имеют большие значения. По сути, во время операции Conv2D большие веса перемножаются и суммируются, и, к сожалению, превышают максимальный диапазон float16, равный 65504. Bfloat16 подходит, так как его максимальный диапазон составляет 10^38.
Решение состоит в том, чтобы привести все веса Conv2D к типу float32 на машинах с float16! Но это потребляет больше видеопамяти, поэтому мы используем автокастинг для приведения весов и входных матриц к float32 «на лету» и выполняем накопление в float32.
Unsloth — единственный фреймворк, который позволяет выполнять инференс и обучение Gemma 3n на графических процессорах float16, поэтому блокноты Colab с бесплатными Tesla T4 работают!
🏁Проблемы с градиентным чекпоинтингом
Мы обнаружили, что визуальный энкодер Gemma 3N уникален, так как он повторно использует скрытые состояния. К сожалению, это ограничивает использование градиентного чекпоинтинга, поэтому потребление памяти немного выше обычного. Однако нам все же удалось использовать автоматический компилятор Unsloth для оптимизации Gemma 3N!
🦙 Проблемы с GGUF + исправления:
Благодаря обсуждениям с командой Ollama, а также с Нгуеном из Hugging Face, были выявлены 2 проблемы, специфичные для GGUF:
1. Параметр add_shared_kv_layers был случайно закодирован в float32, что допустимо, но его сложно декодировать со стороны Ollama — простое изменение на uint32 решает проблему. 2. Параметр per_layer_token_embd должен иметь точность Q8_0. Любое значение ниже, по-видимому, работает некорректно и вызывает ошибки в движке Ollama — чтобы уменьшить количество проблем для нашего сообщества, мы сделали все значения Q8_0 во всех квантованиях — к сожалению, это занимает больше места.
В качестве обновления Мэтт упомянул, что мы также можем использовать Q4_0, Q4_1, Q5_0, Q5_1 для эмбеддингов — и мы подтвердили, что это также может работать в Ollama! Это означает, что меньшие 2-, 3- и 4-битные квантования снова стали меньше по размеру и не требуют Q8_0!
🌵 Большие потери во время тонкой настройки:
Мы также обнаружили, что потери (losses) во время тонкой настройки удивительно велики — в диапазоне от 6 до 7, но они быстро уменьшаются с течением времени. Мы предполагаем, что это связано с одной из двух возможностей:
1. Возможно, есть какая-то проблема с реализацией, но это маловероятно, так как инференс, похоже, работает хорошо. 2. Мультимодальные модели всегда демонстрируют такое поведение — мы обнаружили, что потери Llama 3.2 Vision начинаются с 3 или 4, Pixtral — примерно с 8, а Qwen 2.5 VL — примерно с 4. Поскольку Gemma 3N также включает аудио, это может усиливать начальные потери. Но это лишь гипотеза. Мы также обнаружили, что квантование Qwen 2.5 VL 72B Instruct дает чрезвычайно высокие показатели перплексии (около 30), но модель, похоже, работает нормально.
✨Тонкая настройка Gemma 3n
Gemma 3n, как и Gemma 3, имела проблемы при работе на графических процессорах F16, таких как Tesla T4 в Colab. По сути, вы получите NaN и бесконечности, если не исправите это для инференса или тонкой настройки.
Мы обнаружили, что простое обходное решение заключается в приведении всех сверточных слоев в визуальном энкодере к float32, что увеличило использование видеопамяти. Чтобы уменьшить потребление памяти, мы просто использовали автокастинг, который оставил сверточные слои в float16 и приводил к float32 только во время самого матричного умножения.
Поскольку уникальная архитектура Gemma 3n повторно использует скрытые состояния в визуальном энкодере, алгоритм градиентного чекпоинтинга Unsloth (который значительно снижает использование видеопамяти) не может быть применен к визуальному энкодеру, однако мы все равно применили наши автоматические оптимизации компилятора.
Unsloth — единственный фреймворк, который работает на машинах с float16 для инференса и обучения Gemma 3n. Это означает, что блокноты Colab с бесплатными графическими процессорами Tesla T4 также работают!
Мы также услышали, что многие из вас просят блокноты для Gemma 3 (4B) Vision, поэтому вы можете попробовать их прямо сейчас в нашем бесплатном блокноте Google Colab здесь.
Показатели производительности
Модель
Видеопамять
Скорость Unsloth
Снижение видеопамяти
Более длинный контекст
Hugging Face + FA2
Gemma-3n-E4B
24 ГБ
1.5x
>50%
в 5 раз длиннее
Мы проводили тестирование с использованием набора данных Alpaca, размера пакета 2, шагов накопления градиента 4, ранга = 32, и применили QLoRA ко всем линейным слоям (q, k, v, o, gate, up, down).
🔮 Анализ Gemma 3n
Вот подробный анализ архитектуры MatFormer для Gemma 3n: Итак, что же такого особенного в Gemma 3n, спросите вы? Она основана на архитектуре Matryoshka Transformer или MatFormer, что означает, что каждый слой/блок трансформера встраивает/вкладывает FFN все меньшего и меньшего размера. Представьте это как постепенно уменьшающиеся чашки, вставленные одна в другую. Обучение проводится так, чтобы во время инференса вы могли выбрать нужный размер и получить максимальную производительность от более крупных моделей.
Существует также послойное встраивание (Per Layer Embedding), которое можно кэшировать для уменьшения использования памяти во время инференса. Таким образом, модель 2B (E2B) — это подсеть внутри модели 4B (также известной как 5.44B), которая достигается как за счет кэширования послойных эмбеддингов, так и за счет пропуска аудио- и визуальных компонентов, фокусируясь исключительно на тексте.
Архитектура MatFormer обычно обучается с экспоненциально распределенными подмоделями, то есть размерами S, S/2, S/4, S/8 и т. д. в каждом из слоев. Поэтому во время обучения входные данные случайным образом передаются через один из указанных подблоков, давая каждому подблоку равный шанс на обучение. Преимущество заключается в том, что во время инференса, если вы хотите, чтобы модель была в 1/4 от исходного размера, вы можете выбрать подблоки размера S/4 в каждом слое.
Вы также можете комбинировать их, выбирая, скажем, подблок размера S/4 для одного слоя, подблок размера S/2 для другого и подблок размера S/8 для третьего. На самом деле, вы можете менять выбранные подмодели в зависимости от самих входных данных, если хотите. По сути, это похоже на выбор собственной структуры на каждом слое. Таким образом, просто обучая модель одного конкретного размера, вы создаете экспоненциально большое количество моделей меньших размеров. Никакое обучение не пропадает даром. Довольно круто, правда?
💕 Спасибо!
Огромное спасибо команде Google Gemma за то, что позволили нам обеспечить поддержку с первого дня. Также спасибо всем, кто использует и распространяет Unsloth — мы очень это ценим. 🙏
Как всегда, обязательно присоединяйтесь к нашей странице в Reddit и серверу Discord для получения помощи или просто чтобы выразить свою поддержку! Вы также можете подписаться на нас в Twitter и присоединиться к нашей рассылке.
Спасибо за прочтение!
Даниэль и Майкл Хан 🦥1 июл. 2025 г.
