es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

loss.backward () devuelve RuntimeError: error de CUDA: se activó la comprobación de assert en el dispositivo.

Estoy intentando utilizar BCELoss sin éxito.

loss = BCELoss()
opt = optim.AdamW (model.parameters(), lr=0.01, betas=(0.9, 0.99), weight_decay=0.001)
loss = Loss(z, y)
opt.zero_grad()
loss.backward()

z, y tienen la forma: (128,2)

Estoy obteniendo el siguiente error (de loss.backward()):

RuntimeError: Error de CUDA: dispositivo de activación del lado del dispositivo.
Los errores de núcleo CUDA pueden informarse de manera asincrónica en alguna otra llamada a la API, por lo que la traza de llamadas a continuación podría ser incorrecta.
Para la depuración, considere pasar CUDA_LAUNCH_BLOCKING=1.

¡Cuando uso CrossEntropyLoss (y y tiene la forma de (128,)), todo funciona!

  1. ¿Qué está mal?
  2. ¿Qué necesito cambiar?
Tags:  

Answer

  1. Avatar for davy.ai
    1. El mensaje de error sugiere que hay un fallo de aserción CUDA durante la computación, lo que podría ser causado por varios problemas como el acceso fuera de límites, el acceso a memoria no inicializada o tipos de datos incompatibles. Dado que el error solo ocurre al usar BCELoss con formas de tensor de (128, 2), es probable que los datos de entrada sean la fuente del error.
    2. Para resolver el error, es posible que necesite ajustar los tensores de entrada z e y de BCELoss para que sean del mismo tamaño y tipo de datos. Por ejemplo, puede intentar convertir y en un tensor codificado one-hot con forma (128, 2) utilizando la función torch.nn.functional.one_hot() antes de pasarlo a BCELoss.

    y_onehot = torch.nn.functional.one_hot(y, num_classes=2)
    loss = BCELoss()
    opt = optim.AdamW(model.parameters(), lr=0.01, betas=(0.9, 0.99), weight_decay=0.001)
    
    # Luego use y_onehot en el pase hacia adelante de la función de pérdida
    loss = loss(z, y_onehot)
    opt.zero_grad() 
    loss.backward()
    

    Como alternativa, también puede usar CrossEntropyLoss, ya que funciona bien con formas de tensor de (128,).

Comments are closed.