b11599: llama - 외부 범위를 백엔드 버퍼에 매핑하지 않음
요약
Llama 모델의 최적화 개선 사항을 다루며, 특히 메모리 관리와 텐서 로딩 효율성을 높이는 방법을 제시합니다. 외부 범위를 백엔드 버퍼에 매핑하지 않도록 수정하여 불필요한 데이터 고정을 방지하고, 컨텍스트별 파일 범위 계산 및 전용 버퍼 생성을 통해 성능을 향상시켰습니다.
핵심 포인트
- 외부 범위 미매핑으로 메모리 효율성 개선
- 컨텍스트별 독립적인 버퍼 관리 구현
- macOS 환경에서 prefetch 기능 안정화
- lazy per-layer 임베딩 로딩 속도 향상
- llama : do not map foreign ranges into a backend buffer
호스트 포인터로부터 생성된 버퍼는 그것이 감싸는 모든 것을 고정(pins)합니다. 여러 컨텍스트가 동일한 파일을 공유할 때 (lazy tensors, -cmoe로 CPU에 유지되는 MoE tensors), 컨텍스트의 첫 번째 및 마지막 텐서를 아우르는 단일 버퍼는 다른 컨텍스트가 소유한 범위도 감싸게 되어 백엔드가 절대 읽지 않는 데이터를 고정합니다.
레이어별 토큰 임베딩이 있는 모델의 경우, 이는 전체 lazy tensor를 GPU 버퍼에 고정(27 GiB for Qwen3.8-Flash-Next IQ4_NL)하여, 이를 지연적으로 읽는다는 목적을 무효화합니다.
대신, 각 컨텍스트의 파일 범위를 계산하고 다른 컨텍스트가 소유한 범위를 빼낸 다음, 범위당 하나의 버퍼를 생성해야 합니다. 여러 컨텍스트에서 매핑되는 가중치(예: token_embd.weight)는 여전히 해당들을 사용하는 모든 컨텍스트의 범위 일부로 남아 있습니다.
Assisted-by: pi:llama.cpp/Qwen3.8-Flash-Next
- llama : enable prefetch on macOS
prefetchable로 표시된 텐서의 prefetch 힌트는 macOS에서 아무 작업도 하지 않는(no-op) 기능이므로, 그래프가 실행되는 동안 페이지들이 하나씩 오류 발생을 통해 로드됩니다. madvise (MADV_WILLNEED)는 여기서 예상대로 작동하므로 플랫폼을 가드에 추가해야 합니다.
Qwen3.8-Flash-Next IQ4_NL의 lazy per-layer token embeddings를 콜드 파일 캐시에서 읽을 때, 프롬프트 처리가 pp512 / pp2048 / pp4096에 대해 각각 356 / 375 / 475 t/s에서 735 / 749 / 788 t/s로 향상되었습니다.
Assisted-by: pi:llama.cpp/Qwen3.8-Flash-Next
- llama : use a plain buffer list per context
Assisted-by: pi:llama.cpp/Qwen3.8-Flash-Next
AI 자동 생성 콘텐츠
본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기