5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M4 の MacBook Air でローカルLLM: Gemma 3n を MLX-VLM と Ollama で試す

5
Last updated at Posted at 2025-07-28

はじめに

今回の内容は、過去に M4 の Mac mini を使って試してきたローカルLLM でやっていた内容と似た話です。

M4 の Mac mini でのローカルLLM では、MLX版のモデルを使ったり、Ollama を使ったローカルLLM を試したりしてきました(それで色々と Qiita の記事も書いており、例えば以下の記事などがあります)。

今回の内容

今回はそれと同様のことを、最近入手した M4 の MacBook Air で試してみた話です。

その際、モデルは Gemma 3n を使いました。

これまで試した内容との違い

これまで M4 の Mac mini でのローカルLLM を試してきた時、モデル選びでサイズが 16GB以内のものを探していました。これは、その Mac mini のユニファイドメモリが 24GB で、そのうちローカルLLM のモデル用に使えるのが 16GB になると想定されるためです(8GB は OS用にとられる感じのようで、これまで実験的に試した中で 16GB を超えるサイズのモデルは動かせませんでした)。

一方、最近入手した M4 の MacBook Air のユニファイドメモリは 16GB です。

上記と違って、ローカルLLM のモデル用に使えるメモリは 8GB になる想定であるため、モデル選びの際にサイズが 8GB以内のものを探してみました。また、念のため 8GB を超えるモデルも試してみたのですが、結論から言うとそれも動作させることができました。
(このあたりの詳細は、別途、調べてみようと思います)

さっそく試す

さっそく試していきます。まずは Ollama です。

Ollama で試す

以下から Mac用の Ollama をダウンロードします。

●Download Ollama on macOS
 https://ollama.com/download

そして、Gemma 3n のモデルを以下から選びます。

●gemma3n
 https://ollama.com/library/gemma3n

image.png

どれも 8GB未満のサイズなので、どれを選んでも十分な動作をさせられそうです。

gemma3n:e4b で試す

とりあえず「gemma3n:e4b」を使うことにします。

試すためのコマンドは以下のとおりです。

ollama run gemma3n:e4b

これを実行してから「あなたは誰?」という適当なプロンプトを入力してみた結果、以下のように無事に返答を得ることができました。

MLX-VLM での画像入力を試す

次は MLX-VLM を使った画像入力のお試しです。入力画像は以下で、過去の M4 の Mac mini で使ったものと同じです。

dragon.jpg

MLX-VLM のセットアップは、以下の過去記事をご覧ください。

それについて 1点、Python の 3.13系を使って試したら途中でエラーが出たので 3.12系を使うようにしていましたが、今回は 3.13系で問題なく動作させられました。

【余談】 Python のバージョン管理

その際用いた Python は以下の記事で書いた mise を使って導入したものです(以前は pyenv を使っていましたが、新しい MacBook Air では mise を使ってみています)。

●mise(ミーズ、旧rtx)で Node.js・Python のバージョンを管理する【Mac での利用】 - Qiita
 https://qiita.com/youtoy/items/f53494806013f0d3f51e

gemma-3n-E4B-it-6bit で試す

MLX-VLM を使ったローカルLLM を gemma-3n-E4B-it-6bit で試します。

●mlx-community/gemma-3n-E4B-it-6bit · Hugging Face
 https://huggingface.co/mlx-community/gemma-3n-E4B-it-6bit

試した際のコマンドは以下のとおりです。

python -m mlx_vlm.generate --model mlx-community/gemma-3n-E4B-it-6bit --max-tokens 100 --temp 0.0 --prompt "この画像を日本語で説明して" --image "dragon.jpg"

実行した結果は以下のとおりで、無事に動作しました。

Gw9GkTDakAA5Mb9.jpeg

--max-tokens 100 にしてしまっていて、そのために出力が途中で途切れてしまいました。

gemma-3n-E4B-it-8bit で試す

さらに動かない想定で、以下も試してみました。

●mlx-community/gemma-3n-E4B-it-8bit at main
 https://huggingface.co/mlx-community/gemma-3n-E4B-it-8bit/tree/main

結論から書くと、以下のように動作させることができました。

python -m mlx_vlm.generate --model mlx-community/gemma-3n-E4B-it-6bit --max-tokens 256 --temp 0.0 --prompt "この画像を日本語で説明して" --image "dragon.jpg"

image.png

--max-tokens 256 にしましたが、まだ出力が途中で途切れてしまいました(512 くらいにしておくと良かったかも...)。

上記の出力の最後の部分を見ると Peak memory: 8.843 GB となっていて、8GB を超えるメモリを使えているっぽいように見えます。

これがモデルによるものか、それともマシンの挙動によるものかなど、別途詳細を確認できればと思っています。

【追記】 コマンドの修正

以下のワーニングが出ていたので、その対処について書いておきます。

RuntimeWarning: 'mlx_vlm.generate' found in sys.modules after import of package 'mlx_vlm', but prior to execution of 'mlx_vlm.generate'; this may result in unpredictable behaviour
Calling python -m mlx_vlm.generate ... directly is deprecated. Use mlx_vlm generate or python -m mlx_vlm generate instead.

コマンドを以下のようにすれば良いようでした( mlx_vlm.generate と書いていた部分を mlx_vlm generate にしました)。

python -m mlx_vlm generate --model mlx-community/gemma-3n-E4B-it-8bit --max-tokens 512 --temp 0.0 --prompt "この画像を日本語で説明して" --image "dragon.jpg"

【追記2】 MLX LM でも試してみる

M4 の MacBook Air でのローカルLLM で、 MLX LM + Gemma 3n でも試しました。利用したモデルは「mlx-community/gemma-3n-E4B-it-lm-4bit」です。

Prompt: 22 tokens, 111.587 tokens-per-sec
Generation: 91 tokens, 29.382 tokens-per-sec
Peak memory: 3.938 GB
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?