モデル概要
モデル特徴
モデル能力
使用事例
🚀 OpenELM
OpenELM は一連のオープンで効率的な言語モデルです。このモデルファミリーは階層的スケーリング戦略を採用し、Transformerモデルの各層内で効率的にパラメータを割り当てることで、モデルの精度を向上させています。OpenELMモデルは CoreNet ライブラリを使用して事前学習されています。我々は、それぞれ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-270M --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-270M --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-270M --hf_access_token [HF_ACCESS_TOKEN] --prompt 'Once upon a time there was' --generate_kwargs repetition_penalty=1.2 --assistant_model [SMALLER_MODEL]
モデルの評価
依存関係のインストール
以下の依存関係をインストールします。
# 公共の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-270M
hf_model=apple/OpenELM-270M
# 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
✨ 主な機能
- 効率的なパラメータ割り当て:階層的スケーリング戦略を採用し、Transformerモデルの各層内で効率的にパラメータを割り当て、モデルの精度を向上させます。
- 複数のパラメータモデルの公開:2.7億、4.5億、11億、30億のパラメータを持つ事前学習モデルと命令微調整モデルを提供します。
- オープンな研究のサポート:データ準備、学習、微調整、評価の一連の完全なフレームワークや、事前学習チェックポイントと学習ログを公開します。
💻 使用例
基本的な使用法
# 以下のコマンドを実行してモデルをテスト
python generate_openelm.py --model apple/OpenELM-270M --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-270M --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-270M --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 |
より詳細な結果と比較については、技術レポートを参照してください。
🔧 技術詳細
モデルの学習
OpenELMモデルは CoreNet ライブラリを使用して事前学習されています。事前学習データセットには、RefinedWeb、重複排除されたPILE、RedPajamaのサブセット、Dolma v1.6のサブセットが含まれ、合計で約18兆個のトークンがあります。
評価設定
評価には特定の依存関係をインストールする必要があり、lm-eval
ツールを使用して評価を行います。評価中は、add_bos_token
などのいくつかのパラメータの設定に注意する必要があります。
📄 ライセンス
このプロジェクトは apple-amlr ライセンスの下で提供されています。
⚠️ 重要提示
OpenELMモデルは公開されているデータセットを使用して学習されており、公開時にはセキュリティ保証は一切提供されていません。したがって、これらのモデルはユーザーの入力に応じて、不正確、有害、偏見がある、または不快な出力を生成する可能性があります。ユーザーと開発者は、完全なセキュリティテストを行い、自身のニーズに応じて適切なフィルタリングメカニズムを実装する必要があります。
💡 使用建议
- 事前学習データセットを使用する前に、そのライセンス契約と使用条件をよく確認してください。
- Hugging Faceアクセストークンを取得する際には、このリンク を参照してください。
- モデルを評価する際には、ドキュメントの手順に従って依存関係をインストールし、パラメータを正しく設定してください。
📚 引用
もしあなたが我々の研究が役に立ったと感じたら、以下の文献を引用してください。
@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}
}



