【ローカル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に論文内容についていくつか質問し、コンテキストを参照できていることを確認。
感想
ひとまず、15,000トークンのコンテキストの拡張が実際に機能することは確認できた。論文内容も一応カバーできている。
ただ、論文タイトルなど重要な箇所で幻覚が生じたりしている。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」