KoAlphaca 실행 시 다음과 같은 오류가 발생합니다.

/arrow/cpp/src/arrow/filesystem/s3fs.cc:2598: arrow::fs::FinalizeS3 was not called even though S3 was initialized. This could lead to a segmentation fault at exit

WSL2 환경에서 하고 있습니다.
모델 로딩은 잘 되고요. 파인튜닝 하는 과정에서 다음과 같은 에러가 발생하는데 왜 그런지 모르겠습니다.

에러 메시지는 다음과 같습니다.

root@OMEN-PC:~# python3 finetuning.py
Found cached dataset parquet (/root/.cache/huggingface/datasets/parquet/default-a82a012f00b07380/0.0.0/14a00e99c0d15a23649d0db8944380ac81082d4b021f398733dd84f3a6c569a7)
100%|████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 967.10it/s]
Loading cached processed dataset at /root/.cache/huggingface/datasets/parquet/default-a82a012f00b07380/0.0.0/14a00e99c0d15a23649d0db8944380ac81082d4b021f398733dd84f3a6c569a7/cache-ae913379b572d753.arrow
Was CUDA enabled? True
Loading checkpoint shards: 100%|████████████████████████████████████████████████████████| 28/28 [00:07<00:00, 3.99it/s]
Loading cached processed dataset at /root/.cache/huggingface/datasets/parquet/default-a82a012f00b07380/0.0.0/14a00e99c0d15a23649d0db8944380ac81082d4b021f398733dd84f3a6c569a7/cache-dc5e7be009769a6c.arrow
trainable params: 6553600 || all params: 6608701440 || trainable%: 0.09916622894073424
0%| | 0/50 [00:00<?, ?it/s]You're using a PreTrainedTokenizerFast tokenizer. Please note that with a fast tokenizer, using the __call__ method is faster than using a method to encode the text followed by a call to the pad method to get a padded encoding.
Error invalid device ordinal at line 388 in file /mmfs1/gscratch/zlab/timdettmers/git/bitsandbytes/csrc/pythonInterface.c
/arrow/cpp/src/arrow/filesystem/s3fs.cc:2598: arrow::fs::FinalizeS3 was not called even though S3 was initialized. This could lead to a segmentation fault at exit

답변을 부탁드리겠습니다.ㅠㅠ

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

안녕하세요, HYEONGWON_YUN님!

KoAlphaca 실행 중에 발생한 오류에 대해 질문해주셔서 감사합니다. 제가 이해한 내용을 요약하면 다음과 같습니다.

  • WSL2 환경에서 모델 로딩은 잘 되지만 파인튜닝 과정에서 오류가 발생합니다.
  • 오류 메시지에는 "arrow::fs::FinalizeS3 was not called even though S3 was initialized"라는 내용이 포함되어 있습니다.

이 문제를 해결하기 위한 제안을 드리겠습니다.

먼저, 오류 메시지에서 언급된 "arrow::fs::FinalizeS3 was not called even though S3 was initialized"는 Arrow 라이브러리와 관련된 오류입니다. Arrow는 대용량 데이터 처리를 위한 라이브러리로, S3 파일 시스템과 관련된 기능을 제공합니다.

해당 오류는 Arrow의 S3 초기화와 정리 과정이 제대로 이루어지지 않아 발생할 수 있습니다. 이를 해결하기 위해서는 S3 초기화 이후에 FinalizeS3 함수를 호출하여 정리를 해주어야 합니다.

파이썬에서는 Arrow의 FinalizeS3 함수를 호출하기 위해 pyarrow.fs 모듈을 사용할 수 있습니다. 아래는 예시 코드입니다.

import pyarrow.fs as fs

# S3 초기화 코드

# 파인튜닝 과정

# 파인튜닝이 끝난 후 S3 정리
fs.FinalizeS3()

위 코드에서 # S3 초기화 코드# 파인튜닝 과정은 실제 코드로 대체되어야 합니다. S3 초기화 코드는 Arrow의 S3 파일 시스템을 초기화하는 부분이며, 파인튜닝 과정은 모델을 로딩하고 파인튜닝하는 부분입니다. 이후 fs.FinalizeS3()를 호출하여 S3 정리를 수행합니다.

이를 통해 "arrow::fs::FinalizeS3 was not called even though S3 was initialized" 오류를 해결할 수 있을 것입니다.

더 자세한 내용은 PyTorch 공식 튜토리얼 문서와 한국어 튜토리얼 문서를 참고하시면 도움이 될 것입니다.

혹시 제가 잘못된 답변을 드렸거나 부족한 정보가 있다면 언제든지 말씀해주세요. 도움이 되었기를 바랍니다!


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

안녕하세요, HYEONGWON_YUN님. PyTorch와 관련된 문제를 겪고 계시는 것 같아 곤란하시겠습니다.

문제를 정리해보면, KoAlphaca를 실행하는 과정에서 "arrow::fs::FinalizeS3 was not called even though S3 was initialized. This could lead to a segmentation fault at exit"라는 오류 메시지가 발생하고 있습니다. 이는 AWS S3 파일 시스템이 초기화되었지만 종료되지 않았음을 나타내는 메시지입니다.

또한, "Error invalid device ordinal at line 388 in file /mmfs1/gscratch/zlab/timdettmers/git/bitsandbytes/csrc/pythonInterface.c"라는 오류도 발생하고 있습니다. 이는 GPU 장치 번호가 유효하지 않음을 나타냅니다.

이 문제를 해결하기 위해서는 두 가지 점을 확인해야 합니다.

  1. AWS S3 파일 시스템이 제대로 종료되도록 코드를 수정해야 합니다. 이는 arrow 라이브러리의 문제일 수 있으므로, 해당 라이브러리의 사용 방법을 다시 한번 확인해 보시는 것이 좋습니다.

  2. GPU 장치 번호가 유효한지 확인해야 합니다. PyTorch에서는 torch.cuda.device_count() 함수를 사용하여 사용 가능한 GPU의 수를 확인할 수 있습니다. 만약 이 함수가 반환하는 값보다 큰 장치 번호를 사용하려고 하면 위와 같은 오류가 발생할 수 있습니다.

아래는 이를 확인하는 예제 코드입니다.

import torch

# 사용 가능한 GPU의 수를 확인합니다.
num_gpus = torch.cuda.device_count()
print(f"Number of available GPUs: {num_gpus}")

# 사용하려는 GPU의 장치 번호를 설정합니다.
device_num = 0  # 이 값을 변경하여 다른 GPU를 사용할 수 있습니다.

# 장치 번호가 유효한지 확인합니다.
if device_num >= num_gpus:
    raise ValueError(f"Invalid device ordinal. There are only {num_gpus} GPUs available.")

이 코드를 실행하여 GPU 장치 번호가 유효한지 확인해 보세요. 만약 장치 번호가 유효하지 않다면, 이 값을 수정하여 문제를 해결할 수 있습니다.

더 자세한 정보는 PyTorch 공식 문서를 참조하시면 도움이 될 것입니다. GPU 관련 정보는 이 링크에서 확인하실 수 있습니다.

그럼에도 불구하고 문제가 해결되지 않거나, 다른 문제가 발생하면 추가적인 정보와 함께 다시 질문해 주세요. 제가 제공한 해결 방법이 틀릴 수도 있으니, 다른 소스도 참조하시는 것이 좋습니다.

행운을 빕니다!


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