모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 게시물ID : programmer_13757
    작성자 : 육갑잔치
    추천 : 0
    조회수 : 1709
    IP : 108.162.***.103
    댓글 : 20개
    등록시간 : 2015/10/09 16:43:54
    http://todayhumor.com/?programmer_13757 모바일
    파이썬 병렬 속도가 제대로 안 나와요 - 2
    옵션
    • 본인삭제금지
    안녕하세요? 
    여러분의 많은 조언에 힘입어 여러가지 테스트를 진행중이나 아직 소득이 없는 오징어입니다. 
    원래 질문은 바로 아래에 있지만 여튼 링크도 여기 있습니다.  http://todayhumor.com/?programmer_13732
    간략한 상황은, 
    서버에서 연구 목적의 스크립트를 돌리는데 유독 서버에서만 엄청나게 느리게 돌아갑니다. 
    여러 코어로 돌려도 거의 노트북 싱글코어 수준이고, 제온 데스크탑보다 무지하게 느리네요. 



    1. 우선, I/O에서 병목이 있는지 확인해 보았어요. iotop으로. 
    예상했던 바와 같이 iotop은 거의 0에 수렴하는 값을 보였습니다. 바깥 루프 한 바퀴에 데이터를 한 번씩 읽는데, 
    한번 읽은 데이터를 (예를들어) 60개의 task로 나누어서 병렬처리 합니다. 이거 60개 처리하는데 시간이 말도 안되게 오래 걸리는 중이고요. 
    어쨌든 루프 처음에 데이터 읽을때 빼고는 I/O는 관련 없어 보여요. 


    2. shared numpy array를 각각 프로세스에서 자주 접근하면 서로 순서 기다리느라 느려진다는 말씀에 따라 수정을 조금 했습니다. 
    원래는 worker가 부르는 함수 안에서 shared array를 수십번 접근 했는데, 처음에 한번만 접근해서 필요한 부분 (그때그때 다르고 프로세스끼리 데이터가 안 겹친다는 보장도 없을 뿐더러 전체 데이터를 다 쓰지도 않아서 worker가 직접 잘라가도록 하는 수 밖에 없더라고요.. 예를 들면 대한민국 지도만한 데이터에서 시 이상만 쓰고 군은 버리는 식입니다.) 그렇게 worker가 잘라가도록 바꾸고, 그 이후로는 전체 shared array에 접근하지 않습니다.
     (numpy array를 인덱스로 골라냈으니 메모리가 복사된 걸로 알고 있습니다. ind = np.array([1,3,5,7,9,10,11]) 일 때, sub_data = shared_arr[ind] 식으로.. 맞나요?)
    하지만 속도가 눈에 띄게 바뀌지는 않았어요. 왠지 빨리진 것 같은 기분만 들 뿐... 


    3. 프로세스 하나가 너무 큰 메모리를 가질 경우 
    얼마나 큰 것이 큰지는 모르겠지만, 전체 어레이는 수 GB이고, 프로세스 하나당은 보통 ~100MB 이내의 데이터를 다룹니다. 그래서 대단히 큰 메모리는 아닐거라고 생각되네요. 어쨌든 일러주신대로 버벅일때 한번 Ctrl+c 해보았는데, 죽은 프로세스를 다시 살리는 중은 아닌 것으로 보여요. (self._recv() 같은데서 안 걸리고, pool.join()에서 걸렸습니다.) 필요한 계산보다는 어딘가 오버헤드에서 시간을 많이 보낸다는 의심은 좀 더 커지긴 하네요. 


    바뀐 상황 
    어디선가 mp.Pool 보다 mp.process를 바로 돌리는게 더 빠르다는 이야길 들어서 
    process로 돌아가도록 코드를 수정했습니다. 더 빨리 도는것 같은 기분만 듭니다. 



    새로운? 관측 결과
    스크립트를 두 개 이상 돌릴때 확실히 많이 느려집니다. 
    스크립트당 사용되는 코어 숫자를 다 합쳐도 전체 코어의 절반도 안 되지만 그런 일이 발생하네요. 
    심지어는 2코어짜리 스크립트와  4코어짜리 스크립트를 같이 돌려도 엄청 느려져요. 전체는 48코어입니다. 

    얼마나 차이가 나냐 하면.. 
    Selection_044.png

    여기서 6,8번 라인의 결과 (4, 2코어)는 동시에 두 개의 (문제의 그) 스크립트가 돌아가던 상황이었습니다. 각각 3코어, 8코어 였던 것 같아요. 
    마침 그 다음에 8코어짜리 계산이 끝났고, 속도가 정상이 되었습니다. 
    20코어 40코어가 별 차이 없는건 오버헤드라고 생각이 되고, 마지막에 4코어 한번 더 돌린건 104ms로 처음의 828ms 보다 8배 가량 빨라졌네요. 
    다른 스크립트가 하나 끝난 차이로.. 
    참고로 4코어 제온(1230v3였나..?) 컴퓨터에서 위의 테스트를 했을때는 4코어 2코어에서 각각 103, 115ms가 나왔습니다. 그러니 위에서 마지막 4코어 104ms는 정상적인 속도로 보이네요. (하지만 이 순간에도 남은 3코어짜리 스크립트는 엄청 느리게 돌았습니다.)


    문제의 스크립트를 4코어 제온 컴퓨터에서 돌려보았습니다. 
    2코어로 큰 루프 하나 돌리는데 83초, 3코어로 56초가 걸리더군요. 심지어 데이터 로딩도 티가나게 빠르네요. (840pro의 힘일까요?, 서버는 dell의 SAS 외장스토리지인데 여기는 7200rpm 하드 여섯개씩 RAID6로 묶여있어서 파일이 잘 모아져있다는 가정하에는 특별히 느릴 것 같지 않아요. 사실 메모리에 통째로 캐싱 되어있어야 정상인 상황이기도 합니다. - 그런데도 불구하고 데스크탑에서 새로 읽는것 보다 캐싱되었어야할 메모리에서 불러오는게 더 느려보이네요..? 가만보니 너무 이상하네?? )

    같은 계산을 서버에서 하면 8코어 기준으로 운이 좋아서 빠를때는 5분 정도, 느릴때는 20분 가까이 걸립니다. 아주 그냥 지 맘대로.. 
    4코어로 해도 대중없이 속도가 오르락 내리락해서 역시 5분 ~ 20분 사이입니다. 

    글을 쓰다보니 이제는 서버 자체에 의심이 좀 생기네요. 
    이전에도 한번 간단한 cython 코드를 싱글코어로 돌리는데 노트북보다 훨씬 느려서 이상했던 기억이 있어요. 몇 달 전이라 잘 기억은 안 나지만.. 
    그 당시에 서버에 문제가 있나 싶어서 phoronix test suit을 다운받아서 몇가지 벤치마킹을 돌려보았는데, 제대로 알고 돌린건 아니지만 그 당시 판단으로 "문제 없군" 결론을 내렸던 기억이 납니다. 


    하지만 자꾸..
    메모리 대역폭 자체에 문제가 있거나, 4개의 CPU끼리 링크에 문제가 있거나, 여튼 뭔가 서버 자체에 문제가 있는건 아닐까 하는 의심이 생깁니다.
    근데 뭘 어떻게 측정해야할지 모르겠네요. 당장 서버실에 갈 수도 없고요.. 
    쓰로틀링이 걸리나 싶어서 cpu 온도 확인해봤고 클럭도 확인해봤는데 문제없이 잘 돌더라고요. 메모리가 고장났나..?! 


    테스트를 위해 간단한 코드를 하나 짜봤습니다. 
    단순한 계산이라 오버헤드가 더 크겠지만 머신별 비교를 위해서.. 
    (본문에 코드 집어넣으려면 어떻게 하나요?)

    위의 코드를 제온 데스크탑에서 돌렷을때와 서버에서 돌렸을때 결과입니다. 
       서버 (Ubuntu 15.04, Linux 3.19) 데스크탑 (Ubuntu 14.04.3, Linux3.13)
     2코어  123초  24초
     4코어  140초 31초 
     8코어  197초!! 없음 

    서버에는 아주 기본적인 (제가 알지 못하는..) 것들 말고는 아무것도 안 돌아가는 상황입니다. 

    이정도면 서버에서 프로세스를 만드는 자체에 문제가 있는걸까요? 
    왜 뭐가 문제일까요. 으헝헝










    이 게시물을 추천한 분들의 목록입니다.
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    23461
    로또 [2] 까망사투리 25/02/12 13:13 443 2
    23459
    C++ 입문전 초보자입니다. Qt / wxWidgets / FLTK 어떤 [6] OMG! 24/12/07 00:28 947 0
    23458
    [KOCCA] 2024 게임콘텐츠 제작지원 이용자평가 체험단모집 장파랑 24/11/26 16:56 929 0
    23457
    [한국콘텐츠진흥원] 2024 게임콘텐츠 제작지원 이용자평가 이용자 모집 장파랑 24/11/18 14:02 962 0
    23456
    [한국콘텐츠진흥원] 2024 게임콘텐츠 제작지원 이용자평가 이용자 모집 장파랑 24/10/28 18:24 1362 0
    23455
    논문 읽는 사람들을 위한 문서 번역 서비스 rWhale 24/10/10 13:06 1691 2
    23453
    로또번호 [2] 까망사투리 24/09/19 11:10 2321 2
    23452
    AI와 함께가는 코딩 업계 [1] 펌글 우가가 24/09/02 22:19 2567 9
    23451
    Switch문 도배된 2100줄 짜리 함수 [4] 펌글 우가가 24/08/26 22:37 2429 4
    23450
    개인정보 수집 없는 이미지 리사이즈 사라밍 24/08/23 20:31 1836 0
    23449
    디자인 패턴의 템플릿 메소드 패턴 실무 적용 사례 [1] 써니썬 24/08/23 16:47 1846 1
    23448
    TMDB API Key 얻을 때 동의하게 되는 면책 및 포기 조항 우가가 24/08/18 16:07 1851 1
    23447
    펌) 아무튼 개쩌는 번역기를 국내기술로 개발완료 했다는 소식 [1] 펌글 우가가 24/08/15 17:30 2117 2
    23446
    쿠팡 가격 변동 추적 알림 서비스 피드백 요청 (제발) 창작글펌글 애오옹 24/08/10 14:30 2067 0
    23445
    넥사크로 17.1 관련 [2] 본인삭제금지 나르하나 24/08/01 12:30 2053 0
    23444
    개밯자 의자에 머리받침 없어 [2] 까망사투리 24/07/25 13:32 2446 1
    23443
    안드로이드 EditText 리스너 연동 문의드립니다. - 해결됨 [1] 창작글 상사꽃 24/07/01 17:47 2317 2
    23442
    펌) 파이어폭스 엔진이 신인 이유 [1] 펌글 우가가 24/06/30 23:25 2919 2
    23441
    예전에는 함수 하나에 대한 기능에 고민을 많이 했는데.. ssonacy 24/05/21 09:45 2683 0
    23440
    c++ 에서 DB 쿼리문처럼 사용할 방법이 있을까요? [8] 상사꽃 24/05/19 11:10 2839 0
    23439
    쉬운 배터리 알림 창작글 언젠가아자 24/05/14 10:47 2973 0
    23438
    아후 서터레스 [1] NeoGenius 24/04/02 17:52 2657 1
    23436
    로또 [3] 까망사투리 24/03/11 15:53 3339 4
    23434
    copilot 기업유료버전 intelliJ에 붙여서 쓰고있는데 지리네요 안녕월드 24/02/22 00:15 3345 0
    23433
    코딩마을 대나무숲 [6] cocoa 24/02/20 14:50 3512 5
    23432
    (질문) 프로그래머분들은 싱글PC게임 레벨제한 풀수 있죠?? [23] 본인삭제금지 할배궁디Lv2 24/02/13 13:36 3522 1
    23431
    Freemium NeoGenius 24/02/13 13:23 2954 0
    23429
    부산에서 프로그래머 구인하는데 연봉 6천에서 8천 작은건가 [3] 폴팡 24/02/04 20:50 3866 1
    23427
    chatgpt? bard? [3] 별빛러브 24/01/25 06:24 3090 0
    23426
    Next.js로 만들어봤어요~ [2] 창작글 sonnim 24/01/24 12:52 3326 3
    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