リクエストが通る道
自分が打った一文字は、答えになって戻ってくるまでに長い道のりを旅します。ここでは、よくあるのを例にその道を描きます — ローカルのや別のサービスは、もっと短い道や違う道を通ることもあります。
全体像 — 五つの場所
- 自分のコンピューター
- ネットワーク
- 遠くにある機械
自分のコンピューターのプログラム
チャットボット・コードエディター・アプリ。リクエストを受け取り、何を送るかを決めます。
ネットワーク
インターネットを渡る道。この道を行き来するのは文字とファイルだけです。
遠くにある計算機
データセンターのサーバーがリクエストを受け取り、モデルをすでに載せてあるランタイムに渡します。だから質問のたびにモデルを開き直すことはありません。とても大きなモデルは、いくつものチップや機械に分けて置かれることもあります。
計算モデル
ニューラル言語モデルは学習例から数値の重みを学びます。生成時には重みと文脈から候補トークンのスコアを計算します。保存されたネットの文を取り出すだけでも、直前の単語だけを数える方法でもありません。
ふたたび自分のコンピューター
プログラムが答えを見せ、自分が許可したときだけ作業をします。
1 番と 5 番は同じ、自分のコンピューターです
三番の箱を開けてみると
-
ディスクで眠っている大きな数字のファイル。そのファイルがモデルそのものです。
-
ランタイムがそれを読み、計算専用の部品の上に載せて、そのままにしておきます。
-
門番が鍵を確かめ、リクエストは順番を待ちます。
-
すでに載っているその数字を相手に計算が走ります。
一段階ずつ
八つの段階です。八番目で道が二つに分かれます。
自分が送る
キーボードとマウスの信号はオペレーティングシステムを通り、いま見ているプログラムに渡されます。マイクは違います。自分が許可したときだけ、プログラムが音を受け取って音声認識で文字に変えます — あるいは、音をそのまま聞けるモデルへ送ります。
プログラムが荷物をまとめる
質問、最近の会話、添えたファイルや画像が、アプリがオンにしている指示や道具といっしょにかばんへ入ります。ディスクの中身を丸ごとすくい取るわけではありません — 許可したものだけが一緒に行きます。かばんには大きさの上限があるので、アプリは古い部分を切り詰めたり、短くしたり、外したりします。AI が前に言ったことを忘れたように見えるのはそのためです。
インターネットを渡る
文字はたいてい HTTPS で運ばれます。ウェブページと同じ、鍵のかかった道です。ライブの音声のように両方向で話し続けなければならないものは、代わりに接続を開いたままにします。
計算機が受け取る
ランタイム — モデルの膨大な数字の山をメモリに載せて計算するプログラム — が、受け取った文字をトークン(モデルが読む小さなかけら)に切り分けます。モデルがまだメモリにないときは先に読み込む必要があるため、最初の答えが遅くなります。
次のトークンを引く
モデルは、次に来うるトークン一つ一つに点数を付け、一つを選びます。そのトークンを末尾に付け足して、またこの同じ段階に戻ってきます。「終わり」を意味するトークンが出るか、長さの上限に達するまで、何度でも。どう選ぶかは設定しだいです。温度を低くすると最高点を取ることが多くなり、答えのぶれが小さくなります — でも、ぶれの少ない答えが本当の答えとは限りません。
トークンごとにこの段階へ戻る
出てくるそばから送り返す
答えは書き終わるのを待ちません。文字は数かけらずつ届きます。音や画像、動画も少しずつ流れてくるものがあれば、完成したファイルとして届くものもあります。
プログラムが画面に映す
だから文字は、誰かがタイプしているように現れます。目の前でゆっくり考えているわけではありません — かけらが届いているだけで、その大きさや届く速さはサービスが決めています。
道は一つではなく二つ
この二つを一本の道として描くところから、恐ろしい誤解が生まれます。二つは同じではありません。
会話だけ
-
画面に文字
-
ここで終わり
詳しく見る
文字が画面を流れ、それで終わりです。自分のコンピューターには何も起こりません。このサイトのリエンアシスタントがこの道です。
手を借りる
-
道具の要求を見つける
-
許可を求める
-
実際にやる
-
結果を詰める
結果は 2 段階のかばんに入り、3 段階からまた出ていきます
詳しく見る
戻ってくるのは、やはり文字だけです。その文字が道具の要求 — 「このファイルを直して」 — なら、自分のコンピューターのがそれを確かめ、代わりに実行します。そして結果を 2 段階のかばんに詰め、3 段階からまた送り出して、会話が続きます。この往復こそ、人がと呼ぶものです。
よくできたプログラムは、ファイルを消したりコマンドを動かしたりする前にこちらに尋ねます — そして、その問いかけを切ると決めるのは人です。その問いかけこそが安全装置です。への丁寧なお願いではなく、プログラムが守らせているものです。
あえてたとえるなら
-
一つの体が計算部品を取り替えます。同じに、明日は別の会社のモデルを付けられます。
-
同じ計算部品が、互いに知らない大勢の人のリクエストを同時に処理します。生きているものならありえないことです。
詳しく見る
モデルは計算だけをする部品で、体は自分のコンピューターのプログラム、あるいはそれを包むサービスです。計算する部品には手がありません — 自分でファイルを作ることも、アプリを開くこともできません。できるのは、文字でお願いすることだけです。実際に動くものはすべて、許された範囲の中でプログラムがやっています。
あと二つだけ
計算機がいつも遠くにあるとは限りません
今このサイトが、まさにその絵です
| 1 · 自分のプログラム | 2 · ネットワーク | 3 · 遠くの計算機 | 4 · 計算モデル | 5 · 自分の画面 | |
|---|---|---|---|---|---|
| 自分のブラウザの中で | はい | いいえ | いいえ | はい | はい |
| 私たちのサーバーを経て | はい | はい | はい | はい | はい |
| 遠くの会社の機械で | はい | はい | はい | はい | はい |
真ん中の道(私たちのを通る道)でも、実際の計算は三つ目の道、遠くにある会社の機械で起きます。私たちのサーバーはリクエストを確かめて運ぶだけです。
詳しく見る
小さなモデルなら、自分のコンピューターの中でも動きます。このサイトの声がそうです。音声モデルを一度ダウンロードすれば、文字を音声に変える処理は自分の機器の上で行われます。チャットは違います — そのメッセージは今も SONUB を通ってのサービスへ送られます。
リエン学習アシスタントを開いて何か聞いてみてください。ブラウザが私たちのサーバーへ送り、サーバーが遠くの計算機に渡します。文字がかけらとなって戻ってくるのが 6 段階、その文字が画面で増えていくのが 7 段階です。リエンは会話だけの道にいるので、自分のコンピューターのファイルには手を触れません。
リエン学習アシスタントがそうです。私たちのサーバーは受け渡すだけで、モデルを動かしてはいません。
計算が実際に起きる場所です。その中でどのを使っているかは公開されていません。
大人のための注釈
もう少し正確な言い方が必要な方のために書き添えます。
トークン
モデルは単語を読みません。が文章をに切ります — 単語まるごとのことも、数文字のことも、1 のこともあります — そして一つ一つが数字になります。モデルが違えば同じ文の切り方も違うので、同じ文章でもトークンの数が変わることがあります。
ストリーミング
生成されるそばから部分出力を押し出し、ふつうは を使います。かけらの大きさは製品によって違い、トークン単位ではなく文単位で送るものもあります。
モデルの種類
(大きな言語モデル)、SLM(小さな言語モデル)、VLM(画像もいっしょに見るモデル)、そして画像・動画を作る拡散モデルがあります。LLMとSLMの違いは主に大きさで、VLMは画像も読み、拡散モデルは文字ではなく画像・動画を出します。
選び方
次のトークンをどう選ぶかは設定です。を下げるとモデルは最高点をより多く取り、同じ入力から似た答えが出やすくなります。上げると答えはばらつきます。ゼロにしても、実際のサービスは毎回まったく同じ答えを約束しません。それに、ぶれない答えのほうが正しいというわけでもありません。
RAG・MCP・スキル
かばんにもっと詰め込むやり方の名前です。 は資料を検索して見つけたものを添え、 は道具をつなぐよく使われる方法、は用意された指示のひとまとまりです。どれが使えるかはアプリの設定と権限が決めます — モデルだけで決まることはありません。
モデルを動かすプログラム(ランタイム)
このサイトが実際に使っているのは ONNX Runtime(音声合成)と sherpa-onnx(書き起こし)です。サーバーで大きな言語モデルを動かすときは、同じ役目の別のプログラム — vLLM・TensorRT-LLM・llama.cpp など — が使われます。どの会社が何を使っているかは公開されていません。
数値、精度、メモリ — そして数値を動かすランタイム
-
モデルファイル 楽譜
-
ランタイム 指揮者
-
CPU · GPU 演奏者
| 得意なこと | |
|---|---|
| ONNX Runtime | 多様なモデルをさまざまな機器で |
| llama.cpp | 自分のコンピューターでLLMを実行(GGUF) |
| FreeToken | 巨大なMoEモデルを個人のPCで |
詳しく見る
は、で得た膨大な数値と計算構造です。はその構造をに読み込み、CPUやなどの計算装置で実際に実行するエンジンです。
モデルファイルを楽譜、CPU・GPUを演奏者、ランタイムを楽譜を読んで演奏をまとめる指揮者と考えると分かりやすいでしょう。
ONNX Runtime — 画像・音声・言語など多様なモデルを、さまざまなOSとハードウェアで動かす汎用エンジンです。Execution Providerを介して装置別のアクセラレータにつなぎます。
llama.cpp — ローカルやの幅広い機器で・VLMを手軽に動かすことに重点を置いたエンジンです。形式のモデルファイルとよく使われます。
FreeToken — 非常に大きなMoEモデル(たくさんの専門家のうち一部だけを選んで計算するモデル)を個人のコンピューターで動かすために作られたランタイムです。NVIDIA GPU・CPU・メインメモリ(RAM)とその間の接続を、一台のマシンのようにまとめて使います。
パラメータとは?
- テンソル
- 行列
- ベクトル
- スカラー = パラメータ1個
- ベクトル
- 行列
[0.2, −0.7, 1.3]
ベクトル1個・スカラー数値3個・パラメータ3個
8BのBはではなくBillion(10億)です。8Bモデルとはが80億個ではなく、一つ一つが数字一個(スカラー)であるが約80億個あるという意味です。
パラメータと重み
- 重み
- バイアス
- 埋め込み
- 正規化係数
y = w₁x₁ + w₂x₂ + bはパラメータですが、すべてのパラメータが重みというわけではありません。
詳しく見る
パラメータは、モデルが学習によって得たり調整したりしたスカラー数値一つです。ベクトル・・テンソルは数値を入れる容器で、その中のスカラー数値一つ一つをパラメータとして数えます。
重みは代表的なパラメータで、入力を結果へどれほど強く反映するかを決めます。バイアス、、正規化係数などもパラメータになり得ます。
パラメータ一つが知識一つを入れる箱なのではありません。テンソルや行列が引き出し棚なら、パラメータは中の数値一マスであり、ビット数はその数値をどれほど精密に記録するかを表します。
パラメータ一つは何ビット?
詳しく見る
パラメータは一つの数値ですが、異なる精度で保存できます。ビット数を減らすと通常はメモリを節約できますが、実際のファイルにはスケールやメタデータなどの追加容量もあります。
なぜ8Bモデルが約8GBになるのか?(8ビットの場合)
重み容量 ≈ パラメータ数 × 1パラメータのビット数 ÷ 8表は重みだけを十進単位で単純計算した理論値です。実際の量子化ファイルはスケール、メタデータ、その他の構造により大きくなる場合があります。
詳しく見る
8ビット精度ではパラメータ一つが約1バイトです。したがって80億パラメータの純粋な重みは約8GBになります。同じパラメータ数でも精度が変われば容量も変わります。
実行時にはさらにメモリが必要
- 重み
- KVキャッシュ
- 計算バッファ
- ランタイムのオーバーヘッド
はが長いほど大きくなります
実行メモリ = 重み + KVキャッシュ + 計算バッファ + ランタイムのオーバーヘッド詳しく見る
重みファイルは出発点にすぎません。推論には過去のを保持するKVキャッシュ、一時的な計算バッファ、ランタイムのオーバーヘッドも必要です。理論上4GBのモデルでも実際には5〜8GB以上を使うことがあり、文脈が長いほど通常KVキャッシュは大きくなります。
小さな数値でどうして多くの知識を表せる?
詳しく見る
8ビットは256段階を表せますが、パラメータ一つに「ソウルは韓国の首都」のような文が入っているわけではありません。知識は、多数の層で相互作用する数十億のパラメータが作るパターン全体に分散しています。
画素一つは単なる色の値ですが、数百万個が並ぶと顔や風景が現れます。モデルの知識も同じように、分散した数値パターンから現れます。
AIモデルは、ベクトル・行列・テンソルにまとまった膨大なスカラーパラメータのパターンです。精度が理論上の重み容量を決め、ランタイムは重みをメモリに読み込み、追加の作業メモリを使ってハードウェア上で実行します。
同じ道のりを、一段ずつすべて
- 1 自分の手からプログラムまで
- 2 送るものを詰める
- 3 インターネットを渡る
- 4 サーバーの門前
- 5 サーバーの中 — 機械とランタイム
- 6 モデルが計算する
- 7 トークン一つずつ、何度も
- 8 帰り道
- 9 プログラムが受け取る
- 10 手を借りる繰り返し
1 自分の手からプログラムまで 1 番の場所 4段階
-
キーが押される
キーボードの中の小さなコンピューターがどのキーが動いたかを見つけ、それを数字にしてケーブルへ流します。
-
オペレーティングシステムが受け取る
カーネルのドライバーがその数字を入力イベントに変え、今いちばん手前にある窓へ向けて列に並べます。
-
プログラムが列から取り出す
どのも、イベントを一つずつ取り出して処理する繰り返しを回しています。入力欄に文字が現れるのがこの段階です。
-
マイクは別の道を行く
音は 1 秒に何万回もの測定値として届きます。テキストモデルが見る前に、音声認識モデルが話された部分を文字にします — ただ、新しいモデルの中には音をそのまま聞けるものもあります。
2 送るものを詰める 1 番の場所 7段階
-
システムプロンプト
プログラムを作った人があらかじめ書いておいた決まりが先頭に付きます — おまえは何で、どう答えるべきか。
-
ここまでの会話
これまでのやり取りが順番どおりに入ります。上限があるので、アプリは古いものから外したり、短くしたり、要約したりします — 入らなかったものは、モデルにはただ見えません。
-
自分が添えたもの
画像やファイルは、サービスが受け付ける形で添えられます。生のバイト、ファイル ID、リンク、あるいは base64 と呼ばれる長い文字の並びです。PDF からは、サービスが文字を抜き出したり、ページを画像にしたり、OCR で読み取ったりします。
-
自分の資料を探す(RAG)
これが です。質問を数字(またはキーワード)に変え、自分の資料の中からいちばん合う部分を探して一緒に詰めます。モデル自体を学習し直すわけではありません — 見つかった部分も、やはり確かめる必要があります。
-
道具の一覧
アプリが許可したすべての道具の名前と入力の形が、メニューのように書き出されます。アプリは自分の道具を並べることも、 から受け取ることもできます。
-
スキルとコマンド
誰かが前もって書いておいた指示の束 — — が、作業に必要なときに差し込まれます。スキルはスクリプトや参考ファイルも持てるので、信用する前に中身を読んでください。
-
上限に合わせる
かばん全体がトークンで数えられます。上限を超えると、アプリは何かを切ったり、短くしたり、外したりしなければなりません — たいていは、いちばん古いものからです。
3 インターネットを渡る 2 番の場所 4段階
-
住所を調べる
サーバーの名前を数字の住所に変えます()。
-
道を開き、錠をかける
何かを送る前に、自分のコンピューターとサーバーが道を開き、秘密の鍵を取り決めます。だから途中の誰にも、通るものは読めません(TCP と TLS。新しい /3 は QUIC で両方をこなします)。
-
誰なのかを示す
リクエストの頭に鍵()や札(トークン)を付けます。誰の分として計算するかがここで決まります。
-
リクエストを送る
ここまで詰めたものすべてが一つのリクエストになり、たいていは で書かれて出ていきます。ライブの音声のように両側が話し続ける必要があるときは、代わりに接続を開いたままにしておきます。
4 サーバーの門前 3 番の場所 3段階
-
門番
鍵が合っているか、呼びすぎていないかを見て、空いている計算機に渡します。
-
待ちの列
リクエストはすぐには計算されず、しばらく列に並びます。順番が来ると、ランタイムはすでに載せてある一組の数字で、待っていた複数の質問をまとめて計算します。
-
入ってきたものを調べる
計算を始める前に、決まりに反するリクエストでないかを先に見ます。
5 サーバーの中 — 機械とランタイム 3 番の場所 3段階
-
数字のファイルが眠っている
学習を終えたモデルは、保存装置に置かれた大きなファイルです。それだけでは何も計算しません。このサイトの音声モデルもファイル四つ、合わせて約 398MB です。
-
ランタイムが一度だけ載せる
サーバーが起動するとき(またはアプリが準備するとき)、ランタイムがそのファイルを読み、動かせるように整えてメモリに置いておきます。だから質問のたびに開き直すことはありません。メモリが足りなくなったり、サーバーが再起動したりすると、もう一度読み込む必要があります。
-
アクセラレーターが掛け算を引き受ける
同じ掛け算を途方もない回数こなす必要があるので、まさにそのために作られた部品に任せます。その隣の速い記憶に数字が居座ります。ふつうの CPU でもできますが、その場合は遅いだけです。
ランタイムはアクセラレーターの中に入っているのではありません。ファイルを読んでその部品の隣の記憶へ数字を載せる、別に動くプログラムです。
複数のリクエストをまとめるのは 17 番、済んだ計算を取っておくのは 27 番 — どちらもこのプログラムの仕事です。
6 モデルが計算する 4 番の場所 7段階
-
トークンに切る
文章は、このモデルのが知っているかけらに切られ、一つ一つに決まった番号(ID)が付きます。別のモデルなら、同じ文章を違うかけらに切るかもしれません。
-
番号を数字の並びへ
ID の一つ一つが、学習のあいだに身につけた長い数字の並び(埋め込みベクトル)を選び出します。ID の番号そのものには意味がありません。似た使われ方をするかけら同士で似てくることがあるのは、この数字の並びのほうです。
-
順番を記す
各トークンが何番目にあるかも数字として伝えます — これがないと、モデルは「犬が人をかんだ」と「人が犬をかんだ」を見分けられません。やり方はモデルによって違い、回転位置埋め込み(RoPE)はよく使われる方法の一つです。
-
互いを見る(アテンション)
— モデルはトークンごとに、前にある各トークンをどれだけ見るかを計算し、それに合わせて情報を混ぜ合わせます。見るのはすでに書かれたほうだけで、まだ書かれていないトークンは決して見ません。
-
層を重ねて掛けて足す
数字はたくさんの層を通ります — 大きなモデルでは数十層 — 各層がアテンションと、掛け算と足し算をひと回りずつ行います。層を通るたびに数字は少しずつ変わり、層がいくつあるかはモデルによります。
-
すべてに点数をつける
最後の層が、知っているトークン全部に点数を出します。モデルによって数万〜数十万個に一度に点数が付きます。
-
一つ選ぶ
最後の点数はに変えられます()。は確率をとがらせたり平らにしたりし、 と top-p はいちばんありそうな少数だけを残し、それから一つのトークンが引かれます。いつも最高点を取るやり方は(greedy)と呼ばれます。
7 トークン一つずつ、何度も 4 番の場所 3段階
-
後ろにつなげる
-
済んだ計算を使い回す
前のトークンのためにすでに計算した数字は、やり直さずに取っておきます(KVキャッシュ)。時間は節約できますがメモリを使います。それに全体の速さは、文章の長さ、サーバーの混み具合、ネットワークにも左右されます。
-
22 番へ戻る
トークン一つ分長くなった文章が、もう一度モデルを通ります — 27 番のおかげで、計算済みの部分は使い回されます。「終わり」を意味するトークンが出るか、長さの上限に達するまで、ぐるぐると回ります。
答えを書き進める繰り返しがこれです — トークン一つごとに 22 番へ戻ります。
8 帰り道 2 番の場所 4段階
-
トークンの番号を読める文字に戻す
-
出てくるそばから流す
答え全体を待たず、できたそばから小さなかたまりにして押し出します()。
-
出ていくものを調べる
出ていく文も、決まりに反していないかを見ます。
-
使った分を記録する
送ったトークンと受け取ったトークンの数を数えます。料金が出てくるのはここです。
9 プログラムが受け取る 5 番の場所 4段階
-
届いたかけらを順につなぐ
-
画面に描く
マークダウンを読んで見出し・箇条書き・枠に変えて描きます。タイプしているように見えるのがこの部分です。
-
道具の要求を見つける
答えの中に決まった形の道具呼び出しが混じっていないかを、プログラムが見張っています。
-
引数を確かめる
その道具が実際にあるか、引数の形が合っているかを、動かす前に調べます。
10 手を借りる繰り返し 5 番の場所 4段階
-
許可を求める
ファイルの削除やコマンドの実行のような危ない操作の前には、よくできたアプリならまずこちらに確認を求めます。その確認はモデルではなくアプリの中にあり、それを切るのは人が下す判断です。
-
実際にやる
アプリが、モデルに頼まれたことを実行します。ファイルを書き換える、コマンドを動かす、別のプログラム(MCP サーバー)を呼ぶ — ただし与えられた権限の範囲内だけです。
-
結果を詰める
何が出たか、失敗したならなぜかを、6 番の会話に新しい行として詰めます。
-
15 番へ戻る
その結果を入れて詰め直したかばんが、もう一度送られます。モデルが終わったと言うまで、あるいは上限・キャンセル・エラーのためにアプリが止めるまで、これが続きます。
人がと呼ぶ繰り返しがこれです — 15 番へ何度も戻ります。