티스토리 뷰

반응형

딥러닝 학습은 축적된 데이터를 바탕으로 신경망 내의 정보 전달 관련 Weight Update하여 딥러닝 모델을 만드는 과정이며, 추론은 만들어진 모델을 활용해 주어진 Input 대한 해석 결과를 내놓는 단계입니다. 단계의 선후관계를 따져본다면 딥러닝 모델을 학습한 추론을 하게 되죠. 자세히 살펴보면 학습은 Forward propagation Backward propagation 무수히 많이 반복하며 추론은 Forward propagation 수행한 종료됩니다.

 

딥러닝 추론과 학습 (source: Habana Labs)

딥러닝 추론이란?

그럼 간단한 추론과 Forward propagation 살펴보겠습니다. 글에서는 영상인식에 주로 활용되는 CNN 알고리즘을 예로 들어보죠. 영상인식의 입력(Input) 사진입니다. 사진의 딥러닝 모델 추론 결과는 카테고리의 확률로 나타나죠. 보통 영상인식 모델은 1000여개의 결과 카테고리가 있다고 하는데 예를 들어 , 고양이, 원숭이, 하마 등의 카테고리가 있을 있겠죠. 영상인식의 결과는 입력값으로 넣은 사진이 카테고리에 해당될 확률이 얼마인지로 나타납니다. 딥러닝 모델은 가장 확률이 높은 카테고리를 영상인식의 결과로 선정하여 사용자에게 답을 내놓습니다. 처음에 추론은 Forward propagation 번으로 종료된다고 했는데 과정을 거치는 것이 추론에 해당합니다.

 

딥러닝 학습이란?

그렇다면 학습은 무엇을 의미할까요? 학습을 위한 목표가 있어야 할텐데 이를 설명하기 위해서는 Loss function이라는 용어가 필요합니다. Loss 직관적으로 설명하자면 이상적인 결과와 실제 결과와의 차이를 말합니다. 만약 고양이 사진을 인식했다면 위에서 말한 Forward propagation 수행한 이상적인 결과는 고양이 카테고리 결과(확률) “1”이고 나머지 카테고리 결과(확률) 모두 0 상태지요. 하지만 학습이 되지 않은 모델은 이상적인 결과와 달리 고양이 카테고리 결과가 1보다 작고 나머지 카테고리 결과는 0보다 것입니다. 카테고리의 이상과 실제 사이의 차이를 더하면 Loss function 값이 되지요. 딥러닝 모델의 학습이란 Loss function 값을 줄여가는 과정입니다.

 

그렇다면 어떻게 Loss function 값을 줄일까요? 여기에는 “Descent gradient” 방식이 설명을 위해 등장합니다. Descent gradient 단어 그대로 해석하자면 가장 급격하게 감소하는 기울기라고 있습니다. 딥러닝 모델의 중간을 보면 단계(layer) 단계에서 넘어오는 input값에 대한 weight 값의 함수로 정의되어 있습니다. 무엇에 대한 기울기인가가 중요한데, 앞에서 말한 Loss function 대한 기울기이지요. 따라서 Descent gradient 방향으로 움직인다면 Loss function 부정적인(-방향으로) 가파르게 증가하겠죠. 이러한 논리에 의해 Gradient descent 반대 방향으로 Weight 값을 Update합니다. 이렇게 Weight update하는 과정을 Backward propagation이라고 합니다. 이러한 Forward propagation 이를 바탕으로 Loss function 개선하는 Backward propagation 과정을 무수히 반복하면 Loss function 감소하여 우리가 원하는 이상적인 결과에 가까워지죠.

 

