b11435: llama에서 공유된 시퀀스에 대한 k-pool의 scatter 데이터 레이스 수정 (#29994)
요약
Llama 모델의 k-pool 관련 데이터 레이스 문제를 수정하고, 공유 시퀀스 처리 방식을 개선했습니다. 특히 여러 시퀀스가 공유하는 풀링된 키가 중복 작성하여 발생하던 CPU 백엔드의 데이터 레이스를 해결했습니다. 또한, 메모리 관리 및 캐시 안전성 모드 제거를 통해 모델의 안정성과 효율성을 높였습니다.
핵심 포인트
- 공유 시퀀스 k-pool rep의 데이터 레이스 수정
- 각 rep을 한 번만 표시하여 중복 작성 방지
- 하이브리드 인덱스 메모리에 전체 시퀀스를 포함하도록 강제
- llama: 각 공유된 k-pool rep을 한 번만 재풀링(re-pool)하도록 수정
공유 셀이 있는 경우 모든 풀은 재풀링되며, 풀링된 키가 항상 분산(scattered)되기 때문에, 시퀀스 간에 seq_cp가 공유하는 풀들은 여러 scatter 항목에서 동일한 rep 행을 작성하여 CPU 백엔드에서 데이터 레이스(data race)를 발생시켰습니다. 이제 각 rep을 한 번만 표시합니다: 공유하는 시퀀스들은 pool_cells를 통해 동일한 행을 읽게 됩니다.
- llama: 하이브리드 인덱스 메모리에 전체 시퀀스 seq_cp가 포함되도록 단언(assert)하도록 수정
순환 상태는 범위에 관계없이 항상 전체 복사본으로 복사되며, 부분 복사본에 의해 공유되는 k-pool 셀은 하나의 풀링된 행으로 두 개의 풀 그룹핑을 가질 수 있었습니다. 모든 호출자는 전체 시퀀스를 복사하므로, 이를 지원하는 대신 부분 범위를 거부하도록 수정했습니다.
- llama: k-pool cache_safe 모드 제거
전체 시퀀스 seq_cp를 사용하면, 셀을 공유하는 시퀀스는 풀도 공유하게 되어, 공유된 rep의 풀링된 행은 그들 모두에게 유효합니다. 이제 셀이 공유되는 동안 모든 것을 재풀링하는 대신, 모든 ubatch에서 각 rep을 한 번만 표시하여, seq_rm, state_read 및 state_drop에서의 공유 스캔과 stale-all 임시 방편을 제거했습니다. seq_cp는 이제 목적지(destination)만 무효화합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기