I got the error: RuntimeError: CUDA error: device-side assert triggered

Traceback (most recent call last):
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/pytorch_lightning/trainer/call.py”, line 44, in _call_and_handle_interrupt
return trainer_fn(*args, **kwargs)
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/pytorch_lightning/trainer/trainer.py”, line 559, in _fit_impl
self._run(model, ckpt_path=ckpt_path)
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/pytorch_lightning/trainer/trainer.py”, line 935, in _run
results = self._run_stage()
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/pytorch_lightning/trainer/trainer.py”, line 976, in _run_stage
self._run_sanity_check()
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/pytorch_lightning/trainer/trainer.py”, line 1005, in _run_sanity_check
val_loop.run()
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/pytorch_lightning/loops/utilities.py”, line 174, in _decorator
return loop_run(self, *args, **kwargs)
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/pytorch_lightning/loops/evaluation_loop.py”, line 115, in run
self._evaluation_step(batch, batch_idx, dataloader_idx)
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/pytorch_lightning/loops/evaluation_loop.py”, line 375, in _evaluation_step
output = call._call_strategy_hook(trainer, hook_name, *step_kwargs.values())
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/pytorch_lightning/trainer/call.py”, line 288, in _call_strategy_hook
output = fn(*args, **kwargs)
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/pytorch_lightning/strategies/strategy.py”, line 378, in validation_step
return self.model.validation_step(*args, **kwargs)
File “/mnt/Enterprise/sanjay/image-captioning/Image-Captioning/models/Image_captioner.py”, line 102, in validation_step
return self.step(batch, mode=“val”)
File “/mnt/Enterprise/sanjay/image-captioning/Image-Captioning/models/Image_captioner.py”, line 87, in step
preds = self.model(text_tokens,imgs,masks,pad_mask)
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/torch/nn/modules/module.py”, line 1501, in _call_impl
return forward_call(*args, **kwargs)
File “/mnt/Enterprise/sanjay/image-captioning/Image-Captioning/models/Image_captioner.py”, line 45, in forward
x = self.decoder(text,x,target_subsequent_mask=mask,target_pad_mask=pad_mask)
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/torch/nn/modules/module.py”, line 1501, in _call_impl
return forward_call(*args, **kwargs)
File “/mnt/Enterprise/sanjay/image-captioning/Image-Captioning/models/decoder.py”, line 57, in forward
pos_x = pos_x + self.pos_embedding(text_input)
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/torch/nn/modules/module.py”, line 1501, in _call_impl
return forward_call(*args, **kwargs)
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/torch/nn/modules/sparse.py”, line 162, in forward
return F.embedding(
File “/mnt/Enterprise/sanjay/new_env/lib/python3.10/site-packages/torch/nn/functional.py”, line 2210, in embedding
return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
RuntimeError: CUDA error: device-side assert triggered
Compile with TORCH_USE_CUDA_DSA to enable device-side assertions.

My code is as ::

class Decoder(nn.Module):
def init(self,vocab_size,max_seq_length,embed_dim,num_heads,num_layers,dropout=0.0) → None:
super().init()

      self.token_embedding = nn.Embedding(vocab_size,embed_dim)
      
      self.pos_embedding = nn.Embedding(max_seq_length,embed_dim)
      
      
      self.decoder_layer = nn.TransformerDecoderLayer(embed_dim, num_heads, embed_dim, dropout, batch_first=True)
      self.decoder = nn.TransformerDecoder(self.decoder_layer, num_layers)
      
      
      self.dropout = nn.Dropout(dropout)
      
      self.ln = nn.LayerNorm(embed_dim)
      
      self.linear = nn.Linear(embed_dim, vocab_size)
      
  def forward(self,text_input,encoder_memory,target_subsequent_mask=None,target_pad_mask=None):
      
      B,T = text_input.shape
      
      """
      TODO: layernorm still before embedding
      """
      pos_x = self.token_embedding(text_input)
      
      
      pos_x = pos_x + self.pos_embedding(text_input)
      
      pos_x = self.dropout(pos_x)
      
      # print(encoder_memory.shape)
      # print(pos_x.shape)
      
      x=  self.decoder(
          pos_x,
          encoder_memory,
          tgt_mask=target_subsequent_mask,
          tgt_key_padding_mask=target_pad_mask,
      )
      
      
      print(x.shape)
      
      x = self.linear(x)
      # x = self.linear(self.ln(x))
      
      return x

Based on the stacktrace:

return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
RuntimeError: CUDA error: device-side assert triggered

I guess you are passing invalid indices to your nn.Embedding layer which then fails with an indexing error. Make sure the input tensor contains values in the range [0, num_embeddings-1] and it should work.