Principais recursos | Últimas atualizações | Visão | Início rápido | Documentos de referência | Licença
EasyDeL é uma estrutura de código aberto projetada para aprimorar e agilizar o processo de treinamento de modelos de aprendizado de máquina, com foco principal em Jax/Flax. Ele fornece soluções convenientes e eficazes para treinar e servir modelos Flax/Jax em TPU/GPU em escala.
EasyDeL se destaca por oferecer flexibilidade e transparência incomparáveis:
Arquitetura Aberta : Cada componente do EasyDeL está aberto para inspeção, modificação e personalização. Não há caixas pretas aqui.
Hackabilidade em sua essência : Acreditamos em dar a você controle total. Se você deseja ajustar uma pequena função ou revisar completamente um ciclo de treinamento, o EasyDeL permite que você faça isso.
Acesso ao código personalizado : todas as implementações personalizadas estão prontamente disponíveis e bem documentadas, permitindo que você entenda, aprenda e modifique os componentes internos conforme necessário.
Incentive a experimentação : incentivamos ativamente os usuários a experimentar, ampliar e melhorar a base de código existente. Suas inovações podem se tornar o próximo grande recurso!
Desenvolvimento orientado para a comunidade : compartilhe suas implementações e melhorias personalizadas com a comunidade, promovendo um ambiente colaborativo para o avanço da pesquisa e do desenvolvimento de ML.
Com EasyDeL, você não fica limitado por estruturas rígidas. Em vez disso, você tem um kit de ferramentas flexível e poderoso que se adapta às suas necessidades, não importa quão exclusivas ou especializadas elas sejam. Esteja você conduzindo pesquisas de ponta ou construindo sistemas de ML prontos para produção, o EasyDeL oferece a liberdade de inovar sem limitações.
EasyDeL oferece flexibilidade incomparável na personalização e otimização de seus modelos:
Estratégias de fragmentação : personalize e experimente facilmente diferentes estratégias de fragmentação para otimizar o desempenho em vários dispositivos.
Personalização de algoritmo : modifique e ajuste algoritmos para atender às suas necessidades específicas e configurações de hardware.
Mecanismos de atenção : escolha entre mais de 10 tipos de mecanismos de atenção otimizados para GPU/TPU/CPU, incluindo:
Esse nível de personalização permite que você aproveite cada grama de desempenho do seu hardware enquanto adapta o comportamento do modelo aos seus requisitos exatos.
EasyDeL está em constante evolução para atender às necessidades da comunidade de aprendizado de máquina. Nas próximas atualizações, planejamos apresentar:
Flexibilidade : EasyDeL oferece um design modular que permite que pesquisadores e desenvolvedores misturem e combinem facilmente componentes, experimentem diferentes arquiteturas (incluindo Transformers, Mamba, RWKV e...) e adaptem modelos para casos de uso específicos.
Desempenho : Aproveitando o poder do JAX e do Flax, o EasyDeL fornece implementações de alto desempenho de modelos e técnicas de treinamento de última geração, otimizados para TPUs e GPUs.
Escalabilidade : desde pequenos experimentos até treinamento de modelos em grande escala, EasyDeL fornece ferramentas e otimizações para dimensionar com eficiência seus modelos e fluxos de trabalho.
Facilidade de uso : Apesar de seus recursos poderosos, EasyDeL mantém uma API intuitiva, tornando-a acessível tanto para iniciantes quanto para profissionais experientes.
Pesquisa de ponta : implementando rapidamente os mais recentes avanços em arquiteturas de modelos, técnicas de treinamento e métodos de otimização.
pip install easydel
import easydel as ed
ed . FlexibleAttentionModule . run_attention_benchmarks ()
Documentação abrangente e exemplos estão disponíveis em Documentação EasyDeL.
Aqui está uma versão melhorada de suas atualizações mais recentes:
jax_flash_attn2
foi adicionado e a atenção padrão agora está definida como jax_flash_attn2
na CPU/GPU/TPU.inference
8bit_cache
DPO
e ORPO
foram atualizados. params = model . shard_params ( params )
params = model . gather_params ( params )
do_shard_params
foi removido de TrainingArguments
. Para fragmentar parâmetros, agora você deve fazê-lo manualmente antes do treinamento.ApiEngine
e engine_client
SFT
, DPO
, ORPO
e CLM
aprimorados A classe vInference
fornece uma interface simplificada para geração de texto usando modelos de linguagem pré-treinados em 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
é um mecanismo de API de serviço para fins de produção ou pesquisa, fornecendo uma API estável, eficiente e semelhante a uma API OpenAI.
import easydel as ed
api_inference = ed . vInferenceApiServer (
{ inference . inference_name : inference }
) # you can load multi inferences together
api_inference . fire ()
EasyDeLState
atua como um contêiner abrangente para seu modelo EasyDeL, incluindo progresso de treinamento, parâmetros de modelo e informações do otimizador.
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 ()
Contribuições para EasyDeL são bem-vindas! Bifurque o repositório, faça suas alterações e envie uma solicitação pull.
EasyDeL é lançado sob a licença Apache v2. Consulte o arquivo LICENSE para obter mais detalhes.
Se você tiver alguma dúvida ou comentário sobre o EasyDeL, entre em contato comigo pelo e -mail [email protected] .
Para citar EasyDeL em seu trabalho:
@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 }
}