17
17
import torch .utils .data
18
18
from peft import PeftModel , get_peft_model
19
19
from torch .optim .lr_scheduler import StepLR
20
- from transformers import AutoModel , AutoModelForCausalLM , AutoTokenizer
20
+ from transformers import AutoModel , AutoModelForCausalLM , AutoModelForSequenceClassification , AutoTokenizer
21
21
22
22
from QEfficient .finetune .configs .training import TrainConfig
23
23
from QEfficient .finetune .utils .config_utils import (
26
26
update_config ,
27
27
)
28
28
from QEfficient .finetune .utils .dataset_utils import get_dataloader
29
+ from QEfficient .finetune .utils .logging_utils import logger
29
30
from QEfficient .finetune .utils .parser import get_finetune_parser
30
- from QEfficient .finetune .utils .train_utils import get_longest_seq_length , print_model_size , train
31
- from QEfficient .utils ._utils import login_and_download_hf_lm
31
+ from QEfficient .finetune .utils .train_utils import (
32
+ get_longest_seq_length ,
33
+ print_model_size ,
34
+ print_trainable_parameters ,
35
+ train ,
36
+ )
37
+ from QEfficient .utils ._utils import hf_download
32
38
33
39
# Try importing QAIC-specific module, proceed without it if unavailable
34
40
try :
35
41
import torch_qaic # noqa: F401
36
42
except ImportError as e :
37
- print (f"Warning: { e } . Proceeding without QAIC modules." )
38
-
43
+ logger .log_rank_zero (f"{ e } . Moving ahead without these qaic modules." )
39
44
40
- from transformers import AutoModelForSequenceClassification
41
45
42
46
# Suppress all warnings
43
47
warnings .filterwarnings ("ignore" )
@@ -106,7 +110,8 @@ def load_model_and_tokenizer(
106
110
- Resizes model embeddings if tokenizer vocab size exceeds model embedding size.
107
111
- Sets pad_token_id to eos_token_id if not defined in the tokenizer.
108
112
"""
109
- pretrained_model_path = login_and_download_hf_lm (train_config .model_name )
113
+ logger .log_rank_zero (f"Loading HuggingFace model for { train_config .model_name } " )
114
+ pretrained_model_path = hf_download (train_config .model_name )
110
115
if train_config .task_type == "seq_classification" :
111
116
model = AutoModelForSequenceClassification .from_pretrained (
112
117
pretrained_model_path ,
@@ -116,7 +121,7 @@ def load_model_and_tokenizer(
116
121
)
117
122
118
123
if not hasattr (model , "base_model_prefix" ):
119
- raise RuntimeError ("Given huggingface model does not have 'base_model_prefix' attribute." )
124
+ logger . raise_runtimeerror ("Given huggingface model does not have 'base_model_prefix' attribute." )
120
125
121
126
for param in getattr (model , model .base_model_prefix ).parameters ():
122
127
param .requires_grad = False
@@ -141,11 +146,10 @@ def load_model_and_tokenizer(
141
146
# If there is a mismatch between tokenizer vocab size and embedding matrix,
142
147
# throw a warning and then expand the embedding matrix
143
148
if len (tokenizer ) > model .get_input_embeddings ().weight .shape [0 ]:
144
- print ( "WARNING: Resizing embedding matrix to match tokenizer vocab size." )
149
+ logger . log_rank_zero ( " Resizing the embedding matrix to match the tokenizer vocab size.", logger . WARNING )
145
150
model .resize_token_embeddings (len (tokenizer ))
146
151
147
- # FIXME (Meet): Cover below line inside the logger once it is implemented.
148
- print_model_size (model , train_config )
152
+ print_model_size (model )
149
153
150
154
# Note: Need to call this before calling PeftModel.from_pretrained or get_peft_model.
151
155
# Because, both makes model.is_gradient_checkpointing = True which is used in peft library to
@@ -157,7 +161,9 @@ def load_model_and_tokenizer(
157
161
if hasattr (model , "supports_gradient_checkpointing" ) and model .supports_gradient_checkpointing :
158
162
model .gradient_checkpointing_enable (gradient_checkpointing_kwargs = {"preserve_rng_state" : False })
159
163
else :
160
- raise RuntimeError ("Given model doesn't support gradient checkpointing. Please disable it and run it." )
164
+ logger .raise_runtimeerror (
165
+ "Given model doesn't support gradient checkpointing. Please disable it and run it."
166
+ )
161
167
162
168
model = apply_peft (model , train_config , peft_config_file , ** kwargs )
163
169
@@ -192,7 +198,7 @@ def apply_peft(
192
198
else :
193
199
peft_config = generate_peft_config (train_config , peft_config_file , ** kwargs )
194
200
model = get_peft_model (model , peft_config )
195
- model . print_trainable_parameters ()
201
+ print_trainable_parameters (model )
196
202
197
203
return model
198
204
@@ -217,25 +223,25 @@ def setup_dataloaders(
217
223
- Length of longest sequence in the dataset.
218
224
219
225
Raises:
220
- ValueError : If validation is enabled but the validation set is too small.
226
+ RuntimeError : If validation is enabled but the validation set is too small.
221
227
222
228
Notes:
223
229
- Applies a custom data collator if provided by get_custom_data_collator.
224
230
- Configures DataLoader kwargs using get_dataloader_kwargs for train and val splits.
225
231
"""
226
232
227
233
train_dataloader = get_dataloader (tokenizer , dataset_config , train_config , split = "train" )
228
- print (f"--> Num of Training Set Batches loaded = { len (train_dataloader )} " )
234
+ logger . log_rank_zero (f"Number of Training Set Batches loaded = { len (train_dataloader )} " )
229
235
230
236
eval_dataloader = None
231
237
if train_config .run_validation :
232
238
eval_dataloader = get_dataloader (tokenizer , dataset_config , train_config , split = "val" )
233
239
if len (eval_dataloader ) == 0 :
234
- raise ValueError (
240
+ logger . raise_runtimeerror (
235
241
f"The eval set size is too small for dataloader to load even one batch. Please increase the size of eval set. ({ len (eval_dataloader )= } )"
236
242
)
237
243
else :
238
- print (f"--> Num of Validation Set Batches loaded = { len (eval_dataloader )} " )
244
+ logger . log_rank_zero (f"Number of Validation Set Batches loaded = { len (eval_dataloader )} " )
239
245
240
246
longest_seq_length , _ = get_longest_seq_length (
241
247
torch .utils .data .ConcatDataset ([train_dataloader .dataset , eval_dataloader .dataset ])
@@ -274,13 +280,16 @@ def main(peft_config_file: str = None, **kwargs) -> None:
274
280
dataset_config = generate_dataset_config (train_config .dataset )
275
281
update_config (dataset_config , ** kwargs )
276
282
283
+ logger .prepare_dump_logs (train_config .dump_logs )
284
+ logger .setLevel (train_config .log_level )
285
+
277
286
setup_distributed_training (train_config )
278
287
setup_seeds (train_config .seed )
279
288
model , tokenizer = load_model_and_tokenizer (train_config , dataset_config , peft_config_file , ** kwargs )
280
289
281
290
# Create DataLoaders for the training and validation dataset
282
291
train_dataloader , eval_dataloader , longest_seq_length = setup_dataloaders (train_config , dataset_config , tokenizer )
283
- print (
292
+ logger . log_rank_zero (
284
293
f"The longest sequence length in the train data is { longest_seq_length } , "
285
294
f"passed context length is { train_config .context_length } and overall model's context length is "
286
295
f"{ model .config .max_position_embeddings } "
0 commit comments