💬 LANGUAGES/Python

[오류해결] RuntimeError: "addmm_impl_cpu_" not implemented for 'Half'

삶감 2023. 11. 29. 21:25

돌리려는 코드가 원래 GPU 기반으로 짜여진 코드인데, CPU 환경에서 돌리니 나는 오류였다.

 

모델을 불러올 때, (.from_pretrained), 데이터 타입이 float16 으로 되어 있는게 문제가 되는 것 같다.

문제가 되는 것으로 추정되는 부분

model = LlamaForCausalLM.from_pretrained(
        base_model,
        # load_in_8bit=True,
        torch_dtype=torch.float16,
        device_map=device_map,
    )

참고한 링크들에 따르면 몇 가지 방법이 있었는데

  1. 코드 주석 처리 (실패)
    torch.set_default_tensor_type(torch.cuda.HalfTensor) 이 코드를 주석 처리 하라고 하는데, 나는 이 코드가 어디 있는지 못찾겠어서 실패.
  1. 모델의 데이터 타입을 바꿔주기 (실패)
    model = LlamaForCausalLM.from_pretrained(
         base_model,
         # load_in_8bit=True,
         # torch_dtype=torch.float16,
         torch_dtype=torch.float32,
         device_map=device_map,
     )

    돌아가는 듯 보이다가 멈춘다.

  1. 모델의 데이터 타입을 바꿔주기 (성공?)

    모델의 데이터 타입을 바꾸는 코드를 찾아서 붙여보니 예상시간이 어마무시하게 길게 나오긴 하지만
    일단 돌아가는 것처럼 보인다.

    model = LlamaForCausalLM.from_pretrained(
            base_model,
            # load_in_8bit=True,
            torch_dtype=torch.float16,
            device_map=device_map,
        )
    
    model = model.float()

참고

  1. https://stackoverflow.com/questions/73530569/pytorch-matmul-runtimeerror-addmm-impl-cpu-not-implemented-for-half
  2. https://github.com/tloen/alpaca-lora/issues/308
  3. https://huggingface.co/togethercomputer/LLaMA-2-7B-32K/discussions/29
  4. https://stackoverflow.com/questions/73454134/change-dtype-of-weights-for-pytorch-pretrained-model
728x90
728x90