unit8co / darts

A python library for user-friendly forecasting and anomaly detection on time series.
https://unit8co.github.io/darts/
Apache License 2.0
7.92k stars 860 forks source link

[BUG] RuntimeError: Expected object of device type cuda but got device type cpu for argument #1 'self' in call to _thnn_conv2d_forward #453

Closed jovislor closed 3 years ago

jovislor commented 3 years ago

First, thank you for all the great work you are doing here!

Describe the bug When calling a 'fit' on a TCNmodel using a gpu and having a val_series as an argument I am getting an error. However if val_series argument is not present, it works fine.

To Reproduce

import pandas as pd

from torch.utils.tensorboard import SummaryWriter import torch

from darts.models import TCNModel import darts.utils.timeseries_generation as tg from darts.utils.likelihood_models import GaussianLikelihoodModel from darts.datasets import EnergyDataset from darts.utils.missing_values import fill_missing_values from darts import TimeSeries from darts.dataprocessing.transformers import Scaler from darts.utils.timeseries_generation import datetime_attribute_timeseries

import warnings warnings.filterwarnings("ignore") import logging logging.disable(logging.CRITICAL)

import matplotlib.pyplot as plt

df=pd.read_csv('https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv') series = TimeSeries.from_dataframe(df, 'Month', '#Passengers')

series = TimeSeries.from_dataframe(df, 'Month', '#Passengers')

scaler_en = Scaler() series_transformed = scaler_en.fit_transform(series_en_train) train, val = series_transformed[:-36], series_transformed[-36:]

deeptcn = TCNModel( dropout=0.2, batch_size=256, lr_scheduler_cls=torch.optim.lr_scheduler.MultiStepLR, lr_scheduler_kwargs={'milestones':[60,100],'gamma':0.1}, n_epochs=30, optimizer_kwargs={'lr': 1e-3}, random_state=0, input_chunk_length=20, output_chunk_length=10, kernel_size=3, num_filters=4, likelihood=GaussianLikelihoodModel(), model_name = 'test_1', log_tensorboard=True, work_dir='/home/jovan/Documents/price_prediction/darts/logs', nr_epochs_val_period = 4)

deeptcn.fit( series=train, val_series=val, verbose=True, epochs=30)

System (please complete the following information):

Ubuntu 20.04 python 3.8.11 torch 1.8 GPU rtx 2060 CUDA version: 11.2 darts version 0.10.1

same error on Google Colab also

full error message

RuntimeError Traceback (most recent call last)

in 32 # deeptcn.model.device("cuda") # = deeptcn.model 33 ---> 34 deeptcn.fit( 35 series=train, #train_en_transformed 36 #target_series=train_en_transformed['close'], ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/darts/utils/torch.py in decorator(self, *args, **kwargs) 63 with fork_rng(): 64 manual_seed(self._random_instance.randint(0, high=MAX_TORCH_SEED_VALUE)) ---> 65 return decorated(self, *args, **kwargs) 66 return decorator ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/darts/models/torch_forecasting_model.py in fit(self, series, past_covariates, future_covariates, val_series, val_past_covariates, val_future_covariates, verbose, epochs) 429 logger.info('Train dataset contains {} samples.'.format(len(train_dataset))) 430 --> 431 self.fit_from_dataset(train_dataset, val_dataset, verbose, epochs) 432 433 @random_method ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/darts/utils/torch.py in decorator(self, *args, **kwargs) 63 with fork_rng(): 64 manual_seed(self._random_instance.randint(0, high=MAX_TORCH_SEED_VALUE)) ---> 65 return decorated(self, *args, **kwargs) 66 return decorator ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/darts/models/torch_forecasting_model.py in fit_from_dataset(self, train_dataset, val_dataset, verbose, epochs) 517 518 # Train model --> 519 self._train(train_loader, val_loader, tb_writer, verbose, train_num_epochs) 520 521 # Close tensorboard writer ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/darts/models/torch_forecasting_model.py in _train(self, train_loader, val_loader, tb_writer, verbose, epochs) 823 training_loss = total_loss / len(train_loader) 824 if val_loader is not None: --> 825 validation_loss = self._evaluate_validation_loss(val_loader) 826 if tb_writer is not None: 827 tb_writer.add_scalar("validation/loss_total", validation_loss, epoch) ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/darts/models/torch_forecasting_model.py in _evaluate_validation_loss(self, val_loader) 848 with torch.no_grad(): 849 for batch_idx, val_batch in enumerate(val_loader): --> 850 output = self._produce_train_output(val_batch[:-1]) 851 target = val_batch[-1] 852 loss = self._compute_loss(output, target) ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/darts/models/torch_forecasting_model.py in _produce_train_output(self, input_batch) 1109 # Currently all our PastCovariates models require past target and covariates concatenated 1110 inpt = torch.cat([past_target, past_covariate], dim=2) if past_covariate is not None else past_target -> 1111 return self.model(inpt) 1112 1113 def _get_batch_prediction(self, n: int, input_batch: Tuple, roll_size: int) -> Tensor: ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs) 887 result = self._slow_forward(*input, **kwargs) 888 else: --> 889 result = self.forward(*input, **kwargs) 890 for hook in itertools.chain( 891 _global_forward_hooks.values(), ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/darts/models/tcn_model.py in forward(self, x) 199 200 for res_block in self.res_blocks_list: --> 201 x = res_block(x) 202 203 x = x.transpose(1, 2) ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs) 887 result = self._slow_forward(*input, **kwargs) 888 else: --> 889 result = self.forward(*input, **kwargs) 890 for hook in itertools.chain( 891 _global_forward_hooks.values(), ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/darts/models/tcn_model.py in forward(self, x) 94 left_padding = (self.dilation_base ** self.nr_blocks_below) * (self.kernel_size - 1) 95 x = F.pad(x, (left_padding, 0)) ---> 96 x = self.dropout_fn(F.relu(self.conv1(x))) 97 98 # second step ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs) 887 result = self._slow_forward(*input, **kwargs) 888 else: --> 889 result = self.forward(*input, **kwargs) 890 for hook in itertools.chain( 891 _global_forward_hooks.values(), ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/torch/nn/modules/conv.py in forward(self, input) 261 262 def forward(self, input: Tensor) -> Tensor: --> 263 return self._conv_forward(input, self.weight, self.bias) 264 265 ~/anaconda3/envs/darts_torch1.8/lib/python3.8/site-packages/torch/nn/modules/conv.py in _conv_forward(self, input, weight, bias) 257 weight, bias, self.stride, 258 _single(0), self.dilation, self.groups) --> 259 return F.conv1d(input, weight, bias, self.stride, 260 self.padding, self.dilation, self.groups) 261 RuntimeError: Expected object of device type cuda but got device type cpu for argument #1 'self' in call to _thnn_conv2d_forward
pennfranc commented 3 years ago

If I'm not mistaken this should be fixed by #449, which should be merged into develop soon. Thanks for reporting.

hrzn commented 3 years ago

This has now been fixed in v0.11.0