딥러닝의 발전과 GPU의 발전을 뗄 수 없는 관계입니다. 과거에도 그랬지만 LLM으로 대표되는 현재의 AI에서 이 관계는 더욱 중요해지고 있습니다.전에 GPU가 왜 AI에 최적화되어있는지 LLM: GPU 의 마법 이라는 글에서 다룬 적이 있습니다. 오늘은 여기에서 한 단계 더 깊이 들어가서 Nvidia GPU를 중심으로 이야기해보려고 합니다.오늘은 GPU의 어떤 부분들이 딥러닝, 특히 LLM 구동을 빠르게 만드는지 이야기해보겠습니다.1. 범용 코어와 특수 목적 코어모든 계산은 GPU의 코어에서 일어납니다. 메모리에서 데이터를 코어로 옮기고, 코어에서 계산을 한 후, 결과를 다시 메모리로 저장하는 방식입니다.현대 GPU는 딥러닝 연산의 특성에 맞춰 코어를 분화시켰습니다.범용 병렬 계산기, Cuda Core..
딥러닝 모델을 훈련시켜 두고 nvidia-smi 명령을 치면 의아할 때가 있습니다. GPU 메모리 사용량 때문입니다.내가 만든 모델은 기껏해야 몇백 메가바이트 수준의 파라미터를 가지고 있는데, 훈련을 시작하자마자 GPU 메모리는 몇 기가바이트(GB)를 훌쩍 넘어갑니다.결론부터 말씀드리면, 지극히 정상입니다. 오히려 "내 모델 가중치 크기랑 메모리 사용량이 비슷한데요?"라는 상황이라면, 그건 훈련이 제대로 되지 않고 있다는 뜻입니다.왜 이런 일이 벌어질까요? 훈련은 Inference와 달리 단순히 가중치를 들고 계산하는 일이 아니기 때문입니다. 훈련의 본질은 미분을 해서 모델을 학습시키는 것이고, 이를 위해서는 수많은 과거의 흔적들을 메모리에 남겨둬야 합니다.오늘은 훈련 시 GPU 메모리를 잡아먹는 주요 ..
LLM이 발전하면서 그 어느 때보다 생성형 AI를 사용하는 서비스를 만들기 쉬워졌습니다. LLM을 사용하는 제품을 만들다 보면 모두가 겪는 문제가 있습니다.바로 평가입니다.밤새 프롬프트를 갈고 다듬고, 모델도 훈련해서 새 모델을 만들었습니다. 그리고 테스트 삼아 질문을 던져봅니다. LLM은 자신 있게 답변을 제공합니다. 화면에 뜬 답변을 보며 멍하니 생각에 잠깁니다."음... 꽤 괜찮은데? 아니, 어제 버전보다 진짜 나아진 건가? 비슷한 거 같기도 하고, 아닌 거 같기도 하고."이런 사례가 여러 개 쌓이면 이른바 '멘붕'에 빠지게 됩니다.분류 모델이나 주가 예측 같은 기계학습 모델은 정답지(Label)가 명확해서 정확도를 잴 수 있습니다. 하지만 "오늘 기분 어때?"라는 질문에 대한 위로의 말이나, 10..
오늘의 주제는 PyTorch의 torch.compile()입니다.PyTorch 2.0부터 도입되어 PyTorch 모델의 속도를 빠르게 해준 기능입니다. 이미 많은 분이 사용하고 계실 겁니다.오늘은 torch.compile()이 무슨 일을 하길래 이런 놀라운 일이 가능한지 살펴보려고 합니다.현재를 잘 알려면 과거를 먼저 알아야겠죠? 왜 torch.compile()이 등장했는지부터 알아보겠습니다.이 전에 작성한 Pytorch 코드가 GPU에서 실행되기까지를 먼저 읽어보시면 이 글을 이해하는 데 도움이 될 것 같습니다.1. The Bottleneck: 왜 컴파일러가 필요한가?본격적인 최적화 이야기를 하기 전에, 우리가 지금 쓰고 있는 PyTorch의 기본 모드인 Eager Mode(즉시 실행)가 무엇인지, 그..
PyTorch 코드를 실행할 때 우리는 습관처럼 외웁니다..to('cuda')순간 잠잠하던 컴퓨터 본체에서는 웅장한 팬 소리가 들려옵니다. Cloud GPU를 주로 사용하신다면 이 소리를 들을 일은 많지 않겠군요.그런데 이런 궁금증, 가져본 적 없으신가요?"도대체 느리다는 파이썬이 어떻게 그 엄청난 속도의 GPU를 제어하는 걸까?"오늘은 우리가 작성한 고작 몇 줄의 파이썬 코드가 어떻게 GPU를 제어하고 복잡한 계산을 수행하는지 알아보려고 합니다.1. 파이썬: 저는 운전자이지 엔진은 아니에요가장 중요한 이야기 먼저 하고 시작하겠습니다.우리가 PyTorch로 작성하는 파이썬 코드는 GPU 위에서 실행되지 않습니다.정확히 말하면 파이썬은 명령만 내릴 뿐, 실제로 땀 흘려 뛰는 건 C++과 CUDA입니다. 파..
Transformer 구조를 처음 접할 때 하기 쉬운 오해가 하나 있습니다."Self-Attention은 Token 사이의 유사도를 계산하는 것이다."직관적으로는 그럴듯합니다. Self-Attention 메커니즘을 보면, 벡터끼리 내적을 하고 그 점수가 높으면(비슷하면) 더 많은 가중치를 두기 때문입니다.마치 추천 시스템에서 "이 영화를 본 사람이 좋아할 만한 다른 영화"를 찾는 것과 비슷하기도 합니다. 그래서 많은 경우 "아, 비슷한 단어끼리 묶어주는 거구나!" 하고 넘어가기도 합니다. 하지만 여기서 멈추면 안 됩니다. 오늘은 여기에서 한 단계 더 들어가 보겠습니다.우리의 질문은 'Attention이 단순히 토큰 간 유사도 계산이라면, 왜 굳이 복잡하게 Q, K, V라는 세 개의 다른 벡터를 만들어야 ..
LLM은 큽니다. 정말 큽니다. 그래서 많은 LLM 최적화 기술들이 LLM이 메모리를 사용하는 방식에 집중합니다.오늘은 그중 이미 거의 표준이 된 PagedAttention에 대해서 이야기해보려고 합니다.PagedAttention은 핫한 서빙 프레임워크인 vLLM의 심장부에서 뛰고 있는 기술이기도 합니다.먼저 PagedAttention이 풀려는 문제가 무엇인지부터 이야기해보겠습니다.1. 범인은 모델 크기가 아니고 다른 녀석이다보통 LLM이 메모리를 많이 먹는다고 하면, 모델의 파라미터(Weight) 크기 때문이라고 생각하기 쉽습니다.사실입니다. 70B 파라미터 모델은 그 자체로 140GB 가량의 VRAM을 차지하죠. 하지만 이건 상수입니다. 이미 정해진 크기라는 뜻이죠. 70B 모델을 쓰기로 결정한 순간..
"이거 그냥 엄청나게 좋은 자동완성 기능 아닌가요?"LLM을 처음 접하는 개발자나 데이터 과학자들이 흔히 던지는 농담입니다. 그리고 냉정하게 말하면, 이 말은 기술적으로 완벽한 사실입니다.LLM의 본질을 가장 간단하게 설명하면, 앞의 문맥을 보고 뒤에 올 확률이 가장 높은 단어(Token)를 예측하는 확률 계산기에 불과하니까요.그런데 LLM을 단순히 단어 예측기라고 치부하기에는 좀 이상합니다.단순히 '사과는' 뒤에 '맛있다'가 올 확률을 계산하는 기계가, 어떻게 복잡한 파이썬 코드를 짜고, 헤겔의 철학을 논하며, 심지어 농담을 던져 사람을 웃게 만드는 걸까요?우리는 단순히 데이터의 통계를 흉내 내는 무언가를 만든 줄 알았는데, 어느 순간 이 무언가가 복잡한 수학 문제를 풀고 추론을 하기 시작했습니다.단순..
- Total
- Today
- Yesterday
- tip
- ChatGPT
- keras
- 자연어처리
- pytorch
- 파이썬
- NLP
- GPU
- generator
- Large Language Model
- sys.path
- Linux
- MachineLearning
- speculativedecoding
- word vector
- word embedding
- docker
- Python
- LLM
- GPT
- fasttext
- Foundation Model
- Ai
- transformer
- Import
- token
- iterator
- Deep Learning
- DEEPLEARNING
- tensorflow
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |