ImportError: cannot import name 'Field' from 'torchtext.data' , undefined symbol: _ZNK3c104Type14isSubtypeOfExtESt10shared_ptrIS0_EPSo
※ ImportError
ImportError: cannot import name 'Field' from 'torchtext.data'
ImportError: cannot import name 'BucketIterator' from 'torchtext.data'
ModuleNotFoundError: No module named 'torchtext.legacy'
원인 : torchtext의 버전에 따라 불러오는 방식이 다르다
해결 : 버전에 맞게 legacy.data 에서 불러오거나 .data 에서 불러온다
from torchtext.legacy.data import Field, TabularDataset, BucketIterator, Iterator
0.9 이상의 버전에서는 torchtext.data -> torchtext.legacy.data
torchtext.data.Pipeline -> torchtext.legacy.data.Pipeline
torchtext.data.Batch -> torchtext.legacy.data.Batch
torchtext.data.Example -> torchtext.legacy.data.Example
torchtext.data.Field -> torchtext.legacy.data.Field
torchtext.data.Iterator -> torchtext.legacy.data.Iterator
torchtext.data.Dataset -> torchtext.legacy.data.Dataset
※ OSError
OSError: undefined symbol: _ZNK3c104Type14isSubtypeOfExtESt10shared_ptrIS0_EPSo
원인: torchtext버전과 torch의 버전이 맞지 않아서 생기는 문제
해결: https://github.com/pytorch/text#installation
GitHub - pytorch/text: Data loaders and abstractions for text and NLP
Data loaders and abstractions for text and NLP. Contribute to pytorch/text development by creating an account on GitHub.
github.com
공식 torchtext 웹사이트에 가면,
pytorch version에 맞는 torchtext version이 나와있다.
1. 내가 필요한게 torchtext 0.8 버전이라 pytorch로 1.7로 설치해줘야하는데 GPU를 사용하기 때문에 아래 파이토치 공식 문서 참고하여 설치하자.
https://pytorch.org/get-started/previous-versions/
PyTorch
An open source machine learning framework that accelerates the path from research prototyping to production deployment.
pytorch.org
2. 공식 문서에는
이런식으로 pytorch==1.7.0 버전에 cuda 버전에 따른 설치 명령어도 알려준다.
nvidia-smi에서 나온 내 쿠다 버전은 11.3 이므로
# CUDA 11.0
conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=11.0 -c pytorch
3. 찾아서 명렁어 입력.
▶참고
import torchtext
from torchtext import data
from torchtext.data import Field, BucketIterator
난 그대로 from torchtext import data, from torchtext.data import Field, BucketIterator 로 불러와주되,
torchtext 버전과 pytorch 버전을 알맞게 맞춰주었다.