[LLM] Hugging Face GGUF 모델을 MLX 포맷으로 변환하기

MacOS에서 GGUF타입을 MLX타입으로 직접 컨버팅하는 이유.

Apple Silicon(M1,M2,M3,M4)을 사용하는 MacOS에서는 MLX 타입의 LLM모델의 효율성이 좋다고 한다.

인기있는 LLM모델 대부분 mlx-community에 MLX타입으로 올라오지만, 가끔 MLX타입으로 올라오지 않는 모델들도 존재 한다.

때마침... MLX 8bit 모델을 찾을 수 없는 경우가 생겼다.

QwQ-DeepSeek-R1-SkyT1-Flash-Lightest-32b: 8bit 모델이 없다.

  • Hugging Face: sm54/QwQ-DeepSeek-R1-SkyT1-Flash-Lightest-32B
  • 해당모델은 Qwen2.5-32B 를 Base모델로 QwQ-32B (Preview 모델이 아니다)와 DeepSeekR1 등을 Merge한 모델이다.
merge_method: sce
base_model: Qwen/Qwen2.5-32B  # Pivot model (zero weight)
dtype: bfloat16
parameters:
  select_topk: 1.0
models:
  # Pivot model (explicitly zero-weighted)
  - model: Qwen/Qwen2.5-32B
    parameters:
      weight: 0.0  # Zero contribution to merged weights
      # sparsity: 0.0  # Optional: enforce sparsity if needed
  # Target models with assigned weights
  - model: Qwen/QwQ-32B
    parameters:
      weight: 0.95  # Dominant contributor
  - model: deepseek-ai/DeepSeek-R1-Distill-Qwen-32B
    parameters:
      weight: 0.01  # Minimal contribution
  - model: NovaSky-AI/Sky-T1-32B-Flash
    parameters:
      weight: 0.04  # Minimal contribution

필요한 AI 모델을 Transformer 모델에서 MLX타입 모델로 변환해 사용해보자.

준비

mlx-lm 파이썬 라이브러리를 인스톨하자.

Apple Silicon Mac에서 Python MLX 도구를 인스톨하자.

### conda activate mlx
pip install mlx mlx-lm mlx-vlm

모델 Convert

MLX convert 도구를 통해 Hugging Face의 모델을 직접 변환 해보자.

8비트 양자화 MLX 타입 모델로 변환해 사용하고자 한다.

  • Mac에서는 무지성으로  MLX타입이 GGUF모델보다 빠르다고 생각해도 무방한 것 같다.
  • MLX 8bit 양자화 모델로 변환하자. (허깅페이스 모델들은 대부분  bf16나 fp16 Tensor type을 사용해 정밀도가 높고, 용량이 크다)
  • --mlx-path 로 LMStudio의 모델 폴더에 AI모델을 저장한다.
### 허깅페이스의 GGUF 모델을 변환해 LMStudio 모델 폴더에 MLX 타입으로 저장한다.
MODEL_DIR=~/.cache/lm-studio/models/$LOGNAME
mlx_lm.convert --hf-path sm54/QwQ-DeepSeek-R1-SkyT1-Flash-Lightest-32B -q --q-bits 8 --mlx-path $MODEL_DIR/QwQ-DeepSeek-R1-SkyT1-Flash-Lightest-32B-MLX-Q8

다운로드와 함께 MLX타입으로 변환이 진행된다.

작업이 완료 되면, 지정된 폴더에 MLX타입으로 변환된 파일들이 생성되었다.

