HuggingFace镜像/OLMo-1.7-7B-hf-openmind
模型介绍文件和版本分析
下载使用量0
OLMo Logo

OLMo 7B 2024年4月版模型卡片

OLMo 7B 2024年4月版是原始OLMo 7B模型的更新版本。通过使用改进版的Dolma数据集和分阶段训练,该版本在MMLU评估中得分提升了24分,其他评估指标也有所改善。 此版本可直接与v4.40及更高版本的HuggingFace Transformers配合使用。

OLMo(Open Language Models,开放语言模型)系列旨在推动语言模型科学的发展。 OLMo模型均在Dolma数据集上训练。 我们公开发布训练这些模型所涉及的所有代码、检查点、日志和详细信息。

模型详情

本批次发布的核心模型如下:

规模训练 tokens层数隐藏层大小注意力头数上下文长度
OLMo 1B3万亿162048162048
OLMo 7B2.5万亿324096322048
OLMo 7B Twin 2T2万亿324096322048
OLMo 7B April 20242.05万亿324096324096

注:OLMo 7B 2024年4月版还包含QKV裁剪功能。

要使用HuggingFace加载特定的模型修订版本,只需添加参数revision:

olmo = AutoModelForCausalLM.from_pretrained("allenai/OLMo-7B-0424-hf", revision="step1000-tokens4B")

所有修订版本/分支均列于文件 revisions.txt 中。 或者,您可以通过以下代码片段访问模型的所有修订版本:

from huggingface_hub import list_repo_refs
out = list_repo_refs("allenai/OLMo-7B-0424-hf")
branches = [b.name for b in out.branches]

在 Openmind 中的使用

from openmind import pipeline, is_torch_npu_available
from openmind import AutoTokenizer, AutoModelForCausalLM
from openmind_hub import snapshot_download
import torch.nn.functional as F
from torch import Tensor
import openmind
import torch
import argparse
import time

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--model_name_or_path",
        type=str,
        help="Path to model",
        default="jeffding/OLMo-1.7-7B-hf-openmind",
    )
    args = parser.parse_args()
    return args

def main():
    args = parse_args()
    model_path = args.model_name_or_path

    if is_torch_npu_available():
        device = "npu:0"
    else:
        device = "cpu"
    
    tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
    model = AutoModelForCausalLM.from_pretrained(model_path, trust_remote_code=True).to(device)
    
    start_time = time.time()
    text = "Generative AI is "
    pipe = pipeline("text-generation", model=model, tokenizer=tokenizer,device=device)
    generated_text = pipe(text, max_length=50, do_sample=False, no_repeat_ngram_size=2)[0]
    print(generated_text['generated_text'])
    
    end_time = time.time()
    print(f"硬件环境:{device},推理执行时间:{end_time - start_time}秒")
    
if __name__ == "__main__":
    main()

模型说明

  • 开发机构: Allen Institute for AI (AI2)
  • 支持机构: Databricks、哈佛大学 Kempner 自然与人工智能研究所、AMD、CSC(Lumi 超级计算机)、华盛顿大学(UW)
  • 模型类型: Transformer 风格的自回归语言模型。
  • 语言(NLP): 英语
  • 许可证: 代码和模型基于 Apache 2.0 许可证发布。
  • 联系方式: 技术咨询:olmo at allenai dot org。媒体联络:press at allenai dot org
  • 数据截止日期: 2023 年 10 月,大部分数据来自基于 Dolma 数据集版本的 2023 年 2 月/3 月。

模型来源

  • 项目页面: https://allenai.org/olmo
  • 代码仓库:
    • 核心仓库(训练、推理、微调等):https://github.com/allenai/OLMo
    • 评估代码:https://github.com/allenai/OLMo-Eval
    • 进一步微调代码:https://github.com/allenai/open-instruct
  • 论文: 链接
  • 技术博客文章: https://blog.allenai.org/olmo-1-7-7b-a-24-point-improvement-on-mmlu-92b43f7d269d
  • W&B 日志: 预训练、退火

用途

推理

按照 HuggingFace 的常规方式操作:

from transformers import AutoModelForCausalLM, AutoTokenizer
olmo = AutoModelForCausalLM.from_pretrained("allenai/OLMo-7B-0424-hf")
tokenizer = AutoTokenizer.from_pretrained("allenai/OLMo-7B-0424-hf")
message = ["Language modeling is"]
inputs = tokenizer(message, return_tensors='pt', return_token_type_ids=False)
# optional verifying cuda
# inputs = {k: v.to('cuda') for k,v in inputs.items()}
# olmo = olmo.to('cuda')
response = olmo.generate(**inputs, max_new_tokens=100, do_sample=True, top_k=50, top_p=0.95)
print(tokenizer.batch_decode(response, skip_special_tokens=True)[0])
>> 'Language modeling is the first step to build natural language generation...'

