• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

413
Views
RuntimeError: Se esperaba que todos los tensores estuvieran en el mismo dispositivo, pero se encontraron al menos dos dispositivos, cuda:0 y cpu. al reanudar el entrenamiento

Guardé un punto de control mientras entrenaba en gpu. después de recargar el punto de control y continuar entrenando, aparece el siguiente error.

 Traceback (most recent call last): File "main.py", line 140, in <module> train(model,optimizer,train_loader,val_loader,criteria=args.criterion,epoch=epoch,batch=batch) File "main.py", line 71, in train optimizer.step() File "/opt/conda/lib/python3.7/site-packages/torch/autograd/grad_mode.py", line 26, in decorate_context return func(*args, **kwargs) File "/opt/conda/lib/python3.7/site-packages/torch/optim/sgd.py", line 106, in step buf.mul_(momentum).add_(d_p, alpha=1 - dampening) RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

mi código de entrenamiento es:

 def train(model,optimizer,train_loader,val_loader,criteria,epoch=0,batch=0): batch_count = batch if criteria == 'l1': criterion = L1_imp_Loss() elif criteria == 'l2': criterion = L2_imp_Loss() if args.gpu and torch.cuda.is_available(): model.cuda() criterion = criterion.cuda() print(f'{datetime.datetime.now().time().replace(microsecond=0)} Starting to train..') while epoch <= args.epochs-1: print(f'********{datetime.datetime.now().time().replace(microsecond=0)} Epoch#: {epoch+1} / {args.epochs}') model.train() interval_loss, total_loss= 0,0 for i , (input,target) in enumerate(train_loader): batch_count += 1 if args.gpu and torch.cuda.is_available(): input, target = input.cuda(), target.cuda() input, target = input.float(), target.float() pred = model(input) loss = criterion(pred,target) optimizer.zero_grad() loss.backward() optimizer.step() ....

el proceso de ahorro ocurre después de terminar cada época.

 torch.save({'epoch': epoch,'batch':batch_count,'model_state_dict': model.state_dict(),'optimizer_state_dict': optimizer.state_dict(),'loss': total_loss/len(train_loader),'train_set':args.train_set,'val_set':args.val_set,'args':args}, f'{args.weights_dir}/FastDepth_Final.pth')

No puedo entender por qué recibo este error. args.gpu == True, y estoy pasando el modelo, todos los datos y la función de pérdida a cuda, de alguna manera todavía hay un tensor en la CPU, ¿alguien podría averiguar qué está mal?

Gracias.

over 3 years ago · Hanz Gallego
1 answers
Answer question

0

Puede haber un problema con los parámetros del dispositivo:

Si necesita mover un modelo a GPU a través de .cuda() , hágalo antes de construir optimizadores para él. Los parámetros de un modelo después de .cuda() serán objetos diferentes a los de antes de la llamada.
En general, debe asegurarse de que los parámetros optimizados vivan en ubicaciones coherentes cuando se construyan y utilicen los optimizadores.

over 3 years ago · Hanz Gallego Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error