# セルフホスト型AIモデル

# はじめに

このガイドは、PC上で実行されているローカルAI(今後は適切な用語を使用してLLMと呼びます)を使用してSillyTavernをセットアップするのに役立つことを目的としています。技術サポートの質問で人々を煩わせる前に、これを読んでください。

# 最高の大規模言語モデル(LLM)とは何ですか?

「最高」の標準化されたスケールがないため、この質問に答えることは不可能です。コミュニティには、少なくとも好まれる/定番のモデルについてある程度の意見を形成するのに十分なリソースと議論がRedditとDiscordで行われています。個人差があります。

# 最高の構成とは何ですか?

最高または当然のセットアップがある場合、構成の必要性さえあるでしょうか?最高の構成は、あなたに合うものです。それは試行錯誤のプロセスです。

# ハードウェア要件とオリエンテーション

これは複雑な主題なので、本質に固執し、一般化します。

  • インターネットからダウンロードできる無料のLLMが何千もあります。Stable Diffusionが画像を生成するために取得できるモデルが大量にあるのと同様です。
  • 未修正のLLMを実行するには、大量のVRAM(GPUメモリ)を持つモンスターGPUが必要です。あなたが持つことはないでしょう。
  • 量子化技術(GPTQやAWQなど)を使用してモデルを圧縮することで、VRAM要件を削減できます。これによりモデルは多少能力が低下しますが、実行するために必要なVRAM要件が大幅に削減されます。突然、これにより3080のようなゲーミングGPUを持つ人々が13Bモデルを実行できるようになりました。量子化されていないモデルほど優れていませんが、それでも優れています。
  • さらに良いことに: GGUF(以前はGGML)と呼ばれるモデルフォーマットと量子化も存在します。これは、モンスターGPUを持たない通常の人々の選択フォーマットになりました。これにより、GPUなしでLLMを使用できます。CPUとRAMのみを使用します。これは、GPTQやAWQを使用してGPU上でLLMを実行するよりもはるかに遅い(おそらく15倍)ですが、特にプロンプト処理中に、モデルの能力は同じくらい優れています。GGUF作成者は、ゲーミンググレードのGPUを持つ人々がモデルの一部をGPUにオフロードできるようにする構成オプションを追加することで、GGUFをさらに最適化し、モデルの一部をGPU速度で実行できるようにしました(これによりRAM要件が減少するわけではなく、生成速度が向上するだけです)。
  • モデルにはさまざまなサイズがあり、トレーニングされたパラメーターの数に基づいて名前が付けられています。7B、13B、30B、70Bなどの名前が表示されます。これらをモデルの脳のサイズと考えることができます。13Bモデルは、同じファミリーのモデルの7Bよりも能力が高くなります。それらは同じデータでトレーニングされていますが、より大きな脳は知識をよりよく保持し、よりまとまって考えることができます。大きなモデルは、より多くのVRAM/RAMも必要とします。
  • 量子化には複数の度合いがあります(8ビット、5ビット、4ビットなど)。低くなるほど、モデルは劣化しますが、ハードウェア要件は低くなります。したがって、悪いハードウェアでも、希望するモデルの4ビットバージョンを実行できる可能性があります。3ビットと2ビットの量子化もありますが、この時点で死んだ馬を叩いています。k_s、k_m、k_lなどの名前が付けられたさらに量子化サブタイプもあります。k_mはk_sよりも優れていますが、より多くのリソースを必要とします。
  • コンテキストサイズ(モデルがその一部を削除せずに会話を続けられる長さ)もVRAM/RAM要件に影響します。幸いなことに、これは設定可能な設定であり、より小さいコンテキストを使用してVRAM/RAM要件を削減できます。(注: Llama2ベースのモデルのコンテキストサイズは4kです。Mistralは8kとして宣伝されていますが、実際には4kです。)
  • 2023年のある時期に、NVIDIAはGPUドライバを変更し、GPUが持つVRAMよりも多くのVRAMが必要な場合、タスクがクラッシュする代わりに、通常のRAMをフォールバックとして使用し始めるようにしました。これによりLLMの書き込み速度が台無しになりますが、モデルは引き続き機能し、同じ品質の出力を提供します。幸いなことに、この動作は無効にできます

上記のすべてを考慮すると、ハードウェア要件とパフォーマンスは、モデルのファミリー、モデルのタイプ、モデルのサイズ、量子化方法などに応じて完全に異なります。

# モデルサイズ計算機

Nyx's Model Size Calculatorを使用して、必要なRAM/VRAMの量を決定できます。

覚えておいてください、ディスクスワッピングを引き起こすことなく、メモリに収まる最大の、最も量子化されていないモデルを実行したいということです。

# LLMのダウンロード

