Views
No views yet
| Architecture | Supported Models | Loads As |
|---|---|---|
| Encoder-only | BERT, RoBERTa, DistilBERT, ALBERT | Shared encoder |
| Decoder-only | GPT-2, LLaMA, Mistral, Phi, Gemma, Qwen | Causal LM task |
| Encoder-decoder | T5, BART, MT5, Pegasus, Flan-T5 | Seq2Seq task |
1from dytr import PretrainedModelLoader
2
3loader = PretrainedModelLoader()
4model = loader.load_pretrained("gpt2", task_name="text_generation")| Mode | Description |
|---|---|
| Single | One LoRA adapter across all tasks |
| Multi-Task | Separate LoRA adapters per task |
| Progressive | 4-phase training (Warmup → Expansion → Hybrid → Native) |
1from dytr.training.lora import LoRATrainer
2
3trainer = LoRATrainer(model, config, mode="multi", rank=8)
4model = trainer.train(task_configs, train_datasets, val_datasets)
pip install dytrpip install git+https://github.com/AAlsubari/dytr.git1from dytr import DynamicTransformer, ModelConfig, TaskConfig, TrainingStrategy, Trainer, SingleDatasetProcessing
2import pandas as pd
3
4# 1. Configure your transformer
5config = ModelConfig(
6 embed_dim=256,
7 num_layers=6,
8 num_heads=8,
9 max_seq_len=256
10)
11
12# 2. Create the model
13model = DynamicTransformer(config)
14
15# data loading and processing
16train_data = pd.DataFrame({
17 'text': ['Great movie!', 'Terrible film.', 'Amazing acting!', 'Boring plot.'],
18 'label': [1, 0, 1, 0]
19})
20train_dataset = SingleDatasetProcessing(
21 df=train_data,
22 tokenizer=model.tokenizer,
23 max_len=128,
24 task_name="sentiment_analysis",
25 strategy=TrainingStrategy.SENTENCE_CLASSIFICATION,
26 text_column="text",
27 label_column="label"
28)
29# 3. Add a task
30task = TaskConfig(
31 task_name="sentiment_analysis",
32 training_strategy=TrainingStrategy.SENTENCE_CLASSIFICATION,
33 num_labels=2,# train_data.num_labels
34)
35#model.add_task(task) # not require it will be add automatically during the training process
36
37# Initialize trainer and train
38trainer = Trainer(model, config, exp_dir="./experiments")
39train_datasets = {"sentiment_analysis": (train_dataset, TrainingStrategy.SENTENCE_CLASSIFICATION)}
40model = trainer.train([task], train_datasets, {})# you can set more than one for list of tasks and dataset for multitasks training
41
42# 4. Generate predictions
43result = model.generate("This product is amazing!", task_name="sentiment_analysis")
44print(f"Prediction: {result['prediction']}")
45
46# Save the entire multi-task model
47model.save_model("multi_task_model.pt")
48
49# Load the model
50loaded_model = DynamicTransformer.load_model("multi_task_model.pt")
51
52| Strategy | Purpose | Use Case |
|---|---|---|
| Causal LM | Autoregressive text generation | Chatbots, content creation |
| Seq2Seq | Input to output transformation | Translation, summarization |
| Sentence Classification | Document-level categorization | Sentiment, topic detection |
| Token Classification | Token-level labeling | Named entity recognition, POS tagging |
1config = ModelConfig(
2 use_ewc=True, # Protect important weights
3 use_replay=True, # Replay old samples
4 use_task_adapters=True, # Task-specific modules
5 ewc_lambda=1000.0,
6 replay_buffer_size=2000
7)
8
9model = DynamicTransformer(config)
10
11# Train tasks one after another
12for task in task_list:
13 model.add_task(task)
14 trainer.train([task], train_data, val_data)
15 # Previous tasks remain accurate
16 # The trainer automatically handles EWC and replay buffer, but you should add the samples to the pretrained model1from dytr import PretrainedModelLoader
2
3loader = PretrainedModelLoader()
4
5# Encoder-only (BERT) → Shared encoder
6model = loader.load_pretrained("bert-base-uncased")
7
8# Decoder-only (GPT-2) → Causal LM task
9model = loader.load_pretrained("gpt2", task_name="generation")
10
11# Encoder-decoder (T5) → Seq2Seq task
12model = loader.load_pretrained("t5-small", task_name="translation")1from dytr import PretrainedModelLoader
2model_name='prajjwal1/bert-tiny'
3loader = PretrainedModelLoader()
4config = ModelConfig(tokenizer_name=model_name, per_device_train_batch_size=32, num_train_epochs=3, per_device_eval_batch_size=8, special_tokens={}, use_task_adapters=False, use_ewc=True, use_replay=True, use_rotary_embedding=False, training_from_scratch=False)
5
6# Load pretrained BERT as your encoder
7model = loader.load_pretrained(model_name, config)
8
9# Now add your own tasks - the model is fully dytr compatible
10class_train = pd.DataFrame(
11 {
12 "text": [
13 "Great product!",
14 "Poor quality.",
15 "Excellent service!",
16 "Very disappointed.",
17 "Highly recommended!",
18 ],
19 "label": [1, 0, 1, 0, 1],
20 }
21 )
22classification_task = TaskConfig(
23 task_name="sentiment",
24 training_strategy=TrainingStrategy.SENTENCE_CLASSIFICATION,
25 num_labels=2,
26 text_column="text",
27 label_column="label",
28 max_length=128,
29 )
30class_dataset = SingleDatasetProcessing(
31 df=class_train,
32 tokenizer=model.tokenizer,
33 max_len=classification_task.max_length,
34 task_name=classification_task.task_name,
35 strategy=classification_task.training_strategy,
36 num_labels=classification_task.num_labels,
37 text_column=classification_task.text_column,
38 label_column=classification_task.label_column,
39 )
40# Causal LM task data (text generation)
41lm_train = pd.DataFrame(
42 {
43 "text": [
44 "The sun rises in the east.",
45 "Cats are adorable animals.",
46 "Machine learning is fascinating.",
47 "Python is a great programming language.",
48 "Deep learning powers modern AI.",
49 ]
50 }
51 )
52lm_task = TaskConfig(
53 task_name="text_generation",
54 training_strategy=TrainingStrategy.CAUSAL_LM,
55 max_length=256,
56 )
57lm_dataset = SingleDatasetProcessing(
58 df=lm_train,
59 tokenizer=model.tokenizer,
60 max_len=lm_task.max_length,
61 task_name=lm_task.task_name,
62 strategy=lm_task.training_strategy,
63 text_column="text",
64 )
65train_datasets = {
66 classification_task.task_name: (class_dataset, classification_task.training_strategy),
67 lm_task.task_name: (lm_dataset, lm_task.training_strategy),
68 }
69val_datasets = {
70 #classification_task.task_name: (class_val_dataset, classification_task.training_strategy)
71 }
72
73# 6. Train model
74print("\n6. Training model...")
75trainer = Trainer(model, config, exp_dir="./multi_task_experiments")
76model = trainer.train([classification_task, lm_task], train_datasets, val_datasets)
77
78#model = trainer.train([ lm_task], train_datasets, val_datasets)
79test_texts = ["This is amazing!", "I hate this."]
80for text in test_texts:
81 result = model.generate(text, task_name="sentiment")
82 sentiment = "POSITIVE" if result["prediction"] == 1 else "NEGATIVE"
83 print(f" {text} -> {sentiment}")
84
85# Test generation
86print("\n Text generation test:")
87prompt = "The future of technology"
88generated = model.generate(prompt, task_name="text_generation", max_new_tokens=20)
89print(f" Prompt: {prompt}")
90print(f" Generated: {generated}")
91
92
93
94#model.add_task(sentiment_task)
95#model.add_task(ner_task)
96#model.add_task(translation_task)
97
98# Train, generate, and use just like any dytr model1config = ModelConfig(
2 learning_rate=3e-4,
3 head_lr_mult=2.0, # Task heads: fast adaptation
4 decoder_lr_mult=0.5, # Decoders: moderate
5 shared_lr_mult=0.1 # Shared encoder: preserve knowledge
6)| Audience | Why It Matters |
|---|---|
| Researchers | Customize every aspect of the transformer architecture, Test continual learning algorithms with EWC and experience replay, experiment with multi-task architectures, Experiment with task-specific learning rates and adapters, Analyze forgetting behavior across sequential tasks |
| Developers | Add new tasks without retraining from scratch, Load pretrained models and extend them with your own tasks, Build production-ready multi-task systems without complex dependencies |
| Students | Understand transformers from scratch with transparent, readable code, Visualize the impact of hyperparameters on model size, Learn multi-task learning concepts hands-on |
| Organizations | Deploy single models that handle multiple tasks efficiently , Deploy lighter, faster inference systems, Maintain knowledge across task updates with continual learning |