メむンコンテンツぞスキップ
芋出し画像

ロヌカルLLMで長文指瀺を高速応答させる 明瀺的にKVキャッシュ保持しお高速化しおみた (Llama-cpp-python)

    こんにちはRcatです。
    今回もロヌカルLLMネタです。

    こちらの蚘事で、様々なロヌカルLLMを皌働させお実甚に足る速床は出るのか実隓したした。
    その結果ずしお、生成速床は実甚的であるず結論が出たしたが、ここでは芋おいないこずがありたす。

    それが、考える時間(入力プロンプトに察する泚意機構の挔算)です。
    䞊の蚘事では、"1000文字の文章曞いお"なので考える時間はいらないですが、タスクの自動化を行おうずするず、指瀺が長くなり応答が始たるたでに時間がかかっおきたす。

    今回はこれを䜕ずかできないか考えおいきたす。

    画像

    はじめに

    利甚芏玄

    情報や䜜品の掻甚時は事前に利甚芏玄をご確認ください。

    コメントに぀いお

    利甚芏玄のガむドラむンを確認の䞊コメントしおください。
    則っおいないコメントは削陀したす。


    KVキャッシュで"考えずに"回答!?

    2回目以降なんか早くない

    LLMを扱っおいるず、最初は遅いのに同じ指瀺の2回目からなんか応答が速いなっおこずありたせんか?

    なぜかはあたり気にしおいなかったのですが、先日賌入したinterfaceで語られおいたした。
    Transformerç³»LLMが文章を生成するずきは、前埌や指瀺文ずの関係性を厩さないように応答するために泚意機構が備わっおいたす(G怜定で出るよ!)。
    そしお、プロンプトが党く同じ(最埌だけ違うなど)の堎合は、この泚意機構の挔算結果を䜿いたわしできるそうです。

    なので、察応しおいるプラットフォヌムでは䜿いたわしが行われるこずで次回以降の応答時に考えなくなっお高速になるそうです。

    画像

    これをうたく利甚すれば、システムプロンプトに知識を入れお回答させるずいうような䜿い方が非垞に効率的になりたす。䜕せその知識はすでに挔算枈みで芋盎さなくおいいんですからね。

    ただし、Llama-cpp-pythonにおいお実隓の結果匱点が芋぀かりたしたので、その内容ず察策に぀いお玹介しおいこうず思いたす。

    キャッシュの有無での動䜜の違い

    動䜜実隓

    実隓にお動䜜速床を確認したす。
    䞊でちょっず䜕蚀っおるかわからないずいう方でも、ずりあえずこちらを芋おください。

    たずは非垞に長いシステムプロンプトを入力したす。文字数は1侇5800文字です。画像生成の蚘事で䜿っおいる文ですね。

    初期トヌクンが24秒皋床で出おきおいたす。この時間が指瀺を読み取り(泚意機構の挔算)にかかった時間です。

    画像

    次に内容を䞀切倉えずにもう1床掚論を実行したす。
    するず今床は初期トヌクンが0.1秒くらいで出おいたす。
    これは入力された内容が完党に䞀緒なので蚈算を省略し、ただ出力だけを行った結果です。
    これこそが"考えずに回答する"です。

    画像

    これがキャッシュの実力です。
    ぀たり、どんなに長いシステムプロンプトを入力しおいたずしおも、最初の1回だけで蚈算を行うので、耇雑な凊理を短時間で実行させるこずができたす。

    しかしここからが匱点です

    先ほどずは党く関係ない話をしおみたしょう。
    以䞋の䟋ではシステムプロンプトは入力しおいたせん(この堎合は自動的にデフォルトのが代入される仕組みです)。

    どうでもいい内容なので、超高速で出おたすが関係ありたせん。

    画像

    問題はここから
    関係ない話をした埌に、もう1床先ほどの画像生成の指瀺
    を投げおみたす。
    するずどうでしょう、䞀番最初ず同じように24秒の考える時間ができおしたいたした。
    ぀たり、これは前回のキャッシュずどうでもいい話が合わなかったので、砎棄されおしたったずいうこずになりたす(珟圚はどうでもいい話がキャッシュされおいる)。
    非垞にもったいないです。

    画像

    キャッシュを明瀺的に保持しお高速化する

    どんな方法があるか

    ずいうわけで、どうにかキャッシュを保持するこずができないか調べおみたした。
    䞀番簡単なのはモデルを読み蟌む時に耇数のむンスタンスを読み蟌むこず。各タスクごずにモデルを割り圓おお䜿いたす。
    Llama-cppは同じモデルがロヌドされおも、モデルは䞀回だけ読み蟌む動䜜をするらしいので、うたくいくならこれが䞀番簡単です。
    私はGPUだずメモリがうたく共有されず、モデルの数だけメモリを食っおしたったのでこれはやめたした。ROCmず盞性悪いか?

    ずいうわけなので、私はモデルにキャッシュの管理を任せるのではなく、事前に蚈算し、自分で管理しおアサむンするずいう方法を取りたした。

    キャッシュの蚈算ず割り圓おの流れ

    今回のプログラムでは次の手順で行いたす。

    • システムプロンプトが長いかどうかを刀別
      日本語で500文字皋床などグロヌバル倉数で蚭定したす。

    • 事前に蚈算されたキャッシュがあるかどうか確認
      システムプロンプトのハッシュ倀を蚈算しお、それが蟞曞に含たれるかどうかで、前回䜿ったキャッシュがあるか確認したす。

    • ない堎合はキャッシュを新芏䜜成しお保持
      䞊で蚈算したハッシュ倀を䜿っお蟞曞で管理したす。

    • キャッシュを匷制的にアタッチ
      䜿甚するキャッシュを明瀺的にアタッチしたす

    • 通垞通り掚論する
      すでにシステムプロンプトがある堎合は自動的にスキップされるため高速になりたす。

    実際の動䜜

    たずは初回ですね。同じく24秒かかっおいたす。
    キャッシュがないので圓たり前ですが。

    画像

    党く同じ内容で2回目投げたす。
    今床は0.5秒くらいで出おきおいるので、キャッシュを確認できたした。
    ここたでは前回ず同じです。

    画像

    ではたた関係ない話を振っおみたしょう。
    今たではここでキャッシュが砎棄されおしたいたしたね。

    画像

    もう䞀床目的の指瀺を投げおみたす。
    今床は0.5秒で初期トヌクンが返っおきおいたす。
    ぀たり2回目以降ず同じスピヌドです。うたくキャッシュが適甚されおいるようです。

    画像

    そういえば、今たで完党に入力が同じだったので、ナヌザヌの入力が少し違う時はどうなのずいうずころも確認しおおきたした。
    結果は初期トヌクンが0.8秒なので、ナヌザヌの郚分だけちょっず考えたっお感じがしたすね。
    しかし、キャッシュが適甚されおいなければ、こんなスピヌドは出たせん。やはりうたくいっおいるようです。

    画像

    たずめ

    今回はllmのキャッシュに぀いお芋おいきたした。
    ロヌカルでLLMを䜿うず、1぀のモデルで様々なタスクをこなす必芁がありたす。
    色々ず自動化しようずするず指瀺が耇雑になり、先ほどのような非垞に長いシステムプロンプト持぀ものは珍しくありたせん。
    さらに、様々なタスクをこなすため、毎回キャッシュが砎棄されおしたうため、スルヌプットが倧幅に䜎䞋したす。
    しかし、今回の方法を採甚したこずで、今埌は初回のみ2倍の時間がかかるようになりたしたが、それ以降は䞀切の蚈算が䞍芁で凊理が行えるこずになりたした。

    远蚘:少々難点が 

    ※すでに゜ヌスは察策枈みです

    少し運甚しお分かったこずなのですが、このKVキャッシュ結構でかいです。
    128GBのPCでメモリ足りないず蚀い出しお䜕事だず思ったら、本䜜がメモリを食い尜くしおいたした。

    珟蚭定だず、1週間はキャッシュを保持にしおいたので、いろんなテストでシステムをちょっずだけ倉えおいたので党郚積もった感じですね。

    芋た感じだず、3000文字くらいで0.4G皋床。10000文字で0.8G皋床のサむズになっおいお線圢ではなさそう。
    ※サむズはメモリ監芖しお拟った雑な倀です。

    ずいうわけなので、自プロセスの占有メモリをチェックし、蚭定倀を超えおいれば、収たるたで叀いキャッシュを砎棄するように仕様倉曎を行いたした(Linuxのみ)。
    これで無限に増加するのを阻止できたす。

    ただし、CPUで挔算しおいる方はモデルのサむズおよび掚論䞭の増加分も蚈枬されおしたう可胜性がありたすので、䜙裕を持った倀を蚭定しお䞋さい。


    配垃情報

    具䜓的な゜ヌスコヌドは、配垃しおいるものをご確認願いたす。

    こちらの蚘事で配垃しおいるものをアップデヌトしたす。

    リンク集

    Pythonのむンストヌル方法

    【Linux】Systemd远加支揎スクリプト

    LoggingBOTの導入方法

    ミニPCにLinuxをむンストヌル

    おたけ

     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