ローカルLLMという世界 #2 - 基本編
#ローカルLLM · 11min
基本編
求めるAIモデルのスペックがSonnet 4.5クラスと判明したので次はローカルLLMの性能の見極め方を学ばなきゃならない。
LLMを見てると12Bとか4Bとか書いてある。Bってなんやねんという話なのでまずはこれを理解する。
パラメータ
BはBillionのBで10億を表す。4Bなら40億、12Bなら120億、120Bなら1200億である。ここは思ったよりそのままだ。(ちなみにこの上にTがあります。TはTrillionのT)
では何が120億個あるのかというとAIが学習によって調整した数値である。
AIモデルは入力された言葉から次に来るトークンを予測しているのですが、その計算に使う大量の数値のことをパラメータと呼んでいます。
(AIモデル(LLM)の文脈でよく言われる学習というのはたくさんの文章を読みながらこの数値を少しずつ調整していく作業だったりするそうです)
基本的な考え方としてはパラメータが多いほどモデルの表現力は増えます。つまりすごく雑に言ってしまうとパラメータが多い方が賢いです。4Bよりも12Bの方が、12Bより20Bの方が賢い傾向にあります。
ただしパラメータ数はAIの賢さをそのまま表す点数ではないというのもあって、この辺はエンジニアの工夫によって新しい小さなモデルが大きな古いモデルを上回ることもしばしば起きてたりします。
ClaudeやChatGPTはパラメータ数が非公開なのですがローカルLLMはバッチリ公開されているので兎にも角にもまずはパラメータ数を見ます。大体モデル名 xBみたいな書き方してます(例: Gemma4 31Bみたいな感じ)
AIで覚えておくこと
パラメータと速度
先に書いた通り、同じ世代や同じ系列であれば基本的にパラメータ数が多いモデルの方が賢いです。
とはいえ例外もあって学習方法やデータ、モデルの構造が違えば小さいモデルが大きいモデルを上回ることもままあります。
なのでパラメータ数 = 絶対的な賢さの指標とはならないのですが、同じモデル系列・量子化・実装で比べるなら、生成速度に大きく影響します。
1トークンを生成するための計算量が多いほど、回答の出力に時間がかかりやすいということです。MoEでは総パラメータ数ではなく、1トークンごとに使う有効パラメータ数も速度に関係します。
賢さを取るか生成速度を取るかはケースバイケースです。せっかちな人は多少賢さを捨ててでも速度を取りにいきたくなるかもしれません(私です)
もちろん早くて賢いに越したことはないのですが、早いけど作業が雑でやり直しになるくらいなら考え抜いた一発の方が仕事が早く終わることもある。ここら辺はAIも人間模様を呈していると言えるかもしれません🤔
頻出用語解説的なやつ
トークン
おそらくはLLM界隈で最もふわっと認識されている単位かもしれない。
実はトークンはトークナイザーとかパーサーと言われるやつによって1トークンの単位が変わったりします。概ねこんなイメージというのがあるのでお見せしたい(画像参照)

