[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 모델을 GGUF에서 MLX타입으로 변환해 사용해보자. 

준비

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

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

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

모델 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

GGUF를 다운로드 받으면서 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
  • GGUF원본은 ~/.cache/huggingface 폴더 하위에 저장되어 있다. (용량이 부담된다면 정리 필수!)

GGUF 원본파일

MLX 모델 사용

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

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

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

 

마치며,

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

허깅페이스 MLX-Community 에 가입되어 있다면 MLX파일을 MLX-Community에 업로드할 수도 있다.

### 허깅페이스 cli Token 인증이 되어 있어야 한다.
mlx_lm.convert --hf-path sm54/QwQ-DeepSeek-R1-SkyT1-Flash-Lightest-32B -q --q-bits 8 --upload-repo mlx-community/QwQ-DeepSeek-R1-SkyT1-Flash-Lightest-32B-MLX-Q8
  • 개인 모델 리포지터리에 올리려면 업로드 경로의 프리픽스를 사용자 경로로 변경하면 된다.

 

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