Python, PyTorch, Huggingface Transformers에서 TOKENIZERS_PARALLELISM 경고 비활성화 방법
Python, PyTorch, Huggingface Transformers에서 TOKENIZERS_PARALLELISM 경고 비활성화 방법
Huggingface Transformers 라이브러리를 사용하면 다음과 같은 경고 메시지가 나타날 수 있습니다.
The current process just got forked, disabling parallelism to avoid deadlocks. To disable this warning, please explicitly set TOKENIZERS_PARALLELISM=(true | false)
원인:
이 경고는 여러 프로세스에서 토크나이저를 사용할 때 발생하는 잠재적인 문제를 알려줍니다. 여러 프로세스가 동시에 토크나이저에 접근하면 데드락이 발생할 수 있습니다.
해결 방법:
경고를 비활성화하려면 다음 두 가지 방법 중 하나를 사용할 수 있습니다.
환경 변수 설정:
TOKENIZERS_PARALLELISM 환경 변수를 설정하여 경고를 비활성화할 수 있습니다.
# Linux/Mac
export TOKENIZERS_PARALLELISM=false
# Windows
set TOKENIZERS_PARALLELISM=false
코드에서 설정:
transformers.set_parallelism()
함수를 사용하여 코드에서 경고를 비활성화할 수 있습니다.
from transformers import set_parallelism
set_parallelism(False)
참고:
- 경고를 비활성화하면 토크나이저가 병렬로 실행되지 않아 성능 저하가 발생할 수 있습니다.
- 여러 프로세스에서 토크나이저를 사용해야 하는 경우
transformers.set_parallelized_tokenizers()
함수를 사용하여 안전하게 병렬 처리를 수행할 수 있습니다.
예제 코드
# 라이브러리 임포트
from transformers import AutoTokenizer, set_parallelism
# 토크나이저 생성
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
# 경고 비활성화
set_parallelism(False)
# 토크나이징 수행
inputs = tokenizer("This is a sentence to tokenize.")
# 결과 출력
print(inputs)
이 코드는 다음과 같은 출력을 생성합니다.
{'input_ids': [101, 2023, 2003, 1996, 2042, 2000, 2053, 2024, 1202], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]}
- 이 코드는
bert-base-uncased
모델을 사용합니다. 다른 모델을 사용하려면 모델 이름을from_pretrained()
함수에 전달해야 합니다.
토크나이저 병렬 처리 대체 방법
transformers.set_parallelized_tokenizers() 함수 사용:
이 함수는 여러 프로세스에서 토크나이저를 안전하게 병렬 처리할 수 있도록 합니다.
from transformers import set_parallelized_tokenizers
set_parallelized_tokenizers(True)
PreTrainedTokenizerFast 클래스 사용:
PreTrainedTokenizerFast
클래스는 PreTrainedTokenizer
클래스보다 빠르게 작동하도록 설계되었습니다. 또한 병렬 처리를 지원합니다.
from transformers import AutoTokenizerFast
tokenizer = AutoTokenizerFast.from_pretrained("bert-base-uncased")
토크나이징을 사전 처리 단계에서 수행:
훈련을 시작하기 전에 모든 텍스트를 사전 토크나이징할 수 있습니다. 이렇게 하면 훈련 중에 토크나이징에 소요되는 시간을 줄일 수 있습니다.
# 모든 텍스트를 토크나이징합니다.
tokenized_texts = []
for text in texts:
tokenized_texts.append(tokenizer(text))
# 토크나이징된 텍스트를 사용하여 데이터 로더를 생성합니다.
dataloader = ...
GPU 사용:
GPU를 사용하면 토크나이징 속도를 높일 수 있습니다.
# GPU를 사용하도록 장치를 설정합니다.
device = torch.device("cuda")
# GPU에 토크나이저를 로드합니다.
tokenizer = tokenizer.to(device)
- 위의 방법 중 어떤 방법이 가장 적합한지는 특정 상황에 따라 다릅니다.
- 성능을 최적화하려면 다양한 방법을 실험하고 비교하는 것이 좋습니다.
python pytorch huggingface-transformers