안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
# 상황
HuggingFace에서 사전 학습된 모델을 가져와 프로젝트를 하나 만들려고 했다.
https://huggingface.co/TencentARC/PhotoMaker
위 모델을 사용하려고 하고, 간단하게 말하자면 첨부한 이미지와 프롬프트를 참고하여 새로운 이미지를 생성해준다.
아래 코드 실행 시, CUDA 관련 오류가 발생했다.
device = "cuda"
pipe = PhotoMakerStableDiffusionXLPipeline.from_pretrained(
base_model_path,
torch_dtype=torch.bfloat16,
use_safetensors=True,
variant="fp16",
).to(device)
먼저 나의 ⭐️실행 환경은 Mac M1⭐️ (매우 중요)이다.
🐛 오류 메세지
Torch not compiled with CUDA enabled
💡 해결방안
device = torch.device("mps")
pipe = PhotoMakerStableDiffusionXLPipeline.from_pretrained(
base_model_path,
torch_dtype=torch.bfloat16,
use_safetensors=True,
variant="fp16",
).to(device)
나는 Mac M1 환경에서 실행하고 있기 때문에 CUDA 대신 mps device를 사용하여 문제를 해결해주었다.
🔥 원인
일단 결론부터 말하자면, Mac에는 Nvidia GPU 기능인 CUDA가 없어서 오류가 발생했었다.
지금 생각해보면 당연한 얘기인데.. 해당 이슈로 삽질을 좀 했다🥹
✋🏻 여기서 잠깐! mps란?
* MacOS 장치용 GPU (https://pytorch.org/docs/stable/notes/mps.html)
* Apple 장치의 GPU를 활용하여 그래픽 렌더링과 데이터 처리를 가속해줌
📝 나의 삽질 기록
열심히 구글링을 해봤을 때, 대부분 해당 오류의 원인을 "설치했던 torch와 cuda를 지원하지 않아서"였다.
✋🏻 여기서 잠깐! torch & cuda란?
torch
→ 파이썬에서 사용 가능한 딥러닝 용도의 라이브러리
cuda
→ NVIDIA에서 개발한 GPU 개발 툴 (https://kaen2891.tistory.com/20)
→ GPU의 성능을 이용해 연산 병렬 처리를 효과적으로 사용할 수 있음
따라서 파이토치 공식 홈페이지에서 cuda 버전에 맞는 명령어로 재설치하여 cuda가 지원하는 버전으로 맞춰주어야 했다.
(아니 근데 내가 써놓고 왜 몰랐지? "cuda가 지원하는" 에서 이상한 걸 느꼈어야했는데..ㅋㅋ 잘 모르는 상태에서 하려니 마음만 앞선듯했다.)
파이토치 공식 홈페이지(https://pytorch.org/get-started/previous-versions/)에서 이것저것 열심히 설치해봤는데 당연히 똑같은 오류가 났다.
그러던 중.. 참고 사이트에 링크한 아티클들을 발견하여 오류를 해결해주었다.. (Mac에선 CUDA 안되는거)
참고 사이트
https://blog.joonas.io/213
https://velog.io/@dahara3/AssertionError-Torch-not-compiled-with-CUDA-enabled
https://discuss.pytorch.org/t/m1-assertionerror-torch-not-compiled-with-cuda-enabled/179308
(뭐.. 말도 안되는 삽질이였지만 얻은 건 있어서 나쁘지 않았던.... 내 시간들..ㅠ)