밑바닥부터 시작하는 딥러닝
밑바닥부터 시작하는 딥러닝 6 2026, 2026
★★★★☆
- p91 유사도 계산. 가중치만큼 v를 곱한 결과를 직관적으로 보여주는 것은 좋으나 소프트 딕셔너리라는 용어는 일반적으로 통용되는 용어가 아니다.
# 01_soft_dict.py
각 영화의 가중치:
영화 (8, 2, 3): 0.00%
영화 (3, 9, 1): 88.05%
영화 (1, 2, 9): 0.00%
영화 (5, 5, 5): 0.00%
영화 (7, 6, 2): 11.92%
영화 (2, 7, 6): 0.03%
영화 (9, 1, 1): 0.00%
새로운 영화 (3, 5, 1)의 예측 평점: 71.19점
- p136 Low Rank Approximation으로 어텐션 결과의 계산량을 줄인다고. 그런데 softmax 결과가 c x 128인데 애초에 12288로 결과가 계산되지 않는데…
- p200 Dr. GRPO에서 advantage계산에 std 제외
- p263 RoPE는 회전 행렬을 사용해 상대 위치 정보를 어텐션에 반영
RoPE는 (Q, K에만 적용) max_context_leng의 arange에서 각 attention head 크기 1/2 만큼 angles값을 먼저 만들어 낸다.
# angles
tensor([[ 0.0000, 0.0000, 0.0000, 0.0000],
[ 1.0000, 0.1000, 0.0100, 0.0010],
[ 2.0000, 0.2000, 0.0200, 0.0020],
...,
[1021.0000, 102.1000, 10.2100, 1.0210],
[1022.0000, 102.2000, 10.2200, 1.0220],
[1023.0000, 102.3000, 10.2300, 1.0230]])
cos = torch.cos(angles)
sin = torch.sin(angles)
>>> cos
tensor([[ 1.0000, 1.0000, 1.0000, 1.0000],
[ 0.5403, 0.9950, 0.9999, 1.0000],
[-0.4161, 0.9801, 0.9998, 1.0000],
...,
[-0.9998, 0.0018, -0.7072, 0.5225],
[-0.5550, -0.0981, -0.7001, 0.5217],
[ 0.4001, -0.1969, -0.6930, 0.5208]])
회전 적용:
x_rot_even = x_even * cos - x_odd * sin
x_rot_odd = x_even * sin + x_odd * cos
이후 원래 순서로 복원:
out = torch.stack([x_rot_even, x_rot_odd], dim=-1)
out = out.reshape(batch_size, num_head, context_len, key_dim)
- p288 성능 측정 GPT forward 속도 및 kvache 크기
현재 내 PC는 Samsung DDR5-5200 32GB 듀얼 채널로 83.2GB/s,
RTX 4080 SUPER, GDDR6X 16GB는 736GB/s
GPT 모델: 11.39M (CPU)
생성 토큰 수: 512
kvcache X: 17.47초
kvcache O: 2.52초 (6.9x, 2.36M)
GPT 모델: 11.39M (CPU)
생성 토큰 수: 1024
kvcache X: 91.18초
kvcache O: 5.83초 (15.6x, 4.72M)
GPT 모델: 11.39M (CPU)
생성 토큰 수: 2048
kvcache O: 13.78초 (N/A, 9.44M)
GPT 모델: 11.39M (CPU)
생성 토큰 수: 4096
kvcache O: 38.15초 (N/A, 18.87M)
CPU가 코어가 적으므로 kvcache 없을 때 시간이 훨신 더 오래 걸린다.
GPT 모델: 11.39M (GPU)
생성 토큰 수: 512
kvcache X: 2.49초
kvcache O: 2.08초 (1.2x, 2.36M)
GPT 모델: 11.39M (GPU)
생성 토큰 수: 1024
kvcache X: 4.33초
kvcache O: 3.56초 (1.2x, 4.72M)
GPT 모델: 11.39M (GPU)
생성 토큰 수: 2048
kvcache X: 12.85초
kvcache O: 6.98초 (1.8x, 9.44M)
GPT 모델: 11.39M (GPU)
생성 토큰 수: 4096
kvcache X: 611.35초
kvcache O: 14.49초 (42.2x, 18.87M)
GPT 모델: 11.39M (GPU)
생성 토큰 수: 8192
kvcache O: 30.53초 (N/A, 37.75M)
GPT 모델: 11.39M (GPU)
생성 토큰 수: 16384
kvcache O: 60.47초 (N/A, 75.50M)
GPU는 kvcache를 사용하면 50% Util도 제대로 채우지 못하고, CPU 코어 1개만 100% 사용한다. (kvcache X일때는 GPU-Util 100%)
- p358 Gradient Checkpoint: forward시 중간 출력을 적게 저장해 메모리를 절약. 저장하지 않은 값은 backprop시 다시 계산. 메모리를 아낄 수 있는 대신 같은 연산을 다시 수행하므로 학습 시간은 늘어난다.

