はじめに
KaggleでNLPコンペに取り組み始めました。いろんなLLMがあってどれ使えばいいのかよくわからないので、オープンソースのものに絞って列挙して特徴を比較してみます。
1. LLaMA 3
読み方:
ラマ
開発元:
Meta
インポート:
Huggingfaceが提供するtransformersというライブラリ。
AutoTokenizerの"from_pretrained"にモデル名を引数として指定するとインポートできる。
!pip install transformers
tokenizer = LlamaTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct") /* 例です */
参考↓
特徴:
8Bと70Bモデルがあり、それぞれパラメータ数が80億、700億という意味。
2. Gemma 2
読み方:
ジェマ
開発元:
インポート:
同じくHuggingfaceが提供するtransformersというライブラリを使用。
AutoTokenizerの"from_pretrained"にモデル名を引数として指定するとインポートできる。
!pip install transformers
tokenizer = GemmaTokenizerFast.from_pretrained("google/gemma-2-27b-it") /* 例です */
参考↓
特徴:
9Bと27Bモデルがあり、それぞれパラメータ数が90億、270億という意味。
Gemma2 27BはLLaMA 3 70Bよりも少ないパラメータ数(270億<<700億)で同じような性能らしく、「軽量かつ高性能」なモデルということで知られている。
3.Grok-1
読み方:
グロク
開発元:
xAI(イーロンマスク)
インポート:
こちらサイトを参照。ファイルが重すぎて4日から1週間近くかかるらしくやる気がなくなりました。
特徴:
パラメータ数は314B、つまり3140億。性能はLLaMA 3やGemma 2に比べてやや低い。
数学とコーディングは得意。
LLM分野でよく出てくるワードについて調べたことをメモしていく
【finetuning】
LOW RANK ADAPTION(LoRA:ローラ)というものが使われるそう。
高精度かつ低負荷で実装可能という特徴があります。
基本的には下記によくまとまっています。
LLMはモデル全体の重みを変えようとするとめっちゃ時間かかります。なので元の重みの次元数をもっと低次元に変換した重みをモデルに追加して、その部分だけ学習させよう!という趣旨のことが書いてあります。
低次元に変換すると言われると精度が落ちそうに思えてしまいますが、実際やってみるとそんなことなかったよーってことが以下の論文に書いてあります。
【量子化/quantize】
メモリ負荷、計算負荷を減らすために行います。
LLMのパラメータは数十億、数百億とあります。たとえば、50億のパラメータを持つモデルは、16ビット精度を使用する場合には約10GBのメモリを必要とするそうです。量子化によってパラメータの精度を落とすことでパフォーマンスを大きく落とすことなく計算負荷を減らすことができます。
おわりに
さらっと調べて分かったことをとりあえず書き出してみました。
間違い、お気づきの点あれば教えてください!