가끔 jupyter notebook에서 간단하게 이것저것 코딩을 할 때가 있다. 최근에 Pytorch 2.0 (Stable)과 Lightning 2.0이 동시에 같은 날에 런칭했다. 그래서 필자는 conda 가상환경을 싹 다 밀어버리고 최근에 다 다시 설치를 진행했다. 그 이후에 평화롭게 가끔 M1에서 코딩을 하고 있던 어느 날... 다음과 같은 팝업 메세지와 마주하게 되면서 커널이 죽고 다시 시작되는 현상을 겪게 된다.
이에 대해서는 여러가지 원인이 있고 그에 따른 방법들이 있다. 통상적으로는 RAM과 관련된 부분일 것이다. 하지만, 내가 이 포스트를 쓰는 목적은 만에 하나 다른 특이한 경우의 수가 있기 때문에 공유하려고 쓴 것이다. Pytorch 2.0의 특이한 경우같다. 필자는 처음에 Pytorch 2.0의 문제라고 생각은 했으나 그게 다른 라이브러리간의 의존성 때문인 것으로 생각했는데 그게 아니었다. 통상적으로 shape이 안 맞아서 나는 에러가 이번에 kernel이 죽어버리는 것으로 나타나는 것이다. 이유는 정확하게 모르지만, 혹시 모를 해결책을 공유한다.
필자의 경우, 주기적으로 트랜스포머를 백지부터 짜서 돌린다. 가지고 있는 데이터셋도 가볍고 간단한 거여서 M1에서 MPS로도 충분히 잘 돌아간다. 하지만, 더 나은 Data Scientist가 되기 위해, 기본기를 놓지 않으려고 트랜스포머 구조를 백지부터 짠다. BeamSearch 부분은 아직 공부가 덜 되었지만, Decoder까지 짜고 돌려본다. 필자도 사람인지라 에러가 안 나고 한 번에 돌아가는 경우가 많이 없다. 에러가 한 두 번씩 나오는데... 그런데, 오늘은 아예 '커널'이 죽어버렸다.
1시간 넘게 원인을 찾았다. 'Pytorch 2.0'을 잘못 설치했나 싶어서 구글링도 해보고 별의별 짓을 했는데... 결과는 똑같았고, 매번 느낌도 이상했다.
왠지 코드에 이유가 있지 않을까 해서 천천히 살펴봤는데도 잘 보이지 않자, mps
가 아닌 device = torch.device('cpu')
로 하고 다시 돌렸다. 그랬더니PositionwiseFeedForwardLayer
class에서 nn.Linear()
부분에서 shape이 안 맞아서 연산이 안 된다는 에러 메세지가 나왔다.
원인은 사소한 오타였는데, mps
로 돌렸다가 kernel이 죽었던 것인데, 이를 모르고 계속 삽질을 하고 있었던 것이었다.
혹시라도 M1, M2에서 Pytorch 2.0을 MPS로 돌리다가 "the kernel appears to have died. it will restart automatically" 메세지가 뜬다면, CPU로 바꿔서 다시 돌려보자!
물론, Code를 천천히 훑어보면서 에러의 원인을 찾는 게 가장 이상적이다.
감사합니다. 간단하지만 정말 가치있는 팁이군요.