Principales fonctionnalités | Dernières mises à jour | Vision | Démarrage rapide | Documents de référence | Licence
EasyDeL est un framework open source conçu pour améliorer et rationaliser le processus de formation des modèles d'apprentissage automatique, avec un accent principal sur Jax/Flax. Il fournit des solutions pratiques et efficaces pour former et servir les modèles Flax/Jax sur TPU/GPU à grande échelle.
EasyDeL se démarque en offrant une flexibilité et une transparence inégalées :
Architecture ouverte : chaque composant d'EasyDeL est ouvert pour l'inspection, la modification et la personnalisation. Il n’y a pas de boîtes noires ici.
La piratage à la base : nous croyons qu'il est important de vous donner un contrôle total. Que vous souhaitiez modifier une petite fonction ou remanier complètement une boucle d'entraînement, EasyDeL vous permet de le faire.
Accès au code personnalisé : toutes les implémentations personnalisées sont facilement disponibles et bien documentées, vous permettant de comprendre, d'apprendre et de modifier les composants internes selon vos besoins.
Encourager l'expérimentation : nous encourageons activement les utilisateurs à expérimenter, étendre et améliorer la base de code existante. Vos innovations pourraient devenir la prochaine grande fonctionnalité !
Développement piloté par la communauté : partagez vos implémentations et améliorations personnalisées avec la communauté, favorisant ainsi un environnement collaboratif pour faire progresser la recherche et le développement du ML.
Avec EasyDeL, vous n'êtes pas contraint par des cadres rigides. Au lieu de cela, vous disposez d’une boîte à outils flexible et puissante qui s’adapte à vos besoins, aussi uniques ou spécialisés soient-ils. Que vous meniez des recherches de pointe ou que vous construisiez des systèmes ML prêts pour la production, EasyDeL vous offre la liberté d'innover sans limites.
EasyDeL offre une flexibilité inégalée dans la personnalisation et l’optimisation de vos modèles :
Stratégies de partitionnement : personnalisez et expérimentez facilement différentes stratégies de partitionnement pour optimiser les performances sur plusieurs appareils.
Personnalisation des algorithmes : modifiez et affinez les algorithmes en fonction de vos besoins spécifiques et de vos configurations matérielles.
Mécanismes d'attention : choisissez parmi plus de 10 types de mécanismes d'attention optimisés pour GPU/TPU/CPU, notamment :
Ce niveau de personnalisation vous permet d'exploiter chaque once de performances de votre matériel tout en adaptant le comportement du modèle à vos besoins précis.
EasyDeL évolue constamment pour répondre aux besoins de la communauté du machine learning. Dans les prochaines mises à jour, nous prévoyons d'introduire :
Flexibilité : EasyDeL propose une conception modulaire qui permet aux chercheurs et aux développeurs de mélanger et assortir facilement des composants, d'expérimenter différentes architectures (notamment Transformers, Mamba, RWKV, et ...) et d'adapter les modèles à des cas d'utilisation spécifiques.
Performances : exploitant la puissance de JAX et Flax, EasyDeL fournit des implémentations hautes performances de modèles et de techniques de formation de pointe, optimisées pour les TPU et les GPU.
Évolutivité : des petites expériences à la formation de modèles à grande échelle, EasyDeL fournit des outils et des optimisations pour faire évoluer efficacement vos modèles et flux de travail.
Facilité d'utilisation : Malgré ses fonctionnalités puissantes, EasyDeL maintient une API intuitive, la rendant accessible aussi bien aux débutants qu'aux praticiens expérimentés.
Recherche de pointe : mise en œuvre rapide des dernières avancées en matière d'architectures de modèles, de techniques de formation et de méthodes d'optimisation.
pip install easydel
import easydel as ed
ed . FlexibleAttentionModule . run_attention_benchmarks ()
Une documentation complète et des exemples sont disponibles sur EasyDeL Documentation.
Voici une version améliorée de vos dernières mises à jour :
jax_flash_attn2
est ajouté et l'attention par défaut est désormais définie sur jax_flash_attn2
dans CPU/GPU/TPU.inference
8bit_cache
DPO
et ORPO
ont été mis à niveau. params = model . shard_params ( params )
params = model . gather_params ( params )
do_shard_params
a été supprimé de TrainingArguments
. Pour partager les paramètres, vous devez maintenant le faire manuellement avant l'entraînement.ApiEngine
et engine_client
SFT
, DPO
, ORPO
, CLM
améliorés La classe vInference
fournit une interface simplifiée pour la génération de texte à l'aide de modèles de langage pré-entraînés dans 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
est un moteur d'API de service à des fins de production ou de recherche, fournissant une API stable, efficace et OpenAI comme l'API.
import easydel as ed
api_inference = ed . vInferenceApiServer (
{ inference . inference_name : inference }
) # you can load multi inferences together
api_inference . fire ()
EasyDeLState
agit comme un conteneur complet pour votre modèle EasyDeL, comprenant la progression de la formation, les paramètres du modèle et les informations sur l'optimiseur.
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 ()
Les contributions à EasyDeL sont les bienvenues ! Veuillez créer le référentiel, apporter vos modifications et soumettre une pull request.
EasyDeL est publié sous la licence Apache v2. Voir le fichier LICENSE pour plus de détails.
Si vous avez des questions ou des commentaires sur EasyDeL, vous pouvez me contacter à [email protected] .
Pour citer EasyDeL dans votre travail :
@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 }
}