M1 Part 15 [torch 2.0] "the kernel appears to have died. it will restart automatically"

그는사악해·2023년 3월 24일
1

M1_Settings

목록 보기
18/18
post-thumbnail

썸네일 이미지 출처

INTRO

가끔 jupyter notebook에서 간단하게 이것저것 코딩을 할 때가 있다. 최근에 Pytorch 2.0 (Stable)과 Lightning 2.0이 동시에 같은 날에 런칭했다. 그래서 필자는 conda 가상환경을 싹 다 밀어버리고 최근에 다 다시 설치를 진행했다. 그 이후에 평화롭게 가끔 M1에서 코딩을 하고 있던 어느 날... 다음과 같은 팝업 메세지와 마주하게 되면서 커널이 죽고 다시 시작되는 현상을 겪게 된다.

"the kernel appears to have died. it will restart automatically"

이에 대해서는 여러가지 원인이 있고 그에 따른 방법들이 있다. 통상적으로는 RAM과 관련된 부분일 것이다. 하지만, 내가 이 포스트를 쓰는 목적은 만에 하나 다른 특이한 경우의 수가 있기 때문에 공유하려고 쓴 것이다. Pytorch 2.0의 특이한 경우같다. 필자는 처음에 Pytorch 2.0의 문제라고 생각은 했으나 그게 다른 라이브러리간의 의존성 때문인 것으로 생각했는데 그게 아니었다. 통상적으로 shape이 안 맞아서 나는 에러가 이번에 kernel이 죽어버리는 것으로 나타나는 것이다. 이유는 정확하게 모르지만, 혹시 모를 해결책을 공유한다.

Transformer Implementation Coding...

필자의 경우, 주기적으로 트랜스포머를 백지부터 짜서 돌린다. 가지고 있는 데이터셋도 가볍고 간단한 거여서 M1에서 MPS로도 충분히 잘 돌아간다. 하지만, 더 나은 Data Scientist가 되기 위해, 기본기를 놓지 않으려고 트랜스포머 구조를 백지부터 짠다. BeamSearch 부분은 아직 공부가 덜 되었지만, Decoder까지 짜고 돌려본다. 필자도 사람인지라 에러가 안 나고 한 번에 돌아가는 경우가 많이 없다. 에러가 한 두 번씩 나오는데... 그런데, 오늘은 아예 '커널'이 죽어버렸다.

Shoveling

1시간 넘게 원인을 찾았다. 'Pytorch 2.0'을 잘못 설치했나 싶어서 구글링도 해보고 별의별 짓을 했는데... 결과는 똑같았고, 매번 느낌도 이상했다.

Solution) Run on CPU

왠지 코드에 이유가 있지 않을까 해서 천천히 살펴봤는데도 잘 보이지 않자, mps가 아닌 device = torch.device('cpu')로 하고 다시 돌렸다. 그랬더니PositionwiseFeedForwardLayer class에서 nn.Linear() 부분에서 shape이 안 맞아서 연산이 안 된다는 에러 메세지가 나왔다.

Cause

원인은 사소한 오타였는데, mps로 돌렸다가 kernel이 죽었던 것인데, 이를 모르고 계속 삽질을 하고 있었던 것이었다.

Result

혹시라도 M1, M2에서 Pytorch 2.0을 MPS로 돌리다가 "the kernel appears to have died. it will restart automatically" 메세지가 뜬다면, CPU로 바꿔서 다시 돌려보자!

물론, Code를 천천히 훑어보면서 에러의 원인을 찾는 게 가장 이상적이다.

profile
데이터를 베어라

2개의 댓글

comment-user-thumbnail
2023년 4월 27일

감사합니다. 간단하지만 정말 가치있는 팁이군요.

답글 달기
comment-user-thumbnail
2024년 1월 2일

덕분에 오류 해결했어요 고맙습니다~

답글 달기