FDP SSD for LMCache: PoC
원문:
private/raw/FDP SSD for LMCache
목표
LMCache 스토리지 생태계에서 FDP SSD 지원을 활성화하여, 수명(lifetime)이 다른 KV 캐시 스트림을 분리함으로써:
- WAF(Write Amplification Factor)를 줄이고 SSD 내구성을 향상
- 멀티테넌트 환경에서 예측 가능하고 높은 I/O 성능 제공
배경
LMCache의 I/O 특성
| 특성 | 설명 |
|---|---|
| 대용량 I/O | KV 청크 크기는 모델 크기와 토큰 수에 따라 수 MB ~ 수십 MB 범위 |
| 덮어쓰기 없음 | WORM(Write Once Read Many) 접근 패턴을 따름 |
| 순차 접근 | LLM 추론의 자기회귀적 특성상, 앞선 토큰부터 순서대로 프리픽스 KV 캐시를 읽음 |
FDP SSD 핵심 기능
| 기능 | 설명 |
|---|---|
| 호스트 주도 데이터 배치 | 호스트가 각 쓰기 요청의 배치 그룹(스트림)을 결정하여 스토리지 장치에 전달 |
| ZNS SSD와의 차이점 | ZNS와 달리 배치가 완전히 호스트 제어는 아님. 펌웨어에 따라 내부적으로 스트림을 혼합할 수 있음 |
| WAF 감소 및 내구성 향상 | 수명이 유사한 데이터를 묶어 GC 시 불필요한 내부 복사를 줄여 NAND 마모 감소 |
| 예측 가능한 지연시간 | GC 간섭 감소로 테일 레이턴시(p99 등) 스파이크 완화. 스트림 분리로 멀티테넌트 워크로드 간 간섭 감소 |
과제(Challenges)
1. 데이터 수명 분류
- LSM-tree 예시: 계층적 구조 덕분에 레벨별로 수명 차이가 자연스럽게 발생 → FDP 적용 용이
- CacheLib 예시: 소형/대형 캐시 클래스로 데이터를 분리
- LMCache의 도전: 추론 엔진으로부터 토큰을 입력받는 구조이므로, 어떻게 분류할지가 핵심 과제
2. I/O 인터페이스 선택지
| 방식 | 장점 | 단점 |
|---|---|---|
| 파일 시스템 (write hints) | LMCache 변경 최소화; 기존 파일시스템 사용 가능 | 파일시스템이 스트림을 혼합할 수 있음; NVMe 스트림 패싱이 아직 업스트림 미반영 |
| Raw Block (io_uring_cmd) | 명시적 데이터 배치 가능; NVMe passthru를 통한 고성능 | 커스텀 스토리지 엔진 필요(예: xNVMe, io_uring); NVMe/커널 전문 지식 요구 |
공통 제약: 사용 가능한 스트림 수가 제한됨
LMCache에서의 FDP SSD 활용 시나리오
1. 프롬프트별 데이터 배치 (Per-Prompt Data Placement)
동기:
- KV 청크는 롤링 해시 방식으로 생성되어, 뒤의 청크가 앞 청크의 해시에 의존하는 프리픽스 해시 체인을 형성
- 같은 체인의 청크들은 접근/재사용 패턴이 연관되어 함께 hot/cold 전환 → 그룹 배치에 적합
접근 방식:
stream = prompt_id % num_placement_handles
제약 조건:
- 제약 1: FDP SSD 장치 한계로
num_placement_handles는 통상 최대 128개 - 제약 2: 동일한 공유 프롬프트에 속하지 않는 청크가 같은 그룹에 매핑될 수 있음
2. 단계 인식 데이터 배치 (Phase-aware Data Placement)
동기:
- 디코드 단계에서 생성된 KV 캐시는 현재 요청을 처리하는 동안에만 사용되는 단명(short-lived) 데이터
- 프리필 KV 캐시는 여러 요청에 걸쳐 재사용 가능성이 높아 수명이 다름
접근 방식:
- 디코드 단계 스트림을 별도 격리
- 예: 프리필 KV → 스트림 N, 디코드 KV → 전용 또는 기본 스트림
3. vLLM 워커별 데이터 배치 (Per-vLLM Worker Data Placement)
동기:
- TP(Tensor Parallelism) > 1인 LMCache에서는 각 랭크가 자신의 KV 샤드를 읽어야 다음 스텝이 진행 가능
- 전체 스텝 지연시간은 가장 느린 랭크가 결정
- FDP SSD가 랭크 간 성능 격리를 개선하면
max(rank_i I/O latency)및 테일 레이턴시 감소 가능
접근 방식:
| 워커 | 배치 그룹 |
|---|---|
| Worker 0 | Placement Group 0 |
| Worker 1 | Placement Group 1 |
| Worker 2 | Placement Group 2 |
| Worker 3 | Placement Group 3 |
평가 시 고려 사항
- 클린 상태에서 시작하면 WAF 관찰이 어려울 수 있음
- WAF 평가 전에 지속 상태(sustained state)로 사전 조건화(preconditioning) 과정을 거쳐야 함