或者,使用 pipeline 抽象:

from transformers import pipeline
olmo_pipe = pipeline("text-generation", model="allenai/OLMo-7B-0424-hf")
print(olmo_pipe("Language modeling is "))
>> 'Language modeling is a branch of natural language processing that aims to...'

或者,你可以通过对模型进行量化来略微提高速度,例如 AutoModelForCausalLM.from_pretrained("allenai/OLMo-7B-0424-hf", torch_dtype=torch.float16, load_in_8bit=True)(需要 bitsandbytes)。 量化后的模型对类型/ CUDA 更为敏感,因此建议将输入以 inputs.input_ids.to('cuda') 的形式传入,以避免潜在问题。

微调

模型微调可以从最终检查点(此模型的 main 修订版)或许多中间检查点进行。有两种调优方案可供使用。

  1. 使用 OLMo 仓库进行微调:
torchrun --nproc_per_node=8 scripts/train.py {path_to_train_config} \
    --data.paths=[{path_to_data}/input_ids.npy] \
    --data.label_mask_paths=[{path_to_data}/label_mask.npy] \
    --load_path={path_to_checkpoint} \
    --reset_trainer_state

更多文档,请参见 GitHub 自述文件。

  1. AI2 的 Open Instruct 代码库正在开发进一步的微调支持。详情请见 此处。

评估

新模型和原始 7B 模型的核心模型结果如下。

任务Llama-7bLlama2-7bFalcon-7bMpt-7bOLMo-7BLlama2-13bOLMo 1.7-7B
arc_c44.548.547.546.548.552.842.5
arc_e67.969.570.470.565.473.767.2
boolq75.480.274.674.273.482.283.7
copa91.086.086.085.090.090.086.0
hellaswag76.276.875.977.676.478.675.5
openbookqa51.248.453.048.650.451.850.0
piqa77.276.778.577.378.479.077.5
sciq93.994.593.993.793.895.596.7
winogrande70.569.468.969.967.973.569.8
truthfulQA (MC2)33.938.534.033.036.036.835.8
MMLU (5 shot MC)31.545.024.030.828.355.552.0
GSM8k10.012.04.04.58.525.029.0
总体平均值60.362.159.259.359.866.263.8

1B 模型的结果如下:

任务随机值StableLM 2 1.6b*Pythia 1BTinyLlama 1.1BOLMo 1B(我们的模型)
arc_challenge2543.8133.1134.7834.45
arc_easy2563.6850.1853.1658.07
boolq5076.661.864.660.7
copa5084727879
hellaswag2568.244.758.762.5
openbookqa2545.837.843.646.4
piqa507469.171.173.7
sciq2594.78690.588.1
winogrande5064.953.358.958.9
平均值36.1168.4156.4461.4862.42

*与 OLMo、Pythia 和 TinyLlama 不同,StabilityAI 尚未披露 StableLM 的训练数据,这使得与其他模型的比较存在一定难度。

模型详情

数据

关于训练数据的详细信息,请参阅 Dolma 文档。 本模型采用全新的 1.7 版本,该版本包含更多数据源、更优的去重处理和质量过滤。 在退火阶段,我们使用 Dolma 的一个更高质量子集,并采用线性衰减学习率直至为 0。

阶段性训练/退火

与 OLMo 1.0 不同,我们采用两阶段课程学习方式训练 OLMo 1.7:

  • 第一阶段,我们在 Dolma 1.7 数据集上从头开始训练模型。我们设置了余弦学习率调度,热身步数为 2500 步,峰值学习率为 3e-4,在 3T tokens 后余弦衰减至 3e-5。当学习率仍处于较高水平时,我们在 2T tokens 处结束该阶段。
  • 此时,我们切换到第二阶段,在 Dolma 1.7 的一个更高质量子集(见下文)上再训练 50B tokens,同时将学习率线性衰减至 0。我们的高质量子集包括:(1) 使用所有可用的 Wikipedia、OpenWebMath 和 Flan 数据;(2) 移除 Dolma CC、CC News 和 Megawika;(3) 重新平衡剩余数据源,以实现各数据源比例大致相等。下文将详细列出此第二阶段混合数据的确切 token 数量和相对比例。 两个阶段对 OLMo 模型的最终性能贡献相同。第一阶段结束后,OLMo 1.7 已经优于 OLMo 1.0。第二阶段在此基础上持续提升 2 到 3 个百分点的性能。

