個人的な日本語ローカルLLM関連のメモ用Wikiです。一般の方は編集できません。

このWikiは主に日本語対応のローカルLLM(大規模言語モデル)関連のメモ的なものです。
ページの内容が古かったり、誤った情報が載っているかもしれないのでご注意ください。

編集履歴:
2024/08/19:一部修正など


そもそもLLM(大規模言語モデル)ってなに?

LLM(大規模言語モデル)は大量のテキストデータをディープラーニングを使用して学習された自然言語処理モデル、らしい。(正直わからん、俺は雰囲気でLLMを触っている...)

LLMのざっくりした仕組み

ユーザーの入力したテキスト(プロンプトと呼ばれる)から続きのテキストデータ(正確にはトークンと呼ばれる単語などを区切ったもの)を確率などを用いて予測して出力する。
例えば”日本の首都は”というユーザーからの入力に対して、事前に学習したデータから確率的に”東京”が一番高い場合、”東京”と出力される。
ものすごく簡単に言えばPCやスマホのIMEの入力補完機能をより複雑にしたもの、かな?
(おは→ようございます...といった具合)

そのため、幻覚(ハルシネーション)と呼ばれる”嘘”をつく事がある。
”架空の人間の名前”とその人の経歴を教えて、と入力すると事前に学習されたデータからそれらしいテキストを出力してまるでその人が実在するかのようにユーザーを錯覚させる。

以下のやり取りはTheBloke/Swallow-13B-Instruct-AWQモデルを使ってテストした例
ユーザー:佐藤田中さんの経歴を教えて
アシスタント:佐藤田中は、日本の実業家であり投資家です。 彼は、日本で最も成功した起業家の 1 人と見なされており、多くの企業を設立しています。 彼の経歴には、大学卒業後に就職した会社での仕事、自分の会社の設立、投資ファンドの設立などが含まれます。

このため、出力された情報の信憑性には気を付ける必要がある。
一方で出力される情報が正確である必要のない用途(小説を書かせる、キャラクターになりきってチャットを行うなど...)には問題ない...かも

また、学習後に起きた事(時事)なども苦手な分野とされているが、RAGといわれる手法で検索エンジンやニュースサイトなど、外部のデータと連携する事でカバーする動きもある。

なんでローカルで動かすの?

ChatGPTなどに比べて性能に劣るローカル環境で動かす意味と言えばロマンしかないでしょ。マロン美味しいよね
一般的な用途ならChatGPTとかのクラウドなLLMサービスの方が良いよ

ローカルで動かすのに必要なマシンスペックや使うソフトウェアなど

PCスペック

基本的にはNVIDIA製のGPU(& 8GB以上のVRAM)があれば7Bクラスの量子化モデルで快適にチャットできると思うが、GPUなしでもGGUF形式ならここ最近のミドルクラスのCPUとメインメモリ16GB(ちょっと厳しいか?)でも動く(チャット用途では応答速度が遅いかも?)

もう少し詳しく説明すると必要なマシンスペックは動かす言語モデル(のパラメータサイズや量子化タイプなど)と求める応答速度(トークン生成速度)による。

LLMには7B,13B,70B...など◯B、という表記がある。これはモデルのパラメータ数の事で7Bなら70億パラメータという意味になる。
基本的にはこのパラメータ数が多い方が賢いと言えるがパラメータ数が多いほど要求されるVRAM(GPUのメモリ)も必要になってくる。(生の言語モデルはGPU/VRAM上で動作させるので)

ただ、量子化という精度(賢さ)を犠牲にして軽量/高速化する手法があり、ローカル環境ではこの量子化されたモデルを動かすことが多い。
※言語モデルのファイルサイズ*1.2程度が必要なVRAM(GGUF形式ならメインメモリの)容量らしい。(量子化済みのファイルサイズ5GBの言語モデルならVRAM/6GB前後)
※ちなみに画像生成AIと違ってローカルLLMは複数のGPUを組み合わせて動かす事も可能なのでマイニング用ライザーカードなどと複数のRTX3060/12GBで動かす方変態も居られるとか こっわ
→俺も変態になっちまったよ.... TeslaP40(VRAM/24GB)x2+RTX3060/12GB+X99マザボセットでローカルLLM推論専用マシンを作った話

量子化されていない(生の)モデルをロードする時に8ビット or 4ビットで読み込む方法と予めモデルを量子化(変換)する方法がある。

量子化の種類によって要求されるスペックが異なる。

  • GGUF(旧GGML)
CPUやメインメモリで動くタイプ。最近はこの形式が主流っぽい?
GPUなしでも動作するし、一部(または載るなら全部)をGPUへオフロードして動かす事もできる。(メインメモリよりVRAMへ載せたほうが早い)
あとmacやラズパイでも動くらしい

CPUについては現在市販されている物なら4コア/8スレッド程度でも実用上は変わらないようだ。
ただ、GPUへモデルを全部オフロードしない場合(GPU無しのケースやVRAMから溢れる場合)はメインメモリの帯域(転送速度)がボトルネックになる。
高性能なCPUへアップグレードするより、より大容量のVRAMを積んだGPUに交換したりメインメモリをOCした方が良いと思う。
Ryzen 5700X(8コア/16スレッド)メインメモリ88GB/DDR4-2666(うち60GBを割り当て)+ RTX3060/12GBへオフロードして70B(q4_K_M)モデルが動いたがチャットとしては返答速度が遅くて実用的とは言えなかった。
  • GPTQ
