Top

R 병렬 프로그래밍 [빠른 데이터 처리를 위한 병렬 프로그래밍의 기초와 고급 라이브러리 활용]

  • 원서명Mastering Parallel Programming with R (ISBN 9781784394004)
  • 지은이사이먼 채플(Simon R. Chapple), 에일리 트룹(Eilidh Troup), 토르스텐 포스터(Thorsten Forster), 테렌스 슬론(Terence Sloan)
  • 옮긴이이판호
  • ISBN : 9788960779747
  • 25,000원
  • 2017년 02월 07일 펴냄
  • 페이퍼백 | 292쪽 | 188*235mm
  • 시리즈 : acorn+PACKT

책 소개

소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/master-parallel-R)

요약

R에서의 병렬 처리를 위한 핵심 패키지 parallel에서 시작해 클라우드 기반 패키지, 고급 MPI, GPU 기반 병렬화 등에 관해 기술적으로 깊이 다룬다. R에서 효율적인 병렬 코드를 작성할 수 있는 방법 및 피해야 할 문제에 대해 깊이 있게 배울 수 있다. R 병렬 프로그래밍을 간단하게 구현하는 방법은 물론, 고차원의 병렬화 기술을 접하는 데 좋은 길잡이가 될 것이다.

이 책에서 다루는 내용

■ R의 내장 병렬 패키지를 사용한 로드밸런싱된 병렬 연산의 효율적인 구축
■ AWS에서 동작하는 하둡의 분산화된 연산 실행을 포함한 R에서 클라우드 기반 병렬 인프라 배치 및 활용
■ RMPI, pbdMPI, SPRINT 패키지를 사용한 메시지 전달 인터페이스(MPI)로 복잡한 병렬 처리 알고리즘 개발
■사용자의 MPI 기반 루틴으로 병렬 R 패키지(SPRINT)의 생성 및 확장
■ OpenCL로 그래픽 프로세싱 유닛(GPU)의 벡터 처리 능력을 활용한 R에서 가속화된 수치 함수 구현
■ 데드락 및 수치적 불안정성과 같은 병렬 프로그래밍의 함정과 처리 및 회피 방법
■ 마스터-워커 과제 농장, 공간 그리드, 하이브리드 병렬 R 프로그램 만들기

이 책의 대상 독자

장시간 실행되는 연산 및 대량의 데이터 분석을 위해 병렬 컴퓨팅 파워의 활용법을 배우고자 하는 중급에서 고급 수준의 프로그래머를 대상으로 한다. R 프로그래밍에 대한 적절한 지식과 이해가 요구된다. C나 C++와 같은 낮은 수준 언어를 읽고 이해할 수 있으며 코드 컴파일 프로세스에 익숙할 정도로 충분한 능력의 프로그래머야 한다. 독자는 스스로 숙련된 프로그래머이자 수학자인 새로운 유형의 데이터 과학자라고 여겨야 한다.

이 책의 구성

1장, 'R에서의 간단한 병렬화'에서는 R의 병렬화된 핵심 버전인 lapply()를 사용해 노트북의 멀티코어 프로세싱 능력을 어떻게 활용할 수 있는지 빠르게 알아본다. 또한 아마존 웹 서비스를 통해 클라우드의 막대한 컴퓨팅 능력에 대해 간단히 살펴본다.
2장, '메시지 전달 소개'에서는 고급 병렬 알고리즘 구현에 핵심적인 기술인 MPI를 다룬다. 두 가지의 R MPI 패키지인 Rmpi 및 pbdMPI와 함께 해당 통신 서브시스템의 OpenMPI을 구현한다.
3장, '고급 메시지 전달'에서는 구체적인 Rmpi 예제를 개발하고 비차단 통신과 프로세스 간 메시지 교환의 지역화 패턴을 설명하며 MPI 학습을 마무리한다. 이를 위해 공간 그리드 병렬화를 구현한다.
4장, '슈퍼컴퓨터용 MPI 기반 R 패키지: SPRINT 개발'에서는 실제 슈퍼컴퓨터에서 병렬 코드를 실행하는 경험을 소개한다. 또한 슈퍼컴퓨터는 물론 노트북에서도 실행할 수 있는 C로 작성된 병렬 컴퓨팅 R 패키지인 SPRINT 개발에 대해 상세히 설명한다. 그리고 직접 작성한 고성능의 병렬 알고리즘으로 어떻게 이 패키지를 확장할 수 있는지, 어떻게 이를 R에서 접근할 수 있는지 보여준다.
5장, '노트북 안의 슈퍼컴퓨터'에서는 여러분의 노트북에 내장된 그래픽스 프로세싱 유닛(GPU, Graphics Processing Unit)의 엄청난 병렬 및 벡터 프로세싱 능력을 R에서 어떻게 드러낼 수 있는지 보여준다. 이를 위해 공개 컴퓨팅 언어(OpenCL, Open Computing Language)의 R 래퍼(wrapper)인 ROpenCL 패키지를 사용한다.
6장, '병렬 컴퓨팅의 예술'에서는 병렬 프로그래밍 및 그 성능 이면의 기초 과학과 잠재적인 함정을 강조한다. 모범 사례의 기술을 제공하고, 병렬 컴퓨팅 시스템의 미래를 살펴봄으로써 끝맺는다.

