Answer my own question here:
Padding:

You will need to pre-pad everything first, even with pack_padded_sequence. pack_padded_sequence will not pad for you, but instead will make sure that the RNN does not compute gradient on padded values.

DataLoader:


Dataloader will not work with pack_padded_sequence since you will need to keep track of all the original lengths before pre-padding yourself (in numpy or pytorch).


You can create a DataLoader out of a DataSet, but the DataSet cannot have 3 items at once (Features, Label, Seq_Lengths), but only (Features, Labels), hence you will lose the original lengths.