My mistake.
pack_padded_sequence takes three arguments (input, lengths, batch_first=False).
If input is on the gpu, then the list steps will contain Variables stored on the gpu, which is what matters for performance. The list batch_sizes won’t be stored on the gpu, but I don’t think that matters for performance.