M1 Mac 에서 KoAlpaca 의 실행

다른 글 에서 문의 드렸던 내용에 이어서 문의 드립니다.
M1 Mac mini 16GB 를 이용해서 하기와 같이 실행했으나, Error가 발생해서요. 어떤 부분이 문제인지 도움 부탁 드립니다.

작성 코드는 하기와 같습니다.

import torch
from transformers import LlamaForCausalLM, LlamaTokenizer

device = torch.device("mps")
tokenizer = LlamaTokenizer.from_pretrained("beomi/KoAlpaca")
model = LlamaForCausalLM.from_pretrained("beomi/KoAlpaca").to(device)

Error는 아래와 같이 발생했습니다.

Canceled future for execute_request message before replies were done

The Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click [here](https://aka.ms/vscodeJupyterKernelCrash) for more info. View Jupyter [log](command:jupyter.viewOutput) for further details.

참고로 cerebras 1.3B model 같은 경우에는 AutoModelForCausalLM과 AutoTokenizer를 이용해서 모델을 불러오고 Generate 하는데에 문제가 없습니다.

1개의 좋아요

맥북은 거의 터미널 용도로만 쓰고 있어서;;; 저도 @mozzipa 님 글 보고 시도해보고 있습니다 ㅎㅎ

M2 MacBook Air (8core, 24GB memory)에서 코드를 돌려보고 있는데요,
작성하신 것처럼 mps 장치로 모델 불러오는 것에는 성공했는데 tokenizer.encode(x, return_tensors="pt").to('mps')를 호출하면 아래처럼 mps 장치를 지원하지 않는 연산 에러가 발생하더라구요 :sob:

NotImplementedError: The operator 'aten::cumsum.out' is not currently implemented for the MPS device. If you want this op to be added in priority during the prototype phase of this feature, please comment on General MPS op coverage tracking issue · Issue #77764 · pytorch/pytorch · GitHub. As a temporary fix, you can set the environment variable PYTORCH_ENABLE_MPS_FALLBACK=1 to use the CPU as a fallback for this op. WARNING: this will be slower than running natively on MPS.

CPU에서 한 번 돌려보겠습니다~

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

해당 코드에서는 MPS(Multi-Process Service)를 이용하여 모델을 실행하려고 시도하고 있습니다. 그러나 MPS는 현재 M1 Mac에서 지원되지 않는 기능이기 때문에 해당 코드에서 에러가 발생한 것입니다.

해당 코드에서 MPS를 사용하지 않도록 수정하시면 됩니다. 아래는 수정된 코드입니다.

import torch
from transformers import LlamaForCausalLM, LlamaTokenizer

device = torch.device("cpu")
tokenizer = LlamaTokenizer.from_pretrained("beomi/KoAlpaca")
model = LlamaForCausalLM.from_pretrained("beomi/KoAlpaca").to(device)

위 코드에서는 MPS 대신 CPU를 사용하도록 수정하였습니다. 이제 코드가 정상적으로 실행될 것입니다.


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

그러고보니 저는 올려주신 코드 부분에서 에러가 안나네요. PyTorch 버전이 1.13이라 그러려나요; :thinking:

제 환경은 아래와 같습니다.

Python

$ python -V
Python 3.8.13

PyTorch

torch==1.13.1
torchaudio==0.13.1
torchdata==0.5.1
torchtext==0.14.1
torchvision==0.14.1

huggingface

tokenizers==0.12.1
transformers @ git+https://github.com/huggingface/transformers@656e869a4523f6a0ce90b3aacbb05cc8fb5794bb

VSCode

Version: 1.77.0
Commit: 7f329fe6c66b0f86ae1574c2911b681ad5a45d63
Date: 2023-03-29T09:55:48.214Z
Electron: 19.1.11
Chromium: 102.0.5005.196
Node.js: 16.14.2
V8: 10.2.154.26-electron.0
OS: Darwin arm64 22.3.0
Sandboxed: No

VSCode Jupyter plugin

v2023.3.1000892223

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

안녕하세요! M1 Mac에서 발생하는 문제를 살펴보겠습니다.

먼저, 코드에서 torch.device("mps")를 사용하고 있는데, 이는 Metal Performance Shaders에 대한 지원을 의미합니다. 하지만 현재 PyTorch는 Metal Performance Shaders를 지원하지 않습니다. 따라서, torch.device("cpu")를 사용하여 CPU로 연산을 수행해야 합니다.

import torch
from transformers import LlamaForCausalLM, LlamaTokenizer

device = torch.device("cpu")
tokenizer = LlamaTokenizer.from_pretrained("beomi/KoAlpaca")
model = LlamaForCausalLM.from_pretrained("beomi/KoAlpaca").to(device)

또한, 코드에서 사용하신 LlamaForCausalLMLlamaTokenizer는 올바른 클래스 이름이 아닙니다. 올바른 클래스 이름은 GPT2LMHeadModelGPT2Tokenizer입니다. 따라서 코드를 다음과 같이 수정해야 합니다.

import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer

device = torch.device("cpu")
tokenizer = GPT2Tokenizer.from_pretrained("beomi/KoAlpaca")
model = GPT2LMHeadModel.from_pretrained("beomi/KoAlpaca").to(device)

수정된 코드를 사용하여 문제가 해결되는지 확인해보시기 바랍니다. 만약 여전히 문제가 발생한다면 추가적인 정보를 제공해주시면 더 도움을 드리겠습니다.


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

@bot 머..멈춰주세요....(...)

저와는 다르게 Kernel 에러가 아니네요?
저는 무엇이 문제였을까요?

그러게요...;;;
torchtokenizers 버전 이슈는 아닐까 싶은 생각입니다 :thinking:

CPU에서 돌려보고 있는데, 이제서야 제 맥북 에어가 돈 값을 하는 것 같아 뿌듯합니다 :sob:

저는
python 3.10.10
pytorch 2.0.0
torchaudio 2.0.0
torchvision 0.15.0
tokenizers 0.13.2
transformers 4.28.0.dev0
VSC : Version: 1.77.1

입니다.

CPU에서 돌려보고 있는데, 요게 제법 오래 도네요. (아니면 뭔가 문제가 있는 것일지도요;; )

밤이 늦어서... 일단은 요거 돌려놓고 내일 결과가 나오면 공유드리겠습니다 :star_struck:
더불어 말씀해주신 환경대로 맞추고 MPS 장치로도 한 번 더 돌려서 커널 오류가 나는지 살펴보겠습니다 +_+

편안한 밤 되세요! :bowing_man:

아이고.. 늦게까지 계속 봐주셔서 감사합니다!
Stable diffusion Apple version을 돌려보고 나니까 Apple silicon으로 뭐라도 해보고 싶던데, 잘 안되네요 ㅜㅜ

1개의 좋아요

네네 저도 Diffuser 써보고 엄청 빨라져서 우와 했는데, GPU 뿐만 아니라 ANE(Apple Neural Engine)도 사용을 했더라구요.

저는 GPU랑 ANE가 같은건줄 알고 있었는데, Diffuser에 옵션이 따로 있어서 찾아보니 다른 하드웨어인데다가 ANE는 Native SDK 외에는 접근할 수 있는 방법이 없는거 같더라구요 =_=

그나저나 씻고 나왔더니 CPU에서도 다 돌았습니다!!

58분이나 걸렸네요ㅋㅋㅋㅋㅋㅋ :rofl::rofl::rofl:

image

1개의 좋아요