wgpu 사양서 -차원 압축-
요약
이 글은 wgpu를 중심으로 GPU 컴퓨팅의 원리와 AI/CG 파이프라인 간의 유사성을 설명합니다. CG와 LLM 모두 데이터 처리 과정(파이프라인)을 거치며, 특히 GPU의 핵심 기능인 통합 셰이더 유닛(compute shader)이 이 과정을 담당함을 강조합니다. 과거 전용 회로였던 것들이 통합되면서 범용적인 컴퓨팅 능력이 향상되었으며, 이를 통해 AI 모델 구동에 GPU가 활용되는 방식과 그 기술적 구조를 깊이 있게 다룹니다.
핵심 포인트
- CG 파이프라인(renderPass 등)과 LLM의 데이터 처리 파이프라인은 근본적으로 유사한 컴퓨팅 원리를 공유합니다.
- GPU는 일반적인 프로그래밍보다는 물류 센터 조작에 가깝게 이해할 수 있으며, 핵심은 통합 셰이더 유닛(compute shader)입니다.
- Compute Shader를 사용하면 과거의 전용 회로 방식에서 벗어나 범용적이고 효율적인 병렬 처리가 가능해졌습니다.
- wgpu와 같은 환경에서는 `@group`, `@binding`, `:storage` 등의 개념을 사용하여 메모리 접근 및 데이터 그룹 관리를 수행합니다.
wgpu는 정말 대단하다!
이 앞에 AI의 미래가 있다
CG를 다루는 사람이라면 사실 LLM의 현실적인 파이프라인 (pipeline)과 GPU의 움직임은 동일하게 된다
반대로 CG를 다루지 않으면 GPU 설계를 AI에 사용하는 것은 너무 어렵다 (그리고 rust)
파이프라인 (pipeline)은 다음과 같이 대응한다
(중요한 부분 외에는 생략함)
CG용 파이프라인 renderPass->viewport->vertexBuffer(0,1,2)->indexBuffer->bindGroup(0,1,2)
LLM용 파이프라인 embedLayer->seq2seq->attention
GPU라는 것은 애초에 일반적인 프로그래밍이 아니라, 물류 센터의 조작이 가장 가깝다
Unified Shader Unit (통합 셰이더 유닛)
예전에는 fragment나 vertex로 전용 회로가 구성되어 있었지만, 지금은 통합되어 있다.
그것이 compute shader (컴퓨트 셰이더)
예전의 흔적 + 사용 편의성을 위해 @vertex 등의 명령은 남아 있다
이 @는 속성 (attribute)이라고 한다
blender, houdini를 만져본 적이 있는 사람이라면 알 것이다
교사(校舎)의 창고 같은 것, 멀다
거대하다, GPU의 9할은 이것
프로세서 근처에 있다
폭속, 단 KB 정도의 저장밖에 할 수 없다
최속, 1변수밖에 볼 수 없다
| 정의 | 타입 | 설명 |
|---|---|---|
| input | ||
| ... | ||
| 정의 | 타입 | 설명 |
| --- | --- | --- |
| input | ||
| ... | ||
| 정의 | 타입 | 설명 |
| --- | --- | --- |
| input | ||
| ... | ||
| compute shader에 대한 설명 |
- global_invocation_id: 클래스 전체에서의 일련번호
- num_workgroups: 전체 클래스 수
- workgroup_id: 몇 번째 그룹인지
- local_invocation_id: 클래스 내에서의 출석 번호
@group(0) @binding(1) var<storage, read_write> rnn_w: array<f32>;
@group(0): 0번 데이터 그룹을 선택
@binding(1): 1번 레이어에 있는 데이터 그룹
:storage (이른바 VRAM)에 read_write로 두면. 그 외에는 read만 가능한 것도 있어 이쪽이 더 빠르다
array: js 같은 것이라면 친숙할 것이다
그 외에는 꽤 rust스럽게 작성할 수 있다
여담 vertex shader
@vertex
fn vs(@builtin(vertex_index) in_v: u32) -> @builtin(position) vec4f {
let pos = positions[in_v];
...
HLSL보다 백 배는 더 간단하지 않은가?
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기