주요 기능 | 최신 업데이트 | 비전 | 빠른 시작 | 참조 문서 | 특허
EasyDeL은 Jax/Flax에 중점을 두고 기계 학습 모델의 훈련 프로세스를 강화하고 간소화하도록 설계된 오픈 소스 프레임워크입니다. TPU/GPU에서 Flax/Jax 모델을 대규모로 훈련하고 제공하기 위한 편리하고 효과적인 솔루션을 제공합니다.
EasyDeL은 비교할 수 없는 유연성과 투명성을 제공하여 두각을 나타냅니다.
개방형 아키텍처 : EasyDeL의 모든 단일 구성 요소는 검사, 수정 및 사용자 정의를 위해 개방되어 있습니다. 여기에는 블랙박스가 없습니다.
해킹 가능성의 핵심 : 우리는 귀하에게 모든 권한을 부여한다고 믿습니다. 작은 기능을 조정하거나 훈련 루프를 완전히 점검하려는 경우 EasyDeL을 사용하면 가능합니다.
사용자 정의 코드 액세스 : 모든 사용자 정의 구현은 쉽게 사용할 수 있고 잘 문서화되어 있으므로 필요에 따라 내부를 이해하고, 배우고, 수정할 수 있습니다.
실험 장려 : 우리는 사용자가 기존 코드베이스를 실험하고 확장하고 개선하도록 적극적으로 권장합니다. 귀하의 혁신이 다음의 큰 특징이 될 수 있습니다!
커뮤니티 중심 개발 : 맞춤형 구현 및 개선 사항을 커뮤니티와 공유하여 ML 연구 및 개발 발전을 위한 협업 환경을 조성합니다.
EasyDeL을 사용하면 엄격한 프레임워크의 제약을 받지 않습니다. 그 대신, 얼마나 독특하고 전문적인지에 관계없이 귀하의 요구에 적응하는 유연하고 강력한 툴킷을 갖게 됩니다. 최첨단 연구를 수행하든, 생산 준비가 완료된 ML 시스템을 구축하든, EasyDeL은 제한 없이 혁신할 수 있는 자유를 제공합니다.
EasyDeL은 모델을 사용자 정의하고 최적화하는 데 탁월한 유연성을 제공합니다.
샤딩 전략 : 다양한 샤딩 전략을 쉽게 사용자 정의하고 실험하여 여러 장치에서 성능을 최적화할 수 있습니다.
알고리즘 사용자 정의 : 특정 요구 사항과 하드웨어 구성에 맞게 알고리즘을 수정하고 미세 조정합니다.
주의 메커니즘 : 다음을 포함하여 GPU/TPU/CPU에 최적화된 10가지 이상의 주의 메커니즘 중에서 선택하세요.
이 수준의 사용자 정의를 통해 모델 동작을 정확한 요구 사항에 맞게 조정하면서 하드웨어의 성능을 최대한 활용할 수 있습니다.
EasyDeL은 기계 학습 커뮤니티의 요구 사항을 충족하기 위해 끊임없이 발전하고 있습니다. 향후 업데이트에서는 다음을 소개할 예정입니다.
유연성 : EasyDeL은 연구원과 개발자가 쉽게 구성 요소를 혼합 및 일치시키고 다양한 아키텍처(Transformers, Mamba, RWKV 등 포함)를 실험하고 모델을 특정 사용 사례에 맞게 조정할 수 있는 모듈식 설계를 제공합니다.
성능 : EasyDeL은 JAX 및 Flax의 성능을 활용하여 TPU와 GPU 모두에 최적화된 최첨단 모델 및 교육 기술의 고성능 구현을 제공합니다.
확장성 : 소규모 실험부터 대규모 모델 교육까지 EasyDeL은 모델과 워크플로를 효율적으로 확장할 수 있는 도구와 최적화를 제공합니다.
사용 용이성 : 강력한 기능에도 불구하고 EasyDeL은 직관적인 API를 유지하므로 초보자와 숙련된 실무자 모두가 접근할 수 있습니다.
최첨단 연구 : 모델 아키텍처, 교육 기술 및 최적화 방법의 최신 발전을 신속하게 구현합니다.
pip install easydel
import easydel as ed
ed . FlexibleAttentionModule . run_attention_benchmarks ()
포괄적인 문서와 예제는 EasyDeL 문서에서 확인할 수 있습니다.
최신 업데이트의 개선된 버전은 다음과 같습니다.
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 엔진으로, API와 같은 안정적이고 효율적인 OpenAI 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 }
}