【ローカルLLM】Llama 2のコンテキスト長を15Kトークン超に拡大する

せっかくなのでLlama 2を触ってみようと思っていたところ、以下のスレッドに「Exllamaで16Kのコンテキスト長が扱える」とあった。

旧Llamaのコンテキスト窓の拡張は以前にも記事にしたが、Llama 2(本来は4000トークン上限)でも一応16,000トークンまで拡張できるそうなので、ともかく試してみた。

Llama-2-13Bで試す

最初は手元の環境で試そうとしたが、16KコンテキストにするとVRAM容量が全然足りなさそう。クラウドGPUのRunpodでRTX A6000(48GB VRAM)を借りて試した。

  • いつも通りtext-generation-webuiを起動し、Llama 2の13Bモデル(GPTQ)を読み込む。ローダーをExllamaに設定。

  • 次に「Maximum sequence length」を最大値16,384に設定し、これに合わせて「compress_pos_emb」も8に変更。

  • この部分、どうやら「alpha_value」という値を変更するやり方も別にあるらしい。

  • 今回は、MetaのLlama 2論文をテキストファイルにし、16Kトークンに収まるようにざっくり削ったうえで、コンテキストに放り込んでみた。

  • Llama2 13Bに論文内容についていくつか質問し、コンテキストを参照できていることを確認。

質問回答例【和訳】

Q:MetaのLama 2のリリース戦略について簡単に教えてください。

A:もちろんです!Metaは、いくつかの重要な要素を含む責任あるリリース戦略でLama 2をリリースしました。第一に、研究およびコマーシャルの両用途をhttps://ai.meta.com/resources/models-and-libraries/llama/で使用できるようにしました。第二に、開発者がLama 2-Chatで安全な世代を再現し、ユーザー入力層とモデル出力層で基本的な安全技術を適用できるようにコードサンプルを提供しています。第三に、安全な開発と展開に関するガイドラインを提供する責任ある使用ガイドを共有しています。さらに、彼らは透明性を促進し、より多くの人々がAIツールにアクセスできるようにするオープンリリースを信じており、技術の民主化と業界の進歩を加速させています。最後に、彼らは微調整を通じた有害な反応の制限に向けて前進しており、今後の作業においても改善を続けていきます。

感想

  • ひとまず、15,000トークンのコンテキストの拡張が実際に機能することは確認できた。論文内容も一応カバーできている。

Output generated in 21.61 seconds (40.76 tokens/s, 881 tokens, context 15868, seed 2110187088)

  • ただ、論文タイトルなど重要な箇所で幻覚が生じたりしている。PDFを雑にテキスト化して使ったのも悪影響だったかも。

  • なお「compress_pos_emb」ではなく「alpha_value」を調整するNTK RoPEスケーリングというコンテキスト拡張も試したが、性能的に違いは感じられなかった(そもそも使い方がよく分かってない)。

追記1:

この記事では、コンテキスト拡張についてよく分からないまま試したので、以下の記事内で情報を整理し直した。

追記2:

16K~32Kの長いコンテキスト用にファインチューンしたLlama-2派生モデルが複数リリースされ始めた。これらのモデルを使うと、オリジナルのLlama-2よりも長いコンテキストを正確に参照できると思われる。

・「LLaMA-2-7B-32K

・「LLongMA-2-13b-16k」/「LLongMA-2-7b-16k