HuggingFace モデルを MLX で変換して LM Studio で動かす手順
はじめに
タイトルの通り、HuggingFace で公開されている LLM のモデルを MLX で変換し、LM Studio で動かす手順が意外と日本語で書かれた記事が少なそうだったので執筆。
この記事では、CyberAgent 社がファインチューニングした、「Mistral-Nemo-Japanese-Instruct-2408」という日本語に強いモデルを MLX フレームワークで 8bit 量子化し、LM Studio で実行するまでの具体的な手順を紹介。
Gemma3 や Llama-4 Scout 等、M2 Ultra 192GBで動くものを 100 種類ほど試した感じ、純粋に日本語の文章を書かせるならやっぱり Mistral-Nemo-Japanese-Instruct-2408 が強い気がする…ベンチマークは取ってないのであくまで体感。
なぜ MLX を使うのか?
MLX は Apple が開発した機械学習フレームワークで、Apple Silicon(M1/M2/M3/M4 シリーズ)チップ上での計算を最適化してくれる。従来の llama.cpp などと比較して以下のメリットがある模様:
- Apple Silicon 専用の最適化: Apple のニューラルエンジンを活用した高速推論
- メモリ効率: 統一メモリアーキテクチャを活かした効率的なメモリ使用
- シンプルな API: Python からの直感的な利用が可能
- 低い消費電力: バッテリー駆動デバイスでの動作に最適化
実際動かしている感じ、GGUF より MLX の方がメモリ消費量が少なく、速い。
選べるなら MLX を選んだ方が良い。
前提条件
- macOS 搭載の Apple Silicon Mac(M1/M2/M3/M4 シリーズ)
- Python 3.8 以上
- LM Studio(2025 年 4 月現在で 0.3.14 を使用)
- それなりに速いインターネット接続(モデルのダウンロードが必要)
手順
1. 環境準備
まず、必要なライブラリをインストールする。Python 環境(できれば venv 等の仮想環境)を用意し、以下のコマンドを実行する。
# 仮想環境を作成する場合(推奨)
python -m venv mlx-env
source mlx-env/bin/activate # 環境をアクティベート
# 必要なパッケージのインストール
pip install -U mlx mlx-lm transformers torch
2. モデルの変換
HuggingFace のモデルを MLX 形式に変換する。今回は実際に私が使用した、シンプルなコマンドを紹介。
python -m mlx_lm.convert --hf-path cyberagent/Mistral-Nemo-Japanese-Instruct-2408 --mlx-path /Users/[ユーザー名]/.cache/lm-studio/models/[保存フォルダ名]/mistral-nemo-japanese-instruct -q --q-bits 8
このコマンドの意味:
-
--hf-path
: 変換元の HuggingFace モデルのパス -
--mlx-path
: 変換後の MLX モデルの保存先 -
-q
: 量子化を有効にする -
--q-bits 8
: 8bit で量子化する
保存先のパスは LM Studio のモデルディレクトリを指定すると、変換後にすぐ LM Studio で認識されるため便利。通常は~/.cache/lm-studio/models/
以下。
量子化オプションについては、--q-bits 8
と指定すれば 8bit 量子化になる。
指定しなければ 4bit(厳密には 4.5bit?この辺りはあまり詳しくない)。
3. 変換の様子と所要時間
変換プロセスは以下のような出力が表示され、進行状況が確認できる。
実際に実行したときのログを共有する。
試したとき、最初は量子化オプションをつけずに実行したので、 4bit 量子化になっている。
$ python -m mlx_lm.convert --hf-path cyberagent/Mistral-Nemo-Japanese-Instruct-2408 --mlx-path /Users/[ユーザー名]/.cache/lm-studio/models/[保存フォルダ名]/mistral-nemo-japanese-instruct -q
[INFO] Loading
config.json: 100%|██████████████████████████████████████████████████████████████████████| 704/704 [00:00<00:00, 4.60MB/s]
generation_config.json: 100%|███████████████████████████████████████████████████████████| 159/159 [00:00<00:00, 1.11MB/s]
model.safetensors.index.json: 100%|█████████████████████████████████████████████████| 29.9k/29.9k [00:00<00:00, 29.2MB/s]
special_tokens_map.json: 100%|██████████████████████████████████████████████████████████| 558/558 [00:00<00:00, 1.18MB/s]
tokenizer_config.json: 100%|███████████████████████████████████████████████████████████| 178k/178k [00:00<00:00, 552kB/s]
tokenizer.json: 100%|████████████████████████████████████████████████████████████████| 9.26M/9.26M [00:15<00:00, 596kB/s]
model-00003-of-00005.safetensors: 100%|█████████████████████████████████████████████| 4.91G/4.91G [22:03<00:00, 3.71MB/s]
model-00004-of-00005.safetensors: 88%|███████████████████████████████████████▌ | 4.31G/4.91G [22:00<05:06, 1.95MB/s] Error while downloading from https://cdn-lfs-us-1.hf.co/repos/... Read timed out.
Trying to resume download...
model-00004-of-00005.safetensors: 100%|█████████████████████████████████████████████| 4.91G/4.91G [25:41<00:00, 3.18MB/s]
model-00001-of-00005.safetensors: 100%|█████████████████████████████████████████████| 4.87G/4.87G [04:14<00:00, 4.24MB/s]
model-00002-of-00005.safetensors: 100%|█████████████████████████████████████████████| 4.91G/4.91G [26:54<00:00, 3.04MB/s]
model-00005-of-00005.safetensors: 100%|█████████████████████████████████████████████| 4.91G/4.91G [27:26<00:00, 2.98MB/s]
Fetching 11 files: 100%|████████████████████████████████████████████████████████████████| 11/11 [27:27<00:00, 149.79s/it]
[INFO] Quantizing
[INFO] Quantized model with 4.500 bits per weight.
ログからわかるように、大規模なモデルファイル(約 5GB ずつ、5 ファイル)のダウンロードに時間がかかる。ネットワーク環境によっては、タイムアウトが発生することもあるが、自動的に再開してくれる機能もある。
完了するまで合計約 30 分程度かかった。インターネット回線が速ければもっと短縮できるだろう。
その後、やっぱりより高い精度を維持するために 8bit 量子化したいな、となったので以下のようにした。
$ python -m mlx_lm.convert --hf-path cyberagent/Mistral-Nemo-Japanese-Instruct-2408 --mlx-path /Users/[ユーザー名]/.cache/lm-studio/models/[保存フォルダ名]/mistral-nemo-japanese-instruct-8bit -q --q-bits 8
[INFO] Loading
Fetching 11 files: 100%|█████████████████████████████████████████████████████████████| 11/11 [00:00<00:00, 100298.57it/s]
[INFO] Quantizing
[INFO] Quantized model with 8.500 bits per weight.
ダウンロードは終わっていたので変換だけだった模様。変換数秒で終わった。
4. LM Studio での読み込み
変換が完了したら、LM Studio を起動する。ローカルモデルタブを選択すると、先ほど指定したパスに変換されたモデルが表示されているはず。mlx-community とかからダウンロードしたモデルと同様な感じでロードできるので、詳細な説明は割愛。
まとめ
MLX フレームワークを使用したモデル変換は、特に Apple Silicon を搭載した Mac ユーザーにとって非常に効果的な選択肢。今回紹介した「Mistral-Nemo-Japanese-Instruct-2408」のようなサイズの大きな日本語モデルでも、8bit 量子化することで、標準的な MacBook でスムーズに動作させることができる。
この手順が、ローカル LLM を活用したい方々の参考になれば幸い。