AI News HubLIVE
サイト内リライト3 分で読了

Go AI推論の理解:推論とは何か?

本記事は、Goからローカルで大規模言語モデルを実行する新シリーズの導入です。推論とは凍結された重みを使用した次のトークン予測であり、自己回帰ループ、トークン化、GGUFファイル形式、効率的なロードのためのメモリマッピングについて説明します。

ソースHacker News AI著者: valyala

新しいシリーズへようこそ!今日のほとんどの開発者にとって、大規模言語モデルを使用するということは、他人のコンピュータへのHTTPコールを意味します。プロンプトをAPIに送信し、トークンが返ってきて、その間のすべては他人の魔法です。しかし、もっと面白いのは、これらのモデルを自分のプロセス内で、自分のハードウェア上でローカルに実行できることです。そしてGo開発者なら、Goから直接実行できます。現在、これを実現する2つのプロジェクトがあります。Yzmaは、Goがllama.cppライブラリを直接呼び出せるようにします(cgoなし——これについてはシリーズ後半で別途説明)。Kronkは、Yzma上に高レベルでOpenAI APIのようなSDKとモデルサーバーを構築します。そして両方の基盤には、通常のハードウェアでLLMを実行可能にしたC/C++推論エンジン、llama.cppがあります。

このシリーズでは、そのスタック全体を内部から理解します。llama.cppが実際に「モデルを実行する」ときに何を行うか、YzmaがどのようにGoから呼び出すか、Kronkがそれを本番で使いたくなるエンジンに変えるかを学びます。

範囲について:本記事の目標は、モデルファイルの保存、ロード、実行の仕組みを理解することであり、ニューラルネットワーク内部の数学には立ち入りません。llama.cppの詳細は2026年7月のmaster(コミットad8d8219)に基づきます。これは概念的なツアーであり、C++コード詳細やGoレイヤー(Yzma、Kronk)には触れません。

推論とは実際何か? 言語モデルには2つの全く異なるフェーズがあります。トレーニングは、何テラバイトものテキストをモデルに与え、数十億の数値(重み)を調整して、次のトークンを予測するタスクに熟達させるプロセスです。トレーニングには数ヶ月とデータセンターが必要であり、このシリーズでは扱いません。 推論はトレーニング終了後、重みが固定され、それを使用するだけです。最良のメンタルモデルは純粋関数です。入力(テキストシーケンスと固定重み)を受け取り、出力(次のトークンの予測)を返します。nextToken(input, weights)のようなものです。学習は行われず、重みは読み取り専用の引数です。

トークン:モデルのアルファベット モデルはテキストを読みません。トークン(固定語彙からの整数ID)を扱います。各IDはテキストのチャンク(単語、単語の一部、句読点)に対応します。プロンプト「The capital of France is 」は5〜6個のトークンIDになります。モデルはその後、整数のみを扱います。

1回のパス、1回の予測 モデルは入力トークンシーケンス全体を一度にネットワークに通し、単一の予測を出力します。トークンIDはまず埋め込みベクトルに変換され、それらがモデルに入力され、計算の結果、語彙内の各トークンのスコアリストが生成されます。そこから「Paris」を選択します。この最終選択をサンプリングと呼びます。

自己回帰ループ 1回のパスで1トークンのみ生成されます。完全な文を得るには、このプロセスを繰り返します。生成されたトークンをシーケンスに追加し、再度モデルを実行します。これを、特別な終了トークンが生成されるか、長さ制限に達するまで続けます。LLMの回答はすべて、このループによって1トークンずつ生成されます。

GGUF:1ファイルに収まったモデル全体 重みは名前付き配列(テンソル)に編成されています。GGUF(GGML Universal File)は、これらすべてのテンソルを1つの自己記述ファイルに格納する形式です。ファイルには重み、アーキテクチャ、ハイパーパラメータ、トークナイザ全体、チャットテンプレートが含まれ、追加ファイルは不要です。

ファイル構造は、ヘッダー(マジックバイト、バージョン、テンソル数、メタデータ数)、メタデータ(キーと値のペア)、テンソル記述子(名前、形状、型、オフセット)、データブロック(実際のテンソルデータ)からなります。

メタデータ:general.architectureがモデルタイプを指定します。tokenizer.*には完全な語彙と設定が含まれます。

データのロード:ローダーは最初にヘッダー、メタデータ、テンソル記述子のみを解析し、テンソルデータは読み込みません。CPUテンソルにはmmapを使用してファイルをプロセス空間にマップし、各テンソルを直接アドレス指定します。GPUテンソルは別途VRAMにコピーされます。

KVキャッシュ:高速生成の鍵 ロードされたモデルは、重みやトークナイザなど不変のデータを含むllama_modelを提供します。これは複数の会話で共有可能です。KVキャッシュは、自己回帰生成中に過去の注意計算を再利用することで、効率的な生成を可能にします。