[data파트] 데이터 전처리 속도 개선

Junhyeok Shin
KLleon
Published in
4 min readJan 25, 2023

안녕하세요! 클레온의 MLOps팀의 data 파트입니다. 오늘은 데이터 전처리 속도 개선에 관한 이야기를 해볼까 합니다.

딥러닝에서 좋은 모델을 찾는 방법은 계속 시도하는 것입니다. 짧은 시간안에 많은 시도를 하려면 한 번 학습하는데에 짧은 시간이 들수록 좋습니다. 하지만 다음 사진자료와 같이 AI 프로젝트에서 데이터를 준비하는 과정에 상당한 시간이 소요됨을 알 수 있습니다.

최대한 빠르게 모델의 학습을 진행하는 방법은 data_loader를 잘 만든다거나 GPU-util을 최대로 하도록 코드를 만드는 등의 다양한 방법이 존재하겠지만, 데이터가 빨리 준비되는 것도 굉장히 중요한 부분이라고 할 수 있습니다. 따라서 저희 MLOps팀의 data 파트도 데이터를 준비하는 시간을 줄이기 위해 데이터 전처리 속도 개선을 위한 작업을 꾸준히 하고 있습니다.

속도개선을 위한 다양한 작업이 존재했지만, 데이터를 준비하는 과정에서 numpy 배열을 연산하는 작업이 있다면 이를 tensor로 변환하여 CPU가 아닌 GPU로 처리하도록 하는 것 만으로도 속도적인 측면에서 큰 개선 효과를 볼 수 있습니다. 이번 글에서는 numpy 연산을 tensor로 변환하면 왜 빨라지는지 CPU와 GPU의 특징과 함께 알아보겠습니다.

우선 numpy와 tensor에 대해 간단히 설명드리겠습니다.

numpy란?

NumPy는 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리할 수 있도록 지원하는 파이썬의 라이브러리입니다. openc cv의 image load도 numpy array로 됩니다.

tensor란?

tensor는 N(RANK)차원의 배열이라고 볼 수 있습니다. 일반적으로 원소 1개(0차원)를 스칼라, 1차원 배열을 벡터, 2차원 배열을 행렬, 3차원 이상의 배열을 다차원배열이라고 하고, 이 모두를 통틀어서 tensor라고 합니다.

또한 tensor는 딥러닝을 위한 데이터 array로 사용됩니다. pytorch, tensorflow등의 오픈소스 머신 러닝 라이브러리에서 작업을 GPU나 다른 하드웨어 가속기에서 실행하기 위해 numpy array를 tensor 자료형으로 변환합니다.

numpy연산 tensor로 하면 왜 빠를까?

numpy로 배열을 만들어 연산을 하면 CPU에서 처리하지만 이를 tensor로 변환하여 작업하면 GPU에서 사용할 수 있기 때문에 처리속도를 올릴 수 있습니다. 처리속도가 빨라지는 이유는 둘 중 하나가 더 성능이 좋아서가 아니고, CPU와 GPU의 작업처리방식의 차이 때문입니다.

우선 CPU는 프로그램의 연산을 실행, 처리하는 가장 핵심적인 컴퓨터의 제어장치로 명령어가 입력되는 순서대로 데이터를 처리하는 순차 처리방식에 특화된 구조를 가지고 있습니다. 따라서 CPU는 복잡한 연산을 순서대로 빠르게 집중하는데에 특화되어있습니다.

반면에 GPU는 그래픽 연산을 빠르게 처리하여 결과값을 모니터에 출력하는 연산 장치로 CPU보다 훨씬 많지만 성능이 낮은 core가 들어 있습니다. 따라서 반복적이고 비슷한 작업을 병렬적으로 대량 처리하는데 특화되어있습니다.

딥러닝 알고리즘과 마찬가지로 데이터 준비 과정에서도 이미지, 텍스트, 음성, 비디오 등의 데이터를 단순 사칙연산(행렬 곱셈 등) 하는 작업이 수행되는 경우가 있습니다. 이런 작업이 있는 경우 numpy 연산을 tensor로 바꿔 GPU에서 연산하면 훨씬 더 빠르게 결과물을 얻을 수 있습니다.

마무리

앞서 말했듯이 CPU와 GPU는 각각 강점이 다릅니다. 속도를 개선하기 위해서는 무조건 하나를 사용하는 것이 좋은 것이 아니고 코드의 어떤 부분에서 병목현상이 일어나는지 확인해서 CPU와 GPU를 강점에 맞는 적절한 작업에서 사용하는 것이 가장 중요합니다.

감사합니다.

--

--