Финна настройка на модела Google's Gemma-3-4B-IT с MLX_LM и подготовката му за Ollama

Финното настройване на големи езикови модели (LLMs) става все по-достъпно благодарение на инструменти като MLX-LM, който е оптимизиран за Apple Silicon. В тази статия ще направим финна настройка на базовия модел Google Gemma-3-4B-IT с помощта на персонализиран датасет, сливане на адаптерите и конвертиране на резултата във формат GGUF за използване с Ollama.


Ще разгледаме основните стъпки: изтегляне на базовия модел, финна настройка, сливане, работа с токенайзера, конвертиране към GGUF и конфигуриране на Modelfile за Ollama. Предварителните условия включват Mac от M-серията, инсталиран MLX_LM, регистрация в Hugging Face и Llama.cpp за етапа на конвертиране. Да започваме!


Стъпка 1: Изтегляне на базовия модел от Hugging Face


Преди да можете да настроите модела, трябва да изтеглите базовия Google Gemma-3-4B-IT модел от Hugging Face. Имайте предвид, че Gemma моделите са с ограничен достъп, което означава, че трябва да приемете лицензионните условия на страницата на модела (https://huggingface.co/google/gemma-3-4b-it) и да имате одобрен акаунт. След одобрение ще ви трябва Hugging Face access token за да можете да изтеглите модела.


Първо се уверете, че имате Homebrew, инсталиран на macOS (ако не — инсталирайте го от https://brew.sh/). След това инсталирайте Hugging Face CLI чрез Homebrew:


brew install huggingface-cli


За да получите вашият access token:

  1. Отидете на https://huggingface.co/ и се регистрирайте, ако нямате акаунт.
  2. Отидете в настройките на профила си чрез аватара горе вдясно.
  3. От менюто изберете „Access Tokens“.
  4. Натиснете „New token“, задайте име, изберете подходящите права (напр. „read“ за изтегляне), и копирайте токен-а. Ако искате и да качите вашият фино настроен модел по-късно, изберете „write“.


След това влезте чрез CLI:


huggingface-cli login


Поставете токен-а.

Сега изтеглете модела:


huggingface-cli download google/gemma-3-4b-it --local-dir gemma-3-4b-it


Това ще запази файловете в директория gemma-3-4b-it. Ако пропуснете тази стъпка, MLX_LM автоматично ще изтегли модела в кеша (~/.cache/huggingface/hub), когато стартирате командата за фина настройка. Но ръчното изтегляне ви дава възможност да проверите файловете предварително.


Стъпка 2: Подготовка на датасета


За да настроите модела, ви трябва датасет. Има три различни типа формати, които mlx поддържа, и след тестване на всички, открих, че най-добри резултати получавам с формата completion, например:


{"prompt": "What is the capital of France?", "completion": "Paris."}


За да получите смислени резултати, ще са ви нужни 50 или повече такива примери в train.jsonl. Важно е файлът да е във формат JSONL, а не JSON — всеки обект е на нов ред, без запетаи между тях. Нужен е и файл valid.jsonl със същите типове записи. Обикновено 80% от данните отиват в train.jsonl, а 20% — в valid.jsonl.


Стъпка 3: Фина настройка на модела


След като имате базовия модел, можете да го настроите по вашите данни. В примера използваме Google Gemma-3-4B-IT и датасет-а в папка ./data. MLX_LM използва LoRA (Low-Rank Adaptation), което прави процеса ефективен, без да се обучава целият модел.


Стартирайте със:


mlx_lm.lora --model google/gemma-3-4b-it --train --data ./data --batch-size 4 --iters 100


* --model: Моделът в Hugging Face или локален път.

* --train: Активира режим обучение.

* --data: Път до датасета.

* --batch-size 4: За контрол на паметта.

* --iters 100: Брой итерации — настройте според нуждите.


Ще бъдат генерирани адаптери в директория adapters. Следете метриките за загуба (loss).


Стъпка 4: Сливане на адаптерите с базовия модел


След обучението, слейте адаптерите с базовия модел, за да получите единен, настроен модел:


mlx_lm.fuse --model google/gemma-3-4b-it --save-path gemma-3-4b-it-ft --adapter-path adapters --de-quantize


* --save-path: Къде да се запази крайният модел.

* --adapter-path: Път към адаптерите.

* --de-quantize: Осигурява пълна прецизност — полезно за конвертиране.


Стъпка 5: Копиране на токенайзера


Тази стъпка не беше необходима за настройка на Оllama модели като  Llama-3.2-3B-Instruct.


MLX_LM не включва автоматично токенайзера в крайния модел. Трябва да го копирате ръчно от кеша.

Намерете токенайзера (заменете <commit hash>):


cp ~/.cache/huggingface/hub/models--google--gemma-3-4b-it/snapshots/<commit hash>/tokenizer.model gemma-3-4b-it-ft


Това гарантира коректна обработка.


Стъпка 6: Конвертиране към GGUF


За работа с Ollama трябва да конвертирате модела във формат GGUF (поддържан от Llama.cpp и Ollama).

В директорията на Llama.cpp изпълнете:


python convert_hf_to_gguf.py path-to-your-project/gemma-3-4b-it-ft --outfile path-to-your-project/gguf/<name your model>.gguf --outtype f16


* Пътят към крайния модел.

* --outfile: Място за GGUF файла.

* --outtype f16: Баланс между размер и производителност.


Стъпка 7: Създаване на Modelfile и стартиране в Ollama


Създайте файл Modelfile със съдържание:


FROM ./gguf/<name of you model>.gguf


TEMPLATE """{{ .System }}

{{ .Prompt }}

{{ .Response }}"""


PARAMETER num_ctx 2048

PARAMETER temperature 0.7


За създаване и стартиране:


ollama create my-fine-tuned-gemma -f Modelfile

ollama run my-fine-tuned-gemma


Вече можете да взаимодействате с вашия фино настроен модел чрез UI, CLI или API на Ollama!


Заключение


Фината настройка с MLX_LM е мощен начин да адаптирате модели като Gemma-3-4B-IT към вашите данни, а интеграцията с Ollama улеснява внедряването. Процесът ми отне само няколко часа на Mac M3, но резултатите зависят от хардуера и датасета. Експериментирайте с хиперпараметрите и задължително проверявайте за пристрастия или халюцинации след настройката.


Ако срещнете проблеми, прегледайте документацията на MLX_LM или GitHub репото на Llama.cpp. Успех! 🚀


Ресурси


Llama.cpp

MLX-LM

HuggingFace

JSONL

Коментари

Популярни публикации от този блог

Поддръжка и настройка на хидрофор

Родопски диалектни думи

Памук заседнал в ухото