티스토리 뷰

keep9oing

pytorch로 A3C 구현하면서

HTS3 2021. 1. 17. 21:33

며칠전부터 Policy gradient 알고리즘들 밑바닥부터 짜는 중에 A3C 개발하며 느낀점들

 

1. 구현체

github.com/keep9oing/PG-Family

 

keep9oing/PG-Family

Basic PG Reinforcement algorithms. Contribute to keep9oing/PG-Family development by creating an account on GitHub.

github.com

2. multi processing

A3C를 구현하려면 멀티 프로세싱을 해야했는데, 뭐 어떻게 하는지 전혀 몰라서 python 의 multi processing packag관련 튜토리얼을 먼저 봐야했다.

 

2-1) 튜토리얼

docs.python.org/ko/3/library/multiprocessing.html

 

multiprocessing — 프로세스 기반 병렬 처리 — Python 3.9.1 문서

multiprocessing 은 threading 모듈과 유사한 API를 사용하여 프로세스 스포닝(spawning)을 지원하는 패키지입니다. multiprocessing 패키지는 지역과 원격 동시성을 모두 제공하며 스레드 대신 서브 프로세스

docs.python.org

2-2) 연습

github.com/keep9oing/multiprocessing-python

 

keep9oing/multiprocessing-python

Practice. Contribute to keep9oing/multiprocessing-python development by creating an account on GitHub.

github.com

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

 

RuntimeError: context has already been set(multiprocessing) · Issue #3492 · pytorch/pytorch

I use a spawn start methods to share CUDA tensors between processes import torch torch.multiprocessing.set_start_method("spawn") import torch.multiprocessing as mp def sub_processes(A, B,...

github.com

이 아재가 맞음

별거 아닌 버그 찾느라 뚝배기 날아갈뻔.

 

결론은 get하기전에 set먼저 하면된다.

 

4. 결과

활용하는 processor 갯수를 늘려서 학습할 수록 대체로 더 빨리 최고점에 도달하는 결과를 보여주기는 하는데, 너무 늘어나면 중간에 global 신경망이 미쳐버려서 퍼포먼스를 잘 유지 하지 못한다. batch 를 활용하는 경우 batch 개수와 processor 개수의 비율도 어느정도 영향을 주는듯. 아무튼 멀티 프로세싱이라던가 분산학습이라던가 약간 맛본 느낌이라 만족

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31