Mistral-7B って何?
Mistral-7B は Mistral AI 社が開発した LLM です。
Mistral AI 社はフランスの AI スタートアップで、現在はユニコーン企業な話題の会社です。
Mistral AI は Mixtral-8x7B という Mistral-7B より大型のモデルも出しており、こちらも人気です。
今回は小型の LLM として大人気な Mistral-7B について解説していきます。
Mistral-7B が人気な理由
この LLM が人気な理由は 3 つあります。
- OSS であること
- 小型のモデルであること
- 同規模の LLM の中では推論も速く、トップクラスの性能であること
OSS であること
OSS のモデルは、ライセンスが定義されているものの、ライセンスの許す限りであれば自分で好きなようにチューニングができます。
そのため、個人・企業でチューニングモデルを作るときのベースモデルとして活用ができます。
小型のモデルであること
「大は小を兼ねる」なんて言いますが、LLM においてはそうではありません。
パラメータ数が比較的小さなモデルには、大きなモデルにない以下のような利点があります。
- GPU が弱くても動く
- 自分でチューニングがしやすい
まず、パラメータ数の大きい LLM を動かす場合、数百万レベルのサーバを用意してやる必要があります。
そして、チューニングにはもっとお金がかかります。
もちろんその分性能がいいのですが、タスクによってはそこまで高い性能はいらないので、安く楽に推論・チューニングできるというのは非常に大きなメリットになります。
同規模の LLM の中では推論も速く、トップクラスの性能であること
性能に関しては、詳しくは Mistral 7B のベンチマークを見てもらえればよいですが、同規模の LLM の中でトップクラスの性能があります。
速度に関しては、Mistral 7B が「高いパフォーマンスと効率性を両立させたバランスの取れたモデルが必要だ」という思想をもとにスタートしているので、最速でないにしても他のモデルに比べて速い作りになっています。
ちなみに、このような特徴の背景には以下の 4 つのアーキテクチャの存在があります。
- Grouped-Query Attention
- Sliding Window Attention
- Rolling Buffer Cache
- Pre-fill and Chunking
Grouped-Query Attention
↓ 画像の真ん中のやつです。
従来の Transformer は左の Multi-head Attention ですが、この Multi-head Attention は「性能いいけど遅い」という問題点がありました。
そして、右の Multi-query Attention が開発されると「速いけど性能悪い」という問題点が見つかりました。
なので、折衷案として、真ん中の「性能も速度もいい」 Grouped-Query Attention が開発されました。
以下でも簡単に解説しています。
Sliding Window Attention
Transfomrer には self-attention が含まれていますが、シーケンス全体のアテンションを計算するのは非常にコストが高く、シーケンスの長さに対して二次関数的にコストが増加していきます。
そこで、Sliding Window Attention では、固定サイズのウィンドウを使用して、ウィンドウ長の周辺単語のみアテンションを計算します。
これによって、計算量が削減されます。
また、この場合ある単語の周辺単語のアテンションしか計算されないですが、その周辺単語が更にその周辺単語のアテンションを計算するので、結局連鎖的に文書全体のコンテキストを理解できるようです。
ということで、Grouped-Query Attention と同じように、Sliding Window Attention も性能を落とさず計算量を削減することができます。
Rolling Buffer Cache
先ほど Sliding Window Attention で連鎖的に文書全体を見ることができると言いましたが、これを助けてくれるのが Rolling Buffer Cache です。
Rolling Buffer Cache では、過去に計算した Key / Value のペアを Cache として保持します。
また、長期的に残しておくとメモリ消費量が大きくなるので、特定の量を超えると適宜過去の Cache を上書きする形で保持します。(だから Rolling Buffer Cache)
Pre-fill and Chunking
推論時、特に長いシーケンスや大きなプロンプトを効率的に処理するための手法です。
プロンプト部分をシーケンス生成開始時にキャッシュして、推論プロセスを高速化します。
長いプロンプトに対しては小さな部分(チャンク)に分割して、チャンクごとに処理することで、効率的に処理します。
まとめ
以上が Mistral-7B の解説でした。
これらを見ると、推論速度やメモリ効率性に重点を置いたモデルだとわかりますが、他のモデルよりと比べても性能が高いのがすごいですね。
おわり。