Этот проект поможет вам научить языковую модель говорить в вашем стиле. Всё настроено так, чтобы быть максимально простым. Для опытных пользователей это может показаться слишком простым, но главная цель — лёгкость в использовании. Весь процесс сводится к запуску нескольких .bat файлов.
Представьте, что у вас есть супер-умный робот, который знает почти всё на свете (это Gemma!). Но он говорит очень обобщенно. "Дообучение" — это как дать этому роботу сборник ваших собственных разговоров и сказать: "Эй, учись на этом, чтобы общаться в похожем стиле!"
Вы не учите его новым фактам. Вы учите его новому стилю общения. После этого процесса робот останется таким же умным, но будет звучать немного больше как в примерах, которые вы ему дали.
- prepare_venv.bat - готовит окружение
- download_model.bat - качает базовую модель
- prepare_dataset.bat - готовит датасет
- finetune_gemma.bat - тренирует лору 4.1 check_tensorboard_runs.bat - проверяет прогресс 4.2 Если прервано обучение и надо продолжить - finetune_gemma.bat
- merge_lora.bat - сшивает лору с моделью
- convert_to_gguf.bat - конвертирует и сжимает
Чтобы обучить модель Gemma-3n, вам понадобится мощная видеокарта (GPU) с минимум 24 ГБ видеопамяти (VRAM), например, NVIDIA RTX 3090, 4090 или профессиональная карта A-серии. Использование карты с меньшим объемом памяти будет очень медленным или может вообще не сработать.
- Найдите файлы с историей ваших чатов. Этот скрипт предназначен для работы с файлами в формате JSON, экспортированными с различных платформ.
- Создайте папку с именем
datasetв той же директории, где находятся.batфайлы. - Поместите все ваши
.jsonфайлы с разговорами прямо в папкуdataset.
Как должны выглядеть данные? Скрипты ожидают, что ваши JSON-файлы содержат список сообщений, где каждое сообщение выглядит примерно так:
{
"sender": "User",
"userInput": "Привет, можешь мне помочь?"
},
{
"sender": "Claude",
"claudeOutputText": "Конечно! Чем могу помочь?"
}Так же будут взяты пары "инструкция-ответ" из данных с ключами 'instruction' и 'output'. Либо "User" (это будет инструкция) и следующий за ним ответ от "Claude".
Этот шаг сделает всё за вас! Он загрузит все необходимые инструменты и базовую модель Gemma. Это нужно сделать только один раз.
Дважды щелкните по файлу
prepare_venv.bat.
Подождите, пока он завершится. Он загрузит много файлов, так что это может занять некоторое время в зависимости от вашего интернет-соединения.
Это запустит основной процесс обучения модели вашему стилю общения.
Дважды щелкните по файлу
finetune_gemma.bat.
Этот шаг займет очень много времени — скорее всего, несколько часов, даже на мощном компьютере. Просто дайте ему поработать.
После завершения обучения скрипт автоматически попытается преобразовать модель в её конечный, готовый к использованию формат GGUF.
Если по какой-то причине вам нужно повторно запустить только этот последний шаг, вы можете:
Дважды щелкните по файлу
convert_only.bat.
Когда всё будет готово, вы найдете новый файл в папке output с именем finetuned_gemma.gguf. Это ваша персонализированная модель! Теперь вы можете загрузить этот файл в программы, поддерживающие формат GGUF (например, LM Studio, KoboldCpp и т.д.), и общаться с версией Gemma, которая научилась на ваших разговорах.
This project helps you teach a smart computer brain (a Large Language Model named Gemma) to talk more like you. It's all set up to be as easy as possible. This is designed for simple use, not for power users. It's just a matter of clicking a couple of .bat files to get started!
Imagine you have a super-smart robot that knows almost everything in the world (that's Gemma!). But, it talks in a very general way. "Fine-tuning" is like giving this robot a collection of your own conversations and telling it, "Hey, learn from these so you can chat more like this!"
You are not teaching it new facts. You are teaching it a new style of conversation. After this process, the robot will still be the same smart robot, but it will sound a bit more like the examples you gave it.
To teach (fine-tune) the Gemma-3n model, you need a powerful computer graphics card (a GPU) with at least 24GB of memory (VRAM), like an NVIDIA RTX 3090, 4090, or a professional A-series card. Using a card with less memory will be extremely slow or may not work at all.
- Find your conversation history files. This process is designed to work with JSON files exported from various chat platforms.
- Create a folder named
datasetin the same directory as the.batfiles. - Place all your conversation
.jsonfiles directly inside thedatasetfolder.
How should the data look? The scripts expect your JSON files to contain a list of messages, where each message looks something like this:
{
"sender": "User",
"userInput": "Hey, can you help me with something?"
},
{
"sender": "Claude",
"claudeOutputText": "Of course! What do you need help with?"
}The script looks for messages from a "User" (this will be the instruction) and the "Claude" response that follows it.
This step does everything for you! It will download all the necessary tools and the base Gemma model. You only need to do this once.
Double-click the
prepare_venv.batfile.
Wait for it to finish. It will download a lot of files, so it might take a while depending on your internet connection.
This will start the main process of teaching the model your conversation style.
Double-click the
finetune_gemma.batfile.
This step will take a very long time—likely several hours, even on a powerful computer. Just let it run.
After training finishes, it will automatically try to convert the model into its final, ready-to-use GGUF format.
If for some reason you need to re-run only this final step, you can:
Double-click the
convert_only.batfile.
After everything is done, you will find a new file in the output folder named finetuned_gemma.gguf. This is your personalized model! You can now load this file into programs that support the GGUF format (like LM Studio, KoboldCpp, etc.) and chat with a version of Gemma that has learned from your conversations.
Этот раздел объясняет, как скрипты обрабатывают ваши данные и какие важные изменения были внесены для обеспечения стабильной и эффективной работы.
Скрипт гибко и надёжно обрабатывает вашу историю чатов, превращая её в формат, на котором модель может учиться.
Формат входных данных:
- Скрипт рекурсивно сканирует папку
datasetна наличие.jsonфайлов. - Ожидается, что каждый файл содержит список сообщений, где у каждого есть поля
sender("User"или"Claude"),userInputиclaudeOutputText.
Режимы обработки: Вы можете выбрать один из двух форматов данных для обучения:
-
Формат
instruct(По умолчанию)- Что делает: Создаёт простые пары "инструкция-ответ". Он находит сообщение пользователя и сопоставляет его со следующим ответом модели.
- Зачем использовать: Это прямой и эффективный способ научить модель стилю "вопрос-ответ". Рекомендуется как вариант по умолчанию.
-
Формат
conversational- Что делает: Более продвинутый метод, который создаёт множество обучающих примеров из одного чата, чтобы научить модель естественному течению и контексту разговора. Данные генерируются тремя способами:
- Пары "один на один": Каждое сообщение пользователя сопоставляется с последующим ответом модели.
- Расширяющаяся история: Модели показывают разговор по мере его роста (сначала 2 реплики, потом 4, 6 и т.д.).
- Скользящие окна: Модели показывают небольшие фрагменты диалога фиксированного размера (например, последние 8 реплик).
- Зачем использовать: Этот метод создаёт более разнообразный набор данных, что может помочь модели лучше поддерживать длинный, последовательный разговор.
- Что делает: Более продвинутый метод, который создаёт множество обучающих примеров из одного чата, чтобы научить модель естественному течению и контексту разговора. Данные генерируются тремя способами:
Результат:
Скрипт автоматически разделяет данные на обучающий (95%) и проверочный (5%) наборы, создавая файлы train_dataset.jsonl и eval_dataset.jsonl в папке data.
Основной скрипт дообучения содержит несколько критически важных исправлений, которые обеспечивают стабильный процесс обучения, особенно для чувствительной архитектуры Gemma-3n. Эти проблемы были выявлены и решены, как задокументировано в dev_log.txt.
- Дообучение QLoRA: Используется 4-битная квантизация для значительного сокращения использования памяти, что позволяет дообучать модель на потребительских видеокартах с 24 ГБ VRAM.
- Умное управление чекпоинтами: Специальный скрипт
ManageBestCheckpointsCallbackсохраняет только 2 лучших чекпоинта на основе потерь при валидации, экономя место на диске. - Корректный расчет потерь: В конвейере обработки данных маскируются токены заполнения (padding). Это критически важное исправление, которое не позволяет модели наказываться за предсказание пустого пространства, делая обучение эффективным.
Модель Gemma-3n оказалась нестабильной при стандартном дообучении. Были реализованы следующие патчи для устранения критических ошибок и "взрывных градиентов":
- Ручная деквантизация: Слои
altupиlm_head, которые вызывали сбои, вручную приводятся к полной точностиfloat32. - Заморозка неиспользуемых энкодеров: Визуальные и аудио компоненты модели генерировали бесконечные значения, вызывая ошибки. Эти модули теперь заморожены для обеспечения численной стабильности.
- Оптимизированные аргументы обучения: Конфигурация обучения была тщательно настроена: используется оптимизатор
paged_adamw_32bit, более низкая скорость обучения (5e-6) и плавная схема прогрева (warmup), чтобы избежать проблемы "взрывного градиента".
This section explains how the scripts process your data and what important changes were made for a stable and efficient workflow.
The script is designed to be flexible and robust, processing your chat history into a format the model can learn from.
Input Format:
- The script recursively scans the
datasetfolder for any.jsonfiles. - It expects each file to contain a list of messages, where each message object has a
sender("User"or"Claude"), auserInputfield, and aclaudeOutputTextfield. Alternatively works for pairs ofinstructionиoutput.
Processing Modes: You can choose between two data formats for training:
-
instructFormat (Default)- What it does: Creates simple "instruction-response" pairs. It finds a user's message and pairs it with the model's next reply.
- Why use it: This is a straightforward and effective way to teach the model a direct question-and-answer style. It's the recommended default.
-
conversationalFormat- What it does: This is a more advanced method that creates multiple training examples from a single chat to teach the model the natural flow of a conversation. It generates data in three ways:
- One-on-one Pairs: Every user message is paired with the subsequent model response.
- Expanding History: The model is shown the conversation as it grows (first 2 turns, then 4, 6, etc.).
- Sliding Windows: The model is shown small, fixed-size chunks of the conversation (e.g., the last 8 turns).
- Why use it: This method produces a more diverse dataset, which can lead to a model that is better at holding a coherent, multi-turn conversation.
- What it does: This is a more advanced method that creates multiple training examples from a single chat to teach the model the natural flow of a conversation. It generates data in three ways:
Output:
The script automatically splits your data into a training set (95%) and a validation set (5%), creating train_dataset.jsonl and eval_dataset.jsonl in the data folder.
The main fine-tuning script contains several critical fixes and features to ensure a stable and efficient training process, particularly for the sensitive Gemma-3n architecture. These were identified and solved as documented in the dev_log.txt.
- QLoRA Fine-Tuning: Utilizes 4-bit quantization to drastically reduce memory usage, allowing the Gemma-3n model to be fine-tuned on consumer GPUs with 24GB of VRAM.
- Smart Checkpoint Management: A custom
ManageBestCheckpointsCallbacksaves only the top 2 performing checkpoints based on evaluation loss, saving disk space. - Correct Loss Calculation: The data processing pipeline correctly masks padded tokens. This is a critical fix that prevents the model from being penalized for predicting empty space, ensuring the training is effective.
The Gemma-3n model proved to be unstable under standard QLoRA fine-tuning. The following patches were implemented to solve critical runtime errors and exploding gradients:
- Manual De-quantization: The
altupandlm_headlayers, which were found to cause crashes, are manually cast to fullfloat32precision. - Freezing Unused Encoders: The model's vision and audio components were found to generate infinite values, causing errors. These modules are now frozen to ensure numerical stability.
- Optimized Training Arguments: The training configuration was carefully tuned for stability. It uses the
paged_adamw_32bitoptimizer, a lower learning rate (5e-6), and a gentle warmup schedule to avoid the "exploding gradient" problem.
Для пользователей облачных сервисов (RunPod, Vast.ai) или Linux добавлены специальные скрипты. Они полностью дублируют функционал Windows-версии, но адаптированы под Linux среду.
Файлы:
runpod_setup.sh— Аналогprepare_venv.bat. Устанавливает окружение, компилируетllama.cppс поддержкой CUDA и качает модель.runpod_finetune.sh— Аналогfinetune_gemma.bat. Интерактивное меню для запуска обучения.
Инструкция:
- Загрузите файлы на сервер.
- Дайте права на выполнение:
chmod +x runpod_setup.sh runpod_finetune.sh
- Запустите установку:
./runpod_setup.sh
- Запустите обучение:
./runpod_finetune.sh
For users of cloud services (RunPod, Vast.ai) or Linux, specific scripts have been added. They replicate the Windows workflow but are adapted for the Linux environment.
Files:
runpod_setup.sh— Equivalent toprepare_venv.bat. Sets up the environment, compilesllama.cppwith CUDA support, and downloads the model.runpod_finetune.sh— Equivalent tofinetune_gemma.bat. Interactive menu for starting the training.
Instructions:
- Upload files to the server.
- Grant execution permissions:
chmod +x runpod_setup.sh runpod_finetune.sh
- Run setup:
./runpod_setup.sh
- Run training:
./runpod_finetune.sh