微调-利用MLX在macOS上微调模型
开源大模型很多,但终究还是找不到自己想要或者说适配业务的模型,因此就需要我们自己去进行模型微调。
本篇以开源模型openchat
为例,使用MLX
进行lora
微调。
微调基本步骤如下:
- 下载模型
- 训练数据收集、清洗、整理
- 训练lora
- 测试先后变化
- 导出模型
下载模型
有很多方式可以下载,这里就不限制各位的思维,只提供💡思路和⚠️注意事项。
- 注册
huggingface hub
账号,生成Access Token
. - 使用官方或三方工具下载对应模型(作者使用的是
tune
,仅供参考) - 验证模型是否一致
训练数据准备
数据可以从网上下载,也可内部准备,最终需要将数据格式化为如下形式:
{"prompt":"...","completion":"..."}
当然数据类型还包含其他的格式,具体请到参考文献[5]去查看。
训练模型
准备合适的工作环境,以下列目录结构为例:
.
├── adapters 训练后的模型存放位置
│ ├── adapter_config.json
│ └── adapters.safetensors
├── datasets 训练数据
│ ├── test.jsonl
│ ├── train.jsonl
│ └── valid.jsonl
├── openchat 下载好的模型
│ └── openchat-3.6-8b-20240522
├── requirements.txt
└── venv
训练
# --model - 模型
# --data data - 训练数据
# --batch-size 4 - 批处理次数
# --num-layers 16 - lora 层号
# --iters 50 - 学习迭代次数
python -m mlx_lm.lora \
--model openchat/openchat-3.6-8b-20240522 \
--data data \
--train \
--batch-size 4\
--num-layers 16\
--iters 50
评估测试
训练前
python -m mlx_lm.generate \
--model openchat/openchat-3.6-8b-20240522 \
--max-tokens 500 \
--prompt "List all transactions and customers from the 'Africa' region."
训练后
python -m mlx_lm.generate \
--model openchat/openchat-3.6-8b-20240522 \
--max-tokens 500 \
--prompt "List all transactions and customers from the 'Africa' region." \
--adapter-path adapters
合并模型
# --model - 模型
# --adapter-path adapters - lora适配模型
# --save-path models/effectz-sql - 新模型路径
# --de-quantize - 如需后续转换为GGUF格式的模型请开启此标记
python -m mlx_lm.fuse \
--model mistralai/Mistral-7B-Instruct-v0.2 \
--adapter-path adapters \
--save-path models/effectz-sql \
--de-quantize
构建GGUF
Github上有大佬们研制的llama.cpp
项目,可通过它来实现GGUF的转换,需要请自行钻研。
参考文献
微调-利用MLX在macOS上微调模型
https://blog.cikaros.top/doc/f39e1255.html