モデル概要
モデル特徴
モデル能力
使用事例
🚀 OpenLLaMA: LLaMAのオープンな再現
OpenLLaMAは、Meta AIのLLaMAをオープンソースで再現したプロジェクトです。3B、7B、13Bのモデルを公開しており、既存の実装でLLaMAの代替として利用できます。
🚀 クイックスタート
本レポジトリでは、Meta AIのLLaMA大規模言語モデルを許容的なライセンスでオープンソースで再現しています。1Tトークンで学習させた3B、7B、13Bのモデルシリーズを公開しています。事前学習済みのOpenLLaMAモデルのPyTorchとJAXの重み、評価結果、およびオリジナルのLLaMAモデルとの比較も提供しています。v2モデルは、異なるデータミックスで学習させた古いv1モデルよりも優れています。詳細については、OpenLLaMAのプロジェクトホームページを参照してください。
✨ 主な機能
- オープンソースで再現されたLLaMAモデルを提供します。
- 2種類の形式(EasyLM形式とPyTorch形式)で重みを公開しています。
- 広範なタスクでの評価結果を提供しています。
📦 インストール
重みの公開、ライセンス、および使用方法
重みは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_3b_v2'
# 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のドキュメントを参照してください。
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トークナイザーと重みを取得する必要はありません。
💻 使用例
基本的な使用法
import torch
from transformers import LlamaTokenizer, LlamaForCausalLM
## v2 models
model_path = 'openlm-research/open_llama_3b_v2'
# 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のドキュメントを参照してください。
# 具体的なコード例は省略します。
📚 ドキュメント
データセットと学習
v1モデルは、RedPajamaデータセットで学習されています。v2モデルは、Falcon refined-webデータセット、StarCoderデータセット、およびRedPajamaデータセットのウィキペディア、arXiv、書籍、およびStack Exchangeの部分のデータミックスで学習されています。オリジナルのLLaMA論文とまったく同じ前処理手順と学習ハイパーパラメータを使用しています。モデルアーキテクチャ、コンテキスト長、学習ステップ、学習率スケジュール、およびオプティマイザーも同じです。設定とオリジナルの唯一の違いは、使用するデータセットです。OpenLLaMAはオープンデータセットを使用しており、オリジナルのLLaMAが使用しているデータセットとは異なります。
EasyLMを使用して、クラウドのTPU-v4でモデルを学習させています。EasyLMは、大規模言語モデルの学習と微調整に開発したJAXベースの学習パイプラインです。通常のデータ並列化と完全シャード化されたデータ並列化(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 3Bv2 | OpenLLaMA 7Bv2 | OpenLLaMA 3B | OpenLLaMA 7B | OpenLLaMA 13B |
---|---|---|---|---|---|---|---|---|
anli_r1/acc | 0.32 | 0.35 | 0.35 | 0.33 | 0.34 | 0.33 | 0.33 | 0.33 |
anli_r2/acc | 0.34 | 0.34 | 0.36 | 0.36 | 0.35 | 0.32 | 0.36 | 0.33 |
anli_r3/acc | 0.35 | 0.37 | 0.39 | 0.38 | 0.39 | 0.35 | 0.38 | 0.40 |
arc_challenge/acc | 0.34 | 0.39 | 0.44 | 0.34 | 0.39 | 0.34 | 0.37 | 0.41 |
arc_challenge/acc_norm | 0.37 | 0.41 | 0.44 | 0.36 | 0.41 | 0.37 | 0.38 | 0.44 |
arc_easy/acc | 0.67 | 0.68 | 0.75 | 0.68 | 0.73 | 0.69 | 0.72 | 0.75 |
arc_easy/acc_norm | 0.62 | 0.52 | 0.59 | 0.63 | 0.70 | 0.65 | 0.68 | 0.70 |
boolq/acc | 0.66 | 0.75 | 0.71 | 0.66 | 0.72 | 0.68 | 0.71 | 0.75 |
hellaswag/acc | 0.50 | 0.56 | 0.59 | 0.52 | 0.56 | 0.49 | 0.53 | 0.56 |
hellaswag/acc_norm | 0.66 | 0.73 | 0.76 | 0.70 | 0.75 | 0.67 | 0.72 | 0.76 |
openbookqa/acc | 0.29 | 0.29 | 0.31 | 0.26 | 0.30 | 0.27 | 0.30 | 0.31 |
openbookqa/acc_norm | 0.38 | 0.41 | 0.42 | 0.38 | 0.41 | 0.40 | 0.40 | 0.43 |
piqa/acc | 0.75 | 0.78 | 0.79 | 0.77 | 0.79 | 0.75 | 0.76 | 0.77 |
piqa/acc_norm | 0.76 | 0.78 | 0.79 | 0.78 | 0.80 | 0.76 | 0.77 | 0.79 |
record/em | 0.88 | 0.91 | 0.92 | 0.87 | 0.89 | 0.88 | 0.89 | 0.91 |
record/f1 | 0.89 | 0.91 | 0.92 | 0.88 | 0.89 | 0.89 | 0.90 | 0.91 |
rte/acc | 0.54 | 0.56 | 0.69 | 0.55 | 0.57 | 0.58 | 0.60 | 0.64 |
truthfulqa_mc/mc1 | 0.20 | 0.21 | 0.25 | 0.22 | 0.23 | 0.22 | 0.23 | 0.25 |
truthfulqa_mc/mc2 | 0.36 | 0.34 | 0.40 | 0.35 | 0.35 | 0.35 | 0.35 | 0.38 |
wic/acc | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.48 | 0.51 | 0.47 |
winogrande/acc | 0.64 | 0.68 | 0.70 | 0.63 | 0.66 | 0.62 | 0.67 | 0.70 |
平均 | 0.52 | 0.55 | 0.57 | 0.53 | 0.56 | 0.53 | 0.55 | 0.57 |
ベンチマークからタスクのCBとWSCを削除しました。これらの2つのタスクでモデルが疑わしいほど高い性能を示したためです。学習セットにベンチマークデータの汚染がある可能性があると推測しています。
連絡先
コミュニティからのフィードバックを歓迎しています。質問があれば、issueを開くか、お問い合わせください。
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}
}
📄 ライセンス
本プロジェクトは、Apache 2.0ライセンスの下で公開されています。



