MLXを使用したApple Siliconでの言語モデルのファインチューニング
Apple Silicon搭載MacでMLXフレームワークを使用して、オープンな言語モデルをローカルでファインチューニングする方法を詳しく解説。クラウドGPUや追加費用は不要。環境構築、データセット準備、LoRAアダプターのトレーニング、量子化によるメモリ削減、テスト、モデルの融合とデプロイまでを網羅。
Apple Siliconチップを搭載したMacで言語モデルをファインチューニングすることが、MLXフレームワークの登場により現実のものとなりました。MLXはAppleの機械学習研究チームが開発したオープンソースの配列ライブラリで、Apple Siliconのユニファイドメモリアーキテクチャに最適化されています。CPUとGPUが同じメモリプールを共有するため、データのコピーが不要になり、16GBメモリのMacでもローカルでのファインチューニングが実用的になります。
始めるには、Apple Silicon Mac(M1以降)、macOS Ventura 13.5以上、Python 3.10以上が必要です。MLX LMとそのトレーニング用拡張機能をインストールしたら、まずmlx_lm.generateコマンドで動作確認を行います。モデルはHugging FaceのMLX Community組織から自動的にダウンロードされ、キャッシュされます。MLXでのファインチューニングには、Hugging Faceのsafetensors形式のモデルが必要です(GGUF形式は推奨されません)。
データセットの準備は重要なステップです。MLX LMは、train.jsonl、valid.jsonl、オプションのtest.jsonlを含むフォルダからデータを読み取ります。各行はJSONオブジェクトで、チャット形式、補完形式、テキスト形式のいずれかをサポートします。チャット形式が最も汎用的で、モデルのチャットテンプレートが自動適用されます。データは通常80%をトレーニング、10〜20%を検証に分割し、200〜500サンプルがモデルの挙動を変更する目安です。
LoRA(低ランク適応)がファインチューニングの核です。元の重みを凍結し、小さな適応行列のみを学習することで、メモリとストレージの使用量を大幅に削減します。トレーニングはmlx_lm.loraコマンドで実行し、モデル、データフォルダ、反復回数、バッチサイズを指定します。重要なパラメータとして、--fine-tune-type(lora、dora、full)、--num-layers(適応する層数)、--iters(トレーニング長)があります。16GB Macでは--batch-size 1を推奨します。メモリが不足する場合は、層数を減らすか--grad-checkpointを追加します。
量子化はメモリ使用量をさらに削減します。MLXは量子化をネイティブにサポートしており、4ビット量子化モデルにLoRAアダプターをトレーニングするQLoRAが可能です。これにより、7Bモデルの重みメモリが約1/3.5に削減され、16GB Macでも快適に動作します。mlx_lm.convertコマンドで自分で量子化することもできます。
トレーニング後、テストコマンドでアダプターの性能を評価し、mlx_lm.generateで応答を確認します。デプロイの際は、mlx_lm.fuseでアダプターをベースモデルに融合し、単一のモデルとしてエクスポートします。融合したモデルはmlx_lm.serverでOpenAI互換のエンドポイントとして提供でき、LM StudioなどのGUIツールで比較テストも可能です。
このワークフローはすべてローカルMac上で完結し、クラウド費用は不要で、データもデバイス外に出ません。個人開発者や小規模チームにとって強力なAIカスタマイズ手段となります。