Tuesday, April 25, 2017

전문가 대담: 눈 앞으로 다가온 기계학습의 시대와 GPU 컴퓨팅

한국 IBM의 유부선 상무를 만나 Machine Learning/Deep Learning의 연산 플랫폼으로 새로이 관심이 집중되고 있는 GPU 컴퓨팅과 인공지능의 현재와 미래에 대하여 전반적인 이야기를 나누었다. 그 중에 GPU 컴퓨팅을 바탕으로 co-processor 그리고 시장에 새로이 소개된 기술과 이를 기반하는 시장의 전망까지의 인터뷰를 정리하여 여기에 싣는다. 대화 중에 등장한 전문용어는 이해를 돕기 위해 설명을 겯뜨렸다.

유부선 상무는 1996년 한국IBM에 입사했다. 이후 현재까지 기술영업 최일선에서 일하고 있으며, IBM Power Systems를 바탕으로 UNIX, Linux 그리고 Big Data 및 GPU 컴퓨팅을 지원하고 있다. 한국IBM에서 최고 엔지니어로 평가받고 있으며, 두터운 고객의 신뢰는 그 증거이다.

X X X X X

– GPU computing이란 무엇인가요?

> GPU를 이용한 컴퓨팅을 말합니다. 여러가지 병렬단순계산 작업을 GPU를 이용해서 가속화하는 컴퓨팅, 대표적인 것으로는 과기연산용 HPC 업무 및 금융 관련 위험 관리 업무 등에서의 대규모 계산 등이 있습니다. 최근에는 Machine Learning/Deep Learning (기계학습(機械學習)/심층학습(深層學習), 이하 ML/DL) 쪽이 각광받고 있습니다.

본 대화에서 언급되는 GPU는 GPGPU(General Purpose Graphic Processing Unit)를 말한다. 영상 출력을 담보하지 않는 일반연산용 GPU이다. 이에 대한 일반적인 설명은 이전 글을 참조하면 좋겠다.

– GPU 컴퓨팅을 말할 때 '병렬'과 '가속'이라는 표현이 항상 함께 등장합니다. 그렇다면, GPU 컴퓨팅에서 이 두가지에 대하여 특별한 능력을 발휘한다는 뜻으로 해석도 가능하다고 보는데요, 이런 '병렬'과 '가속'을 목적으로 하는 연산에서 반드시 GPU를 사용해야 할 이유가 있나요? 혹은 다른 유용한 방식 또한 존재하나요?

> 일단 GPU가 하는 일을 모조리 CPU가 해도 되고, 어떤 경우에는 CPU가 할 때 더 빠른 경우도 꽤 많습니다. 단지 계산이 단순한데, 굉장히 많이 병렬화 할 수 있다면, GPU를 활용하는 것이 더 빠르고 더 저렴하게 할 수 있겠습니다. 하여 GPU가 주목받게 된 이유이고, 병렬화 할 수 있는 것이 많지 않다면 CPU로 연산하는 것이 더 좋은 결과를 가져올 때도 있습니다.

– 그럼에도 불구하고 GPU를 많이 언급하는 것은 아무래도 효율이 더 좋아서 그런 것인가요?

> 결국 효율의 문제이고, 더 빠르게 더 적은 비용으로 할 수 있다면 어떤 방식의 하드웨어를 선택하든 문제는 없습니다.

– 일반적으로 GPU의 스펙을 보면, core 수가 엄청나게 많은 걸 알 수 있습니다, 앞서 말씀하신 업무의 특성과 관계를 보면, 어떤 설계의 방식이 반영되었기 때문에 그런 효율을 내고, 이렇게 많은 core를 집적화 활 수 있는 것인가요? 그리고 CPU의 core와 GPU의 core는 결정적으로 다른 점이 무엇일까요?

> 현대적인 CPU는 막연히 clock speed가 높다 cache가 많다 – 그런 것 뿐만 아니라, core내에서 병렬화를 통합 성능 향상을 위해 CPU의 하드웨어 instruction set을 설계할 때 branching이라든가 predication이라든가 여러가지가 구현되어 있습니다. 그에 비해 GPU는 그런 것들이 생략된, SIMD같은 '단순연산'을 하는데 최적화된 core를 가지고 있어요.