본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.

저자/역자 소개

지은이의 말

우리는 현재 폭발적으로 급증하고 있는 정보의 한가운데 있다. 우리 삶의 모든 것은 자신의 생명 활동에서 세계 환경에 이르기까지 사물 인터넷(IoT, Internet of Things)을 통해 실시간으로 측정되며 연결돼 있다. 일부 지표에 따르면 2020년에는 세계의 정보량이 오늘날로부터 10배 증가해 믿기 어려운 규모인 44제타 바이트(1제타 바이트는 2,500억 개 DVD와 같은 규모다)에 이를 것으로 전망되고 있다. 이러한 규모와 속도의 빅데이터를 처리하기 위해 막대한 규모의 계산력, 메모리, 디스크 자원이 필요하며, 이를 위해서는 병렬화가 필요하다.
오픈소스 통계 프로그래밍 언어인 R은 만들어진 햇수에도 불구하고 데이터 분석에 주춧돌과 같은 기술 중 하나로 인기를 얻고 있다. 그리고 계속 확장되고 있는 커뮤니티이면서 장담하건대 현재 인기 있는 명칭인 ‘데이터 과학자’에 의해 쓰이고 있다.
물론 데이터 과학자가 빅데이터라는 야수를 길들이기 위해 도입할 수 있는 도구는 여러 가지가 있다. 어쩌면 여러분은 파이썬(Python), SAS, SPSS 아니면 MATLAB의 고수일 수도 있다. 그러나 1997년 이후로 기나긴 오픈소스의 유산과 함께한 R은 그사이 20년 동안 개발돼 온 CRAN 호스팅의 매우 다양한 플러그인 라이브러리 패키지와 함께 널리 보급되고 있으며, 작은 숫자 행렬에서부터 생체 분자 DNA와 같은 극히 대규모의 기호로 된 데이터셋에 이르기까지 대부분의 데이터 형태를 다룰 수 있다. 물론 우리는 R이 매우 다양한 형태의 데이터에 관련된 상당히 복잡한 분석 과정을 조율할 수 있는, 사실상 데이터 과학 스크립팅 언어로 자리매김하고 있다는 것을 제시하기 위해 가능한 한 깊게 들어가고자 한다. R 자체는 항상 싱글 스레드(single thread)로 구현됐으며, 언어 근본 자체 내에서 병렬화를 사용하지 않도록 디자인됐다. 대신 특정 가속화된 함수를 위한 병렬화 수립과 병렬 처리 프레임워크를 사용할 수 있게 하려고 특별히 구현된 외부 패키지 라이브러리에 의존한다. 다양한 기술 분야에서 병렬 알고리즘을 개발할 수 있게 하는 가장 좋은 대표적 구현 방법을 몇 가지 살펴본다.
이 책에서는 R의 자체 멀티코어 능력을 활용하는 parallel 패키지와 메시지 전달 인터페이스(MPI, Message Passing Interface) 표준을 사용하는 메시지 전달법, OpenCL을 통한 범용 목적의 GPU(GPGPU) 기반 병렬화를 비롯해 단일 프로그램 복수 데이터(SPMD, Single Program Multiple Data)에서 단일 명령 복수 데이터(SIMD, Single Instruction Multiple Data)에 이르기까지 병렬화의 여러 다른 면을 살펴본다. 또한 과제 파밍(farming)을 통한 로드밸런싱에서 그리드를 통한 공간 처리에 이르기까지 프레임워크 병렬화 접근 방법의 차이점을 살펴본다. 그리고 클라우드에서 하둡을 통한 일반적인 목적의 배치 데이터(batch-data) 처리, 그리고 보너스로 클러스터 컴퓨팅에서 최근 인기 있는 새로운 기술이면서 대규모의 실시간 데이터 처리에 더 적합한 아파치 스파크에 대해 간단히 언급한다. 게다가 수백만 파운드짜리 슈퍼컴퓨터의 사용법을 살펴본다. 이를 어떻게 사용하는지, 어느 정도의 성능을 달성할 수 있는지 보도록 한다. 여러분이 사는 지역의 슈퍼컴퓨터 센터에 들이닥친 후, 여러분이 발견한 새로운 지식으로 엄청난 규모의 병렬 컴퓨팅을 해볼 수 있게 될지 누가 알겠는가?
이 책에 나온 모든 코딩 예제는 직접 작성한 것이며, 일부 예제는 같은 분야의 다른 책에서 만날 수 있을 법한 종류의 예제와 겹치지 않게 선택했다. 우리는 평범한 것과 다소 다른 무언가로 독자 여러분을 사로잡을 수 있게 예제들을 선택했다. 우리는 여러분이 이제 막 시작하는 R에서의 병렬 프로그래밍 완성 과정을 즐기기를 기대한다.

