본문 바로가기
목차
ML

[PyTorch] tensor의 vectorized operation

by ds31x 2025. 12. 4.
728x90
반응형

PyTorch에서 제공하는 Tensor Operators

PyTorch에서 제공하는 텐서 연산(operator)은

  • homogeneous하고 contiguous한 텐서에 대해
  • 모든 element에 동일한 연산을 적용하도록 설계된
  • vectorized operation의 형태를 취함.
  • 다른 이름으로 elementwise operation이라고도 불림.

이는 파이썬의 반복문 기반 연산에 비해

  • 압도적으로 빠른 속도를 제공하며,
  • 단일 연산자 호출만으로 전체 텐서에 대한 연산을 수행할 수 있게 함.

PyTorch의 elementwise 연산은

  • NumPy의 ufunc과 기능적으로 유사한 역할(아래 3가지 참고)을 수행하지만,
    1. broadcasting 처리
    2. elementwise kernel 처리
    3. dtype promotion 처리
  • 보다 광범위한 backend 를 통해 실행됨.

여기서, 커널(kernel)은 OS등의 kernel이 아님.
텐서나 배열의 요소에 대해 연산을 수행하는
C/C++ 혹은 CUDA로 구현된 실제 계산 함수(executable routine) 를 의미.

GPU·CPU에서 병렬 처리되는 "작은 단위의 계산 루틴"이라는 의미로 kernel이라는 용어를 사용함
(High-Performance Computing분야에서 많이 사용됨)

 

즉, CPU뿐 아니라 GPU, XLA 장치 등 다양한 디바이스에서
동일한 연산이 자동으로 벡터화된 방식으로 처리됨.

실제로 PyTorch의 이러한 elementwise 연산들은

  • homogeneous하고 contiguous한 데이터 레이아웃에 최적화된
  • 고성능 바이너리 커널 구현물에 대한 바인딩(binding)이라고 볼 수 있음.
  • 참고로, non-contiguous 텐서도 내부에서 contiguous copy를 만들거나 stride-aware kernel을 사용하는 방식으로 처리는 가능함 (약간의 성능감소는 있을 수 있음)

Python에서 간단히 사용할 수 있도록 인터페이스가 제공되지만,

  • 내부적으로는 C/C++로 작성된 ATen 및 CUDA 커널이 실행되며,
  • 이를 통해 대규모 텐서 연산을 매우 빠르게 처리하게 됨.

주요 예제

주요 예제는 다음의 글을 참고할 것:

2024.03.19 - [Python] - [Tensor] vectorized op. (or universal func)

 

[Tensor] vectorized op. (or universal func)

Numpy에서 제공하는 ufunc. (Universal Functions)은 homogeneous and contiguous tensor 에서 모든 elements에 같은 연산을 적용하여기존의 반복 loop에 기반한 연산에 비해 압도적인 속도를 보이면서 간편한 연산자

ds31x.tistory.com

 

728x90