架构

OLMo 7B 架构以及用于比较的同类模型。

OLMo 7BLlama 2 7BOpenLM 7BFalcon 7BPaLM 8B
d_model40964096409645444096
注意力头数3232327116
层数3232323232
MLP 比例~8/3~8/3~8/344
层归一化类型非参数化 LNRMSNorm参数化 LN参数化 LN参数化 LN
位置嵌入RoPERoPERoPERoPERoPE
注意力变体全注意力GQA全注意力MQAMQA
偏置项无无仅在 LN 中仅在 LN 中无
模块类型顺序式顺序式顺序式并行式并行式
激活函数SwiGLUSwiGLUSwiGLUGeLUSwiGLU
序列长度20484096204820482048
批大小(样本数)2160102420482304512
批大小(tokens)~4M~4M~4M~4M~1M
权重共享否否否否是

超参数

以下为AdamW优化器参数。

规模峰值学习率贝塔系数epsilon权重衰减
1B4.0E-4(0.9, 0.95)1.0E-50.1
7B3.0E-4(0.9, 0.99)1.0E-50.1

与同类模型的优化器设置对比。

OLMo 7BLlama 2 7BOpenLM 7BFalcon 7B
预热步数5000200020001000
峰值学习率3.0E-043.0E-043.0E-046.0E-04
最小学习率3.0E-053.0E-053.0E-051.2E-05
权重衰减0.10.10.10.1
beta10.90.90.90.99
beta20.950.950.950.999
epsilon1.0E-051.0E-051.0E-051.0E-05
学习率调度线性余弦余弦余弦
梯度裁剪全局 1.0全局 1.0全局 1.0全局 1.0
梯度归约数据类型FP32FP32FP32BF16
优化器状态数据类型FP32很可能为 FP32FP32FP32

偏见、风险与局限性

与任何基础语言模型或未经安全过滤的微调模型一样,用户相对容易通过提示词让这些模型生成有害及通常具有敏感性的内容。

此类内容也可能非故意产生,尤其是在存在偏见的情况下,因此我们建议用户考虑应用此技术所带来的风险。

此外,OLMo或任何LLM输出的许多事实往往并非真实,因此需要进行核实。

引用

BibTeX:

@article{Groeneveld2023OLMo,
  title={OLMo: Accelerating the Science of Language Models},
  author={Groeneveld, Dirk and Beltagy, Iz and Walsh, Pete and Bhagia, Akshita and Kinney, Rodney and Tafjord, Oyvind and Jha, Ananya Harsh and Ivison, Hamish and Magnusson, Ian and Wang, Yizhong and Arora, Shane and Atkinson, David and Authur, Russell and Chandu, Khyathi and Cohan, Arman and Dumas, Jennifer and Elazar, Yanai and Gu, Yuling and Hessel, Jack and Khot, Tushar and Merrill, William and Morrison, Jacob and Muennighoff, Niklas and Naik, Aakanksha and Nam, Crystal and Peters, Matthew E. and Pyatkin, Valentina and Ravichander, Abhilasha and Schwenk, Dustin and Shah, Saurabh and Smith, Will and Subramani, Nishant and Wortsman, Mitchell and Dasigi, Pradeep and Lambert, Nathan and Richardson, Kyle and Dodge, Jesse and Lo, Kyle and Soldaini, Luca and Smith, Noah A. and Hajishirzi, Hannaneh},
  journal={Preprint},
  year={2024}
}

APA格式:

Groeneveld, D., Beltagy, I., Walsh, P., Bhagia, A., Kinney, R., Tafjord, O., Jha, A., Ivison, H., Magnusson, I., Wang, Y., Arora, S., Atkinson, D., Authur, R., Chandu, K., Cohan, A., Dumas, J., Elazar, Y., Gu, Y., Hessel, J., Khot, T., Merrill, W., Morrison, J., Muennighoff, N., Naik, A., Nam, C., Peters, M., Pyatkin, V., Ravichander, A., Schwenk, D., Shah, S., Smith, W., Subramani, N., Wortsman, M., Dasigi, P., Lambert, N., Richardson, K., Dodge, J., Lo, K., Soldaini, L., Smith, N., & Hajishirzi, H. (2024). OLMo:加速语言模型科学研究。预印本。

模型卡片联系方式

如本模型卡片存在错误,请联系Nathan,邮箱地址:{nathanl} at allenai dot org。