Yep, this works without a hitch. This means the issue is with the part of code where I initialize the LSTM, model, word embeddings, linears, and optimizer (since that is what you simplified, which worked).
This bit:
models = {}
optimizers = {}
if mode == 'train':
    word_embedding = Embedding(len(token_vocab), embedding_dim, padding_idx=0, sparse=True, pretrain=embedding_file, vocab=token_vocab, trainable=True)
    for target_label in labels:
        lstm = LSTM(embedding_dim, hidden_size, batch_first=True, forget_bias=1.0)
        linears = [Linear(i, o) for i, o in zip([hidden_size] + linear_sizes, linear_sizes + [2])]
        model = Classifier(word_embedding, lstm, linears)
        if use_gpu:
            model.cuda()
        optimizer = torch.optim.SGD(filter(lambda p: p.requires_grad, model.parameters()), lr=learning_rate, momentum=.9)
        models[target_label] = model
        optimizers[target_label] = optimizer

For context, I have 11 labels. I create a separate model and optimizer for each label, and then train one model on each label. Is this an incorrect approach to multiclass classification?