<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>ローカルLLM | けゆきブログ / Keyuki Blog</title>
    <link>https://blog.keyuki.net/tags/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%ABllm/</link>
    <description>けゆきブログは、お金・IT・AI活用と暮らしの工夫を、実体験をもとに整理する個人ブログです。</description>
    <language>ja-JP</language>
    <atom:link href="https://blog.keyuki.net/tags/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%ABllm/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Mac mini M4（24GB）で27BローカルLLMを動かしたら、動いた。でも快適ではなかった</title>
      <link>https://blog.keyuki.net/posts/mac-mini-m4-27b-local-llm/</link>
      <pubDate>Sun, 20 Sep 2026 11:00:00 &#43;0900</pubDate>
      <guid>https://blog.keyuki.net/posts/mac-mini-m4-27b-local-llm/</guid>
      <description>&lt;h2 id=&#34;何を試したか&#34;&gt;何を試したか&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.keyuki.net/posts/m4-mac-mini-workstation/&#34;&gt;以前の記事&lt;/a&gt;で、M4 Mac mini（24GB）を買った話を書いたとき、「24GBでも軽量モデルなら動く。ただし30B級以上を快適に回すには厳しい」という印象論を書きました。&lt;/p&gt;
&lt;p&gt;今回はその仮説を実際に確かめてみました。Qwen3.8-27Bの4bit量子化版をOllamaに入れて、生成速度を素の状態で測ってみたのです。&lt;/p&gt;
&lt;p&gt;結論を先に言うと、&lt;strong&gt;27Bは24GBのMac miniで動きました。ただし「快適」ではありませんでした。&lt;/strong&gt; 起動できることと、日常で使えることは別物です。この記事は、その差がどこから来るのかを数値で追った記録です。&lt;/p&gt;
&lt;h2 id=&#34;環境&#34;&gt;環境&lt;/h2&gt;
&lt;p&gt;測定に使った環境です。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;項目&lt;/th&gt;
          &lt;th&gt;値&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;本体&lt;/td&gt;
          &lt;td&gt;Mac mini（2024、Mac16,10）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;チップ&lt;/td&gt;
          &lt;td&gt;Apple M4（ベース版、Pコア4 + Eコア6）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;メモリ&lt;/td&gt;
          &lt;td&gt;24GBユニファイドメモリ&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;実行ソフト&lt;/td&gt;
          &lt;td&gt;Ollama 0.32.14&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;モデル&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;orcarouter/Qwen3.8-27B-Uncensored:mlx-4bit&lt;/code&gt;（16GB）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;比較用&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;qwen3.5:9b&lt;/code&gt;（Q4_K_M、6.6GB）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;モデルは&lt;a href=&#34;https://ollama.com/orcarouter/Qwen3.8-27B-Uncensored&#34;&gt;Ollamaのページ&lt;/a&gt;から&lt;code&gt;mlx-4bit&lt;/code&gt;タグを取得しました。Qwen3.8-27Bは2026年8月リリースの27B Denseモデルで、画像入力にも対応し、コンテキストは262Kです（&lt;a href=&#34;https://huggingface.co/Qwen/Qwen3.8-27B&#34;&gt;HuggingFaceのモデルカード&lt;/a&gt;より）。&lt;/p&gt;
