実行プログラムと拡張機能

LM Studio:画面でモデルを選び、自分のアプリにつなぐ

LM Studioで文書を添付して質問するのは難しくありません。ところが同じモデルを別のプログラムにつなぐと、文書の内容を知りません。モデルが変わったのではなく、アプリが代わりに行っていた処理が抜けているのかもしれません。画面で使う段階とサーバーとして使う段階を分けて考えます。

画面の裏で行われていた処理を知ります

LM Studioを選ぶ理由は、モデル検索・ファイル管理・会話・設定確認を画面上で続けられることです。モデルを切り替えて回答を比較したり、文書について質問したりする機会が多ければ、起動コマンドを覚えるより先に結果を確かめることに時間を使えます。

文書チャットでは、短い資料をコンテキストに入れたり、長い資料から関連部分を探して渡したりする処理が加わります。外部アプリが同じモデルのAPIを呼んでも、この処理や添付文書まで引き継ぐわけではありません。自作プログラムで文書を使うなら、どの内容を探してリクエストに含めるかも別途実装する必要があります。

Macでは同じモデル名でもファイル形式を確認します

LM Studioはllama.cppによるGGUFの実行に加え、Apple SiliconのMacではMLXにも対応しています。検索結果のモデル名が同じでも、ファイル形式をそのまま置き換えられるわけではありません。比較する際はモデルのリビジョン、量子化、コンテキストに加えて、使ったランタイムも記録します。

アプリ自体のシステム要件も別にあります。現在の案内では、MacはApple SiliconとmacOS 14以上が必要で、Intel Macには対応していません。Windows x64ではAVX2対応を確認します。アプリをインストールできることと、大きなモデルを載せるメモリがあることは別です。

メモリ不足か、コンテキストが大きすぎるのか

使うモデルをダウンロードし、まず短いコンテキストでロードします。CLIのlms loadに--estimate-onlyを付けると、実際にはロードせずにメモリ使用量を推計できます。他のアプリの使用量や実行中の変化まで保証する値ではないので、ロード後の状態も確認してください。

以下の最初のコマンドでダウンロード済みモデルを一つ選び、API上の名前をlocal-guideにします。4,096は短い確認用のコンテキストです。長い文書を使うときは必要に応じて増やしますが、最初からコンテキストとGPU設定を同時に変えないでください。問題が起きたときに戻れる基準がなくなります。

ダウンロード済みモデルを選んでサーバーを起動

lms load --context-length 4096 --identifier local-guide
lms server start --bind 127.0.0.1 --port 1234

LM Studioとlmsが準備済みの環境で実行します。最初のコマンドでモデルの選択を終えてからサーバーを起動してください。起動済みのサーバーがあれば重複して実行しません。

モデルの別名とアドレスを確認します

サーバーの起動状態を確認してから、以下のリクエストを送ります。local-guideはファイル名ではなく、先ほど設定したAPI用の別名です。外部アプリには127.0.0.1:1234と、そのアプリが必要とするAPIパスを合わせて設定します。base URLを指定するクライアントでは、通常は/v1まで含めます。

応答がなければ、モデル名、サーバーのポート、認証設定の順に確認してください。認証が有効なら、発行したトークンをリクエストヘッダーに追加する必要があります。接続エラーを直すために、むやみにネットワーク公開やCORSを有効にしないでください。この構成は同じパソコンからの接続だけを前提としています。

API用の別名で回答を確認

curl -sS http://127.0.0.1:1234/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"local-guide","messages":[{"role":"user","content":"Reply with one short sentence."}],"max_tokens":128,"stream":false}'

認証を有効にしていないローカルサーバーの確認例です。完成した回答をまとめて受け取るため、最初のトークンまでの時間の測定には使いません。

同じアプリなのに回答が変わったら

以前は問題なく答えていたモデルが繰り返しを始めたり、指定形式を守らなくなったりした場合、最初に疑うのはエンジン速度ではありません。モデルファイルが変わっていないか、会話テンプレートと生成設定が同じかを確認します。新しいモデルをロードできないときは、アプリのバージョンだけでなくランタイムの対応状況も調べます。

ツール呼び出しも通常のチャットとは別に試します。リクエストを受け取ることと、アプリが理解できる形式でツール呼び出しを返すことは別です。短い会話、必要なツール一つ、実際の作業という順に進めると、どの段階で問題が起きたかを見つけやすくなります。

画面を開かずに動かしたくなったら

GUIなしで継続してサーバーを動かすために、LM Studioにはllmsterという別のデーモンもあります。サーバーを使うという理由だけで、すぐに別の製品へ移る必要はありません。ただし、起動方法、更新、再起動後の復旧は、デスクトップでの会話とは別に準備する必要があります。

一方、特定の高速化方式やファイル形式をさらに細かく扱う必要が出たら、そのエンジンのガイドを調べる時です。まず正常に動いたモデル・ランタイム・設定を残してください。変更した結果が合わないときに戻せる構成があれば、落ち着いて比較できます。

変更履歴

サイトの説明を変更した記録です。インストール済みのエンジンやモデルのバージョンを自動で確認した結果ではありません。

  1. LM Studioのモデル読み込み・API接続の案内を追加

    モデルの読み込み時に文脈長と識別子を設定し、同じ名前でローカルAPIへリクエストする例を追加しました。MLXとGGUFの実行経路を区別し、アプリに追加した文書がAPIリクエストにも自動で含まれるわけではないことを説明しました。