딥러닝의 Back propagation (source: https://sebastianraschka.com)

딥러닝 학습과 추론 하드웨어에 요구되는 성능

딥러닝 학습을 수행하는 하드웨어에 요구되는 성능은 Throughput입니다. Throughput 단위 시간당 처리하는 연산량을 의미합니다. 딥러닝 학습은 얼마나 많은 데이터를 바탕으로 수행되었냐에 따라 모델의 정확도가 결정되기 때문에 상당히 많은 데이터를 활용합니다. 딥러닝 학습은 Forward Backward propagation 수없이 많이 반복하기 때문에 대량의 데이터를 번에 많이 처리할 있는 Throughput 요구되지요.

 

학습과 달리 추론용 하드웨어에 요구되는 성능은 Latency입니다. Latency 딥러닝 추론 요구의 도착에서부터 수행완료까지 걸리는 시간입니다. 영상인식과 같은 딥러닝 처리도 사용자 입장에서는 서비스입니다. 당연히 일정 시간 내에 서비스가 이뤄져야겠죠. 구글, 엔비디아 같은 클라우드 업체들은 서비스 제공을 정량적으로 관리하기 위해 QoS(quality of service) 기준으로 둡니다. 서비스 처리 속도에는 분포가 있을텐데 전체 99% 늦게 처리되는 서비스라 할지라도 특정 시간(ms) 넘으면 안된다는 식의 규정입니다.   

 

요구되는 특성에 적합한 학습/추론용 하드웨어의 구성

딥러닝 학습용 하드웨어

딥러닝 학습용 하드웨어는 높은 Throughput 달성하도록 연산량이 가속기(GPU, ASIC) 이를 뒷받침하는 고성능 메모리(HBM)으로 구성됩니다. 딥러닝 가속기가 1초당 연산할 있는 양을 주로 TFLOPS라고 하는데 엔비디아 라인업을 살펴보면 학습용 모델인 V100(14TFlops) 추론용 모델인 T4(8.1TFlops) 비해 TFLOPS 높은 것을 확인할 있죠 (single precision floating 기준). 또한 학습용 연산기는 16bit 이상 부동 소수점을 주로 지원합니다. 부동 소수점 표현에는 Double precision floating, Single precision floating 있는데 하나의 수를 bit으로 표현하느냐에 따라 달라집니다. 당연히 많은 bit 사용하면 정확한 연산이 가능하지만 그만큼 많은 메모리가 필요하고 연산 부담도 높아지죠. 딥러닝 초창기에는 학습 정확도를 위해서 32, 64bit 사용했었으나 현재는 구글이 제안한 16bit 방식의 bfloat 많이 채택해 쓰고 있습니다. 메모리 관점에서는 이러한 대량 연산을 지원하기 위해 대역폭이 가장 메모리 인터페이스인 HBM 활용됩니다.

 

학습용 하드웨어의 경우 가속기간 고대역/고속 통신도 강조됩니다. 학습의 경우 처리해야할 데이터가 많고 이를 반복해서 많이 수행해야 하기 때문에 여러 가속기에 분배하여 처리합니다. 일을 분배하는 방법은 Data-level parallel 방식과 Model-level parallel 방식 가지가 있죠. Data-level parallel 학습해야 데이터를 연산기에 나누는 방식입니다. 예를 들어 1000개의 사진을 학습해야 한다면 100개씩 10개의 데이터에 나누어 학습한 연산 결과를 취합하는 방식이지요. Model-level parallelism 딥러닝 모델을 여러 부분으로 나누어 처리하는 방법입니다. 50개의 Layer 있는 딥러닝 모델을 가정하면 5개의 Layer 나누어 10개의 가속기가 처리하는 방법입니다. 가속기가 처리한 결과를 다음 Layer 있는 가속기로 넘겨주는 방식이지요. 어떤 방식을 사용하든 가속기간의 연산 결과 공유를 위한 연결이 필요하게 되고 이로 인해, nVIDIA에서는 NVLink 고대역 연결 시스템을 도입해 학습에서의 통신 문제를 해결하고자 합니다.

 

Data parallelism과 Model parallelism (source: Habana Labs)

 딥러닝 추론용 하드웨어

추론용 하드웨어는 Latency 단축을 위해 학습용 보다는 작은 단위의 가속기를 활용합니다. 서버 등에서는 동일한 추론 요구를 모아 번에 처리하는 Batch 방식을 사용합니다. Batch 방식을 사용하면 연산 효율성이 높아지는 장점이 있죠. 예를 들어 10개의 영상인식 처리를 Batch 처리한다면, 메모리에서 딥러닝 모델을 10번이 아닌 1번만 불러와도 되며 동일 연산도 10회에서 1회로 감소하죠. 물론 처리해야할 입력값이 증가하기 때문에 단위 연산량이 증가하긴 하지만 전체적인 효율성 증가와 비교하면 부담은 미미합니다. 하지만 Batch 크기가 커지면 Batch 모으는데 시간이 오래 걸리기 때문에 처음 도착한 서비스 요청의 시간이 앞에서 말한 기준인 QoS 달성하지 못할 위험이 있습니다. 따라서 추론에서는 무작정 Batch 늘릴 없으며 이로 인해 학습보다 Batch size 작고 가속기도 이에 맞춰 Size 작아지죠. 또한 추론에서는 8/16bit 고정 소수점을 활용합니다. 처음에는 학습과 동일하게 부동 소수점을 활용했지만 Back propagation 없는 추론의 경우 고정 소수점을 활용해도 추론 결과(정확성) 차이가 없다는 연구 결과들이 나오며 8/16bit 고정 소수점 사용이 일반화 됐죠. 일부 스타트업들의 경우 2~4bit 활용이 가능하다고도 하는데 실제로 가능한지는 지켜봐야겠습니다.

 

추론용 하드웨어는 GDDR이나 DDR 사용합니다. 추론용 하드웨어는 동일 시간에 처리할 있는 연산량이 학습용에 비해 작기 때문에 메모리로부터 공급받아야 데이터의 양도 적습니다. 따라서 HBM보다 대역폭(Bandwidth) 작은 GDDR이나 DDR 사용하죠. HBM 사용해도 상관없지만 필요하지도 않게 비싼 메모리 인터페이스를 활용하는 것은 비용 부담이 테니까요. 

 

처음 딥러닝의 학습과 추론을 접했을 때는 대부분 용어부터 이해가 가지 않는 면이 많습니다. 하지만 앞에서 살펴본 바와 같이 딥러닝 모델을 만들고 활용하는 단계라는 차이가 있으며 실제 프로세스 특성이 다르죠. 당연히 연산 특성이 다르기 때문에 이에 적합한 가속기 하드웨어도 단계에 적합하게 개발되어 왔습니다. 글은 주로 엔비디아나 구글의 GPU NPU 기준으로 작성되었는데 (딥러닝 ASIC 가속기(Accelerator)란?)글에서도 확인할 있듯이 다른 형태의 딥러닝 가속기를 개발하려는 스타트업들의 움직임이 있습니다. 기술은 계속 진화하기 때문에 앞으로의 딥러닝 학습/추론은 어떻게 발전하며 이를 지원할 하드웨어도 어떻게 변화할지 확인해 봐야겠습니다.

반응형
댓글
글 보관함