開始するには、LLMをダウンロードする必要があります。LLMを見つけてダウンロードする最も一般的な場所はHuggingFaceです。何千ものモデルが利用可能です。GGUFモデルを見つける良い方法は、bartowskiのアカウントページを確認することです: https://huggingface.co/bartowski。GGUFが必要ない場合、彼は同じモデルの他のフォーマットが見つかる可能性のある元のモデルページにリンクしています。

特定のモデルのページには、多数のファイルがあります。

  • すべてが必要ではない場合があります!GGUFの場合、.ggufモデルファイル(通常4-11GB)だけが必要です。複数の大きなファイルが見つかった場合、通常、それらはすべて同じモデルの異なる量子化であり、1つだけを選択する必要があります。
  • .safetensorsファイル(GPTQ、AWQ、HF量子化、または未量子化の可能性があります)の場合、ファイル名にmodel-00001-of-00003.safetensorsのような数字シーケンスが表示される場合、完全なモデルを取得するには、これらの3つの.safetensorsファイルすべて+リポジトリ内の他のすべてのファイル(tokenizer、configsなど)が必要です。
  • 2024年1月時点で、Mixtral MOE 8x7Bは、ローカルLLMの最先端として広く考えられています。実行するための32GBのRAMがある場合は、ぜひ試してください。32GB未満のRAMがある場合は、Kunoichi-DPO-v2-7Bを使用してください。サイズにもかかわらず、最初から素晴らしいです。

# Kunoichi-DPO-v2-7Bのダウンロード手順

このガイドの残りの部分では、Kunoichi-DPO-v2-7Bモデルを使用します。これは、7GB RAMしか必要とせず、その重量をはるかに超えて打つ、Mistral 7Bベースの優れたモデルです。注: KunoichiはAlpacaプロンプティングを使用します。

  • https://huggingface.co/brittlewis12/Kunoichi-DPO-v2-7B-GGUFに移動します
  • 「Files and versions」をクリックします。いくつかのファイルのリストが表示されます。これらはすべて同じモデルですが、異なる量子化オプションで提供されています。ファイル「kunoichi-dpo-v2-7b.Q6_K.gguf」をクリックします。これにより6ビット量子化が得られます。
  • 「download」ボタンをクリックします。ダウンロードが開始されるはずです。

# モデルのタイプを識別する方法

TheBlokeのような優れたモデルアップローダーは、説明的な名前を付けます。しかし、そうでない場合:

  • ファイル名が.ggufで終わる: GGUF CPUモデル(当然)
  • ファイル名が.safetensorsで終わる: 未量子化、HF量子化、GPTQ、またはAWQの可能性がある
  • ファイル名がpytorch-***.bin: 上記と同じですが、これはモデルがロードされたときにモデルが任意のPythonスクリプトを実行できるようにする古いモデルファイルフォーマットで、安全でないと見なされます。モデル作成者を信頼している場合、または絶望的な場合は使用できますが、オプションがある場合は.safetensorsを選択してください。
  • config.jsonが存在しますか?quant_methodがあるかどうかを確認します。
  • q4は4ビット量子化を意味し、q5は5ビット量子化などです
  • -16kのような数字が表示されますか?それはコンテキストサイズの増加です(つまり、モデルがチャットの最初を忘れる前に会話を続けられる長さ)!より高いコンテキストサイズはより多くのVRAMを必要とすることに注意してください。

# LLMサーバーのインストール: OobaboogaまたはKoboldAI

LLMがPC上にあるので、SillyTavernとモデルの間の仲介者として機能するツールをダウンロードする必要があります。これはモデルをロードし、その機能をローカルHTTP Web APIとして公開し、SillyTavernがOpenAI GPTやClaudeなどの有料Webサービスと通信するのと同じように通信できるようにします。使用するツールは、KoboldAIまたはOobabooga(または他の互換性のあるツール)である必要があります。

このガイドは両方のオプションをカバーしていますが、1つだけが必要です。