지은이 소개

사이먼 채플(Simon R. Chapple)

고도로 숙련된 솔루션 아키텍트이자 선임 소프트웨어 엔지니어다. 데이터 분석과 헬스케어 정보학에 대한 혁신적인 솔루션 및 애플리케이션 개발에 25년이 넘는 경력을 쌓았다. 또한 슈퍼컴퓨터 HPC(High Performance Computing)와 빅데이터 프로세싱 전문가다.
데이터리틱스 테크놀로지 사(Datalytics Technology Ltd)의 CTO이자 경영 파트너다. 기존 IT 운영 환경에서 쉽게 배포할 수 있게 캡슐화된 차세대의 대규모 데이터 분석 플랫폼 개발을 위한 팀 구성을 이끌고 있다. 이 플랫폼은 커스터마이징이 가능한 고성능 도구, 프레임워크, 시스템으로 구성돼 있으며, 데이터 수집과 분석, 시각화에 이르기까지 실시간 분석을 위한 데이터 분석의 전체 생명주기를 가능케 한다.
아리디아 인포매틱스(Aridhria Informatics)의 제품 혁신 이사였으며, 스코틀랜드의 의료 공급자를 위한 다수의 독창적인 시스템을 구축했다. 그가 구축한 통합 환자 추적 경로 시스템은 18주(週) 위탁 진료와 암 환자 관리 모두를 위한 10개의 개별 데이터 시스템 통합에 쓰였으며, 스코틀랜드의 의료 공급자가 환자 대기 시간을 최대한 낮출 수 있게 했다. 또한 호주에서 임상실험으로 진행된 화학 요법 환자를 위한 공공 클라우드로 호스팅되는 독특한 모바일 기반 실시간 모니터링 시스템을 구축했다. 이 시스템은 간호사와 환자로부터 “마치 거실에 간호사가 있는 것 같다. 언젠간 모든 화학 요법 환자가 안전은 물론 24시간 내내 자신만의 천사가 함께 하는 편안함을 알게 되길 바란다.”라는 찬사를 받았다.
또한 오픈소스 패키지인 ROpenCL의 공동 작성자다. 이 패키지는 R로 작성된 통계 프로그램이 그래픽 가속 칩으로 병렬 계산을 할 수 있게 해준다.

에일리 트룹(Eilidh Troup)

에딘버그 대학교 EPCC(High Performance Computing Centre at the University of Edinburgh)의 애플리케이션 컨설턴트다. 글래스고 대학교에서 유전학 학위를 받았으며, 현재는 폭넓은 사용자, 특히 생물학자들이 고성능 컴퓨팅에 접근할 수 있게 하는 데 집중하고 있다. SPRINT 및 과학을 위한 웹 기반 데이터 저장소인 SEEK 등 다양한 소프트웨어 프로젝트에 참여 중이다.

토르스텐 포스터(Thorsten Forster)