Branch: 브랜치(branch)는 컴퓨터가 다른 명령 시퀀스를 실행하기 시작하게 하여 명령을 순서대로 실행하는 기본 동작에서 벗어나는 컴퓨터 프로그램의 명령이다. 브랜치(또는 분기 된 브랜치)는 또한 분기 명령을 실행 한 결과로서 실행을 다른 명령 시퀀스로 전환하는 단계를 포함한다. 분기 명령어는 조건부에 따라 분기를 수행하는 무조건 부 분기 또는 분기를 유발할 수도 있고, 하지 않을 수도 있는 조건 분기일 수 있습니다. 분기 명령은 프로그램 루프 및 조건(즉, 특정 조건이 충족되는 경우에만 특정 명령 시퀀스를 실행)에서 제어 흐름을 구현하는 데 사용된다. https://en.wikipedia.org/wiki/Branch_(computer_science)

Predication: 컴퓨터 과학에서 프레디케이션(Predication)은 조건부 분기 명령어의 대안을 제공하는 아키텍처 기능이다. 프레디케이션은 브랜치의 두 경로 모두에서 명령을 실행하고 취해진 경로의 명령 만 아키텍처 상태를 수정할 수 있게 한다. 취해진 경로의 명령어는 명령어가 아키텍처 상태를 수정할 수 있는지 여부를 제어하기 위해 명령어가 사용하는 부울 값 인 술어로 연결 (예측)되어 있기 때문에 아키텍처 상태를 수정할 수 있다. https://en.wikipedia.org/wiki/Branch_predication

