Características clave | Últimas actualizaciones | Visión | Inicio rápido | Documentos de referencia | Licencia
EasyDeL es un marco de código abierto diseñado para mejorar y agilizar el proceso de capacitación de modelos de aprendizaje automático, con un enfoque principal en Jax/Flax. Proporciona soluciones convenientes y efectivas para entrenar y servir modelos Flax/Jax en TPU/GPU a escala.
EasyDeL se destaca por brindar flexibilidad y transparencia incomparables:
Arquitectura abierta : cada componente de EasyDeL está abierto a inspección, modificación y personalización. Aquí no hay cajas negras.
Hackabilidad en su esencia : creemos en brindarle control total. Ya sea que quieras modificar una pequeña función o revisar por completo un ciclo de entrenamiento, EasyDeL te permite hacerlo.
Acceso al código personalizado : todas las implementaciones personalizadas están disponibles y están bien documentadas, lo que le permite comprender, aprender y modificar los aspectos internos según sea necesario.
Fomentar la experimentación : animamos activamente a los usuarios a experimentar, ampliar y mejorar el código base existente. ¡Tus innovaciones podrían convertirse en la próxima gran característica!
Desarrollo impulsado por la comunidad : comparta sus implementaciones y mejoras personalizadas con la comunidad, fomentando un entorno colaborativo para avanzar en la investigación y el desarrollo de ML.
Con EasyDeL, no estará limitado por marcos rígidos. En cambio, tiene un conjunto de herramientas flexible y potente que se adapta a sus necesidades, sin importar cuán únicas o especializadas sean. Ya sea que esté realizando investigaciones de vanguardia o creando sistemas de aprendizaje automático listos para producción, EasyDeL brinda la libertad de innovar sin limitaciones.
EasyDeL proporciona una flexibilidad incomparable para personalizar y optimizar sus modelos:
Estrategias de fragmentación : personalice y experimente fácilmente con diferentes estrategias de fragmentación para optimizar el rendimiento en múltiples dispositivos.
Personalización de algoritmos : modifique y ajuste los algoritmos para adaptarlos a sus necesidades y configuraciones de hardware específicas.
Mecanismos de atención : elija entre más de 10 tipos de mecanismos de atención optimizados para GPU/TPU/CPU, que incluyen:
Este nivel de personalización le permite exprimir cada gramo de rendimiento de su hardware mientras adapta el comportamiento del modelo a sus requisitos exactos.
EasyDeL evoluciona constantemente para satisfacer las necesidades de la comunidad de aprendizaje automático. En próximas actualizaciones, planeamos introducir:
Flexibilidad : EasyDeL ofrece un diseño modular que permite a los investigadores y desarrolladores mezclar y combinar componentes fácilmente, experimentar con diferentes arquitecturas (incluidas Transformers, Mamba, RWKV y...) y adaptar modelos a casos de uso específicos.
Rendimiento : aprovechando el poder de JAX y Flax, EasyDeL proporciona implementaciones de alto rendimiento de modelos y técnicas de entrenamiento de última generación, optimizados tanto para TPU como para GPU.
Escalabilidad : desde pequeños experimentos hasta entrenamiento de modelos a gran escala, EasyDeL proporciona herramientas y optimizaciones para escalar eficientemente sus modelos y flujos de trabajo.
Facilidad de uso : a pesar de sus potentes funciones, EasyDeL mantiene una API intuitiva, lo que la hace accesible tanto para principiantes como para profesionales experimentados.
Investigación de vanguardia : implementación rápida de los últimos avances en arquitecturas de modelos, técnicas de capacitación y métodos de optimización.
pip install easydel
import easydel as ed
ed . FlexibleAttentionModule . run_attention_benchmarks ()
Hay documentación completa y ejemplos disponibles en EasyDeL Documentation.
Aquí hay una versión mejorada de sus últimas actualizaciones:
jax_flash_attn2
y la atención predeterminada ahora está configurada en jax_flash_attn2
en CPU/GPU/TPU.inference
8bit_cache
DPO
como ORPO
. params = model . shard_params ( params )
params = model . gather_params ( params )
do_shard_params
se eliminó de TrainingArguments
. Para fragmentar los parámetros, ahora debe hacerlo manualmente antes del entrenamiento.ApiEngine
y engine_client
SFT
, DPO
, ORPO
y CLM
mejorados La clase vInference
proporciona una interfaz optimizada para la generación de texto utilizando modelos de lenguaje previamente entrenados dentro de 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
es un motor Serve API para fines de producción o investigación, que proporciona una API estable, eficiente y similar a OpenAI.
import easydel as ed
api_inference = ed . vInferenceApiServer (
{ inference . inference_name : inference }
) # you can load multi inferences together
api_inference . fire ()
EasyDeLState
actúa como un contenedor integral para su modelo EasyDeL, incluido el progreso del entrenamiento, los parámetros del modelo y la información del optimizador.
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 ()
¡Las contribuciones a EasyDeL son bienvenidas! Bifurque el repositorio, realice los cambios y envíe una solicitud de extracción.
EasyDeL se publica bajo la licencia Apache v2. Consulte el archivo de LICENCIA para obtener más detalles.
Si tiene alguna pregunta o comentario sobre EasyDeL, puede comunicarse conmigo en [email protected] .
Para citar a EasyDeL en su trabajo:
@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 }
}