主な機能|最新の更新情報|ビジョン|クイックスタート|参考資料|ライセンス
EasyDeL は、Jax/Flax に主に焦点を当て、機械学習モデルのトレーニング プロセスを強化および合理化するように設計されたオープンソース フレームワークです。 TPU/GPU 上で Flax/Jax モデルを大規模にトレーニングおよび提供するための便利で効果的なソリューションを提供します。
EasyDeL は、比類のない柔軟性と透明性を提供することで際立っています。
オープン アーキテクチャ: EasyDeL のすべてのコンポーネントは、検査、変更、カスタマイズのためにオープンです。ここにはブラックボックスはありません。
核となるハッキング可能性: 私たちはあなたに完全なコントロールを与えることを信じています。小さな関数を微調整したい場合でも、トレーニング ループを完全に見直したい場合でも、EasyDeL を使用するとそれが可能になります。
カスタム コード アクセス: すべてのカスタム実装はすぐに利用でき、十分に文書化されているため、必要に応じて内部を理解し、学習し、変更することができます。
実験を奨励する: ユーザーが既存のコードベースを実験、拡張、改善することを積極的に奨励します。あなたのイノベーションが次の大きな機能になる可能性があります。
コミュニティ主導の開発: カスタムの実装と改善をコミュニティと共有し、ML 研究開発を進めるための協力的な環境を促進します。
EasyDeL を使用すると、厳格なフレームワークに制約されません。代わりに、ニーズがどれほどユニークで専門的であっても、ニーズに適応する柔軟で強力なツールキットを利用できます。最先端の研究を行っている場合でも、本番環境に対応した ML システムを構築している場合でも、EasyDeL は制限なく革新する自由を提供します。
EasyDeL は、モデルのカスタマイズと最適化において比類のない柔軟性を提供します。
シャーディング戦略: さまざまなシャーディング戦略を簡単にカスタマイズして実験し、複数のデバイスにわたるパフォーマンスを最適化します。
アルゴリズムのカスタマイズ: 特定のニーズやハードウェア構成に合わせてアルゴリズムを変更および微調整します。
アテンション メカニズム: GPU/TPU/CPU に最適化された 10 種類以上のアテンション メカニズムから選択します。
このレベルのカスタマイズにより、モデルの動作を要件に合わせて調整しながら、ハードウェアのパフォーマンスを最大限に引き出すことができます。
EasyDeL は、機械学習コミュニティのニーズを満たすために常に進化しています。今後のアップデートでは、以下を導入する予定です。
柔軟性: EasyDeL は、研究者や開発者がコンポーネントを簡単に組み合わせたり、さまざまなアーキテクチャ (Transformers、Mamba、RWKV など) を試したり、モデルを特定のユースケースに適応させたりできるモジュール設計を提供します。
パフォーマンス: JAX と Flax のパワーを活用する EasyDeL は、TPU と GPU の両方に最適化された、最先端のモデルとトレーニング技術の高性能実装を提供します。
スケーラビリティ: 小規模な実験から大規模なモデル トレーニングまで、EasyDeL はモデルとワークフローを効率的に拡張するためのツールと最適化を提供します。
使いやすさ: EasyDeL は強力な機能にもかかわらず、直感的な API を維持しているため、初心者と経験豊富な実務者の両方がアクセスできます。
最先端の研究: モデル アーキテクチャ、トレーニング手法、最適化手法における最新の進歩を迅速に実装します。
pip install easydel
import easydel as ed
ed . FlexibleAttentionModule . run_attention_benchmarks ()
包括的なドキュメントと例は、EasyDeL Documentation で入手できます。
最新のアップデートの改良版は次のとおりです。
jax_flash_attn2
が追加され、CPU/GPU/TPU のデフォルト アテンションがjax_flash_attn2
に設定されるようになりました。inference
のパフォーマンスの向上8bit_cache
のサポートを追加しましたDPO
トレーナーとORPO
トレーナーの両方がアップグレードされました。 params = model . shard_params ( params )
params = model . gather_params ( params )
do_shard_params
がTrainingArguments
から削除されました。パラメータをシャーディングするには、トレーニング前に手動で行う必要があります。ApiEngine
とengine_client
追加しましたSFT
、 DPO
、 ORPO
、 CLM
トレーナーvInference
クラスは、JAX 内の事前トレーニングされた言語モデルを使用してテキストを生成するための合理化されたインターフェイスを提供します。
import easydel as ed
from transformers import AutoTokenizer
model , params = ed . AutoEasyDeLModelForCausalLM . from_pretrained (...)
tokenizer = AutoTokenizer . from_pretrained (...)
inference = ed . vInference (
model = model ,
params = params ,
tokenizer = tokenizer ,
generation_config = ed . vInferenceConfig (
temperature = model . generation_config . temperature ,
top_k = model . generation_config . top_k ,
top_p = model . generation_config . top_p ,
bos_token_id = model . generation_config . bos_token_id ,
eos_token_id = model . generation_config . eos_token_id ,
pad_token_id = model . generation_config . pad_token_id ,
streaming_chunks = 32 ,
max_new_tokens = 1024 ,
),
)
vInferenceApiServer
実稼働または研究目的のための Serve API エンジンであり、安定した効率的な OpenAI API のような API を提供します。
import easydel as ed
api_inference = ed . vInferenceApiServer (
{ inference . inference_name : inference }
) # you can load multi inferences together
api_inference . fire ()
EasyDeLState
、トレーニングの進行状況、モデル パラメーター、オプティマイザー情報を含む、EasyDeL モデルの包括的なコンテナーとして機能します。
from easydel import EasyDeLState
state = EasyDeLState . from_pretrained (
pretrained_model_name_or_path = "model_name" ,
dtype = jnp . bfloat16 ,
param_dtype = jnp . bfloat16 ,
sharding_axis_dims = ( 1 , - 1 , 1 , 1 )
)
from easydel import SFTTrainer , TrainingArguments
trainer = SFTTrainer (
arguments = train_arguments ,
train_dataset = train_dataset ,
eval_dataset = eval_dataset ,
tokenizer = tokenizer ,
formatting_func = prompter ,
packing = True ,
num_of_sequences = max_length ,
)
output = trainer . train ( flax . core . FrozenDict ({ "params" : params }))
from easydel import DPOTrainer
dpo_trainer = DPOTrainer (
model_state = state ,
ref_model_state = ref_state ,
beta = 0.1 ,
train_dataset = train_dataset ,
eval_dataset = eval_dataset ,
tokenizer = tokenizer ,
arguments = arguments ,
max_length = max_length ,
max_completion_length = max_completion_length ,
max_prompt_length = max_prompt_length ,
)
output = dpo_trainer . train ()
EasyDeL への貢献は大歓迎です!リポジトリをフォークし、変更を加えて、プル リクエストを送信してください。
EasyDeL は、Apache v2 ライセンスに基づいてリリースされています。詳細については、LICENSE ファイルを参照してください。
EasyDeL についてご質問やご意見がございましたら、 [email protected]までご連絡ください。
作品内で EasyDeL を引用するには:
@misc { Zare Chavoshi_2023,
title = { EasyDeL: An open-source library for enhancing and streamlining the training process of machine learning models } ,
url = { https://github.com/erfanzar/EasyDeL } ,
author = { Zare Chavoshi, Erfan } ,
year = { 2023 }
}