画像の例ですと”Hi there! I’m Cortana.”は Hi there ! I'm Cort ana .で8トークンです。
英単語であれば使い回しができる範囲で分離されたりとかして効率化を図っています。
ちなみにこのトークナイザーはモデルごとに異なっていたりしていて、ChatGPT 3.5のトークナイザーとChatGPT5系のトークナイザーでは同じ単語でも1トークンの切り方は違っていたりします。
モデルの世代が変わるとトークナイザーも変わり、同じ文章でも消費トークン数が大きく変わることがあります。
OpenAIのサイト でトークナイザーの挙動を確認することもできるので気になる人は試してみよう!
Dense
例えばあるローカルLLMが20Bだとしたら、1トークンごとに20B全てのパラメータを評価して回答してくるのがこのDenseというモデル。(Denseは密という意味)
仕組みが単純でモデルサイズから必要メモリと生成速度の見当がつきやすい。なぜなら常に全パラメータを全力全開するから。
ただし1トークン作るのに全パラメータを評価するため、同じ条件で比べるとパラメータが増えるほど生成速度は遅くなりやすいです。
MoE
何を言ってるのかわからないと思うがMixture of Expertsの略である
モデルの中に複数の「専門家(Experts)」を持っていて、トークンごとにその一部だけを使うというのが教科書的な説明ですが意味不明ですよね?
たとえばパラメータは同じ20Bなんだけど4Bだけ有効にするというMoEモデルはあるとします。
このモデルは総パラメータが20Bですが1トークンの生成で動くのは4Bだけになります。
必然的に同じ20BのDenseモデルより生成が速くなります。
つまりはせっかちな人におすすめです。
注意点として有効なのは4Bだとしても常に20B全体をメモリに置く必要があるところ。「動くのは4Bだから20Bより小さいMacで動く」という都合の良い感じではないです(大事)
コンテキスト
コンテキストとはLLMが一度に参照できる情報の範囲。
128Kならおよそ12万8000トークンまでを一度に扱えるということになります。
この枠には最初に渡した指示だけでなく会話履歴、読み込ませた文書、ツールの実行結果、Thinking、これから出力する回答なんかも入ります。
会話を続けるほど昔のやり取りでコンテキストを使うので、上限を超えると古い情報を削るかコンテキストを要約(圧縮)する必要が出てきます。
あとコンテキストは長ければ長いほどいいというわけでもなく、コンテキストが伸びると会話の質が悪くなることも多いです。
利用したいモデルが128Kに対応していても、手元のコンピュータで128Kを快適に扱えるかは別の話で(コンテキストの保存先もRAMなのでメモリ不足で下げざるを得ないこともある)
公称の最大値と実用的な長さは分けて考えないとだめです。
Prefill
プロンプトや読み込ませた文書を最初にまとめて処理する段階のこと。当然長い文書を渡すと回答が出始めるまでの待ち時間が伸びる。
最初の一文字が出るまでの体感に強く影響するのである意味ではLLMのレイテンシと言えるかもしれない。
ちなみにM5 Pro/MaxのMacはPrefillがかなり高速化されたらしく、AppleによればM4 Pro/Maxと比べてLLMのプロンプト処理が最大4倍高速になったとのこと。
ただしM4以前のMacでも普通に結構早いので元々結構低コスト。
開発者の人で外部API経由でLLMを使ったことがある人ならinput/outputでコストが分かれているのを知っているかもしれないですがinputの処理はPrefillに該当します。
APIの価格は各社の方針でも決まるのでこれだけが理由ではないが、inputがoutputより安いことが多い背景の一つではある。
Decode
Prefillの後に回答を1トークンずつ生成する段階。
事実上のローカルLLMの速度としてよく見かける「何tok/s = tps」はほぼこのDecodeの速度を指している(たまにPrefill + Decodeの平均という測定を見ることがありますが少数派?)
ちなみにDecodeスピードはGPUのメモリ帯域という物理的な制約の影響を強く受けます。
モデル、量子化、実装などが同じでメモリ帯域がボトルネックになっているなら、帯域が広いほど文字の出力も速くなります。
ただし帯域が10倍なら必ず10倍速くなるというものではないので注意。
Reasoning
Reasoningとは最終的な回答を出す前にモデルが問題を分解したり、仮説を比べたり、計算や手順を検討したりすること。
モデルを大きくするだけでなく回答する時にも追加の計算を使って問題を解かせる手法である。
途中の推論を文章として出させるChain-of-Thoughtの研究はo1以前から存在していたのだが、OpenAIはo1で大規模な強化学習と推論時の追加計算を組み合わせてReasoningモデルを一気に一般へ広めた(すごい)
ただしその学習方法がすべて公開されたわけではない。秘術の中身は秘術のままである。
単に次の文章をすぐ返すモデルと比べ、数学、コーディング、計画、エージェントのような複数段階の仕事に強くなりやすい。
ちなみにReasoningは思考の過程でトークンを出力するがこれはDecodeした結果なのでVRAMの帯域が狭ければ推論の時間はめっちゃ伸びる。
どのくらい推論するかはある程度人間が設定できるがLLM自体の癖もあったりして設定を下げても長考する奴もいる。
逆に設定を上げて考え込ませているはずなのに一瞬で回答してくる奴もいてそれぞれである。
日本語では推論とか呼ばれることも多い。
Thinking
ThinkingはReasoning中にモデルが生成する中間的な思考部分を指すことが多い。
ローカルモデルのUIで最終回答の前に折りたたまれた文章が表示されたり出力に<think>...</think>というタグが現れたりするのがそれだ(稀にclaudeを使っていて途中で推論が止まる時があるが、</XXXが間違って判定されて止まることもあるっぽい。)
ただし画面に見えているThinkingがモデル内部の思考をそのまま映したものとは限らない。
たとえばClaudeで表示されるThinkingは完全な思考過程ではなく要約で完全な内容は暗号化して扱われている。(Anthropicはその理由を悪用防止としている。Dario…)
ReasoningとThinkingは似た意味で使われるが厳密には完全に同じではない。
Reasoningは問題を解くための追加計算全体のことでThinkingはその過程がテキストとして見える、あるいは見えるように整形された部分のこと。
モデルや実行エンジンによっては生成した<think>部分を表示し、別のサービスは思考を非表示にしたり要約だけを見せたりする。(その文章が本当に答えを導いた忠実な説明なのかも別の問題である)
Thinkingが長く表示されることと答えが正しいことも同じではない。
ちなみにThinkingの中身をみると結構人間的な考え方をしていることがわかる。ちょっと愛着が湧く。
Reasoning effort
Reasoning effortは、モデルが答える前の思考にどのくらいの計算量を使うかを調整する設定である。
有名なChatGPTにもモデルによってlow、medium、highなどが選べる。

