| #!/usr/bin/env bash |
| |
| |
|
|
| set -euo pipefail |
|
|
| MODEL="mlx-community/Ornith-1.0-9B-4bit" |
| DATA_DIR="$HOME/mlx-finetuning/ornith-9b/data" |
| ADAPTER_DIR="$HOME/mlx-finetuning/ornith-9b/adapters" |
| FUSED_DIR="$HOME/mlx-finetuning/ornith-9b/fused" |
|
|
| echo "[MLX] Fine-tuning Ornith-1.0-9B with LoRA" |
| echo "[MLX] Model: $MODEL" |
| echo "[MLX] Data: $DATA_DIR" |
| echo "[MLX] Adapters: $ADAPTER_DIR" |
| echo "" |
|
|
| |
| echo "[Step 1/3] Training LoRA adapters..." |
| mlx_lm.lora \ |
| --model "$MODEL" \ |
| --train \ |
| --data "$DATA_DIR" \ |
| --batch-size 1 \ |
| --grad-accumulation-steps 4 \ |
| --num-layers 8 \ |
| --iters 200 \ |
| --learning-rate 2e-4 \ |
| --mask-prompt \ |
| --save-every 50 \ |
| --adapter-path "$ADAPTER_DIR" |
|
|
| |
| echo "" |
| echo "[Step 2/3] Evaluating on validation set..." |
| mlx_lm.lora \ |
| --model "$MODEL" \ |
| --adapter-path "$ADAPTER_DIR" \ |
| --data "$DATA_DIR" \ |
| --test |
|
|
| |
| echo "" |
| echo "[Step 3/3] Fusing adapters into model..." |
| mlx_lm.fuse \ |
| --model "$MODEL" \ |
| --adapter-path "$ADAPTER_DIR" \ |
| --save-path "$FUSED_DIR" \ |
| --de-quantize |
|
|
| echo "" |
| echo "[✓] Fine-tuning complete!" |
| echo "[✓] Adapters saved to: $ADAPTER_DIR" |
| echo "[✓] Fused model saved to: $FUSED_DIR" |
| echo "" |
| echo "To use the fine-tuned model:" |
| echo " mlx_lm.chat --model $FUSED_DIR" |
| echo " OR" |
| echo " mlx_lm.server --model $FUSED_DIR --port 8082" |
|
|