<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Llm-D - 태그 - lee's blog</title><link>https://ken-0913.github.io/myblog/tags/llm-d/</link><description>Llm-D - 태그 - lee's blog</description><generator>Hugo -- gohugo.io</generator><language>ko-kr</language><managingEditor>hyeonjae0913@gmail.com (ken-0913)</managingEditor><webMaster>hyeonjae0913@gmail.com (ken-0913)</webMaster><lastBuildDate>Fri, 18 Sep 2026 00:40:00 +0900</lastBuildDate><atom:link href="https://ken-0913.github.io/myblog/tags/llm-d/" rel="self" type="application/rss+xml"/><item><title>LLM 스터디 7주차 - llm-d P/D Disaggregation — prefill과 decode를 떼어놓는 이유</title><link>https://ken-0913.github.io/myblog/posts/llm/llm-d-pd-disaggregation/</link><pubDate>Fri, 18 Sep 2026 00:40:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/llm/llm-d-pd-disaggregation/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/llm-d-pd-disaggregation-d97a078e.png" referrerpolicy="no-referrer">
            </div><p>LLM 추론은 성격이 전혀 다른 두 단계로 이루어진다. <strong>이 둘을 같은 GPU에서 돌리면 서로를 방해한다.</strong></p>
<p>P/D Disaggregation은 그 둘을 아예 다른 서버로 떼어놓는 방식이다. llm-d는 이 기능을 <a href="../llm-d-architecture/" rel="">개념편</a>에서 정리한 EPP에 기본으로 내장하고 있다.</p>
<p>이 글은 llm-d 공식 가이드와 저장소의 실제 매니페스트를 근거로 구조를 정리한다. 가이드의 기준 구성은 <strong>GPU 16장</strong>이지만, 마지막 절에서는 <strong>RTX 3050 6GB 한 장을 논리적으로 둘로 나눠 실제로 띄워본 결과</strong>를 함께 싣는다.</p>
<h2 id="1-용어정리" class="headerLink">
    <a href="#1-%ec%9a%a9%ec%96%b4%ec%a0%95%eb%a6%ac" class="header-mark"></a>1. 용어정리</h2><table>
	<thead>
			<tr>
					<th>용어</th>
					<th>쉬운 설명</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Prefill</strong></td>
					<td>입력 프롬프트 전체를 <strong>한 번에</strong> 읽어서 이해하는 단계</td>
			</tr>
			<tr>
					<td><strong>Decode</strong></td>
					<td>답변을 <strong>한 글자씩</strong> 만들어내는 단계</td>
			</tr>
			<tr>
					<td><strong>ISL / OSL</strong></td>
					<td>Input/Output Sequence Length. 입력이 10,000 토큰, 출력이 1,000 토큰이면 10:1</td>
			</tr>
			<tr>
					<td><strong>TTFT</strong></td>
					<td>첫 글자가 나오기까지 걸린 시간. 주로 <strong>prefill</strong>이 좌우한다</td>
			</tr>
			<tr>
					<td><strong>ITL</strong></td>
					<td>글자와 글자 사이 간격. 주로 <strong>decode</strong>가 좌우한다</td>
			</tr>
	</tbody>
</table>
<h2 id="2-prefill과-decode비교" class="headerLink">
    <a href="#2-prefill%ea%b3%bc-decode%eb%b9%84%ea%b5%90" class="header-mark"></a>2. Prefill과 Decode비교</h2><table>
	<thead>
			<tr>
					<th></th>
					<th>Prefill</th>
					<th>Decode</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>하는 일</td>
					<td>프롬프트 전체를 한 번의 forward pass로 처리</td>
					<td>KV 캐시에서 토큰을 하나씩 생성</td>
			</tr>
			<tr>
					<td>병목</td>
					<td><strong>연산(compute-bound)</strong> GPU flops</td>
					<td><strong>메모리 대역폭(memory-bandwidth-bound)</strong> HBM에서 on-chip으로 데이터를 얼마나 빨리 옮기는가</td>
			</tr>
			<tr>
					<td>성격</td>
					<td>짧고 폭발적</td>
					<td>길고 지속적</td>
			</tr>
			<tr>
					<td>영향 지표</td>
					<td>TTFT</td>
					<td>ITL</td>
			</tr>
	</tbody>