에딘버그 대학교의 데이터 과학 연구원이다. 통계학과 컴퓨터 과학을 전공했으며, 생물의학 박사 학위를 취득했고, 학제 간 연구 분야에 10년이 넘는 경력을 쌓았다.
마이크로어레이(microarray)와 차세대 시퀀싱(next-generation sequencing)과 같이 통계학과 머신 러닝에 기초를 둔 생물의학 빅데이터 분석 방법을 연구했며, 초심자가 대규모의 생물학 데이터셋에 R 통계 프로그래밍 언어로 병렬화된 분석 솔루션을 사용할 수 있게 하는 데 목표를 둔 SPRINT 프로젝트의 매니저를 맡았다. 또한 대학교에서 스핀아웃된 회사이자 생물학 관련 빅데이터 분석 서비스를 제공하는 피오스 제노믹스 사(Fios Genomics Ltd)의 공동 창업자다.
현재 신생아의 박테리아 감염 진단을 위한 유전자 표기 분류기 고안, 대식세포의 감마 인터페론 활성화에 대한 표기적 프로파일링, 감염에 대한 면역 반응에서의 콜레스테롤 역할 조사, 아동기의 호흡 천명을 천식으로 발전시키는 유전체적 요인 조사 등에 대해 연구 중이다.

테렌스 슬론(Terence Sloan)

EPCC의 소프트웨어 개발 그룹 매니저다. 스코틀랜드의 중소기업, 영국 기업, 유럽과 글로벌 기업과의 데이터 과학 및 HPC 프로젝트를 25년 넘게 관리하고 참여해 왔다.
웰컴 트러스트(Wellcome Trust, 지원금 번호 086696/Z/08/Z)와 BBSRC(지원금 번호 BB/J019283/1), 그리고 R을 위한 SPRINT 패키지 개발을 지원하는 3개의 EPSRC 분산 컴퓨터 과학 프로젝트의 공동 수석 연구자였다. 또한 고객 행위 분석을 위한 운영적 측면의 빅데이터 사용법 연구에 대해 ESRC(지원금 번호 RES-189-25-0066, RES-149-25-0005)로부터 지원금을 받았다.
에딘버그 대학교 HPC 데이터 과학 이학 석사 과정의 HPC 데이터 분석, 프로젝트 준비, 논문 수업의 코디네이터다. 또한 드럼도 친다.

옮긴이의 말

21세기 들어 IT업계에서 가장 인기 있는 화두 중 하나는 바로 '데이터’가 아닐까 한다. 소프트웨어 없이 지속 가능한 산업이 전무하다고 할 수 있는 지금 비단 IT뿐만 아니라 모든 업계에서 데이터의 중요성을 외치고 있다. 저성장으로 인해 양적 팽창이 어려워지면서 데이터는 모든 분야에서 생산성을 조금이라도 키우기 위한 핵심적인 수단이 되고 있다.
데이터 분석에서 파이썬(Python)이 비교적 최근에 주목을 받고 있다면 R은 풍부한 라이브러리 생태계를 기반으로 한 전통의 강자라 할 수 있다. 통계학, 생물학, 의학, 사회과학 등 폭넓은 분야의 연구자가 R에서 쓸 수 있는 다양한 라이브러리를 개발해놓은 덕분에 데이터 분석가는 자신이 직접 분석 도구를 개발할 필요 없이 기존 라이브러리를 쉽게 가져다 쓸 수 있다. 이러한 개방성이 R을 인기 있는 데이터 분석 언어로 만들어 준 가장 중요한 원동력이라 할 수 있을 것이다.
모든 프로그래밍 언어에서 하드웨어가 발전하면서 CPU, GPU의 멀티코어를 잘 활용할 수 있는 능력이 더욱 중요해지고 있다. R도 예외가 될 수는 없다. R 자체는 싱글 스레드로 구현돼 있으므로 병렬 연산을 위해서는 별도의 라이브러리를 사용해야 한다. 이 책에서 이러한 라이브러리를 이해하고 다루는 방법을 체계적으로 배울 수 있다.
이 책은 R 병렬 처리를 위한 핵심 패키지인 parallel에서 시작해 클라우드 기반 라이브러리, 고급 MPI, 그리드 병렬화, OpenCL을 이용한 GPU 기반 병렬화 등 기술적으로 깊은 내용까지 다룬다. 또한 R에서 효율적인 병렬 코드를 작성하는 방법 및 피해야 할 문제에 대해 자세히 배울 수 있다. 마음 급하신 분들은 2장만 읽어본 후, 기존에 개발해놓은 R코드에 병렬화를 적용한다면 빠르게 실행 시간을 단축할 수 있을 것이다. 이 책이 R에서의 병렬화에 대한 기초는 물론 고급 기술을 접하는 데 좋은 디딤돌이 될 수 있기를 기대한다.

옮긴이 소개

이판호

