돌리려는 코드가 원래 GPU 기반으로 짜여진 코드인데, CPU 환경에서 돌리니 나는 오류였다.
모델을 불러올 때, (.from_pretrained
), 데이터 타입이 float16
으로 되어 있는게 문제가 되는 것 같다.
문제가 되는 것으로 추정되는 부분
model = LlamaForCausalLM.from_pretrained(
base_model,
# load_in_8bit=True,
torch_dtype=torch.float16,
device_map=device_map,
)
참고한 링크들에 따르면 몇 가지 방법이 있었는데
- 코드 주석 처리 (실패)
torch.set_default_tensor_type(torch.cuda.HalfTensor)
이 코드를 주석 처리 하라고 하는데, 나는 이 코드가 어디 있는지 못찾겠어서 실패.
- 모델의 데이터 타입을 바꿔주기 (실패)
model = LlamaForCausalLM.from_pretrained( base_model, # load_in_8bit=True, # torch_dtype=torch.float16, torch_dtype=torch.float32, device_map=device_map, )
돌아가는 듯 보이다가 멈춘다.
- 모델의 데이터 타입을 바꿔주기 (성공?)
모델의 데이터 타입을 바꾸는 코드를 찾아서 붙여보니 예상시간이 어마무시하게 길게 나오긴 하지만
일단 돌아가는 것처럼 보인다.model = LlamaForCausalLM.from_pretrained( base_model, # load_in_8bit=True, torch_dtype=torch.float16, device_map=device_map, ) model = model.float()
참고
- https://stackoverflow.com/questions/73530569/pytorch-matmul-runtimeerror-addmm-impl-cpu-not-implemented-for-half
- https://github.com/tloen/alpaca-lora/issues/308
- https://huggingface.co/togethercomputer/LLaMA-2-7B-32K/discussions/29
- https://stackoverflow.com/questions/73454134/change-dtype-of-weights-for-pytorch-pretrained-model