[LLM] Hugging Face GGUF 모델을 MLX 포맷으로 변환하기
- 프로젝트/AI
- 2025. 3. 29.
MacOS에서 GGUF타입을 MLX타입으로 직접 컨버팅하는 이유.
Apple Silicon(M1,M2,M3,M4)을 사용하는 MacOS에서는 MLX 타입의 LLM모델의 효율성이 좋다고 한다.
인기있는 LLM모델 대부분 mlx-community에 MLX타입으로 올라오지만, 가끔 MLX타입으로 올라오지 않는 모델들도 존재 한다.
때마침... MLX 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
작업이 완료 되면, 지정된 폴더에 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 폴더 하위에 저장되어 있다. (용량이 부담된다면 정리 필수!)
MLX 모델 사용
LMStudio에서 MLX 타입으로 변환된 모델을 바로 불러 올 수 있다.
- 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
- 개인 모델 리포지터리에 올리려면 업로드 경로의 프리픽스를 사용자 경로로 변경하면 된다.