Финното настройване на големи езикови модели (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:
- Отидете на https://huggingface.co/ и се регистрирайте, ако нямате акаунт.
- Отидете в настройките на профила си чрез аватара горе вдясно.
- От менюто изберете „Access Tokens“.
- Натиснете „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. Успех! 🚀
Коментари