허깅페이스 wav2vec2conformer finetuning 시 Runtime Error

[사용환경]
python 3.7.5
transformers 4.32.0

[문제상황]
현재 facebook/wav2vec2-conformer-rope-larges 모델을 저의 데이터로 finetuning 하는 중인데요,
아래와 같은 에러가 발생하였는데 도저히 구글에 검색하거나 코드를 찾아보아도 해결법을 알 수 없어 질문을 올립니다.
RuntimeError: Sizes of tensors must match except in dimension 0. Expected size 68 but got size 70 for tensor number 1 in the list.

제 생각엔 padding 문제인 것 같긴합니다만 해결법을 알 수가 없네요 ㅜㅜ
혹시 같은 내용의 오류를 해결하셨던 적이 있으시거나 해결 방법을 아시는 분은 답변 주시면 감사하겠습니다.

[에러내용]
trainer.train()
File "/home/jieun/anaconda3/envs/torch/lib/python3.8/site-packages/transformers/trainer.py", line 1555, in train
return inner_training_loop(
File "/home/jieun/anaconda3/envs/torch/lib/python3.8/site-packages/transformers/trainer.py", line 1929, in _inner_training_loop
self._maybe_log_save_evaluate(tr_loss, model, trial, epoch, ignore_keys_for_eval)
File "/home/jieun/anaconda3/envs/torch/lib/python3.8/site-packages/transformers/trainer.py", line 2256, in _maybe_log_save_evaluate
metrics = self.evaluate(ignore_keys=ignore_keys_for_eval)
File "/home/jieun/anaconda3/envs/torch/lib/python3.8/site-packages/transformers/trainer.py", line 2972, in evaluate
output = eval_loop(
File "/home/jieun/anaconda3/envs/torch/lib/python3.8/site-packages/transformers/trainer.py", line 3199, in evaluation_loop
preds_host = logits if preds_host is None else nested_concat(preds_host, logits, padding_index=-100)
File "/home/jieun/anaconda3/envs/torch/lib/python3.8/site-packages/transformers/trainer_pt_utils.py", line 122, in nested_concat
return type(tensors)(nested_concat(t, n, padding_index=padding_index) for t, n in zip(tensors, new_tensors))
File "/home/jieun/anaconda3/envs/torch/lib/python3.8/site-packages/transformers/trainer_pt_utils.py", line 122, in
return type(tensors)(nested_concat(t, n, padding_index=padding_index) for t, n in zip(tensors, new_tensors))
File "/home/jieun/anaconda3/envs/torch/lib/python3.8/site-packages/transformers/trainer_pt_utils.py", line 122, in nested_concat
return type(tensors)(nested_concat(t, n, padding_index=padding_index) for t, n in zip(tensors, new_tensors))
File "/home/jieun/anaconda3/envs/torch/lib/python3.8/site-packages/transformers/trainer_pt_utils.py", line 122, in
return type(tensors)(nested_concat(t, n, padding_index=padding_index) for t, n in zip(tensors, new_tensors))
File "/home/jieun/anaconda3/envs/torch/lib/python3.8/site-packages/transformers/trainer_pt_utils.py", line 124, in nested_concat
return torch_pad_and_concatenate(tensors, new_tensors, padding_index=padding_index)
File "/home/jieun/anaconda3/envs/torch/lib/python3.8/site-packages/transformers/trainer_pt_utils.py", line 79, in torch_pad_and_concatenate
aa = torch.cat((tensor1, tensor2), dim=0)
RuntimeError: Sizes of tensors must match except in dimension 0. Expected size 68 but got size 70 for tensor number 1 in the list.

  • 아래 답변은 OpenAI의 GPT-3.5(ChatGPT) 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

ppakji님, 안녕하세요!

wav2vec2conformer 모델의 finetuning 중에 발생한 Runtime Error에 대해 질문하셨네요. 에러 메시지를 보면 텐서의 크기가 일치하지 않는다는 내용이 나오고 있습니다. 이런 경우에는 주로 데이터의 크기나 패딩과 관련된 문제가 있을 수 있습니다.

에러 메시지에서 언급된 tensor number 1의 크기가 예상한 것과 다르다고 나와 있습니다. 이러한 경우에는 데이터셋을 확인하고 패딩을 적절하게 처리해야 합니다. 패딩은 입력 데이터의 길이를 동일하게 맞춰주는 작업으로, 모델에 입력하기 전에 데이터를 일정한 길이로 맞춰주는 역할을 합니다.

패딩 문제를 해결하기 위해 다음과 같은 절차를 따라볼 수 있습니다.

  1. 데이터셋을 확인하여 입력 데이터의 길이 분포를 파악합니다. 데이터셋의 각 샘플의 길이를 확인하여 최대 길이를 찾아봅니다.

  2. 최대 길이를 기준으로 모든 입력 데이터를 패딩합니다. 패딩은 0 또는 다른 특정한 값으로 채워진 텐서를 추가하여 길이를 맞추는 것을 의미합니다.

  3. 패딩된 데이터를 모델에 입력하여 학습을 진행합니다.

아래는 PyTorch에서 패딩을 적용하는 예시 코드입니다.

import torch
from torch.nn.utils.rnn import pad_sequence

# 데이터셋 예시
data = [torch.tensor([1, 2, 3]), torch.tensor([4, 5]), torch.tensor([6, 7, 8, 9])]

# 패딩 적용
padded_data = pad_sequence(data, batch_first=True, padding_value=0)

# 패딩된 데이터 출력
print(padded_data)

위 코드에서 data는 입력 데이터의 리스트입니다. pad_sequence 함수를 사용하여 패딩을 적용하고, batch_first=True를 설정하여 배치 차원을 첫 번째 차원으로 설정합니다. padding_value는 패딩에 사용할 값을 지정합니다. 이렇게 패딩된 데이터는 모델에 입력하여 학습을 진행할 수 있습니다.

더 자세한 내용은 PyTorch 공식 문서의 패딩(Padding) 부분을 참고하시면 도움이 될 것입니다.

혹시 이 방법으로 문제를 해결하지 못하거나 다른 문제가 발생한다면, 더 많은 정보를 제공해주시면 도움을 드릴 수 있습니다. 답변이 정확하지 않을 수도 있으니 참고 부탁드립니다.


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 OpenAI의 GPT-4 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요, PyTorch를 사용하시는 분의 질문에 답변드리겠습니다.

질문 내용을 정리해보면, facebook/wav2vec2-conformer-rope-larges 모델을 사용하여 finetuning을 진행 중에 RuntimeError: Sizes of tensors must match except in dimension 0. Expected size 68 but got size 70 for tensor number 1 in the list.라는 오류가 발생하셨다는 것으로 이해했습니다. 이 오류는 일반적으로 텐서의 크기가 일치하지 않을 때 발생합니다.

이 문제는 대부분 데이터의 차원 또는 형태가 모델의 입력으로 요구되는 형태와 일치하지 않을 때 발생합니다. 이 경우에는 모델이 예상하는 입력 텐서의 크기와 실제 제공된 텐서의 크기가 다른 것으로 보입니다.

해결 방법으로는 입력 데이터의 형태를 확인하고, 필요하다면 모델이 요구하는 형태로 변환하는 것입니다. 이를 위해 데이터 로더에서 반환하는 텐서의 크기를 확인하고, 이를 모델의 입력으로 사용할 수 있는지 확인해 보세요.

다음은 PyTorch에서 텐서의 크기를 확인하는 방법입니다.

# 가정: data_loader는 DataLoader 인스턴스입니다.
for batch in data_loader:
    print(batch.size())  # 이 부분에서 각 배치의 텐서 크기를 확인할 수 있습니다.
    break

위의 코드를 통해 각 배치의 텐서 크기를 확인한 후, 이 크기가 모델의 입력으로 요구되는 크기와 일치하는지 확인해 보세요. 만약 일치하지 않는다면, 데이터를 변환하는 과정에서 문제가 발생했을 가능성이 있습니다. 이 경우에는 데이터 변환 과정을 다시 한번 확인해 보시는 것이 좋습니다.

또한, padding이 문제일 수도 있습니다. padding은 일반적으로 서로 다른 길이의 시퀀스를 동일한 길이로 만들기 위해 사용됩니다. 만약 padding이 문제라면, padding을 적용하는 방식을 확인하고, 필요하다면 수정해 보세요.

이러한 문제 해결에 대한 좀 더 구체적인 가이드는 PyTorch의 공식 문서를 참조하시면 도움이 될 것입니다. PyTorch의 데이터 로딩 및 처리에 대한 튜토리얼(Writing Custom Datasets, DataLoaders and Transforms — PyTorch Tutorials 2.0.1+cu117 documentation)을 참고해 보세요.

그럼에도 불구하고 문제가 해결되지 않는다면, 사용하신 코드와 데이터의 형태, 그리고 데이터 로딩 및 처리 방식 등에 대한 추가 정보를 제공해주시면 더 구체적인 도움을 드릴 수 있을 것 같습니다.

제가 제공한 답변이 틀릴 수도 있으니, 다른 자료나 의견도 참고하시는 것을 권장드립니다. 감사합니다.


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!

해당 프로젝트에서의 해결인지는 확실하진 않지만 Stable Diffusion 쪽에서는 입력의 크기(dimension) 이 64 배수가 아닐 경우 발생했었던 에러였습니다. 혹시 입력이 64의 배수인지 확인해보시고 맞춰 보시면 어떨까 싶습니다.

댓글 주셔서 감사합니다!
실험 파라미터를 바꿔서 계속 진행해보니, 이 오류가 Trainer에서 output_attentions=True를 설정했을 때에만 나타나더라고요. 결국 해당 파라미터는 설정하지 않는 것으로 하였습니다.
그래도 댓글 남겨주셔서 감사드립니다!