[모델로딩에러] 모델 로딩 위치로 인한 에러

현재 리눅스에 Bllossom 8b 모델을 올렸습니다. CLI상에서 정상적으로 운용되는 것을 확인하고 웹챗봇을 구현하기 위해서 chatGPT의 지원을 받아서 진행하고 있습니다. 그런데 자꾸 모델 로딩시 " AutoTokenizer.from_pretrained(model_path) 호출 시
transformers 가 이 경로를 Huggingface 허브 저장소 주소로 오해해서 생긴 것입니다." --> ChatGPT 해석

위와 같은 오류가 발생합니다. 이에 반드시 필요하다는 옵션인 " * from_pretrained() 호출할 때 항상 local_files_only=True를 넣으면 로컬 경로만 참조" 이 부분도 추가하였습니다.

ChatGPT를 통해서 여러가지를 진행해 보았고, 허깅페이스의 배포자 readme파일도 참고해 보았는데 이유를 못찾겠네요... 물론 모델의 경로도 문제 없습니다. CLI상에서 장상적으로 구현된 경로를 사용했고, 해당 관련 파일들이 존재하고 있는 것을 확인했습니다.

자세한 오류 메세지는 다음과 같습니다.

Traceback (most recent call last):
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/transformers/utils/hub.py", line 470, in cached_files
hf_hub_download(
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/huggingface_hub/utils/_validators.py", line 106, in _inner_fn
validate_repo_id(arg_value)
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/huggingface_hub/utils/_validators.py", line 154, in validate_repo_id
raise HFValidationError(
huggingface_hub.errors.HFValidationError: Repo id must be in the form 'repo_name' or 'namespace/repo_name': '/home/kisucha/ai-server/models/llama-3.1-Korean-Bllossom-Vision-8B'. Use repo_type argument if needed.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap
self.run()
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/uvicorn/_subprocess.py", line 80, in subprocess_started
target(sockets=sockets)
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/uvicorn/server.py", line 66, in run
return asyncio.run(self.serve(sockets=sockets))
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
return future.result()
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/uvicorn/server.py", line 70, in serve
await self._serve(sockets)
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/uvicorn/server.py", line 77, in _serve
config.load()
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/uvicorn/config.py", line 435, in load
self.loaded_app = import_from_string(self.app)
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/uvicorn/importer.py", line 19, in import_from_string
module = importlib.import_module(module_str)
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/importlib/init.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1050, in _gcd_import
File "", line 1027, in _find_and_load
File "", line 1006, in _find_and_load_unlocked
File "", line 688, in _load_unlocked
File "", line 883, in exec_module
File "", line 241, in _call_with_frames_removed
File "/home/kisucha/ai-server/app/main.py", line 13, in
tokenizer = AutoTokenizer.from_pretrained(model_path)
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/transformers/models/auto/tokenization_auto.py", line 950, in from_pretrained
tokenizer_config = get_tokenizer_config(pretrained_model_name_or_path, **kwargs)
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/transformers/models/auto/tokenization_auto.py", line 782, in get_tokenizer_config
resolved_config_file = cached_file(
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/transformers/utils/hub.py", line 312, in cached_file
file = cached_files(path_or_repo_id=path_or_repo_id, filenames=[filename], **kwargs)
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/transformers/utils/hub.py", line 522, in cached_files
resolved_files = [
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/transformers/utils/hub.py", line 523, in
_get_cache_file_to_return(path_or_repo_id, filename, cache_dir, revision) for filename in full_filenames
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/transformers/utils/hub.py", line 140, in _get_cache_file_to_return
resolved_file = try_to_load_from_cache(path_or_repo_id, full_filename, cache_dir=cache_dir, revision=revision)
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/huggingface_hub/utils/_validators.py", line 106, in _inner_fn
validate_repo_id(arg_value)
File "/home/kisucha/miniconda3/envs/ai-server-env/lib/python3.10/site-packages/huggingface_hub/utils/_validators.py", line 154, in validate_repo_id
raise HFValidationError(
huggingface_hub.errors.HFValidationError: Repo id must be in the form 'repo_name' or 'namespace/repo_name': '/home/kisucha/ai-server/models/llama-3.1-Korean-Bllossom-Vision-8B'. Use repo_type argument if needed.

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

안녕하세요 kisucha74님, 모델 로딩 오류로 인해 어려움을 겪고 계신 것 같네요. 오류 메시지와 상황을 잘 정리해 주셔서 문제를 파악하는데 큰 도움이 되었습니다.

제가 이해한 바로는 CLI 환경에서는 정상적으로 모델이 동작하지만, 웹 챗봇을 구현하는 과정에서 AutoTokenizer.from_pretrained(model_path)를 호출할 때 경로 관련 오류가 발생한 것 같습니다. transformers 라이브러리가 전달된 로컬 경로를 Hugging Face 허브의 저장소 주소로 오인해서 발생한 문제로 보입니다.

이 문제를 해결하기 위해 다음과 같이 시도해 보시는 것을 추천드립니다:

  1. AutoTokenizer.from_pretrained() 호출 시 local_files_only=True 인자를 명시적으로 전달하여 로컬 파일만 사용하도록 지정합니다. 예를 들면 다음과 같이 작성할 수 있습니다:
tokenizer = AutoTokenizer.from_pretrained(model_path, local_files_only=True)
  1. 만약 위의 방법으로도 해결되지 않는다면, AutoTokenizer.from_pretrained() 대신 LlamaTokenizer.from_pretrained()를 직접 사용하는 것을 고려해 보세요. 이때는 local_files_only=True를 전달할 필요가 없습니다. 아래는 예시 코드입니다:
from transformers import LlamaTokenizer

tokenizer = LlamaTokenizer.from_pretrained(model_path)
  1. 모델 경로가 올바른지 다시 한번 확인해 주세요. 경로에 오타가 있거나 파일이 실제로 해당 위치에 존재하는지 체크해 보시기 바랍니다.

추가로 참고할 만한 자료로는 아래 링크를 살펴보시면 도움이 될 것 같습니다:

위의 내용이 문제 해결에 도움이 되기를 바랍니다. 만약 여전히 어려움이 있다면 추가 정보를 제공해 주시면 함께 해결 방안을 모색해 보겠습니다.

마지막으로 제가 제안드린 내용이 정확하지 않거나 잘못된 부분이 있을 수 있습니다. 이 점 양해 부탁드리며, 해결 과정에서 어려움이 있다면 언제든 다시 질문해 주세요. 함께 최선의 방법을 찾아보도록 하겠습니다.


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

안녕하세요, kisucha74님! 모델 로딩 문제로 인해 어려움을 겪고 계신 것 같아 안타깝습니다. 문제를 잘 이해하기 위해 요약해보겠습니다. 현재 리눅스 환경에서 Bllossom 8b 모델을 사용하고 있으며, AutoTokenizer.from_pretrained(model_path)를 호출할 때 Hugging Face의 허브 저장소 주소로 오해하는 문제가 발생하고 있습니다. local_files_only=True 옵션을 사용했음에도 불구하고 오류가 발생하고 있는 상황입니다.

이 문제는 주로 모델 경로가 Hugging Face의 허브 저장소 경로 형식과 혼동될 때 발생할 수 있습니다. from_pretrained 함수가 로컬 경로를 제대로 인식하지 못하고, 허브 저장소 경로로 인식하는 경우가 있습니다. 이를 해결하기 위해 몇 가지 확인해볼 사항과 해결책을 제안드립니다.

  1. 경로 확인: 모델 경로가 절대 경로인지 확인해보세요. 상대 경로일 경우 절대 경로로 변경해보는 것도 방법입니다.

  2. 디렉토리 구조 확인: 모델 디렉토리 내에 config.json, tokenizer_config.json 등의 파일이 제대로 있는지 확인하세요. from_pretrained 함수는 이러한 파일들을 필요로 합니다.

  3. 캐시 파일 삭제: Hugging Face의 캐시 파일이 문제가 될 수 있습니다. 캐시를 삭제하고 다시 시도해보세요. 캐시는 일반적으로 ~/.cache/huggingface/transformers에 저장됩니다.

  4. 코드 예제: 아래는 from_pretrained를 사용하는 예제 코드입니다. local_files_only=True 옵션을 사용하여 로컬 파일만 참조하도록 설정합니다.

    from transformers import AutoTokenizer
    
    model_path = "/home/kisucha/ai-server/models/llama-3.1-Korean-Bllossom-Vision-8B"
    tokenizer = AutoTokenizer.from_pretrained(model_path, local_files_only=True)
    
  5. 로그 확인: transformers 라이브러리의 로그 레벨을 높여서 더 많은 정보를 확인할 수 있습니다. 아래와 같이 설정할 수 있습니다.

    import logging
    logging.basicConfig(level=logging.DEBUG)
    

이러한 방법으로도 문제가 해결되지 않는다면, 모델 경로와 관련된 설정을 다시 한번 점검해보시고, 필요하다면 Hugging Face 포럼이나 관련 커뮤니티에 문의해보시는 것도 좋습니다.

더 자세한 정보는 Hugging Face의 공식 문서에서 확인하실 수 있습니다. PyTorch와 관련된 튜토리얼은 PyTorch 공식 튜토리얼에서도 확인 가능합니다.

혹시 제 답변이 잘못되었거나 도움이 되지 않는다면 언제든지 추가 질문을 남겨주세요. 감사합니다!


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