보험사, 증권사, 금융 전문 기자를 거쳐 뒤늦게 프로그래밍 세계에 입문했다. 대학에서 통계학을 전공하며 R을 처음 접했다. 데이터 분석에 근거한 자산운용 및 이를 위한 프로그램 개발에 관심이 많다. 현재는 금융 정보 컨설팅 회사에 재직 중이다.

목차

목차
  • 1장. R에서의 간단한 병렬화
    • 아리스토텔레스의 숫자 퍼즐
      • 해석기 구현
      • 해석기 개선
        • 실행 시간 측정
      • 문제를 여러 과제로 분할
        • lapply()로 복수의 과제 실행
    • R 병렬 패키지
      • mclapply() 사용
        • mclapply() 옵션
      • parLapply() 사용
      • 병렬 로드밸런싱
    • segue 패키지
      • segue 설치
      • AWS 계정 설정 하기
      • segue 실행
        • createCluster() 옵션
        • AWS 콘솔 화면
      • 아리스토텔레스의 숫자 퍼즐 풀기
        • 결과 분석
    • 요약

  • 2장. 메시지 전달 소개
    • MPI를 위한 시스템 환경 설정
      • MPI를 위한 R 패키지 선택
      • MPI 서브시스템 선택
      • OpenMPI 설치
    • MPI 표준
      • MPI 유니버스
      • Rmpi 설치
      • pbdMPI 설치
    • MPI API
      • 지점 간 차단 통신
        • MPI 내부통신기
      • 지점 간 비차단 통신
      • 집단 통신
    • 요약

  • 3장. 고급 메시지 전달
    • 그리드 병렬화
      • 그리드 클러스터 만들기
      • 경계 데이터 교환
      • 중앙값 필터
      • 이미지를 조각으로 분산
      • 중앙값 필터 그리드 프로그램
        • 성능
    • 통신 검사와 관리
    • lapply() 변형
      • Rmpi에서의 parLapply()
    • 요약

  • 4장. 슈퍼컴퓨터용 MPI 기반 R 패키지: SPRINT 개발
    • ARHCER
    • R에서 MPI 코드 호출
      • MPI 헬로 월드
      • R에서 C 호출
        • R에서 호출 가능하게C코드 수정
        • MPI 코드를 R 공유 객체로 컴파일
        • R에서 MPI Hello World 예제 호출
    • MPI R 패키지 빌드: SPRINT
      • 간단한 병렬 R 인터페이스(SPRINT) 패키지
        • R스크립트에서 사전 구축된SPRINT 루틴 사용
      • SPRINT 패키지의 아키텍처
    • SPRINT 패키지에 새로운 함수 추가
      • SPRINT 소스코드 다운로드
      • R에서 스텁 만들기: phello.R
      • 인터페이스 함수 추가: phello.c
      • 구현 함수 추가: hello.c
      • 스텁, 인터페이스, 구현 연결
        • functions.h
        • functions.c
        • 네임스페이스
        • Makefile
      • SPRINT 코드 컴파일과 실행
    • 유전체학 분석 사례 연구
      • 유전체학
      • 유전체적 데이터
    • 슈퍼컴퓨터와 함께하는 유전체학
      • 목표
      • ARCHER 슈퍼컴퓨터
      • 랜덤 포레스트
      • 유전체학 분석 사례 연구를 위한 데이터
      • ARCHER에서의 랜덤 포레스트 성능
      • 랭크 프로덕트
      • ARCHER에서의 랭크 프로덕트 성능
      • 결론
    • 요약

  • 5장. 노트북 안의 슈퍼컴퓨터
    • OpenCL
      • 시스템에서 OpenCL 능력 쿼리
    • ROpenCL 패키지
      • ROpenCL 프로그래밍 모델
        • 간단한 벡터 덧셈 예제
        • 커널 함수
      • 거리 행렬 예제
        • 다중 빈곤 지수
        • GPU 코어 외부 메모리 처리
    • 요약

  • 6장. 병렬 프로그래밍의 예술
    • 병렬 효율성 이해
      • 가속계수
      • 암달의 법칙
      • 병렬화할 것인가 하지 않을 것인가
        • 채플의 법칙
    • 수치적 근사
    • 난수
    • 데드락
  • 데드락 피하기
    • 병렬 오버헤드 줄이기
    • 적응적인 로드밸런싱
      • 과제 농장
      • 효율적인 그리드 처리
      • 성공적인 병렬화를 위한 세 가지 단계
      • 무엇이 미래를 품고 있는가
      • 하이브리드 병렬화
    • 요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안