モデル概要
モデル特徴
モデル能力
使用事例
🚀 OpenLLaMA: LLaMAのオープンな再現
要約: 我々は、Meta AIのLLaMAを許容的なライセンスでオープンソースで再現したOpenLLaMAの公開プレビューをリリースしています。異なるデータミックスで学習させた3B、7B、13Bの一連のモデルをリリースしています。我々のモデルウェイトは、既存の実装においてLLaMAの代替として使用できます。
このリポジトリでは、Meta AIのLLaMA大規模言語モデルを許容的なライセンスでオープンソースで再現しています。1Tトークンで学習させた3B、7B、13Bの一連のモデルをリリースしています。事前学習済みのOpenLLaMAモデルのPyTorchとJAXのウェイト、評価結果、および元のLLaMAモデルとの比較を提供しています。v2モデルは、異なるデータミックスで学習させた古いv1モデルよりも優れています。詳細については、OpenLLaMAのプロジェクトホームページを参照してください。
🚀 クイックスタート
✨ 主な機能
- 許容的なライセンスでオープンソースで再現されたLLaMAモデル。
- 3B、7B、13Bの一連のモデルを提供。
- PyTorchとJAXのウェイトを提供。
- 元のLLaMAモデルとの比較結果を提供。
📦 インストール
本READMEには直接のインストール手順が記載されていませんが、ウェイトの読み込みに関する情報があります。
💻 使用例
基本的な使用法
import torch
from transformers import LlamaTokenizer, LlamaForCausalLM
## v2 models
model_path = 'openlm-research/open_llama_7b_v2'
## v1 models
# model_path = 'openlm-research/open_llama_3b'
# model_path = 'openlm-research/open_llama_7b'
# model_path = 'openlm-research/open_llama_13b'
tokenizer = LlamaTokenizer.from_pretrained(model_path)
model = LlamaForCausalLM.from_pretrained(
model_path, torch_dtype=torch.float16, device_map='auto',
)
prompt = 'Q: What is the largest animal?\nA:'
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
generation_output = model.generate(
input_ids=input_ids, max_new_tokens=32
)
print(tokenizer.decode(generation_output[0]))
高度な使用法
詳細な高度な使用法については、transformers LLaMAのドキュメントを参照してください。
📚 ドキュメント
ウェイトのリリース、ライセンス、および使用方法
我々は、ウェイトを2つの形式でリリースしています。1つはEasyLMフレームワークで使用するためのEasyLM形式、もう1つはHugging Face transformersライブラリで使用するためのPyTorch形式です。我々の学習フレームワークEasyLMとチェックポイントウェイトは、どちらもApache 2.0ライセンスの下で許容的にライセンスされています。
Hugging Face Transformersを使用したウェイトの読み込み
プレビューチェックポイントは、Hugging Face Hubから直接読み込むことができます。現在のところ、Hugging Faceの高速トークナイザーの使用は避けることをお勧めします。自動変換された高速トークナイザーが不正なトークン化を行うことがあることが観察されています。 これは、LlamaTokenizer
クラスを直接使用するか、AutoTokenizer
クラスにuse_fast=False
オプションを渡すことで実現できます。使用例を以下に示します。
import torch
from transformers import LlamaTokenizer, LlamaForCausalLM
## v2 models
model_path = 'openlm-research/open_llama_7b_v2'
## v1 models
# model_path = 'openlm-research/open_llama_3b'
# model_path = 'openlm-research/open_llama_7b'
# model_path = 'openlm-research/open_llama_13b'
tokenizer = LlamaTokenizer.from_pretrained(model_path)
model = LlamaForCausalLM.from_pretrained(
model_path, torch_dtype=torch.float16, device_map='auto',
)
prompt = 'Q: What is the largest animal?\nA:'
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
generation_output = model.generate(
input_ids=input_ids, max_new_tokens=32
)
print(tokenizer.decode(generation_output[0]))
LM-Eval-Harnessを使用した評価
モデルは、lm-eval-harnessを使用して評価することができます。ただし、前述のトークナイザーの問題のため、正しい結果を得るには高速トークナイザーの使用を避ける必要があります。これは、lm-eval-harnessのこの部分にuse_fast=False
を渡すことで実現できます。例を以下に示します。
tokenizer = self.AUTO_TOKENIZER_CLASS.from_pretrained(
pretrained if tokenizer is None else tokenizer,
revision=revision + ("/" + subfolder if subfolder is not None else ""),
use_fast=False
)
EasyLMを使用したウェイトの読み込み
EasyLMフレームワークでウェイトを使用するには、EasyLMのLLaMAドキュメントを参照してください。元のLLaMAモデルとは異なり、我々のOpenLLaMAトークナイザーとウェイトは完全にゼロから学習されているため、元のLLaMAトークナイザーとウェイトを取得する必要はなくなりました。
🔧 技術詳細
データセットと学習
v1モデルは、RedPajamaデータセットで学習されています。v2モデルは、Falcon refined-webデータセット、StarCoderデータセット、およびRedPajamaデータセットのウィキペディア、arXiv、書籍、およびStack Exchangeの部分の混合データセットで学習されています。我々は、元のLLaMA論文とまったく同じ前処理手順と学習ハイパーパラメータを使用しています。これには、モデルアーキテクチャ、コンテキスト長、学習ステップ、学習率スケジュール、およびオプティマイザーが含まれます。我々の設定と元の設定の唯一の違いは、使用するデータセットです。OpenLLaMAは、元のLLaMAが使用したデータセットではなく、オープンなデータセットを使用しています。
我々は、大規模言語モデルの学習と微調整のために開発したJAXベースの学習パイプラインであるEasyLMを使用して、クラウドTPU-v4上でモデルを学習させています。通常のデータ並列化と完全シャード化データ並列化(ZeROステージ3とも呼ばれる)を組み合わせて、学習スループットとメモリ使用量のバランスを取っています。全体として、7Bモデルでは、TPU-v4チップあたり2200トークン/秒以上のスループットを達成しています。
評価
我々は、lm-evaluation-harnessを使用して、幅広いタスクでOpenLLaMAを評価しました。LLaMAの結果は、同じ評価指標で元のLLaMAモデルを実行することで生成されました。我々のLLaMAモデルの結果は、元のLLaMA論文とわずかに異なっていますが、これは評価プロトコルの違いによるものと考えています。同様の違いが、lm-evaluation-harnessのこの問題で報告されています。さらに、EleutherAIによってPileデータセットで学習された6BパラメータのモデルであるGPT-Jの結果も提示しています。
元のLLaMAモデルは1兆トークンで学習され、GPT-Jは5000億トークンで学習されました。結果を以下の表に示します。OpenLLaMAは、大多数のタスクで元のLLaMAとGPT-Jと同等の性能を示し、一部のタスクではそれらを上回っています。
タスク/指標 | GPT-J 6B | LLaMA 7B | LLaMA 13B | OpenLLaMA 7Bv2 | OpenLLaMA 3B | OpenLLaMA 7B | OpenLLaMA 13B |
---|---|---|---|---|---|---|---|
anli_r1/acc | 0.32 | 0.35 | 0.35 | 0.34 | 0.33 | 0.33 | 0.33 |
anli_r2/acc | 0.34 | 0.34 | 0.36 | 0.35 | 0.32 | 0.36 | 0.33 |
anli_r3/acc | 0.35 | 0.37 | 0.39 | 0.39 | 0.35 | 0.38 | 0.40 |
arc_challenge/acc | 0.34 | 0.39 | 0.44 | 0.39 | 0.34 | 0.37 | 0.41 |
arc_challenge/acc_norm | 0.37 | 0.41 | 0.44 | 0.41 | 0.37 | 0.38 | 0.44 |
arc_easy/acc | 0.67 | 0.68 | 0.75 | 0.73 | 0.69 | 0.72 | 0.75 |
arc_easy/acc_norm | 0.62 | 0.52 | 0.59 | 0.70 | 0.65 | 0.68 | 0.70 |
boolq/acc | 0.66 | 0.75 | 0.71 | 0.72 | 0.68 | 0.71 | 0.75 |
hellaswag/acc | 0.50 | 0.56 | 0.59 | 0.56 | 0.49 | 0.53 | 0.56 |
hellaswag/acc_norm | 0.66 | 0.73 | 0.76 | 0.75 | 0.67 | 0.72 | 0.76 |
openbookqa/acc | 0.29 | 0.29 | 0.31 | 0.30 | 0.27 | 0.30 | 0.31 |
openbookqa/acc_norm | 0.38 | 0.41 | 0.42 | 0.41 | 0.40 | 0.40 | 0.43 |
piqa/acc | 0.75 | 0.78 | 0.79 | 0.79 | 0.75 | 0.76 | 0.77 |
piqa/acc_norm | 0.76 | 0.78 | 0.79 | 0.80 | 0.76 | 0.77 | 0.79 |
record/em | 0.88 | 0.91 | 0.92 | 0.89 | 0.88 | 0.89 | 0.91 |
record/f1 | 0.89 | 0.91 | 0.92 | 0.89 | 0.89 | 0.90 | 0.91 |
rte/acc | 0.54 | 0.56 | 0.69 | 0.57 | 0.58 | 0.60 | 0.64 |
truthfulqa_mc/mc1 | 0.20 | 0.21 | 0.25 | 0.23 | 0.22 | 0.23 | 0.25 |
truthfulqa_mc/mc2 | 0.36 | 0.34 | 0.40 | 0.35 | 0.35 | 0.35 | 0.38 |
wic/acc | 0.50 | 0.50 | 0.50 | 0.50 | 0.48 | 0.51 | 0.47 |
winogrande/acc | 0.64 | 0.68 | 0.70 | 0.66 | 0.62 | 0.67 | 0.70 |
平均 | 0.52 | 0.55 | 0.57 | 0.56 | 0.53 | 0.55 | 0.57 |
我々は、ベンチマークからタスクCBとWSCを削除しました。これらの2つのタスクで我々のモデルが異常に高い性能を示しており、学習セットにベンチマークデータの汚染がある可能性があると仮定しています。
📄 ライセンス
我々の学習フレームワークEasyLMとチェックポイントウェイトは、どちらもApache 2.0ライセンスの下で許容的にライセンスされています。
その他の情報
連絡先
我々は、コミュニティからのフィードバックを歓迎しています。質問がある場合は、イシューを開くか、我々に連絡してください。
OpenLLaMAは、Berkeley AI ResearchのXinyang Geng* と Hao Liu*によって開発されています。 *同等の貢献
謝辞
我々は、計算リソースの一部を提供してくれたGoogle TPU Research Cloudプログラムに感謝します。特に、TPU Research CloudのJonathan Catonが計算リソースの整理を手伝ってくれたこと、Google CloudチームのRafi WittenとGoogle JAXチームのJames Bradburyが学習スループットの最適化を手伝ってくれたことに感謝します。また、Charlie Snell、Gautier Izacard、Eric Wallace、Lianmin Zheng、およびユーザーコミュニティの皆さんに、議論とフィードバックを提供してくれたことに感謝します。
OpenLLaMA 13B v1モデルは、Stability AIと共同で学習されており、計算リソースを提供してくれたStability AIに感謝します。特に、David HaとShivanshu Purohitがロジスティクスの調整とエンジニアリングサポートを提供してくれたことに感謝します。
参考文献
OpenLLaMAがあなたの研究やアプリケーションで役立った場合は、以下のBibTeXを使用して引用してください。
@software{openlm2023openllama,
author = {Geng, Xinyang and Liu, Hao},
title = {OpenLLaMA: An Open Reproduction of LLaMA},
month = May,
year = 2023,
url = {https://github.com/openlm-research/open_llama}
}
@software{together2023redpajama,
author = {Together Computer},
title = {RedPajama-Data: An Open Source Recipe to Reproduce LLaMA training dataset},
month = April,
year = 2023,
url = {https://github.com/togethercomputer/RedPajama-Data}
}
@article{touvron2023llama,
title={Llama: Open and efficient foundation language models},
author={Touvron, Hugo and Lavril, Thibaut and Izacard, Gautier and Martinet, Xavier and Lachaux, Marie-Anne and Lacroix, Timoth{\'e}e and Rozi{\`e}re, Baptiste and Goyal, Naman and Hambro, Eric and Azhar, Faisal and others},
journal={arXiv preprint arXiv:2302.13971},
year={2023}
}



