오늘 한 일
프로젝트
- 어제 보기로 했던 왜
evaluate() 과정 중에 프로그램이 죽는지 확인하는 과정을 먼저 시작해봤다.
- 당연히 길이가 긴 데이터가 들어가서 batch가 커져서 터진 줄 알았는데 디버깅을 해보니 아니었다.
- 프로그램을 죽인 데이터의 크기를 확인해보니, 그 전에 그보다 더 큰 데이터도 받은 기록이 있었다.
nvitop 명령어를 이용해서 evaluate()할 때 데이터의 크기를 유심히 살펴보았는데 step마다 메모리 사용량이 늘다가 결국엔 터져버리는 걸 확인할 수 있었다.
- 처음엔 캐시 메모리 문제인가 싶어서 계속
empty_cache() 등의 함수를 사용해보려고 했는데, 문제는 그게 아니었다.
compute_metrics를 사용하기 위해 켜놓으면, 아마 metric을 계산하기 위해 텐서를 계속 쌓아두어 저장하는 모양인 것 같았다.
- 근데 저장하는 텐서 크기가 좀 큰 게 아니다 보니까 이걸 쌓아두고 있다가 터져버린 것 같았다.
- 그래서 이를 해결하기 위해,
preprocess_logits_for_metrics를 설정해두어 GPU 텐서를 cpu로 옮겨주었다.
- 거의 4시간 동안 이거만 붙잡고 있었다…. 결국 고쳐서 돌리긴 했는데 참 쉽지 않았다….
다음에 할 일
- 그렇게 고쳐서 추론을 생성하도록 해봤는데, 일단 영어로 생성되어서 잘하는지 모르겠다….
- 어찌보면 교과서를 보고 공부를 하는 게 아니라 답지만 보고 외우는 거니까 할루시네이션도 생길 것 같고… 이걸 잘할 수 있을까 싶다.
- 그리고 추론을
gpt-4o로 뽑은 데이터셋도 확인해보니 거의 절반 가량(911개)이 비어있어서… 다시 만들거나 해야할 것 같다.
- 그래도 바로 포기하긴 아쉬우니까 일단은 모델만 바꿔끼면서 잘 돌아가는지 확인을 해보는 게 좋을 것 같다. (성능 좋았던 거 한 3개 정도?)
- CoT는 모델이 작아서 할루시네이션이라는 고질적인 문제를 못 벗어날 것 같다. 그럼 RAG 같은 거를 써야 하려나…? 그럼 또 corpus 만들어야 하는데…
- CoT 논문을 한번 볼까? 작은 모델에 대해서도 효과적인가를 확인해볼 수 있을 것 같은데
- 일단 성능 높이는 가장 쉬운 방법은 모델을 바꿔 끼는 것 같은데…