</table>
<p><strong>한 GPU에 섞어두면 문제가 생긴다.</strong> 긴 프롬프트의 prefill이 들어오는 순간 GPU 연산이 거기에 묶이고, 이미 답변을 뱉고 있던 decode 요청들이 그동안 멈춘다.</p>]]></description></item><item><title>LLM 스터디 7주차 - llm-d Flow Control 실측 — TTFT는 사라지지 않고 옮겨간다</title><link>https://ken-0913.github.io/myblog/posts/llm/llm-d-flow-control-lab/</link><pubDate>Fri, 18 Sep 2026 00:30:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/llm/llm-d-flow-control-lab/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/llm-d-flow-control-lab-52da0947.png" referrerpolicy="no-referrer">
            </div><p><a href="../llm-d-architecture/" rel="">개념편</a>에서 EPP의 파이프라인을 정리하며 Flow Control을 문서 수준으로만 다뤘다. 이번에는 실제로 켜고 부하를 넣어 <strong>큐가 어디에 쌓이는지</strong> 를 눈으로 확인했다.</p>
<p>GPU는 RTX 3050 6GB 한 장, vLLM replica는 1개다. <strong>작은 GPU가 오히려 유리하다.</strong> Flow Control의 동작은 전부 &ldquo;풀이 포화됐을 때&rdquo; 나타나는데, GPU가 작을수록 포화를 만들기 쉽다.</p>
<p>가장 중요한 결과부터 적는다. <strong>Flow Control을 켜도 총 대기시간은 줄지 않는다. 기다리는 장소가 GPU에서 게이트웨이로 옮겨갈 뿐이다.</strong> 공식 문서도 같은 말을 한다 — <em>&ldquo;controlling where and for whom TTFT is accrued&rdquo;</em>.</p>]]></description></item><item><title>LLM 스터디 7주차 - kind에 llm-d 올리기 — 배포부터 게이트웨이 오버헤드 실측까지</title><link>https://ken-0913.github.io/myblog/posts/llm/llm-d-prefix-cache-lab/</link><pubDate>Thu, 17 Sep 2026 22:00:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/llm/llm-d-prefix-cache-lab/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/llm-d-prefix-cache-lab-45c468a0.png" referrerpolicy="no-referrer">
            </div><p><a href="../llm-d-architecture/" rel="">개념편</a>에서 llm-d가 요청마다 목적지를 다시 고른다는 구조를 정리했다. 그 구조에는 값이 붙는다. <strong>매 요청마다 Envoy가 EPP에게 물어보고 답을 기다린다면, 그 대기는 몇 ms인가.</strong></p>
<p>RTX 3050 한 장이 꽂힌 데스크톱에 kind로 클러스터를 만들고 llm-d를 올려 직접 쟀다. 결론은 <strong>TTFT 기준 +2.36 ms</strong>, prefix cache 적중률 <strong>84.5%</strong> 다.</p>
<p>공식 가이드의 기준 구성은 <strong>Qwen3-32B / H100 80GB / GPU 16장</strong>이다. 이 글은 그것을 <strong>GPU 1장 6GB</strong>로 줄여 올리는 과정과, 그렇게 줄인 환경에서 무엇을 잴 수 있는지를 함께 다룬다.</p>]]></description></item><item><title>LLM 스터디 7주차 - llm-d 아키텍처 — KV 캐시를 아는 게이트웨이</title><link>https://ken-0913.github.io/myblog/posts/llm/llm-d-architecture/</link><pubDate>Wed, 16 Sep 2026 21:00:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/llm/llm-d-architecture/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/llm-d-architecture-cdb19323.png" referrerpolicy="no-referrer">
            </div><p>성능관점에서 vLLM 파드 중 <strong>&ldquo;어느 파드로 보낼 것인가&rdquo;</strong> 가는 중요한 요소이다. llm-d는 이를 해결 하는  Kubernetes 네이티브 추론 서빙 스택이다.</p>
<p>CNCF 샌드박스 프로젝트이며, vLLM이나 SGLang 같은 엔진을 래핑하여 확장한다. 이 글은 llm-d 공식 문서를 읽고 구조를 정리한 개념편이다.</p>
<h2 id="1-왜-일반-로드밸런서로는-부족한가" class="headerLink">
    <a href="#1-%ec%99%9c-%ec%9d%bc%eb%b0%98-%eb%a1%9c%eb%93%9c%eb%b0%b8%eb%9f%b0%ec%84%9c%eb%a1%9c%eb%8a%94-%eb%b6%80%ec%a1%b1%ed%95%9c%ea%b0%80" class="header-mark"></a>1. 왜 일반 로드밸런서로는 부족한가</h2><p>Kubernetes Service는 L4 로드밸런서다. kube-proxy는 <strong>TCP 연결 단위</strong>로 목적지를 무작위 배정하고, 그 뒤로는 keep-alive 때문에 같은 파드에 고착된다.</p>
<p>일반 요청이라면 문제가 없다. 하지만 LLM 추론은 두 가지 이유로 다르다.</p>]]></description></item></channel></rss>