Model = model.to(args.device) AttributeError: 'function' object has no attribute 'to'

I am getting this error when trying to do hyperparameter search

Traceback (most recent call last):
  File "/gpfs7kw/linkhome/rech/genlig01/umg16uw/test/expe_5/traitements/gridsearch_flaubert.py", line 581, in <module>
    trainer, outdir = prepare_fine_tuning(PRE_TRAINED_MODEL_NAME, train_dataset, val_dataset, tokenizer, sigle, train_name, datatype, i)
  File "/gpfs7kw/linkhome/rech/genlig01/umg16uw/test/expe_5/traitements/gridsearch_flaubert.py", line 441, in prepare_fine_tuning
    trainer = Trainer(
  File "/linkhome/rech/genlig01/umg16uw/.conda/envs/bert/lib/python3.9/site-packages/transformers/trainer.py", line 366, in __init__
    model = model.to(args.device)
AttributeError: 'function' object has no attribute 'to'
srun: error: r6i3n0: task 0: Exited with exit code 1
srun: Terminating job step 1988679.0

My code :

def model_init():

	set_seed(42)
	mdl = FlaubertModel.from_pretrained(language_model_dir)
	num_labels=3
	# instantiate model

	#model = FlaubertForSequenceClassification.from_pretrained(PRE_TRAINED_MODEL_NAME)
	model = FlauBertForSequenceClassification(config=mdl.config, num_labels=num_labels, freeze_encoder = False)


	# print info about model's parameters
	total_params = sum(p.numel() for p in model.parameters())
	model_parameters = filter(lambda p: p.requires_grad, model.parameters())
	trainable_params = sum([np.prod(p.size()) for p in model_parameters])
	
	return model

		
	
def prepare_fine_tuning(model_name, train_dataset, 
						val_dataset, tokenizer, 
						sigle_model, namefile, data_type, n_tr ):

	"""
	Prepare configurations and base model for fine-tuning
	"""

	# If there's a GPU available...
	if torch.cuda.is_available():    

		# Tell PyTorch to use the GPU.    
		device = torch.device("cuda")

		print('===> There are %d GPU(s) available.' % torch.cuda.device_count())

		print('===> We will use the GPU:', torch.cuda.get_device_name(0))

	# If not...
	else:
		print('===> No GPU available, using the CPU instead.')
		device = torch.device("cpu")
		

	param = str(epoch) + str(bat) + str(l_rate) + str(log_step)
	
	output_dir = outputdir + "/" + "results_hyper" + '/' + sigle_model + '/' + namefile + '/' + data_type + '/' + param
	#print(output_dir)
	logging_dir = outputdir + "/" + "logs" + '/' + sigle_model + '/' + namefile + '/'  + data_type + '/' + param
	#print(logging_dir)


	
	if val_dataset is not None:
			training_args = TrainingArguments(
			output_dir=output_dir,            # output directory
			evaluation_strategy='steps',      # evaluation strategy to adopt during training
			eval_steps=500,                   # number of update steps before evaluation               
			#logging_dir=logging_dir,            # directory for storing logs
			)

			trainer = Trainer(
				model_init=model_init,                         # the instantiated 🤗 Transformers model to be trained
				args=training_args,                  # training arguments, defined above
				train_dataset=train_dataset,         # training dataset
				eval_dataset=val_dataset,            # evaluation dataset
				tokenizer=tokenizer, 			         
				compute_metrics=compute_metrics,
				#callbacks=[EarlyStoppingCallback(3, 0.0)] # early stopping if results dont improve after 3 epochs         
			)
			
			# Default objective is the sum of all metrics
			# when metrics are provided, so we have to maximize it.

			best_trainer = trainer.hyperparameter_search(
			direction="maximize", 
			#backend="ray",  #optuna
			n_trials=10 # number of trials
			)
1 Like

Getting a similar error. Did you ever solve this?