许可证:apple-amlr
许可证名称:apple-sample-code-license
许可证链接:LICENSE
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模型进行了预训练,并发布了270M、450M、1.1B和3B参数的预训练及指令调优模型。我们开源了完整框架,包括数据准备、训练、微调和评估流程,同时提供多个预训练检查点和训练日志,以促进开放研究。
我们的预训练数据集包含RefinedWeb、去重PILE、RedPajama子集和Dolma v1.6子集,总计约1.8万亿token。使用前请查阅相关数据集的许可协议和条款。
使用指南
我们提供了示例脚本generate_openelm.py
,可通过HuggingFace Hub加载OpenELM模型生成文本。
运行以下命令体验模型:
python generate_openelm.py --model apple/OpenELM-270M --hf_access_token [HF_ACCESS_TOKEN] --prompt '从前有座山' --generate_kwargs repetition_penalty=1.2
获取HuggingFace访问令牌请参考此链接。
可通过generate_kwargs
传递额外生成参数。例如使用lookup token推测生成加速推理:
python generate_openelm.py --model apple/OpenELM-270M --hf_access_token [HF_ACCESS_TOKEN] --prompt '从前有座山' --generate_kwargs repetition_penalty=1.2 prompt_lookup_num_tokens=10
或通过assistant_model
参数使用辅助模型进行模型级推测生成:
python generate_openelm.py --model apple/OpenELM-270M --hf_access_token [HF_ACCESS_TOKEN] --prompt '从前有座山' --generate_kwargs repetition_penalty=1.2 --assistant_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指令版 |
30.55 |
46.68 |
48.56 |
52.07 |
70.78 |
84.40 |
52.72 |
55.11 |
(完整表格内容保持原格式不变)
评估流程
环境配置
安装依赖:
harness_repo="public-lm-eval-harness"
git clone https://github.com/EleutherAI/lm-evaluation-harness ${harness_repo}
cd ${harness_repo}
git checkout dc90fec
pip install -e .
cd ..
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
执行评估
hf_model=apple/OpenELM-270M
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
风险声明
OpenELM模型旨在为开放研究社区提供先进的语言模型资源。基于公开数据集训练的模型未设置安全防护机制,可能产生不准确、有害、偏见或不当内容。使用者需根据自身需求进行充分安全测试并部署过滤机制。
引用规范
若使用我们的工作,请引用:
@article{mehtaOpenELMEfficientLanguage2024,
title = {{OpenELM}: 开源高效语言模型家族},
url = {https://arxiv.org/abs/2404.14619v1},
journal = {arXiv.org},
author = {Mehta, Sachin et al.},
year = {2024},
}
@inproceedings{mehta2022cvnets,
title = {CVNets: 高性能计算机视觉库},
booktitle = {第30届ACM多媒体国际会议},
year = {2022},
}