본문 바로가기

SASS_Probe

기본 연산 의미 명세 03 - Elementwise Multiply

1. 연산 개요

두 입력의 대응하는 원소를 곱하여 출력하는 연산이다.

각 출력은 같은 위치에 있는 두 입력에만 의존한다. 

다른 위치의 입력은 사용하지 않는다. 

마찬가지로 Elementwise Multiply 는 원소별 독립성을 가지며 GPU thread 단위로 병렬화하기 쉽다.

  • Scaler scaling
  • Channel-wise scale
  • Gating
  • Attention probability and value combine
  • Dropout maks adapt
  • LayerNorm and RMSNorms scale parameter
  • Gradient scaling
  • Loss weighting
  • Optimizer update
  • Polynomials calcul
  • Dot product and matrix multiplications multiple level
  • Quantization scale adapt

 

2. 기본 수학적 정의

동일한 shape 을 가진 두 입력 텐서를 생각

입력과 출력의 shape 은 일반적으로 동일

 

3. Scalar Multiply

입력 텐서의 모든 원소에 동일한 상수 a 를 곱하는 연산

Scalar Multiply 에서는 두 번째 텐서의 원소를 매번 global memory 에서 읽을 필요가 없다.

 

4. Broadcasting Multiply

두 입력의 shape 이 완전히 같지 않아도 broadcasting 을 통해 곱셈할 수 있다. 

여기서는 곱셈 자체뿐 아니라 다음 구조가 중요해진다

  • broadcast operand 의 반복 사용
  • broadcast index 계산
  • parameter 의 cache locality
  • memory layout
  • 같은 값을 사용하는 thread 범위

 

5. 입력과 출력 domain

입출력의 dtype 이 항상 같은 것은 아니다. 

 

6. 데이터 의존성

기본 Elementwise Multiply 는 다음과 같다

출력 원소 사이에는 의존성이 없다. 

따라서 임의의 순서로 계산하거나 동시에 실행할 수 있다.

 

7. Elementwise Multiply 와 Dot Product 의 구분

같은 곱셈 명령이 사용되더라도 elementwise multiply 와 dot porduct 는 의미가 다르다.

Dot Product

출력은 텐서 형태를 유지

Elementwise Multiply

곱셈 결과가 reduction 을 통해 하나의 값으로 합쳐진다

 

8. 의미 불변성

다른 실행 형태로 변경해도 다음 조건은 유지되어야 한다.

8.1 위치 대응 관계

다른 위치의 값을 곱하면 일반적으로 Elementwise Multiply 가 아니다

Braodcasting 이나 permutation 이 있다면 index mapping 을 별도로 명시해야 한다. 

 

8.2 두 입력에 대한 의존성

일반적인 출력은 두 입력 모두에 의존

다만 한 입력이 특별한 값이면 의존성이 단수화될 수 있다.

 

8.3 출력 cardinality

일반적인 Multiply 는 입력 위치 하나당 출력 위치 하나를 생성한다. 

원소 수를 축소하는 reduction 이나 확장하는 broadcast 와 구분된다.

 

8.4 Broadcasting domain

어떤 축에 paramter 가 적용되는지가 의미에 포함된다. 

축을 바꾸면 다른 연산이 된다.

 

9. 대수적 성질

9.1 교환법칙

실수와 일반적인 정수 곱셈에서는 성립

compiler 는 필요에 따라 operand 순서를 바꿀 수 있다. 

 

9.2 결합 법칙

여러 Multiply 를 tree 형태로 재배치할 수 있다. 

부동소수점의 ㅣ경우에는 정확한 결합법칙이 성립하지 않고 수치 오차를 동반 가능

 

9.3 항등원

곱셈의 항등원은 1, 

단순화 가능, 불필요한 Multiply 제거의 근거가 된다. 

 

9.4 흡수원

곱셈에서 0은 흡수원

0과의 곱셈을 상수 0 으로 바꿀 수 있을 것처럼 보이지만

부동소수점에서 예외가 존재, 

NaN, Inf 의 조건 

 

9.5 역원

0이 아닌 값 x 에 대해 곱셈의 역원은 1/x

부동 소수점에서는 다음 문제가 있다.

  • x = 0
  • overflow
  • underflow
  • reciprocal approximation
  • rounding
  • NaN, Inf

