•
라이트닝 프레임워크는 체크포인트로부터 모델 객체를 생성할 때 save_hyperparameter 로 저장되어 있는 값들 중 필요한 값들을 자동으로 생성자에 통과시켜 준다.
•
파이토치 모듈 클래스의 state_dict 멤버는 모델의 가중치를 포함하고 있다. 체크포인트는 이 state_dict 까지 모두 가지고 있다. 라이트닝모듈의 멤버 변수에 파이토치 모듈이 발견되면 자동으로 연동된다. 따라서 파이토치 모듈 객체의 가중치를 별도로 관리할 필요가 없다.
•
Transfer learning 을 위해 라이트닝모듈의 생성자에 파이토치 모듈 객체에 사용될 .pth 가중치 경로 인자를 뚫어 놓는 상황을 생각해 보자. 기본적으로 save_hyperparameter 은 생성자를 통해 넘어온 모든 인자들을 자동으로 체크포인트에 저장한다. 이러한 방식은 training phase 가 끝나고 체크포인트를 사용해 test phase 로 넘어가고자 하는 상황에서 문제가 생긴다. 생성자의 인자를 대신 통과시켜줄 때, 가중치 경로도 자동으로 체크포인트 파일로부터 가져오기 때문이다.
•
가중치를 가져오는 로직이 생성자와 연결되어 있고 .pth 가중치 파일 경로가 생성자를 통해 전달된다면, 체크포인트 파일을 통해 생성자를 실행할 때 파인튜닝 학습을 시작할 때 사용한 가중치를 불러오므로 가중치 파일을 언제나 학습 시 사용했던 위치에 두어야 한다.
•
물론 .pth 가중치 파일의 위치만 옮기지 않는다면 소스코드는 동작한다. 실질적으로 사용하는 가중치가 달라지지도 않는다. state_dict 를 체크포인트 가중치로부터 로드하는 일이 .pth 가중치 경로로부터 로드하는 일보다 늦게 일어나기 때문에, 어차피 파인튜닝 결과물인 체크포인트 가중치로 덮어써지기 때문이다. 하지만 어쨌든 이것은 우리가 의도한 동작이 아니다.
•
이런 복잡한 상황을 방지하려면 생성자에서 가중치를 로드하는 로직을 별도의 메소드로 작성해서, 학습 시에만 로드할 수 있도록 라이트닝 프레임워크의 생성자 로직에서 분리해 내는 것이 좋다.
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료을 보관해 두는 영역입니다.
1.
None
from : 과거의 어떤 원자적 생각이 이 생각을 만들었는지 연결하고 설명합니다.
1.
•
앞의 글에서는 텐서보드와 관련하여 하이퍼파라미터를 관리하는 방법을 설명했다. 이 글에서는 학습과 평가 시 차이가 있는 대표적인 분기 중 하나인 가중치 로드 방식을 파이토치 라이트닝의 save_hyperparameter 메서드의 작동 방식과 연관지어 서술한다.
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는지 연결합니다.
1.
None
opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는지 연결합니다.
1.
None
to : 이 문서에 작성된 생각이 어떤 생각으로 발전되거나 이어지는지를 작성하는 영역입니다.
1.
None
ref : 생각에 참고한 자료입니다.
1.
None