[2x3090]: SymmMemCommunicator: 디바이스 기능(Device capability) 8.6 미지원
요약
vLLM 환경에서 RTX 3090(Ampere 아키텍처) 사용 시 SymmMemCommunicator 오류가 발생하는 원인을 분석하고, P2P 활성화에 따른 성능 향상 수치를 공유합니다.
핵심 포인트
- RTX 3090(CC 8.6)이 vLLM의 SymmMemCommunicator 화이트리스트에서 누락되어 오류 발생
- P2P 활성화 시 Warm prefill 평균 33%, Raw decode TPS 33% 성능 향상 확인
- 오류 해결을 위해 vLLM 소스 코드 내 하드코딩된 디바이스 역량 리스트 수정 필요
안녕하세요 여러분, 이 글은 문제에 대한 해결책이라기보다는 단순히 "다른 사람들은 어떻게 하고 있는지 확인해보자"는 취지의 게시글입니다. 초보자로서 저는 vLLM을 실행할 수 있는 2x3090 시스템을 구축했습니다. 많은 자료를 읽어본 끝에, 속도가 더 빨라지는지 평가하기 위해 P2P 드라이버를 컴파일하게 되었습니다. vLLM에서 제목과 같은 오류가 발생했는데, 이는 이 Blackwell 오류와 유사합니다. 혹시 같은 현상을 보신 분이 계신가요? 그리고 vLLM을 패치할 가치가 있을까요? 다음은 LLM 분석 결과입니다.
5분간의 P2P 적용 여부에 따른 비교
| 지표 | 기준점 (P2P 미사용) | P2P 활성화 | 차이 |
|---|---|---|---|
| Warm prefill p50 | 1,127ms | 921ms | 18% 빠름 |
| Warm prefill avg | 1,517ms | 1,015ms | 33% 빠름 |
| ITL avg | 68.3ms | 49.9ms | 27% 빠름 |
| ITL p50 | 52.1ms | 46.3ms | 11% 빠름 |
| Cold prefill | 88.1s (110K tok) | 17.0s (추정) | 약 5배 빠름 |
| Raw decode TPS | ~15 tok/s | ~20 tok/s | 33% 증가 |
| KV cache peak | (알 수 없음) | 37% | — |
근본 원인 분석 (Root Cause Analysis)
"SymmMemCommunicator: Device capability 8.6 not supported, communicator is not available." 오류가 발생하는 이유는 다음과 같습니다:
- 하드코딩된 화이트리스트 (Hardcoded whitelist): vllm/distributed/device_communicators/all_reduce_utils.py에 있는 SYMM_MEM_ALL_REDUCE_MAX_SIZES 딕셔너리에는 CC "9.0" (Hopper/H100), "10.0" (Blackwell/B100), 그리고 "10.3" (Blackwell/GB200)에 대한 항목만 있습니다.
- 정확한 일치 확인 (Exact match check): symm_mem.py의 약 66-71번 라인에서 코드는 다음과 같이 정확한 문자열 조회를 수행합니다:
if self.device_capability not in SYMM_MEM_ALL_REDUCE_MAX_SIZES:
logger.warning(
"SymmMemCommunicator: Device capability %s not supported, "
"communicator is not available.",
self.device_capability,
)
return
- CC 8.6 = Ampere 아키텍처 (RTX 3090/3080과 같은 RTX 30 시리즈). 이 아키텍처는 화이트리스트에 추가되지 않았습니다. 대칭 메모리 (symmetric memory) 기능은 PyTorch의 torch.distributed._symmetric_memory 모듈에 의존하며, 이는 Ampere 하드웨어에서 작동할 수도 있고 그렇지 않을 수도 있습니다.
- 폴백/환경 변수 재정의 없음 (No fallback/env override): 이 확인 과정을 강제로 활성화하거나 우회할 수 있는 환경 변수가 없습니다. VLLM_ALLREDUCE_USE_SYMM_MEM=0 환경 변수를 통해 SymmMemCommunicator 초기화 시도를 비활성화할 수는 있지만, 지원되지 않는 아키텍처에 대해 이를 활성화할 수는 없습니다.
옵션 1: CC 8.6 지원 추가 (코드 수정) SYMM_MEM_ALL_REDUCE_MAX_SIZES 및 _WORLD_SIZES_MULTIMEM 모두에 "8.6" 항목을 추가합니다. 하지만 대칭 메모리 (Symmetric memory) 동작은 아키텍처마다 크게 다르기 때문에, Ampere GPU에 적합한 최대 크기를 결정하기 위한 벤치마킹 (Benchmarking)이 필요합니다. 옵션 2: 경고 억제 (우회 방법) VLLM_ALLREDUCE_USE_SYMM_MEM=0을 설정하여 SymmMemCommunicator 초기화를 완전히 건너뜁니다. 다른 All-reduce 구현체들 (PyNCCL, CustomAllreduce, FlashInfer)이 여전히 사용되므로, 이는 성능 저하를 최소화하는 우아한 퇴보 (Graceful degradation) 방식입니다. 옵션 3: 체크 로직 완화 (코드 변경) 정확한 CC 일치를 요구하는 대신, 지원되는 가장 가까운 하위 아키텍처의 설정을 사용하도록 폴백 (Fallback)합니다. 하지만 튜닝된 값들이 적용되지 않을 경우 성능이 조용히 저하될 수 있습니다. 가장 실용적인 즉각적 해결책은 옵션 2 — 환경 변수를 통해 해당 기능을 비활성화하는 것입니다. 적절한 장기적 해결책을 위해서는 실제 벤치마크 데이터가 포함된 옵션 1이 필요할 것입니다. 이제 제 분석을 제공할 준비가 되었습니다. /u/kapitanfind-us가 r/LocalLLaMA에 게시함 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/OpenAI Codex (search)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기