&lt;p&gt;なお、このモデルを選んだ理由は後の節で書きます。今回のような1トークンずつの生成では、モデルの実効サイズとメモリ帯域が速度を大きく左右します。ただし、アーキテクチャや量子化方式、実行エンジン、コンテキスト長でも差が出るため、同じ27Bなら必ず同じ速度になるわけではありません。&lt;/p&gt;
&lt;p&gt;この記事の数値は、私の環境で測った1例です。速度はOllamaやモデルの更新、同時に動かすアプリ、プロンプトの長さによって変わります。&lt;/p&gt;
&lt;h2 id=&#34;結果&#34;&gt;結果&lt;/h2&gt;
&lt;h3 id=&#34;まず数値から&#34;&gt;まず数値から&lt;/h3&gt;
&lt;p&gt;同じ短い質問（「日本の首都はどこですか？ 地名だけで答えてください。」）を投げたときの実測値です。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;測定&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;合計時間&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;生成速度&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;初回（コールドスタート）&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;27.1秒&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;6.43トークン/秒&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2回目（メモリに常駐した直後）&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;10.7秒&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;6.17トークン/秒&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;thinking無効で実行&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;2.0秒&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;6.63トークン/秒&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;初回はモデルのロードに12.3秒かかりました。16GBをディスクからメモリへ展開する時間です。2回目以降はモデルがメモリに残っているのでロードは25ミリ秒で済みます。&lt;/p&gt;
&lt;p&gt;しかし生成速度はどちらも&lt;strong&gt;6.2〜6.7トークン/秒&lt;/strong&gt;でほぼ変わりません。ロードの遅さは一度だけ我慢すれば済みますが、生成の遅さはずっとついてきます。&lt;/p&gt;
&lt;h3 id=&#34;動くの実態&#34;&gt;「動く」の実態&lt;/h3&gt;
&lt;p&gt;生成がどの程度の速さなのか、体感を説明します。&lt;/p&gt;
&lt;p&gt;6.7トークン/秒は、日本語ではおおよそ毎分数百字です。文字数への換算は内容やトークナイザーで変わりますが、チャット画面で返答がじわじわと伸びていくのを、読む速度で追いかけるような感覚でした。文字は出てくる。止まっているわけではない。でも待たされる。&lt;/p&gt;
&lt;p&gt;長い出力で測るとよりはっきりします。「ローカルLLMのメリットを500字程度で説明してください」と依頼したところ、&lt;strong&gt;859トークンの生成に2分9秒&lt;/strong&gt;かかりました。&lt;/p&gt;
&lt;h3 id=&#34;thinkingがさらに遅くする&#34;&gt;thinkingがさらに遅くする&lt;/h3&gt;
&lt;p&gt;Qwen3.8はthinkingモードがデフォルトで有効になっています。上記の長文測定では、最終的な回答に加えて内部の思考トークンを生成していたため、出力量が膨らんでいました。&lt;/p&gt;
&lt;p&gt;OllamaのAPIで&lt;code&gt;think: false&lt;/code&gt;を指定して同じ質問を投げ直すと、&lt;strong&gt;248トークンで38秒&lt;/strong&gt;に短縮されました。生成速度そのものは6.63トークン/秒と変わりません。&lt;/p&gt;
&lt;p&gt;今回のプロンプトに限れば、速度の構造はこうです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;thinkingを切っても、1秒あたりの生成量はほぼ変わらない&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;thinkingを有効にすると生成トークン数が約3.4倍になり&lt;/strong&gt;、所要時間もほぼ同じ比率で伸びた&lt;/li&gt;
&lt;li&gt;単発の質問に短く答えさせたいだけなら、&lt;code&gt;think: false&lt;/code&gt;でかなり体感が改善する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;「地名だけ」のような短い質問だと、thinking無効なら2秒で返ってきます。有効だと10.7秒。中身は同じ「東京」という回答です。&lt;/p&gt;
&lt;h2 id=&#34;なぜ67トークン秒なのか&#34;&gt;なぜ6.7トークン/秒なのか&lt;/h2&gt;
&lt;h3 id=&#34;メモリは足りているでも帯域が足りない&#34;&gt;メモリは足りている。でも帯域が足りない&lt;/h3&gt;
&lt;p&gt;24GBメモリに対して16GBのモデルなので、ギリギリ収まっています。実際、Ollamaはモデル全体をGPU（ユニファイドメモリ）に載せ、CPUへのオフロードやスワップなしで動いていました。&lt;code&gt;ollama ps&lt;/code&gt;で確認すると100% GPUです。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
