AI 하드웨어·소프트웨어 스택
추론과 학습의 차이, 양자화, 연산 강도와 루프라인 모델, 시스톨릭 어레이, 연산자 융합, 타일링 등 AI 하드웨어와 소프트웨어를 객관식 문제로 학습합니다.
—내 정답률
0 / 50푼 문제 수
AI 하드웨어·소프트웨어 스택: 핵심 정리
신경망 연산의 대부분은 큰 행렬의 곱셈-누산입니다. 그래서 AI 하드웨어는 많은 곱셈-누산 유닛을 늘어놓고, 메모리 트래픽을 줄이기 위해 데이터를 최대한 재사용하도록 설계됩니다. 학습은 추론보다 훨씬 많은 연산과 메모리를 필요로 하며, 더 높은 수치 정밀도도 요구합니다.
성능은 연산 유닛의 수만으로 정해지지 않습니다. 데이터 1바이트당 연산량인 연산 강도(arithmetic intensity)와 루프라인 모델을 이용하면 워크로드가 연산 성능과 메모리 대역폭 중 어느 쪽에 제한되는지 알 수 있습니다. 이 주제는 AI 컴파일러와 추론 런타임이 양자화, 연산자 융합, 타일링으로 하드웨어 성능을 끌어내는 방법도 다룹니다.
AI 하드웨어·소프트웨어 스택 전체 문제 (50)
- 신경망의 '학습'과 '추론'의 차이로 올바른 것은 무엇인가?
- 학습에 필요한 메모리가 같은 모델의 추론보다 훨씬 커지는 이유로 해당하지 않는 것은 무엇인가?
- 파라미터 수 70억(7B)의 모델을 가중치, 기울기, Adam의 두 상태를 모두 FP32(4바이트)로 가지고 학습한다. 활성화를 제외하고 필요한 메모리에 가장 가까운 것은 무엇인가?
- 파라미터 수 70억(7B)의 모델 가중치를 FP16(2바이트)으로 가지면, 가중치 메모리는 대략 얼마인가?
- 앞 문제의 7B 모델을 FP16(약 14 GB)에서 4비트 정수(INT4)로 양자화하면, 가중치 메모리는 대략 얼마가 되는가?
- M×K 행렬과 K×N 행렬의 곱을 계산할 때의 부동소수점 연산 횟수(곱셈과 덧셈을 따로 센다)는 대략 얼마인가?
- N×N의 FP16(2바이트) 행렬끼리의 곱에서, 두 입력을 한 번씩 읽고 결과를 한 번 쓴다고 하자. 연산 강도(1바이트당 연산 수)는 대략 얼마인가?
- 피크 성능 100 TFLOPS, 메모리 대역폭 2 TB/s의 가속기에서 연산 강도가 10 FLOP/바이트인 처리를 실행한다. Roofline 모델로 어림한 달성 가능한 성능은 얼마인가?
- 입력이 하나뿐일 때(배치 크기 1), 완전 연결층의 계산(가중치 행렬과 벡터의 곱)이 메모리 율속이 되기 쉬운 이유로 올바른 것은 무엇인가?
- 추론에서 배치 크기(한꺼번에 처리하는 입력의 수)를 키우면 전체 처리 효율이 올라가기 쉬운 이유는 무엇인가?
- 추론에서 배치 크기를 지나치게 키웠을 때의 단점으로 올바른 것은 무엇인가?
- 대규모 언어 모델의 추론은 입력 문장을 한꺼번에 처리하는 단계(프리필)와 토큰을 하나씩 출력으로 만드는 단계(디코드)로 나뉜다. 각각의 성능을 주로 결정하는 것의 조합으로 올바른 것은 무엇인가(배치가 작은 경우)?
- 대규모 언어 모델의 추론에서 사용되는 KV 캐시의 역할로 올바른 것은 무엇인가?
- 대규모 언어 모델의 추론에서 긴 문장이나 큰 배치를 다룰 때 문제가 되기 쉬운 것은 무엇인가?
- FP16으로 약 14 GB의 가중치를 가진 모델을 메모리 대역폭 2 TB/s의 GPU에서 배치 크기 1로 디코드한다. 토큰 하나를 생성하는 데 걸리는 시간의 하한에 가장 가까운 것은 무엇인가?
- Transformer 셀프 어텐션의 계산량은 입력 시퀀스 길이 n에 대해 어떻게 늘어나는가?
- FlashAttention 등 고속 어텐션 구현의 주된 발상으로 올바른 것은 무엇인가?
- AI 계산에서 사용되는 '연산 융합(오퍼레이터 퓨전)'의 주된 목적은 무엇인가?
- 행렬 곱의 결과에 바이어스를 더하고 ReLU를 통과시키는 처리를 3개의 별개 커널에서 하나로 융합했다. 주로 줄어드는 것은 무엇인가?
- XLA, TVM, PyTorch의 컴파일 기능과 같은 AI 컴파일러가 수행하는 주된 처리로 올바른 것은 무엇인가?
- AI 프레임워크나 컴파일러에서 사용되는 '계산 그래프'의 설명으로 올바른 것은 무엇인가?
- ONNX의 설명으로 올바른 것은 무엇인가?
- TensorRT나 ONNX Runtime 같은 추론 런타임이 학습용 프레임워크로 그대로 추론하는 것보다 빠를 수 있는 주된 이유는 무엇인가?
- ReLU나 레이어 정규화와 같은 요소별 연산이 AI 계산 중에서 연산 횟수에 비해 시간이 걸리기 쉬운 이유로 올바른 것은 무엇인가?
- 합성곱 신경망에서 합성곱 계산을 im2col 등의 방법으로 행렬 곱으로 변환하여 계산하는 경우가 있는 이유로 올바른 것은 무엇인가?
- 학습 후 양자화(PTQ)와 양자화 인지 학습(QAT)의 차이로 올바른 것은 무엇인가?
- 활성화를 INT8로 양자화하는 학습 후 양자화에서 수행하는 '캘리브레이션'의 목적으로 올바른 것은 무엇인가?
- 대규모 언어 모델의 양자화에서 극히 일부 채널에 큰 이상치가 있으면 정확도가 떨어지기 쉽다. 대책으로 일반적인 것은 무엇인가?
- 대규모 언어 모델의 추론에서 활성화는 FP16 그대로 두고 가중치만 4비트로 하는(W4A16) 양자화가 디코드를 특히 빠르게 하는 이유로 올바른 것은 무엇인가?
- 신경망의 프루닝(가지치기)에 대해 올바른 것은 무엇인가?
- GPU의 행렬 연산기가 지원하는 '2:4 구조적 희소성(스파스)'의 설명으로 올바른 것은 무엇인가?
- 지식 증류(날리지 디스틸레이션)의 설명으로 올바른 것은 무엇인가?
- 여러 GPU로 학습하는 데이터 병렬의 설명으로 올바른 것은 무엇인가?
- GPU 1장의 메모리에 들어가지 않는 큰 층의 행렬 곱을 여러 GPU로 나누어 계산하는 텐서 병렬의 설명으로 올바른 것은 무엇인가?
- 모델의 층을 순서대로 여러 GPU에 나누어 담당시키는 파이프라인 병렬에서, 배치를 작은 마이크로배치로 나누어 흘려 보내는 이유로 올바른 것은 무엇인가?
- 분산 학습에서 사용되는 올리듀스(All-Reduce) 통신의 역할로 올바른 것은 무엇인가?
- 학습에서 사용되는 기울기 체크포인팅(활성화 재계산)의 설명으로 올바른 것은 무엇인가?
- AI용 가속기에서 사용되는 시스톨릭 어레이가 행렬 곱을 효율적으로 계산할 수 있는 주된 이유는 무엇인가?
- AI용 가속기가 칩 위에 큰 SRAM(수십~수백 MB)을 탑재하는 경우가 있는 주된 이유는 무엇인가?
- AI 가속기의 데이터플로 방식 중 하나인 '웨이트 스테이셔너리(가중치 고정)'의 설명으로 올바른 것은 무엇인가?
- AI 추론을 클라우드 서버가 아니라 스마트폰 같은 단말 안(엣지)에서 수행할 때의 이점으로 해당하지 않는 것은 무엇인가?
- 스마트폰 SoC에 탑재되는 NPU가 AI 추론에서 CPU보다 전력 효율이 높은 주된 이유는 무엇인가?
- AI 가속기의 성능으로 제시되는 '○○ TOPS'라는 값에 대해 주의할 점으로 올바른 것은 무엇인가?
- 대규모 학습의 효율을 나타내는 지표인 MFU(Model FLOPs Utilization)의 설명으로 올바른 것은 무엇인가?
- Transformer 모델의 학습에 필요한 연산 수의 기준으로, 파라미터 수를 N, 학습에 사용하는 토큰 수를 D라 할 때 자주 쓰이는 근사는 무엇인가?
- 파라미터 수 N의 대규모 언어 모델에서 토큰 1개를 생성하는 추론에 필요한 연산 수의 기준은 무엇인가(어텐션 부분 제외)?
- 소프트맥스 함수 exp(xi)/Σexp(xj)를 계산할 때 각 xi에서 최댓값을 뺀 뒤 계산하는 경우가 많은 이유로 올바른 것은 무엇인가?
- 대규모 언어 모델의 추론을 빠르게 하는 '투기적 디코딩'의 발상으로 올바른 것은 무엇인가?
- 추천 시스템 모델 등에서 사용되는 큰 임베딩 테이블의 조회가 AI 하드웨어에서 다루기 어려운 이유로 올바른 것은 무엇인가?
- AI 소프트웨어 스택을 사용자에 가까운 위쪽 층에서 하드웨어에 가까운 아래쪽 층으로 나열한 것으로 올바른 것은 무엇인가?