低くすれば結果が速く出やすく、高くすればより長く問題を検討する余地が増える。
名前や段階数はモデルによって違い、Thinkingを有効・無効で切り替えるモデルもある。
highにすれば必ず賢くなるわけではなく考えすぎて逆に間違えちゃったりすることもあるし簡単な要約や雑談では長考が無駄になりかえって話が回りくどくなることもある。
速さを優先するならlow、通常はmedium、難しい設計、バグ調査、数学、複数ステップのエージェント作業ではhighというように使い分けるのがよいかもしれないがモデルの癖にもよる。
量子化
生成AIの本体は多次元配列の数字の塊なのだが、量が多いと容量が大きくなってしまうので、性能低下をある程度許容して少ないbit数で表現することがある。
これは単位をbitとして表現しており間引きの分量で4bitとか2bitとか言ったりする。
例えば120Bのパラメータを4bitで量子化したモデルは概ね60GBくらいの容量が必要になるのだが、量子化していない16bitフルサイズなら単純計算で約240GBになる。
bit数を減らすほど容量が小さくなり、いろいろな環境で動かしやすくなる一方で、性能が低下する可能性もあります。
モデルによっては量子化してもなるべく賢さそのままというものもあれば、露骨におばかちゃんになる奴もいる。
自分のマシンでは本来動かないはずのモデルを量子化して切り詰めることで動かせるようになることもあるので気になるモデルがいれば量子化モデルがないか探すのはありあり。
私も午前中は16bitだけど午後は3bitかもしれない🤔
メモリ容量とメモリ帯域
まず前提として、ここでのメモリはGPUがモデルを置いて計算に使うメモリのことだと思ってください。一般的なGPUではVRAM、Apple Siliconではユニファイドメモリの一部にあたります。
メモリ容量はそのモデルが入るかを決め、メモリ帯域は入ったモデルがどれくらいの速さで動くかに大きく影響します。
Apple SiliconのユニファイドメモリはCPUとGPUが同じ大きなメモリを共有できる点で、ローカルLLMと相性が良かったりします。
ただしOSや他のアプリも同じメモリを使うので搭載量を丸々モデルに使えるわけではないのは注意されたし。
(60GBのモデルを動かすのに96GBくらい欲しいというのは、OS + コンテキスト + その他ということでもある)
マルチモーダル / VLM
テキスト以外の入力も扱えるモデルをマルチモーダルと呼ぶ。画像、音声、動画などが対象になる。
そのうち画像とテキストを扱うものをVLM(Vision Language Model)と呼ぶことが多い。VLMはマルチモーダルの一種である。
ローカルLLMではテキスト専用とマルチモーダルが混在している。
gpt-ossのようにテキスト専用のモデルへ画像を渡しても読み取れないがGemma 4やQwen3.8-27Bのように画像も扱えるものもある。
VLMよりマルチモーダルの方が範囲が広いのでこの連載では原則マルチモーダルと書く。
HuggingFace
ローカルLLM界のDocker hubやRuby gemsという感じ。
世界中のいろんなコミュニティや個人が日夜自分のモデルを公開してくれている。
NVidiaに買収されそう(買収された?)
次回
とりあえずここまでわかっていると大体なんとかなるはずなので次でMacの選び方の話を書こうと思う。
ローカルLLMという世界
- #1:手元で動くAI
- #2:基本編(この記事)
- #3:Macの選び方(公開準備中)
- #4:ランタイムとハーネス(公開準備中)
- #5:モデルを使ってみた(公開準備中)