Openelm 1 1B
模型简介
模型特点
模型能力
使用案例
🚀 OpenELM
Sachin Mehta, Mohammad Hossein Sekhavat, Qingqing Cao, Maxwell Horton, Yanzi Jin, Chenfan Sun, Iman Mirzadeh, Mahyar Najibi, Dmitry Belenko, Peter Zatloukal, Mohammad Rastegari
我们推出了 OpenELM,这是一系列开放、高效的语言模型。OpenELM采用逐层缩放策略,在Transformer模型的每一层内高效分配参数,从而提高了模型的准确性。我们使用 CoreNet 库对OpenELM模型进行了预训练。我们发布了参数分别为2.7亿、4.5亿、11亿和30亿的预训练模型和指令微调模型。同时,我们还发布了完整的框架,包括数据准备、训练、微调以及评估流程,还有多个预训练检查点和训练日志,以促进开放研究。
我们的预训练数据集包含RefinedWeb、去重后的PILE、RedPajama的一个子集以及Dolma v1.6的一个子集,总计约18万亿个标记。在使用这些数据集之前,请查看其许可协议和使用条款。
🚀 快速开始
我们在 generate_openelm.py
中提供了一个示例函数,用于从通过 HuggingFace Hub 加载的OpenELM模型生成输出。
你可以运行以下命令来尝试该模型:
python generate_openelm.py --model apple/OpenELM-1_1B --hf_access_token [HF_ACCESS_TOKEN] --prompt 'Once upon a time there was' --generate_kwargs repetition_penalty=1.2
请参考 此链接 获取你的Hugging Face访问令牌。
可以通过 generate_kwargs
传递额外的参数给Hugging Face的生成函数。例如,为了加速推理,你可以尝试通过传递 prompt_lookup_num_tokens
参数来使用 查找令牌推测生成,如下所示:
python generate_openelm.py --model apple/OpenELM-1_1B --hf_access_token [HF_ACCESS_TOKEN] --prompt 'Once upon a time there was' --generate_kwargs repetition_penalty=1.2 prompt_lookup_num_tokens=10
或者,通过 assistant_model
参数传递一个较小的模型,尝试使用 辅助模型 进行模型级别的推测生成,例如:
python generate_openelm.py --model apple/OpenELM-1_1B --hf_access_token [HF_ACCESS_TOKEN] --prompt 'Once upon a time there was' --generate_kwargs repetition_penalty=1.2 --assistant_model [SMALLER_MODEL]
✨ 主要特性
- 高效参数分配:采用逐层缩放策略,在Transformer模型的每一层内高效分配参数,提升模型准确性。
- 多参数模型发布:发布了参数分别为2.7亿、4.5亿、11亿和30亿的预训练模型和指令微调模型。
- 完整框架开源:发布了完整的框架,包括数据准备、训练、微调以及评估流程,还有多个预训练检查点和训练日志,方便开放研究。
💻 使用示例
基础用法
python generate_openelm.py --model apple/OpenELM-1_1B --hf_access_token [HF_ACCESS_TOKEN] --prompt 'Once upon a time there was' --generate_kwargs repetition_penalty=1.2
高级用法
# 为了加速推理,使用查找令牌推测生成
python generate_openelm.py --model apple/OpenELM-1_1B --hf_access_token [HF_ACCESS_TOKEN] --prompt 'Once upon a time there was' --generate_kwargs repetition_penalty=1.2 prompt_lookup_num_tokens=10
# 使用辅助模型进行模型级别的推测生成
python generate_openelm.py --model apple/OpenELM-1_1B --hf_access_token [HF_ACCESS_TOKEN] --prompt 'Once upon a time there was' --generate_kwargs repetition_penalty=1.2 --assistant_model [SMALLER_MODEL]
📚 详细文档
主要结果
零样本学习
模型大小 | ARC-c | ARC-e | BoolQ | HellaSwag | PIQA | SciQ | WinoGrande | 平均 |
---|---|---|---|---|---|---|---|---|
OpenELM-270M | 26.45 | 45.08 | 53.98 | 46.71 | 69.75 | 84.70 | 53.91 | 54.37 |
OpenELM-270M-Instruct | 30.55 | 46.68 | 48.56 | 52.07 | 70.78 | 84.40 | 52.72 | 55.11 |
OpenELM-450M | 27.56 | 48.06 | 55.78 | 53.97 | 72.31 | 87.20 | 58.01 | 57.56 |
OpenELM-450M-Instruct | 30.38 | 50.00 | 60.37 | 59.34 | 72.63 | 88.00 | 58.96 | 59.95 |
OpenELM-1_1B | 32.34 | 55.43 | 63.58 | 64.81 | 75.57 | 90.60 | 61.72 | 63.44 |
OpenELM-1_1B-Instruct | 37.97 | 52.23 | 70.00 | 71.20 | 75.03 | 89.30 | 62.75 | 65.50 |
OpenELM-3B | 35.58 | 59.89 | 67.40 | 72.44 | 78.24 | 92.70 | 65.51 | 67.39 |
OpenELM-3B-Instruct | 39.42 | 61.74 | 68.17 | 76.36 | 79.00 | 92.50 | 66.85 | 69.15 |
LLM360
模型大小 | ARC-c | HellaSwag | MMLU | TruthfulQA | WinoGrande | 平均 |
---|---|---|---|---|---|---|
OpenELM-270M | 27.65 | 47.15 | 25.72 | 39.24 | 53.83 | 38.72 |
OpenELM-270M-Instruct | 32.51 | 51.58 | 26.70 | 38.72 | 53.20 | 40.54 |
OpenELM-450M | 30.20 | 53.86 | 26.01 | 40.18 | 57.22 | 41.50 |
OpenELM-450M-Instruct | 33.53 | 59.31 | 25.41 | 40.48 | 58.33 | 43.41 |
OpenELM-1_1B | 36.69 | 65.71 | 27.05 | 36.98 | 63.22 | 45.93 |
OpenELM-1_1B-Instruct | 41.55 | 71.83 | 25.65 | 45.95 | 64.72 | 49.94 |
OpenELM-3B | 42.24 | 73.28 | 26.76 | 34.98 | 67.25 | 48.90 |
OpenELM-3B-Instruct | 47.70 | 76.87 | 24.80 | 38.76 | 67.96 | 51.22 |
OpenLLM排行榜
模型大小 | ARC-c | CrowS-Pairs | HellaSwag | MMLU | PIQA | RACE | TruthfulQA | WinoGrande | 平均 |
---|---|---|---|---|---|---|---|---|---|
OpenELM-270M | 27.65 | 66.79 | 47.15 | 25.72 | 69.75 | 30.91 | 39.24 | 53.83 | 45.13 |
OpenELM-270M-Instruct | 32.51 | 66.01 | 51.58 | 26.70 | 70.78 | 33.78 | 38.72 | 53.20 | 46.66 |
OpenELM-450M | 30.20 | 68.63 | 53.86 | 26.01 | 72.31 | 33.11 | 40.18 | 57.22 | 47.69 |
OpenELM-450M-Instruct | 33.53 | 67.44 | 59.31 | 25.41 | 72.63 | 36.84 | 40.48 | 58.33 | 49.25 |
OpenELM-1_1B | 36.69 | 71.74 | 65.71 | 27.05 | 75.57 | 36.46 | 36.98 | 63.22 | 51.68 |
OpenELM-1_1B-Instruct | 41.55 | 71.02 | 71.83 | 25.65 | 75.03 | 39.43 | 45.95 | 64.72 | 54.40 |
OpenELM-3B | 42.24 | 73.29 | 73.28 | 26.76 | 78.24 | 38.76 | 34.98 | 67.25 | 54.35 |
OpenELM-3B-Instruct | 47.70 | 72.33 | 76.87 | 24.80 | 79.00 | 38.47 | 38.76 | 67.96 | 55.73 |
更多结果和比较请参阅技术报告。
评估
环境设置
安装以下依赖项:
# 安装公共的lm-eval-harness
harness_repo="public-lm-eval-harness"
git clone https://github.com/EleutherAI/lm-evaluation-harness ${harness_repo}
cd ${harness_repo}
# 使用2024年3月15日的主分支,SHA为dc90fec
git checkout dc90fec
pip install -e .
cd ..
# 66d6242是2024年4月1日的主分支
pip install datasets@git+https://github.com/huggingface/datasets.git@66d6242
pip install tokenizers>=0.15.2 transformers>=4.38.2 sentencepiece>=0.2.0
评估OpenELM
# OpenELM-1_1B
hf_model=apple/OpenELM-1_1B
# 由于lm-eval-harness默认将add_bos_token设置为False,但OpenELM使用的LLaMA分词器需要add_bos_token为True,因此需要此标志
tokenizer=meta-llama/Llama-2-7b-hf
add_bos_token=True
batch_size=1
mkdir lm_eval_output
shot=0
task=arc_challenge,arc_easy,boolq,hellaswag,piqa,race,winogrande,sciq,truthfulqa_mc2
lm_eval --model hf \
--model_args pretrained=${hf_model},trust_remote_code=True,add_bos_token=${add_bos_token},tokenizer=${tokenizer} \
--tasks ${task} \
--device cuda:0 \
--num_fewshot ${shot} \
--output_path ./lm_eval_output/${hf_model//\//_}_${task//,/_}-${shot}shot \
--batch_size ${batch_size} 2>&1 | tee ./lm_eval_output/eval-${hf_model//\//_}_${task//,/_}-${shot}shot.log
shot=5
task=mmlu,winogrande
lm_eval --model hf \
--model_args pretrained=${hf_model},trust_remote_code=True,add_bos_token=${add_bos_token},tokenizer=${tokenizer} \
--tasks ${task} \
--device cuda:0 \
--num_fewshot ${shot} \
--output_path ./lm_eval_output/${hf_model//\//_}_${task//,/_}-${shot}shot \
--batch_size ${batch_size} 2>&1 | tee ./lm_eval_output/eval-${hf_model//\//_}_${task//,/_}-${shot}shot.log
shot=25
task=arc_challenge,crows_pairs_english
lm_eval --model hf \
--model_args pretrained=${hf_model},trust_remote_code=True,add_bos_token=${add_bos_token},tokenizer=${tokenizer} \
--tasks ${task} \
--device cuda:0 \
--num_fewshot ${shot} \
--output_path ./lm_eval_output/${hf_model//\//_}_${task//,/_}-${shot}shot \
--batch_size ${batch_size} 2>&1 | tee ./lm_eval_output/eval-${hf_model//\//_}_${task//,/_}-${shot}shot.log
shot=10
task=hellaswag
lm_eval --model hf \
--model_args pretrained=${hf_model},trust_remote_code=True,add_bos_token=${add_bos_token},tokenizer=${tokenizer} \
--tasks ${task} \
--device cuda:0 \
--num_fewshot ${shot} \
--output_path ./lm_eval_output/${hf_model//\//_}_${task//,/_}-${shot}shot \
--batch_size ${batch_size} 2>&1 | tee ./lm_eval_output/eval-${hf_model//\//_}_${task//,/_}-${shot}shot.log
🔧 技术细节
OpenELM采用逐层缩放策略,在Transformer模型的每一层内高效分配参数,从而提高了模型的准确性。模型在公开可用的数据集上进行训练,预训练数据集包含RefinedWeb、去重后的PILE、RedPajama的一个子集以及Dolma v1.6的一个子集,总计约18万亿个标记。
📄 许可证
本项目采用 apple-amlr 许可证。
⚠️ 重要提示
OpenELM模型的发布旨在通过提供最先进的语言模型来赋能和丰富开放研究社区。这些模型在公开可用的数据集上进行训练,且不提供任何安全保证。因此,这些模型有可能根据用户提示生成不准确、有害、有偏见或令人反感的输出。因此,用户和开发者必须进行全面的安全测试,并根据其特定需求实施适当的过滤机制。
🔖 引用
如果您觉得我们的工作有用,请引用:
@article{mehtaOpenELMEfficientLanguage2024,
title = {{OpenELM}: {An} {Efficient} {Language} {Model} {Family} with {Open} {Training} and {Inference} {Framework}},
shorttitle = {{OpenELM}},
url = {https://arxiv.org/abs/2404.14619v1},
language = {en},
urldate = {2024-04-24},
journal = {arXiv.org},
author = {Mehta, Sachin and Sekhavat, Mohammad Hossein and Cao, Qingqing and Horton, Maxwell and Jin, Yanzi and Sun, Chenfan and Mirzadeh, Iman and Najibi, Mahyar and Belenko, Dmitry and Zatloukal, Peter and Rastegari, Mohammad},
month = apr,
year = {2024},
}
@inproceedings{mehta2022cvnets,
author = {Mehta, Sachin and Abdolhosseini, Farzad and Rastegari, Mohammad},
title = {CVNets: High Performance Library for Computer Vision},
year = {2022},
booktitle = {Proceedings of the 30th ACM International Conference on Multimedia},
series = {MM '22}
}