# KoboldCppのダウンロードと使用(インストール不要、GGUFモデル)

  1. https://koboldai.org/cpp にアクセスすると、ダウンロードできるさまざまなファイルを含む最新バージョンが表示されます。 執筆時点では、彼らがリストしている最新のCUDAバージョンはcu12で、現代のNvidia GPUで最もうまく機能します。古いGPUまたは別のブランドをお持ちの場合は、通常のkoboldcpp.exeを使用できます。古いCPUをお持ちの場合、モデルをロードしようとするとKoboldCppがクラッシュする可能性があります。その場合は、_oldcpuバージョンを試して問題が解決するかどうかを確認してください。
  2. KoboldCppをインストールする必要はありません。KoboldCppを起動すると、すぐにModelフィールドの横のBrowseボタンを使用して、上記でリンクされたようなGGUFモデルを選択できます。
  3. デフォルトでは、SillyTavernでこれをより高く設定しても、KoboldCppは最大4Kコンテキストで実行されます。より高いコンテキストでモデルを実行したい場合は、モデルを起動する前にこの画面でcontext sliderを調整してください。より多くのコンテキストサイズはより高い(ビデオ)メモリ要件を意味することに注意してください。これをシステムに対して大きすぎるモデルをロードする場合は、KoboldCppは自動的にGPUに収まらないレイヤーにCPUを使用し始めます。これははるかに遅くなります。
  4. Launchをクリックすると、すべてがうまくいけば、KoboldAI Liteで新しいWebページが開き、すべてが正しく機能するかどうかをテストできます。
  5. SillyTavernを開き、API Connections(上部バーの2番目のボタン)をクリックします
  6. APIをText Completionに設定し、API TypeをKoboldCppに設定します。
  7. サーバーURLをhttp://127.0.0.1:5001/に設定するか、KoboldCppが同じシステムで実行されていない場合にKoboldCppが提供したリンクを設定します(Remote Tunnelモードをアクティベートしてどこからでもアクセスできるリンクを取得できます)。
  8. Connectをクリックします。正常に接続し、kunoichi-dpo-v2-7b.Q6_K.ggufをモデルとして検出するはずです。
  9. キャラクターとチャットして機能することをテストします。

# KoboldCppの速度を最適化するためのヒント

  1. Flash Attentionはメモリ要件を減らすのに役立ちます。システムによって速くなることも遅くなることもあり、デフォルトよりもGPUに多くのレイヤーを収めることができます。
  2. KoboldCppは問題を防ぐために他のソフトウェアのためのスペースを残すときにレイヤーを推測しますが、開いているプログラムが少なく、モデル全体をGPUに収めることができない場合、いくつかの追加レイヤーを追加できる可能性があります。
  3. モデルがコンテキストサイズに対して過剰なメモリを使用する場合、KVを量子化することでこれを減らすことができます。これにより出力の品質が低下しますが、GPUにより多くのレイヤーを配置するのに役立ちます。これを行うには、KoboldCppのTokensタブに移動し、Context Shiftingを無効にしてFlash Attentionを有効にします。これによりQuantized KV Cacheスライダーがアンロックされます。数値が低いほど、メモリ/モデルのインテリジェンスが少なくなります。
  4. プロンプトの処理に時間がかかる遅いシステムでKoboldCppを実行していますか?Context Shiftingは、Lorebooks、ランダム化、または入力を動的に変更する他の機能の使用を避けると最も効果的です。Context Shiftingを有効にしたままにしておくと、KoboldCppが長い再処理時間を回避するのに役立ちます。

# Oobaboogaのインストール

より正確な/ダミープルーフなインストール手順は次のとおりです:

  1. git clone https://github.com/oobabooga/text-generation-webui (またはブラウザでリポジトリを.zipとしてダウンロードしてから解凍します)
  2. start_windows.batまたはOSに応じて実行します
  3. 尋ねられたら、GPUタイプを選択します。GGUF/CPUを使用する予定でも、GPUがリストにある場合は、今すぐ選択してください。これにより、後でGPUシャーディングと呼ばれる速度最適化を使用するオプションが得られます(最初からやり直す必要がありません)。ゲーミンググレードのdGPU(NVIDIA、AMD)がない場合は、Noneを選択します。
  4. インストールが完了するのを待ちます
  5. kunoichi-dpo-v2-7b.Q6_K.ggufをtext-generation-webui/modelsに配置します
  6. text-generation-webui/CMD_FLAGS.txtを開き、内部のすべてを削除して次のように書きます: --api
  7. Oobaboogaを再起動します
  8. http://127.0.0.1:5000/docsにアクセスします。FastAPIページがロードされますか?そうでない場合は、どこかで間違えました。

# Oobaboogaでモデルをロードする

  1. ブラウザでhttp://127.0.0.1:7860/を開きます
  2. Modelタブをクリックします
  3. ドロップダウンで、Kunoichi DPO v2モデルを選択します。llama.cppローダーが自動的に選択されているはずです。
  4. (オプション)以前に何度か「GPUオフロード」について言及しました。それがこのページのn-gpu-layers設定です。使用したい場合は、モデルをロードする前に値を設定してください。基本的な参考として、30に設定すると、13B以下のモデルで6GB VRAM未満を使用します。(モデルのアーキテクチャとサイズによって異なります)
  5. Loadをクリックします

# SillyTavernをOobaboogaと通信するように設定する

  1. API Connections(上部バーの2番目のボタン)をクリックします
  2. APIをText Completionに設定します
  3. API TypeをDefault (Oobabooga)に設定します
  4. サーバーURLをhttp://127.0.0.1:5000/に設定します
  5. Connectをクリックします。正常に接続し、kunoichi-dpo-v2-7b.Q6_K.ggufをモデルとして検出するはずです。
  6. キャラクターとチャットして機能することをテストします

# 結論

おめでとうございます。動作するローカルLLMができました。