SIMD: Single Instruction, Multiple Data를 의미한다. 마이클 플린이 분류(Flynn's Taxonomy)한 컴퓨터 아키텍처의 한 종류로, 단수의 명령어로 다수의 값을 동시에 계산하는 병렬연산의 한 방식이다. https://en.wikipedia.org/wiki/SIMD

SIMD2.svg
By Vadikus - Own work, CC BY-SA 4.0, Link

– 그렇다면, '단순연산'과 그렇지 않은 연산, 즉 '복잡연산'의 차이를 어떻게 구분할 수 있을까요?

> 가장 쉬운 건 if/then 즉, 조건문이 들어 가느냐? 아니냐? 로 구분하는 것이 제일 좋을 듯 합니다. 만약 새로 들어온 값이 10보다 크냐? 작으냐? 에 따라서 연산하는 것은 복잡한 연산으로 GPU에 적합하지 않구요, 그냥 테이블이 100만개 칸이 있는 행렬이 두 개 있는데, 같은 칸 끼리 동시에 더하거나 곱하거나 빼거나 나누거나 하는 게 단순연산이고, GPU에 맞죠.

– GPU에 대해서 찾아보면 co-processor라는 말이 항상 따라오고, 부동소수점연산이라는 말도 함께 쓰이는 것을 알 수 있었습니다, 그럼 GPU는 co-processor이고, 하는 일은 부동소수점연산이다 – 라고 봐도 무관할까요?

> 반드시 그런 것은 아닙니다. 지금까지 GPU가 주로 한 일이 과학기술에 관련된 연산이나 금융업에서 크고 작은 숫자를 계산하는데 사용되었기 때문에 부동소수점계산이 언급되는데, 주로 쓰임이 그렇다 보니 그 방향으로 개발되어 왔고 현재 그렇게 널리 사용될 뿐입니다.

초기 microprocessor는 부동소수점 연산을 위한 능력을 따로 갖추고 있지 않았다. 이를 위해 다른 하드웨어 장치를 사용하기도 했다. Co-processor가 바로 그것이다. PC 수준에서 이와 같은 이야기는 아마도, Intel의 오래된 CPU를 기억해 낸다면, 바로 그것이다. 486DX, 486SX등의 이름으로 시장에 나왔다. 이 중 SX가 부동소수점 연산을 위한 설계가 반영되지 않은 제품이었고, DX가 이를 반영한 제품이었다. 상대적으로 SX가 저렴 했으며, 일반 PC 사용자에게 부동소수점연산의 이점이 크게 없었음으로 많은 판매가 이루어졌다. 또한 Intel은 487SX과 같은 co-processor를 따로 판매하기도 하였는데, 'Math CoProcessor'라는 이름으로 시장에 알렸다. 486SX를 사용하다가 나중에 이를 추가할 수 있었다. 이를 위한 소켓도 마더보드에 위치해 있었다.

KL Intel i487SX.jpg
By Konstantin Lanzet (with permission) - CPU collection Konstantin Lanzet, received per EMail, CC BY-SA 3.0, Link

– co-processor 시장을 보면, Nvidia의 Tesla, Intel의 Xeon-Phi가 눈에 띕니다. Tesla와 Xeon-Phi은 어떤 점에서 차이를 설명할 수 있을까요?

> 같은 역할을 수행한다는 점에서는 비슷하다고 말할 수 있겠습니다. 하지만, 전혀 다른 제품입니다. 차이점은 소프트웨어 쪽에서 쉽게 찾을 수 있는데요, Nvidia는 CUDA라는 개발환경이 제공되고 현재는 산업표준처럼 시장에서 인식하고 있습니다, Nvdia의 GPU는 CUDA에 '당연히' 최적화 되어 있습니다. 그에 비해, Xeon-Phi는CUDA과 비견할 만한 에코-시스템이 없는 형편입니다. 그리고 Xeo-Phi는 Intel CPU의 기존 core들을 굉장히 단순화하여 집적화 시킨, 그러니까 기존 x86 CPU에서 크게 변화하지 않은 점을 들 수 있겠습니다.
대신 Xeon-Phi는 특이하게, co-processor mode로만 쓰이는 것이 아니라, host mode로도 사용할 수 있습니다. 기존의 x86 플랫폼의 OS를 그대로 사용할 수도 있다는 뜻입니다. 물론 성능은 대단히 좋지 않다고 들었습니다.

– 하나의 co-processor card를 co-processor mode와 host mode로 전환해서 사용할 수 있다는 이야기인가요?

> co-processor로 쓸 수 있는 하드웨어와 host로 쓸 수 있는 하드웨어는 서로 다릅니다. 상호 전환해서 쓸 수 있는 건 아닙니다. 재미있는 점은, Xeon-Phi 이야기를 많이 들어보기는 했지만, 지금까지 만나온 여러 고객들 중에 Xeon-Phi를 ML/DL에 사용하는 경우를 보지 못 했다는 것입니다.

Intel의 Xeon-Phi는 자사의 Atom 프로세서와 같은 core 기반으로 만든다고 한다. Intel Xeon Phi는 processor와 Coprocessor로 명명된 제품이 있다. 공식 명칭에서 이렇게 구분하는 것처럼, Xeon Phi Processor는 운영체제를 직접 동작시킬 수 있는 host로 사용되고, Xeon Phi Coprocessor는 co-processor로 컴퓨팅 시스템의 PCIe Slot에 장착된다.

Intel Xeon Phi Coprocessor © Intel

Intel Xeon Phi Processor로 구성된 compute server © Intel

– ML/DL에 관한 글을 찾아보면 GPU에 대한 언급이 아주 많습니다. 세계적인 ML/DL 권위자인 Andrew Ng[吳恩達]의 강의를 봐도 GPU의 역할에 대하여 언급하고 있습니다. 이 둘의 관계는 앞서 말씀해 주신 '단순연산' 영역에서 GPU가 탁월하고 ML/DL은 그러한 '단순연산'의 영역에 있는 컴퓨팅이기 때문이라고 이해하도 될까요?

> ML/DL에 반드시 GPU를 사용해야 하는 건 아닙니다. 어떤 대규모 neural network을 운영하는 곳에서 CPU를 더 많이 사용한다는 이야기도 있습니다. 아시다시피 Google 같은 곳은 TPU를 자체 제작하여 쓰고 있기도 합니다. 다만, GPU를 널리 언급하는 것은 그것이 비용효율적이기 때문이라고 전 이해하고 있습니다.

– 결국 하드웨어 중심의 특별한 기술적인 장점보다는 어떤 기술의 도입이든 성능대비 비용효율이면 ML/DL에서 좋은 시스템이라고 판단할 수 있겠군요. 그렇다면, 최근 IBM이 시장에 선보이고 있는 GPU 시스템인, S822LC for HPC는 어떤 제품입니까?

> 기술적인 장점 뿐만 아니라, 비용효율적인 운영면에서도 좋은 시스템입니다. 특히, 다른 제품에서는 해결하지 못 하고 있는 문제, GPU와 CPU 간의 병목문제를 해결한 점에서는 높은 가치가 있는 시스템이라고 할 수 있습니다.

IBM S822LC for HPC는 ML/DL을 위해 디자인 되어 있다. 2U form factor 크기인 이 시스템은 표준 19인치 랙 마운트 형식으로, GPU로는 Nvidia Tesla P100이 탑재되고 총 수량은 4개까지 수용된다. CPU는 Power8 2 소켓으로 구성되며 총 20개 혹은 24개 core 구성이 가능하고 core 당 8개 threads를 제공한다. 메모리는 32GB 구성에서 1024GB 구성까지 가능하다. 또한, 대규모 구성을 위한 수냉식 옵션도 제공한다.

운영체제로는 현재 Ubuntu가 공식 지원되며 곧 RHEL도 그 목록에 들어올 것이다.
S822LC for HP, 이 제품은 무엇보다 Nvidia가 설계한 NVLink가 최초로 반영된 시스템이다. 이 NVLink는 기존 PCIe 3.0 x16 대비 5배 넓은 대역폭을 자랑하며 CPU와 GPU 그리고 GPU와 GPU를 직접(Peer-to-Peer)연결한다. 이를 통하여 ML/DL에서 항상 하드웨어의 제약으로 생각되던 PCIe 버스의 I/O 병목현상을 획기적으로 해결할 수 있다.


– 이런 제품을 고객과 이야기를 해 보면, 실제로 IBM 왓슨으로 대표되는 클라우드 컴퓨팅 기반의 intelligence services와 비교를 많이 한다고 합니다. S822LC for HPC와 클라우드 기반의 intelligence services를 단적인 차이점을 말씀해 주신다면?

> 내가 고기를 사서 고기를 구워 먹느냐? 음식점에 가서 스테이크를 시켜 먹느냐? 와 정확히 일치한다고 할 수 있습니다. 호수산 와규든 국내산 한우든 내 기호와 예산에 맞추어 직접 고기를 고를 수 있고, 무엇보다 중요한 건 굽는 방법 등을 스스로 채득하여 지적자산으로 보유할 수 있다는 것이 있겠죠. 그게 아니고, 고급 레스토랑에 가서 사 먹으면 확실히 빠른 시간 내에 더 좋은 것을 먹을 수 있긴 한데, 돈도 많이 들고 자신에게 (경험과 지식이) 쌓이는 건 훨씬 더 적겠죠.

– 가까운 미래에, GPU 혹은 GPU와 같은 co-processor가 보편적인 컴퓨팅 시스템에 전반적으로 탑재될 가능성은 있을까요?

> 그럴 가능성은 없다고 봅니다. 보편적인 컴퓨팅 유형과 co-processor가 필요한 영역은 확연히 구분됩니다. ML/DL 혹은 유사한 분야에 참여하는 기업 ⋅ 연구소⋅ 개인은 지금보다 확실히 늘어나겠죠, 그에 따른 시장도 확대되는 건 예상할 수 있겠습니다.

– Power Systems의 로드맵을 보면, 차세대 POWER CPU, POWER9에서 OpenCAPI(CAPI 3.0)와 NVLink 2.0를 동시에 사용하는 것으로 보이는데요, 이 두가지가 하나의 버스인가요? 아니면 각자의 독립된 버스를 사용하는 것인가요?

> POWER9에 사용하는 OpenCAPI와 NVLink의 차세대 2.0 버전은 같은 버스를 씁니다. 25GB/s 링크입니다. 이는 PCIe와는 관계가 없고, PCIe도 4.0으로 소개될 것입니다.

IBM 서버 컴퓨팅 플랫폼의 차세대 CPU인 POWER9은 2017년 말에 시장에 소개될 예정이다. CAPI 3.0 즉, OpenCAPI라는 IBM의 버스 기술과 Nvidia의 NVLink 2.0을 동시에 사용할 수 있을 뿐만 아니라, PCIe Gen 4도 탑재될 것으로 알려져 있다. CPU와 I/O 모두 새로운 세대로 본격 진입하게 된다. Nvidia는 NVLink 2.0을 POWER9을 통해 처음 세상에 선보이게 되고, 이 때 현재 Tesla Pascal의 다음 세대인, Tesla Volta가 시장에 나올 것으로 알려지고 있다. 이에 대한 상세한 정보는 IBM developerWorks에 소개되고 있다. CAPI에 대한 정보는 Wikipedia에 잘 정리되어 있다.

X X X X X

---
이 글은  developer.ibm.com/kr 에 cross posting 됩니다.
관련 글: https://developer.ibm.com/kr/author/jhin/
같은 글: https://developer.ibm.com/kr/systems/gpu/2017/04/25/ask-a-professional-what-is-gpu-computing-and-machine-learning-around-us/

No comments:

Post a Comment