Multi-gpu 환경에서 자동으로 적절한 GPU 하나 골라서 학습하기
하나보다 많은 GPU를 가지고 있더라도 언제나 딥러닝 모델을 multi-gpu로 데이터 병렬화 혹은 모델 병렬화를 구현하여 학습을 진행하는 것은 쉽지 않은 일이다. PyTorch처럼 처음부터 다양한 구현 모델을 염두해두었거나, 오픈소스 커뮤니티가 최근 가장 활성화되어 있는 라이브러리에서는 병렬화 구현이 유리하지만, TensorFlow 같은 경우 긴 세월에 걸친 버젼 업그레이드와 수시 때때로 deprecated 되는 API로 인하여 코드 유지보수, 버져닝, 호환성 개선, API의 버젼에 따른 병렬화 방법론의 차이를 보여 API 문서를 제법 잘 따라하더라도 모델에 따라서는, 혹은 전체 구현이 너무나 single-gpu를 기준으로 만들어져 효율적인 multi-gpu 병렬 학습의 구현이 어려운 경우도 있다. 물론 시간이 많거나 다른 제약이 없다면 정해면 프레임워크 내에서도 충분히 병렬화를 구현할 수 있지만, 그럴 수 없다면 모델이나 데이터 병렬화가 아닌 ‘실험’의 병렬화도 자원을 최대로 활용하는 방법이다.
생각하기, 소통하기, 개발 안 하고 개발시간 줄이기
일을 시작할 때의 나는 일과 사람이 다르고 일과 삶이 다르다고 생각하곤 했다. 하지만 요즘에는 그리 다르지 않다고 생각하게 되었다. 생각보다 일하는 나와 일 밖의 나는 완전히 분리되지 않더라. 좋고 나쁨이 나뉘어 있어서 어떤 사람이 되는 것이 꼭 좋은 건 아니고 주어진 환경이나 여건상에서의 최선은 언제나 다르지만, 만약에 열려 있는 개발자가 되려고 하면 열려있는 사람이 되어야 하고, 계획을 잘 세우는 개발자가 되고 싶으면 계획을 잘 세우는 사람이 되어야 하는 것 같다. 엔지니어에게 인문학적 소양이라는 이야기가 필요하단 말들이 고리타분하게 느껴진 적도 있었지만, 지금은 그 말을 이해하고 있는 것 같다. 나중엔 다시 잊어버릴지도 모르겠지만 말이다.
자주하는 PC 설정 - 20년도 하반기
나는 뭔가 생산적인 활동을 할 때에는 항상 자료가 정리되어 남아있는 걸 좋아하는 편이다. 그래서 전부터 계속 PC를 설정하게 될 때마다 그와 관련된 튜토리얼이나 자료들을 적어두고 필요할 때면 다시 꺼내어 활용한다. 최근에는 그걸 더 편하게 하기 위한 private GitHub 저장소도 만들어서 사용하고 있다. 언제나 사용해도 괜찮을 계층적인 폴더구조라던지, 지침사항들의 문서를 관리해놓고 있다.