단일 GPU로 120B 모델 학습하는 법 - MegaTrain
·
개발지식/AI
들어가며100B급 모델을 학습한다고 생각해보겠습니다. 보통은 GPU 수십 장을 묶은 분산 학습을 떠올립니다. 가중치와 옵티마이저 상태만으로 GPU 한 장의 메모리를 크게 초과하기 때문입니다. 그런데 2026년에 공개된 MegaTrain은 H200 1장과 host RAM 1.5TB로 최대 120B 모델 학습을 주장합니다. 이 글에서는 학습에 필요한 메모리가 어떻게 구성되는지 계산해보고 MegaTrain이 단일 GPU로 이를 감당하는 방법을 알아보겠습니다. 1. 학습 메모리의 회계학습에는 추론보다 훨씬 많은 메모리가 필요합니다. mixed-precision 학습 기준으로 파라미터 1개당 유지해야 하는 상태는 다음과 같습니다.항목 정밀도 크기weightfp162 Bgradientfp162 Bmaster wei..
LLM 서빙 prefill·decode 분리 (2) - 오케스트레이션 레이어
·
개발지식/AI
들어가며1편에서는 prefill과 decode를 왜 분리해야 하는지 살펴봤습니다. 둘을 분리하면 새 prefill 요청 때문에 decode가 멈추는 일을 줄일 수 있습니다. 대신 한 가지 일이 새로 필요합니다. prefill 워커가 만든 KV 캐시를 decode 워커로 옮겨야 합니다.분리된 워커는 따로 실행하는 것만으로 충분하지 않습니다. 요청을 어느 워커로 보낼지 정해야 합니다. prefill 워커와 decode 워커의 수를 따로 조절해야 합니다. KV 캐시도 워커 사이로 옮겨야 합니다. 이 일을 맡는 층을 오케스트레이션 레이어라고 합니다.이 글에서는 대표적인 오케스트레이션 레이어 두 가지를 비교합니다. 하나는 NVIDIA가 만든 Dynamo입니다. 다른 하나는 Kubernetes 기반의 llm-d입니..
LLM 서빙 prefill·decode 분리 (1) - 분리의 이유
·
개발지식/AI
들어가며LLM 추론 서버는 두 가지 일을 합니다. 하나는 사용자가 보낸 프롬프트를 읽는 일입니다. 다른 하나는 답변 토큰을 하나씩 만들어 내보내는 일입니다. 앞의 일을 prefill이라고 부릅니다. 뒤의 일을 decode라고 부릅니다.오랫동안 이 두 일은 같은 GPU에서 함께 처리됐습니다. 그런데 2024년에 DistServe라는 연구가 다른 방식을 제안했습니다. prefill과 decode를 서로 다른 GPU로 나누자는 것입니다. 이것을 disaggregation이라고 합니다.처음에는 이 방식이 크게 주목받지 못했습니다. 분리하려면 서빙 구조를 많이 바꿔야 했기 때문입니다. 하지만 18개월이 지난 지금은 상황이 달라졌습니다. vLLM과 NVIDIA Dynamo를 비롯한 주요 서빙 프레임워크가 모두 이 ..
pytest 핵심정리
·
개발지식
들어가며 테스트 코드를 작성하다 보면 반복을 자주 만납니다. pytest는 이 두 반복을 줄여 주는 도구를 갖고 있습니다. 이 글에서는 parametrize와 fixture를 중심으로 pytest의 핵심 기능을 하나씩 살펴보겠습니다. 1. parametrize 덧셈 함수를 테스트한다고 해보겠습니다. 입력 조합이 여러 개라면 보통 테스트 함수를 여러 개 만들게 됩니다. 같은 코드를 입력만 바꿔 반복하는 셈입니다.@pytest.mark.parametrize는 이 반복을 없애 줍니다. 입력과 기대값의 목록을 한 번에 넘기면 됩니다. 그러면 pytest가 목록의 각 줄을 별도 테스트로 실행합니다.import pytest@pytest.mark.parametrize("a, b, expected", [(1, 2, 3..
LLM 서빙의 메모리 문제와 PagedAttention (2) - PagedAttention과 vLLM
·
개발지식/AI
들어가며이전 포스트에서 기존 LLM 서빙의 메모리 낭비 문제를 확인했습니다. 미리 점유, 내부/외부 단편화, 공유 불가라는 네 가지 문제가 GPU 활용률을 낮추고 동시 처리 요청 수를 제한합니다.vLLM은 이 문제를 OS의 가상 메모리(Virtual Memory) 개념을 빌려와서 해결했습니다. OS가 물리 메모리를 고정 크기 페이지로 나눠 관리하듯, KV 캐시도 고정 크기 블록으로 나눠 비연속 공간에 저장하는 방법이 바로 PagedAttention입니다. 1. PagedAttention의 핵심 아이디어기존 방식은 요청마다 연속된 메모리 공간에 KV 캐시를 저장했습니다. PagedAttention은 이 제약을 없앱니다.KV 캐시를 고정 크기 블록(block) 단위로 분할각 블록은 연속할 필요 없이 GPU ..