Using the SeanNaren pytorch bindings 2 for warp-ctc, I sometimes get different results for the same function call. This is running on K40 GPUs. Also, it sometimes gives negatives results which I believe should be impossible since warp-ctc computes loss as negative log-likelikhood, and the preceding softmax function is built into the implementation.
In [1]: loss
Out[1]: 
Variable containing:
-0.1428
[torch.FloatTensor of size 1]

In [2]: ctc_loss(nn_output, labels_concatenated, prob_lengths, label_lengths)
Out[2]: 
Variable containing:
 8504.0830
[torch.FloatTensor of size 1]

In [3]: ctc_loss(nn_output, labels_concatenated, prob_lengths, label_lengths)
Out[3]: 
Variable containing:
 8504.0830
[torch.FloatTensor of size 1]

In [4]: ctc_loss(nn_output, labels_concatenated, prob_lengths, label_lengths)
Out[4]: 
Variable containing:
-0.1497
[torch.FloatTensor of size 1]