模型概述
模型特點
模型能力
使用案例
🚀 OpenLLaMA:LLaMA的開源復現版本
本倉庫展示了對Meta AI的LLaMA大語言模型的寬鬆許可開源復現。我們發佈了在1萬億個token上訓練的70億和30億參數模型,以及在6000億個token上訓練的130億參數模型的預覽版本。我們提供預訓練的OpenLLaMA模型的PyTorch和JAX權重,以及評估結果和與原始LLaMA模型的對比。更多詳細信息請參閱OpenLLaMA項目主頁。
🚀 快速開始
本項目提供了Meta AI的LLaMA大語言模型的開源復現版本,包括不同參數規模的模型,並提供了多種格式的權重和評估結果。以下將詳細介紹權重的加載、使用方法,以及模型的訓練和評估情況。
✨ 主要特性
- 開源復現:提供Meta AI的LLaMA大語言模型的開源復現版本。
- 多模型發佈:發佈了70億、30億參數模型,以及130億參數模型的預覽版本。
- 多格式權重:提供PyTorch和JAX格式的預訓練模型權重。
- 評估對比:提供評估結果,並與原始LLaMA模型進行對比。
📦 安裝指南
文檔未提及具體安裝步驟,可參考相關框架的官方文檔進行安裝:
💻 使用示例
基礎用法
使用Hugging Face Transformers庫加載模型並進行推理:
import torch
from transformers import LlamaTokenizer, LlamaForCausalLM
model_path = 'openlm-research/open_llama_3b'
# model_path = 'openlm-research/open_llama_7b'
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進行評估
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的LLaMA文檔。
📚 詳細文檔
權重發布、許可和使用
我們以兩種格式發佈權重:一種是可與我們的EasyLM框架配合使用的EasyLM格式,另一種是可與Hugging Face transformers庫配合使用的PyTorch格式。我們的訓練框架EasyLM和檢查點權重均根據Apache 2.0許可進行寬鬆許可。
⚠️ 重要提示
目前建議避免使用Hugging Face的快速分詞器,因為我們觀察到自動轉換的快速分詞器有時會給出錯誤的分詞結果。可以通過直接使用
LlamaTokenizer
類,或為AutoTokenizer
類傳入use_fast=False
選項來避免此問題。
數據集和訓練
我們在Together發佈的RedPajama數據集上訓練模型,該數據集是對LLaMA訓練數據集的復現,包含超過1.2萬億個token。我們遵循與原始LLaMA論文完全相同的預處理步驟和訓練超參數,包括模型架構、上下文長度、訓練步驟、學習率調度和優化器。我們的設置與原始設置的唯一區別在於使用的數據集:OpenLLaMA採用RedPajama數據集,而不是原始LLaMA使用的數據集。
我們使用基於JAX的訓練管道EasyLM在雲TPU - v4上訓練模型。我們結合使用普通數據並行和完全分片數據並行(也稱為ZeRO階段3)來平衡訓練吞吐量和內存使用。總體而言,我們的70億參數模型在每個TPU - v4芯片上達到了超過2200個token/秒的吞吐量。
評估
我們使用lm-evaluation-harness在廣泛的任務上對OpenLLaMA進行了評估。LLaMA的結果是通過在相同的評估指標上運行原始LLaMA模型生成的。我們注意到我們的LLaMA模型結果與原始LLaMA論文略有不同,我們認為這是由於不同的評估協議造成的。在lm-evaluation-harness的這個問題中也報告了類似的差異。此外,我們還展示了由EleutherAI在Pile數據集上訓練的60億參數模型GPT - J的結果。
原始LLaMA模型在1萬億個token上進行訓練,GPT - J在5000億個token上進行訓練。我們在下表中展示了結果。OpenLLaMA在大多數任務上表現出與原始LLaMA和GPT - J相當的性能,並在某些任務上優於它們。
任務/指標 | GPT - J 6B | LLaMA 7B | OpenLLaMA 7B | OpenLLaMA 3B | OpenLLaMA 13B 600BT |
---|---|---|---|---|---|
anli_r1/acc | 0.32 | 0.35 | 0.33 | 0.33 | 0.33 |
anli_r2/acc | 0.34 | 0.34 | 0.36 | 0.32 | 0.35 |
anli_r3/acc | 0.35 | 0.37 | 0.38 | 0.35 | 0.38 |
arc_challenge/acc | 0.34 | 0.39 | 0.37 | 0.34 | 0.39 |
arc_challenge/acc_norm | 0.37 | 0.41 | 0.38 | 0.37 | 0.42 |
arc_easy/acc | 0.67 | 0.68 | 0.72 | 0.69 | 0.74 |
arc_easy/acc_norm | 0.62 | 0.52 | 0.68 | 0.65 | 0.70 |
ddboolq/acc | 0.50 | 0.56 | 0.53 | 0.49 | 0.71 |
hellaswag/acc | 0.36 | 0.36 | 0.63 | 0.43 | 0.54 |
hellaswag/acc_norm | 0.66 | 0.73 | 0.72 | 0.67 | 0.73 |
openbookqa/acc | 0.29 | 0.29 | 0.30 | 0.27 | 0.30 |
openbookqa/acc_norm | 0.38 | 0.41 | 0.40 | 0.40 | 0.41 |
piqa/acc | 0.75 | 0.78 | 0.76 | 0.75 | 0.77 |
piqa/acc_norm | 0.76 | 0.78 | 0.77 | 0.76 | 0.78 |
record/em | 0.88 | 0.91 | 0.89 | 0.88 | 0.90 |
record/f1 | 0.89 | 0.91 | 0.90 | 0.89 | 0.90 |
rte/acc | 0.54 | 0.56 | 0.60 | 0.58 | 0.65 |
truthfulqa_mc/mc1 | 0.20 | 0.21 | 0.23 | 0.22 | 0.22 |
truthfulqa_mc/mc2 | 0.36 | 0.34 | 0.35 | 0.35 | 0.35 |
wic/acc | 0.50 | 0.50 | 0.51 | 0.48 | 0.49 |
winogrande/acc | 0.64 | 0.68 | 0.67 | 0.62 | 0.67 |
平均 | 0.51 | 0.53 | 0.55 | 0.52 | 0.56 |
我們從基準測試中移除了任務CB和WSC,因為我們的模型在這兩個任務上表現異常出色。我們推測訓練集中可能存在基準數據汙染。
聯繫我們
我們非常希望得到社區的反饋。如果您有任何問題,請提出問題或與我們聯繫。
OpenLLaMA由以下人員開發: 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模型是與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許可證。