こちらはGPU/VRAM専用
RTX3060/12GBで13B@4bit量子化モデルがチャットとして実用的なレベルで動いた。
  • AWQ
こちらもGPU/VRAM専用
GPTQより新しい量子化の手法
RTX3060/12GBで13B@4bit量子化モデルがチャットとして実用的なレベルで動いた。

ソフトウェア

ローカルでLLMを動かす際にCLIから言語モデルを利用するのはあまり現実的ではないのでなんらかのフロントエンド(UI)が必要になる。
このWikiでは(スタンドアロン)フロントエンドとしてText generation web UI(通称、ooba,大葉)を主に解説する。
他にも同様のフロントエンドとしてkoboldcppなどがあるが、Text generation web UIと比べると日本語圏での利用者が少ない感じ?
※koboldcppについてはlocalmlhub @ ウィキが詳しくておすすめ

その他、Text generation web UIやkoboldcppなどを必要とするが、ロールプレイ/チャットなどに特化したプロキシフロントエンドと呼ばれるソフトウェアもある。
代表的なのがSillyTavernで、そのほかRisuAIなど、これらのソフトウェアはText generation web UI(やkoboldcpp,その他クラウドLLMサービスなど)とAPI接続する必要がある。

言語モデルの種類(バリエーション)など

ベースとしている言語モデル

現在、日本語モデルで実用的なものは1から作られたものよりオープンなLLMをベースにしたものが多い
ローカルで動く日本語対応言語モデルだとMate社が開発したLLaMA系列が強い(賢い)感じ(個人的な感想です)
SwallowELYZA-japanese-Llama-2など

他にも中国のAlibabaが開発したQwenをベースとしてファインチューニングしたQarasuや、仏Mistral AI社が開発したMistralをベースにしたShisaShisaに対して継続事前学習とファインチューニングを行ったKarasu、StabilityAI社のJapanese Stable LM Gamma 7Bなどがある。

ベースとしている言語モデルが同じ場合、mergekitでモデルのマージが行える(?)

パラメータ数(◯B)による違い

例えばSwallowには7B、13B、70Bのバリエーションがある。
基本的にこの◯Bが大きいほど賢いと言えるがそのかわり要求されるスペックも相応のものが求められる。

base/Instructの違い

言語モデルによってはbaseモデルとInstruct(or Chat)モデルが公開されている事がある。
baseは単に入力した文章の続きを書くタイプでInstruct(Chat)モデルはユーザとの応答、やり取りに適するようbaseモデルを微調整(ファインチューニング)したモデル

言語モデルごとに指示(チャット)テンプレートがあるのでモデルに適したテンプレを使う必要がある。

いくつかあるが、LLaMA2系列だと下記の二種類が有名かな?



例えば”日本の首都は”というプロンプトに対してbaseモデルは
東京ですが、このような...
と、プロンプトの"続き"を出力する。

一方、Instruct(指示)モデルは同様のプロンプトに対して
東京です。
と、ユーザからの質問に"回答"するような出力をするように微調整されている。

量子化の種類

huggingfaceなどで有志の方が量子化したモデルを公開されている場合がある。

現時点(2024/01/26)では下記の4つが主な量子化のタイプ
量子化のタイプで迷ったらとりあえずGGUFで良いと思う

現在はGGUF形式が主流かな?

  • GGUF(旧GGML)
GPU/VRAMではなく、CPUやメインメモリで動くタイプ(※VRAMへ一部または全部をオフロードさせることもできる)
非量子化、k-量子化、i-量子化などをサポート
llama.cpp:複雑化する量子化バリエーションの整理(2024.02現在)によれば、
おすすめの量子化サイズ
性能重視の場合(VRAM容量に余裕がある場合)は、6bit量子化の"Q6_K"あたりがよいと思います。7Bモデルの場合、キャッシュを除いて5GB強のサイズで、"F16"や"Q8_0"からの性能劣化は実質的に無いとされています。
性能とサイズのバランスを取りたい場合、従来のk-量子化だと"Q4K_M"程度までなら無難とされています。iMatrix版を使えるのなら"IQ4_XS", "Q4K_S"でも十分だと思います。これらは、7Bモデルの場合、3.5GB〜4GBくらいのサイズ感です。
サイズ重視で小さめのモデルを選びたい場合は、iMatrix版が必須です。3bitの"IQ3_XXS"程度なら意外と劣化を感じにくいと思います。i-量子化で初期に導入されたクラスで、7Bモデルの場合は3GB弱のサイズ感です。2bit以下の量子化になると、劣化が着実に見え始めてくる印象があります。
とのこと。

  • GPTQ
GPU専用

  • AWQ
GPU専用 GPTQより新しい量子化の手法

  • EXL2
GPU専用 AWQより新しい量子化の手法

管理人/副管理人のみ編集できます