ML net training...

일단 단순한 network를 기준으로 해서 training을 해보았다.

내가 느낀 점을 열거 하면:

CPU만 가지고 할 때에는 내가 신경망을 배울 때에 비해서 특별히 빨라졌다거나 하는 느낌은 못 받았다. 다만 모듈이 매우 훌륭하다. 확장도 잘 되고 모델을 변환하고 하는 것도 잘 되고. 커뮤니티에 워낙 많은 실력자들이 있어서 이것들을 다 만들어놓고 공개해놨다는 것이 중요하다.

training이나 inference를 할 때 가속화하는 여러 가지 테크닉들이 있기는 한데, 그냥 간단하게 pytorch 같은 걸로 net을 training하면 예상했던 정도의 속도가 나왔다. 다만 확실히 좋은 것은 어떤 도구를 쓰느냐와 별 상관없이 간단한 스크립트 몇 줄로 모든 과정을 끝낼 수 있다는 편리함이라고 해야 할 것 같다. 예전 같으면 이런 저런 파라미터를 바꾸기만 해도 짜놓은 내용을 전부 바꿔서 새로 작성해야 하다시피 해야 되고 여기서 실수가 생기면 또 시간을 허비하고 그럴텐데, 이것은 오로지 실험하는 과정에만 몰두할 수 있으니까 확실히 편리하다고 해야겠지.

GPU를 같이 쓰면 얼마나 빨라질지는 잘 모르겠다. 4090이 지금 대세인 것 같은데 누군가의 말에 따르면 연말시즌을 대비해서 혹은 5080/5090이 나올 것에 대비해서 4090을 단종(?)시킨다는 소리도 있고. 어쨌든 GPU가 거의 200만원 하는 시절이니 말 다했지.

torch의 nn 라이브러리는 나름 매우 방대해서 지원하는 함수와 네트워크가 매우 많아서 다양한 네트워크를 별 다른 어려움 없이 실험해볼 수 있어보인다. 그러니까 예전 같으면 어떤 아이디어를 놓고 그것을 적용했을 때 성능이 어느 정도 될지를 수식을 통해 확인하고 모의실험을 통해서 검증했다면, 이젠 그냥 모의실험을 통해서 검증하는 것으로 끝이 나는 듯 하다. 이 모델을 구성하면서 그 모델이 잘 될지 말지는 경험과 감(?)으로 찍어서 해야 되는 것 아닌가?

그렇다면 이미 존재하는 모든 레이어의 종류를 가지고 마구잡이 조합을 만들고 그것을 원하는 텐서들을 넣어두고 training이 되는지 안되는지 미친 듯이 돌려보면 되는 것 아닌가? 하는 생각도 하게 된다.

뭐 이렇게 근본 없는 게 있나 싶어도 그러려니 해야 한다.

아쉬운 것을 좀 집어보라면, 세상에 수많은 GPU도 있고 apple silicon처럼 내장된 GPU/NPU가 있는 디바이스들도 있는데, 이것들을 하나로 집약해서 잘 쓸 수 있게끔 나온 모듈은 없다는 것이다. 내가 알기로는 잘해서 Mac에서 metal layer를 쓸 수 있는 MPS라는 게 있는데, 내 해킨 머신에서는 ryzen이 mkl과 상성이 좋지 않아서 가져다 쓸 수 없다는 문제가 있어서 얼마나 빠른지는 테스트 못해봤다는 거다. 그러니까 머리 아프게 이거 저거 해봐야 별로 빨라지게 만들긴 어렵고 그렇다보니 드라이버가 잘 지원되는 cuda만 쓸 수 있는 상황이란 거다. 아마도 딥러닝에 좀 더 빠지게 되면 NVIDIA GPU는 하나쯤 사게 되지 싶다.