### MLX files list
ls -l QwQ-DeepSeek-R1-SkyT1-Flash-Lightest-MLX
total 68099672
-rw-r--r--  1 axgo  staff         868  3 29 20:28 config.json
-rw-r--r--  1 axgo  staff  5339700785  3 29 20:28 model-00001-of-00007.safetensors
-rw-r--r--  1 axgo  staff  5364861187  3 29 20:28 model-00002-of-00007.safetensors
-rw-r--r--  1 axgo  staff  5364830173  3 29 20:28 model-00003-of-00007.safetensors
-rw-r--r--  1 axgo  staff  5331404024  3 29 20:28 model-00004-of-00007.safetensors
-rw-r--r--  1 axgo  staff  5364861246  3 29 20:28 model-00005-of-00007.safetensors
-rw-r--r--  1 axgo  staff  5364830197  3 29 20:28 model-00006-of-00007.safetensors
-rw-r--r--  1 axgo  staff  2682369911  3 29 20:28 model-00007-of-00007.safetensors
-rw-r--r--  1 axgo  staff      143017  3 29 20:28 model.safetensors.index.json
-rw-r--r--  1 axgo  staff         778  3 29 20:28 special_tokens_map.json
-rw-r--r--  1 axgo  staff    11423521  3 29 20:28 tokenizer.json
-rw-r--r--  1 axgo  staff        8318  3 29 20:28 tokenizer_config.json
  • 허깅페이스 모델 원본은 ~/.cache/huggingface 폴더 하위에 저장되어 있다. (용량이 부담된다면 정리 필수!)

GGUF 원본파일

MLX 모델 사용

LMStudio에서 MLX 타입으로 변환된 모델을 바로 불러 올 수 있다.

mlx-community에 4bit 모델만 존재했었다.
MLX Performance: 13.33 tok/sec

  • 10 tok/sec 이상이면 쓸만한 정도라고 생각된다.

 

마치며,

mlx_lm 도구를 이용해 Hugging Face에 모델을 공유할 수도 있다.

허깅페이스에 가입되어 있고 cli token이 설정되어 있다면 MLX파일을 업로드와 동시에 LMStudio에 사용할 수도 있다.

(M4 Max 128G에서 128K 컨텍스트를 지원하는 72B모델까지는 Q8모델로 변환해 사용할만 했다 - MLX Max Mem: 96G)

### 허깅페이스 cli Token 인증이 되어 있어야 한다.

### KT 믿:음 모델 MLX Q8 컨버트
HF_ID=axgo
HF_MODEL=K-intelligence/Midm-2.0-Base-Instruct
MY_MODEL=Midm-2.0-Base-Instruct-MLX-Q8
MY_DIR=~/.cache/lm-studio/models/$LOGNAME
mlx_lm.convert --hf-path $HF_MODEL --mlx-path $MY_DIR/$MY_MODEL -q --q-bits 8 --upload-repo $HF_ID/$MY_MODEL

### SKT A.X 4.0 모델 MLX Q8 컨버트
HF_ID=axgo
HF_MODEL=skt/A.X-4.0
MY_MODEL=skt-A.X-4.0-MLX-Q8
MY_DIR=~/.cache/lm-studio/models/$LOGNAME
mlx_lm.convert --hf-path $HF_MODEL --mlx-path $MY_DIR/$MY_MODEL -q --q-bits 8 --upload-repo $HF_ID/$MY_MODEL

### SKT A.X 4.0 모델 MLX Q4 컨버트
HF_ID=axgo
HF_MODEL=skt/A.X-4.0
MY_MODEL=skt-A.X-4.0-MLX-Q4
MY_DIR=~/.cache/lm-studio/models/$LOGNAME
mlx_lm.convert --hf-path $HF_MODEL --mlx-path $MY_DIR/$MY_MODEL -q --q-bits 4 --upload-repo $HF_ID/$MY_MODEL

# Cleanup: rm -fR ~/.cache/huggingface/hub/models--K-intelligence--Midm-2.0-Base-Instruct
# Cleanup: rm -fR ~/.cache/huggingface/hub/models--skt--A.X-4.0
  • $HF_ID 를 본인 허깅페이스 ID로 변경하면 된다.

 

참고: https://huggingface.co/mlx-community

Designed by JB FACTORY