[OSS紹介#73] MLX LM:Appleシリコン最適化の大規模言語モデル操作を解説

この記事について

この記事では、オープンソースソフトウェア(OSS)の中でも特に注目すべきツール「MLX LM」を紹介します。このツールは、Appleシリコンに最適化されたPythonパッケージであり、大規模言語モデルのテキスト生成やファインチューニングを実現します。最近では、自然言語処理(NLP)の分野でAI技術が急速に進化しており、開発者たちはより効率的で強力なツールを求めています。

「MLX LM」は、Hugging Face Hubとの統合を通じて、数千の言語モデルを簡単に利用できる利便性を提供します。特に、モデルの量子化やアップロード機能、低ランクおよびフルモデルのファインチューニングをサポートしている点が特徴的です。これにより、開発者は自身のニーズに応じたカスタマイズが可能で、より柔軟にプロジェクトを進めることができます。

この記事では、「MLX LM」の基本的な使い方から応用方法、さらにその特長について深堀りしていきます。このツールを活用することで、開発者の生産性向上や作業の効率化が期待されるため、多くの方々にとって有益な情報を提供できることを目指しています。

リンク:https://github.com/ml-explore/mlx-lm


本コンテンツは、弊社AI開発ツール「IXV」を用いたOSSツール紹介です。情報の正確性には努めておりますが、内容に誤りが含まれる可能性がございますのでご了承ください。

1. MLX LMでできること

MLX LMは、Appleシリコン上で大規模言語モデル(LLM)を生成し、ファインチューニングするためのPythonパッケージです。このツールの主な機能には以下が含まれます。

  • Hugging Face Hubとの統合により、数千のLLMを単一コマンドで簡単に使用可能。
  • モデルの量子化とHugging Face Hubへのアップロードをサポート。
  • 量子化モデルに対応した低ランクおよびフルモデルのファインチューニング。
  • mx.distributedを利用した分散推論とファインチューニング。

これらの機能により、MLX LMは効率的かつ柔軟に大規模モデルの操作を可能にします。

2. セットアップ手順

MLX LMを使用するには、まずパッケージをインストールします。以下の方法から選択できます。

pipでインストール

pip install mlx-lm

condaでインストール

conda install -c conda-forge mlx-lm

2.1 動作環境

MLX LMはmacOS 15.0以上で動作し、Appleシリコンに最適化されています。大規模モデルを使用する場合は、システムメモリの設定を調整する必要がある場合があります。特に、モデルがRAMに収まらない場合は、生成速度が遅くなる可能性があります。

3. 簡単な使い方

MLX LMを使用してテキストを生成するには、以下のコマンドを実行します。

テキスト生成

mlx_lm.generate --prompt "Mt Everestの高さは?"

チャット機能を使用する場合は、以下のコマンドを実行します。

mlx_lm.chat

このコマンドでチャットREPLが起動し、LLMとのインタラクションが可能になります。

3.1 Python APIの利用

MLX LMはモジュールとしても使用できます。以下は、モデルを読み込み、テキストを生成する例です。

from mlx_lm import load, generate

model, tokenizer = load("mlx-community/Mistral-7B-Instruct-v0.3-4bit")

prompt = "アインシュタインについての物語を書いてください"

messages = [{"role": "user", "content": prompt}]
prompt = tokenizer.apply_chat_template(
    messages, add_generation_prompt=True
)

text = generate(model, tokenizer, prompt=prompt, verbose=True)

3.2 ストリーミングとサンプリング

ストリーミング生成を行うには、stream_generate関数を利用します。以下の例では、ストリーミングを使用してテキストを生成します。

from mlx_lm import load, stream_generate

repo = "mlx-community/Mistral-7B-Instruct-v0.3-4bit"
model, tokenizer = load(repo)

prompt = "アインシュタインについての物語を書いてください"

messages = [{"role": "user", "content": prompt}]
prompt = tokenizer.apply_chat_template(
    messages, add_generation_prompt=True
)

for response in stream_generate(model, tokenizer, prompt, max_tokens=512):
    print(response.text, end="", flush=True)
print()

3.3 モデルの量子化とアップロード

モデルを量子化し Hugging Face Hub にアップロードするには、次のようにします。

from mlx_lm import convert
repo = "mistralai/Mistral-7B-Instruct-v0.3"
upload_repo = "mlx-community/My-Mistral-7B-Instruct-v0.3-4bit"
convert(repo, quantize=True, upload_repo=upload_repo)

このコマンドは、4 ビット量子化された Mistral 7B モデルを生成し、指定されたリポジトリにアップロードします。

4. 結論

MLX LMは、Appleシリコン上で大規模言語モデルを効率的に扱うための強力なツールです。Hugging Face Hubとの統合や量子化のサポートにより、ユーザーは様々なモデルを簡単に利用でき、さらに高い柔軟性を持ってファインチューニングや推論を行うことができます。特に、Python APIやコマンドラインインターフェースを通じて、直感的に操作できる点も大きな魅力です。このツールを活用することで、さまざまな自然言語処理のタスクに対応できるでしょう。