수학적으로는 같은 의미지만 실제 명령과 수치 결과는 달라질 수 있다.

 

9.6 분배법칙

수학적 자유돌르 제공하지만 실행 비용은 달라질 수 있다.

따라서 대수적으로 같은 표현 중 연산량과 memory traffic 이 적은 방향을 선택해야 한다.

 

10. Scale 연산의 의미

단순 곱셈뿐 아니라 값의 크기를 조절하는 scale 연산으로 해석할 수 있다. 

  • 크기 확대
  • 크기 축소
  • 유한 입력 0으로 변환
  • identity
  • 부호 반전과 크기 조절

Compiler 는 일반 Multiply 대신 부호 비트 변경이나 negate modifier 를 사용할 수 있다.

 

11. Sign 과 크기의 변화

실수 곱셈에서는 출력 부호가 두 입력 부호의 조합으로 결정된다. 

Multiply 는 값의 크기를 확대하거나 축소 가능

연속 Multiply 에서는 overflow, underflow 위험이 Add 보다 크게 나타날 수 있다.

 

12. 부동소수점 곱셈의 의미

  • 두 입력의 sign 결합
  •  exponent 덧셈
  • significand 곱셈
  • normalization 
  • 목표 precision 으로 반올림

실수 곱셈과 달리 결과를 정확히 표현할 수 없는 경우 반올림된다.

 

13. Overflow 와 Underflow

13.1 Overflow

두 값의 크기가 크면 곱셈 결과가 표현 가능한 범위를 넘을 수 있다. 

 

13.2 Underflow

두 값의 절댓값이 매우 작으면 결과가 normal 범위보다 작아질 수 있다. 

이 경우 수학적으로 0이 아닌 결과가 실제 실행에서는 0이 될 수 있다.

 

13.3 연산 순서의 영향

각 순서가 바뀜에 overflow, underflow 될 수 있음, 

 

14. 특수값 처리

  • NaN
  • Infinity
  • Infinity and zero
  • Signed Zero
  • Subnormal

 

15. 정수 곱셈

결과가 고정된 정수 범위를 벗어나면 다음 중 하나가 발생할 수 있다.

  • wraparound
  • saturation
  • wider accumulator
  • undefined behavior
  • exception

quantized 연산에서는 더 넓은 accumulator 를 사용한다. 

 

16. Boolean 및 Mask Multiply

0과 1 로 구성된 mask 를 곱하면 선택 연산처럼 사용할 수 있다. 

Dropout 의 기본 구조가 이와 관련된다.

하지만 특수값에서는 그 역할이 다를 수 있음

 

17. Gating 연산

Gating 은 한 입력이 다른 입력의 전달 크기를 조절하는 구조다

  • LSTM gate
  • GRU gate
  • GLU
  • attention probability
  • mixture weight

수학적으로는 Elementwise Multiply 지만 의미적으로는 다음 관계를 가진다

  • gate 값
    • value 전달량 제어

Gate 가 0이면 차단, 1이면 통과, 중간값ㅅ이면 일부 전달

 

18. Dropout Mask 적용

Dropout 의 Multiply 부분만 보면 Elementwise Multiply 지만 전체 연산은 난수 생성과 상태 갱신을 포함한다. 

순수한 Multiply 와 달리 다음 의미가 추가된다.

  • random state
  • seed
  • deterministic replay
  • mask observability
  • backward 에서 mask 재사용

 

19. 정규화 Scale

LayerNorm 와 RMSNorm 에서는 정규화된 값에 학습 가능한 scale 을 곱한다. 

 

20. Attention Probability 와 Value

Attentnion 의 weighted sum 은 단순 Elementwise Multiply 가 아니라 

  • Multiply + Reduction 

구조다

 

21. 추상 실행 모티프

Tensor-Tensor Elementwise Multiply 의 기본 실행 모티프는 다음과 같다

  • Index
  • Load X
  • Load Z
  • Multiply 
  • Store Y

구체적인 단계는

  • current threads output index cal
  • index boundary check
  • x_i address cal
  • z_i address cal
  • x_i load
  • z_i load
  • multiply
  • y_i address cal
  • result store

 

22. 비용 구조

산술 집약도가 매우 낮기 때문에 일반적으로 memory-bound 되기 쉽다.