はじめに
以下で試した内容の続きみたいな内容の記事です。以下ではコマンドラインからローカルLLM を試していましたが、今回は Python のコードで処理を実行します。
●Mac mini で ローカルLLM: Qwen3(MLX版)を MLX LM で試した時のメモ - Qiita
https://qiita.com/youtoy/items/18a105e3925fc34cc624
実際に試していく
試す環境
今回、上記の 1つ前の記事にも書いている環境を使っています。
具体的には、以下のとおりです。
- PC
- M4 の Mac mini(メモリ 24GB、うち 16GB をローカルLLM用で利用可能)
- モデル
- MLX版の Qwen3 で量子化されているもの
- 実行環境
- Python の仮想環境で MLX LM を利用、Python のコードで処理を実行
コード・処理の実行
参考にしたコード
今回用いた Python のコードは、Qwen3-14B-8bit(MLX版)のページ冒頭に書かれたものを、少し変えただけです。
仮想環境での処理の実行
前回の記事で用いた Python の仮想環境(myenv という名前で作成したもの)を使います。
Python のコードを実行する前に、以下のコマンドで仮想環境のアクティベートなどを行っておきます(念のため、mlx-lm の最新版へのアップデートを行うコマンドも含めています)。
source myenv/bin/activate
pip install -U mlx-lm
コードと処理の実行1
とりあえず、以下のコードで処理を試しました。
# source myenv/bin/activate
from mlx_lm import load, generate
model, tokenizer = load("mlx-community/Qwen3-14B-8bit")
prompt = "生成AIを8歳に分かるように短い言葉で日本語で説明して"
if tokenizer.chat_template is not None:
messages = [{"role": "user", "content": prompt}]
prompt = tokenizer.apply_chat_template(
messages, add_generation_prompt=True
)
response = generate(model, tokenizer, prompt=prompt, verbose=True)
実行結果は以下のとおりで、出力が途中で途切れました。
おそらくデフォルト設定だと、今回の内容を出力しきれずに終わるパラメータになっていると思われます(「Generation: 512 tokens」となっているので、ここを増やしてやれば良さそうです)。
コードと処理の実行2
コード内の generate()
で max_tokens=512
という指定を加えた、以下のような内容にしてみました。
# source myenv/bin/activate
from mlx_lm import load, generate
model, tokenizer = load("mlx-community/Qwen3-14B-8bit")
prompt = "生成AIを8歳に分かるように短い言葉で日本語で説明して"
if tokenizer.chat_template is not None:
messages = [{"role": "user", "content": prompt}]
prompt = tokenizer.apply_chat_template(messages, add_generation_prompt=True)
response = generate(model, tokenizer, prompt=prompt, max_tokens=512, verbose=True)
再度、処理を実行してみると、以下のように最後まで内容が途切れることなく出力されました。
コードと処理の実行3
2つ目のお試しのプロンプトの部分だけ「 prompt = "東京について3段落くらいで、日本語で説明して"
」という内容に変えて、処理を実行してみました。
この場合は、 max_tokens=512
だと出力が途中で途切れました。これを max_tokens=1024
にして試したところ、以下のように出力が途切れることはありませんでした。