티스토리 뷰
며칠전부터 Policy gradient 알고리즘들 밑바닥부터 짜는 중에 A3C 개발하며 느낀점들
1. 구현체
github.com/keep9oing/PG-Family
2. multi processing
A3C를 구현하려면 멀티 프로세싱을 해야했는데, 뭐 어떻게 하는지 전혀 몰라서 python 의 multi processing packag관련 튜토리얼을 먼저 봐야했다.
2-1) 튜토리얼
docs.python.org/ko/3/library/multiprocessing.html
2-2) 연습
github.com/keep9oing/multiprocessing-python
3. CUDA로 pytorch multiprocessing할때,
3-1)
cpu로만 돌리려면 상관없는데, CUDA를 이용하려면 start_method를 "spawn"으로 설정해줘야한다,
RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method
안그러면 위같은 에러 나옴
3-2)
근데 이걸 해결하려면 간단하게
mp.set_start_method('spawn')
이렇게만 해주면 되는데 재밌는 점은 현재 start method를 확인하기위해
mp.get_start_method()
이걸하는 순간 start_method가 고정되어버려서 set_start_method를 사용할 수 없다.
RuntimeError('context has already been set')
버그임.
출처: github.com/pytorch/pytorch/issues/3492
별거 아닌 버그 찾느라 뚝배기 날아갈뻔.
결론은 get하기전에 set먼저 하면된다.
4. 결과
활용하는 processor 갯수를 늘려서 학습할 수록 대체로 더 빨리 최고점에 도달하는 결과를 보여주기는 하는데, 너무 늘어나면 중간에 global 신경망이 미쳐버려서 퍼포먼스를 잘 유지 하지 못한다. batch 를 활용하는 경우 batch 개수와 processor 개수의 비율도 어느정도 영향을 주는듯. 아무튼 멀티 프로세싱이라던가 분산학습이라던가 약간 맛본 느낌이라 만족
'keep9oing' 카테고리의 다른 글
개쩌는 Latex 캡쳐 도구 - Mathpix (3) | 2021.02.05 |
---|---|
DRQN 구현 (2) | 2021.02.03 |
python zip 해제 (0) | 2020.12.29 |
Trail following with obstacle avoidance by deep learning approaches (17) | 2020.11.22 |
ROS2 foxy 튜토리얼3 - ROS2 노드(node) 이해하기 (1) | 2020.07.18 |