微调-利用MLX在macOS上微调模型

开源大模型很多,但终究还是找不到自己想要或者说适配业务的模型,因此就需要我们自己去进行模型微调。

本篇以开源模型openchat为例,使用MLX进行lora微调。

微调基本步骤如下:

  1. 下载模型
  2. 训练数据收集、清洗、整理
  3. 训练lora
  4. 测试先后变化
  5. 导出模型

下载模型

有很多方式可以下载,这里就不限制各位的思维,只提供💡思路和⚠️注意事项。

  1. 注册 huggingface hub 账号,生成Access Token.
  2. 使用官方或三方工具下载对应模型(作者使用的是tune,仅供参考)
  3. 验证模型是否一致

训练数据准备

数据可以从网上下载,也可内部准备,最终需要将数据格式化为如下形式:

{"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
作者
Cikaros
发布于
2024年10月9日
许可协议