I cannot reproduce the output shape using 8 GPUs and get [64, 8], which is expected due to the last line of code in your forward:
kqdots = torch.matmul(q, torch.transpose(k, 0, 1))

This will perform a matrix multiplication using tensors with the shape [batch_size/n_gpu, 100] and [100, batch_size/n_gpu], which creates an output of [batch_size/n_gpu, batch_size/n_gpu].
After concatenating the outputs from each GPU, the output will be [batch_size, batch_size/n_gpu], which corresponds to [64, 8] in my case.