模型概述
模型特點
模型能力
使用案例
🚀 OpenLLaMA:LLaMA的開源復刻版本
OpenLLaMA是對Meta AI的LLaMA大語言模型進行的開源復刻,採用寬鬆許可協議。本項目發佈了一系列3B、7B和13B模型,這些模型在不同的數據混合集上進行訓練。模型權重可直接替代現有實現中的LLaMA。
🚀 快速開始
在本倉庫中,我們提供了Meta AI的LLaMA大語言模型的開源復刻版本。我們發佈了一系列在1萬億個token上訓練的3B、7B和13B模型。同時,我們提供了預訓練的OpenLLaMA模型的PyTorch和JAX權重,以及評估結果,並與原始的LLaMA模型進行了對比。v2模型比在不同數據混合集上訓練的舊v1模型表現更好。更多詳細信息,請參閱OpenLLaMA項目主頁。
✨ 主要特性
- 開源許可:訓練框架EasyLM和檢查點權重均在Apache 2.0許可下發布。
- 多格式支持:提供EasyLM和PyTorch兩種格式的權重。
- 性能相當:在大多數任務上,OpenLLaMA與原始LLaMA和GPT - J表現相當,在某些任務上更優。
📦 安裝指南
本項目未提及具體安裝命令,因此跳過安裝指南章節。
💻 使用示例
基礎用法
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文檔。
高級用法
使用lm - eval - harness進行評估
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
)
模型可以使用[lm - eval - harness](https://github.com/EleutherAI/lm - evaluation - harness)進行評估。由於前面提到的分詞器問題,我們需要避免使用快速分詞器以獲得正確的結果。可以通過在[lm - eval - harness的這部分](https://github.com/EleutherAI/lm - evaluation - harness/blob/4b701e228768052cfae9043dca13e82052ca5eea/lm_eval/models/huggingface.py#LL313C9 - L316C10)中傳入use_fast = False
來實現,如上述示例所示。
使用EasyLM加載權重
若要在我們的EasyLM框架中使用這些權重,請參閱[EasyLM的LLaMA文檔](https://github.com/young - geng/EasyLM/blob/main/docs/llama.md)。請注意,與原始的LLaMA模型不同,我們的OpenLLaMA分詞器和權重是完全從頭開始訓練的,因此不再需要獲取原始的LLaMA分詞器和權重。
📚 詳細文檔
數據集和訓練
- 數據集:v1模型在[RedPajama數據集](https://huggingface.co/datasets/togethercomputer/RedPajama - Data - 1T)上訓練。v2模型在[Falcon refined - web數據集](https://huggingface.co/datasets/tiiuae/falcon - refinedweb)、StarCoder數據集以及[RedPajama數據集](https://huggingface.co/datasets/togethercomputer/RedPajama - Data - 1T)中的維基百科、arxiv、書籍和stackexchange部分的混合數據集上訓練。
- 訓練設置:我們遵循與原始LLaMA論文完全相同的預處理步驟和訓練超參數,包括模型架構、上下文長度、訓練步驟、學習率調度和優化器。唯一的區別在於使用的數據集:OpenLLaMA使用開放數據集,而不是原始LLaMA使用的數據集。
- 訓練平臺:我們使用基於JAX的訓練管道[EasyLM](https://github.com/young - geng/EasyLM)在雲TPU - v4上訓練模型。我們結合了普通數據並行和[完全分片數據並行(也稱為ZeRO stage 3)](https://engineering.fb.com/2021/07/15/open - source/fsdp/)來平衡訓練吞吐量和內存使用。總體而言,我們的7B模型在每個TPU - v4芯片上達到了超過2200個token/秒的吞吐量。
評估
我們使用[lm - eval - harness](https://github.com/EleutherAI/lm - evaluation - harness)在廣泛的任務上對OpenLLaMA進行了評估。LLaMA的結果是通過在相同的評估指標上運行原始LLaMA模型生成的。我們注意到,我們的LLaMA模型結果與原始LLaMA論文略有不同,我們認為這是由於不同的評估協議造成的。在[lm - eval - harness的這個問題](https://github.com/EleutherAI/lm - evaluation - harness/issues/443)中也報告了類似的差異。此外,我們還展示了GPT - J的結果,它是由EleutherAI在Pile數據集上訓練的一個60億參數的模型。
原始的LLaMA模型在1萬億個token上訓練,GPT - J在5000億個token上訓練。我們在下表中展示了結果。在大多數任務中,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,因為我們的模型在這兩個任務上的表現異常高。我們推測訓練集中可能存在基準數據汙染。
聯繫我們
我們非常希望得到社區的反饋。如果您有任何問題,請創建一個issue或聯繫我們。
OpenLLaMA由伯克利人工智能研究中心的[Xinyang Geng](https://young - geng.xyz/)*和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許可證。



