어텐션 메모리가 홈 AI 모델의 매개변수보다 더 커지는 이유는 무엇인가?

에바 왕기술 작가 그리고 이자 ZimaSpace의 상주 장인입니다. 평생을 기술에 열정을 가진 사람으로서 홈랩과 오픈소스 소프트웨어에 열정을 가지고 있으며,복잡한 기술 개념을 쉽게 이해할 수 있는 실습 가이드로 번역하는 데 전문성을 가지고 있습니다.에바는 셀프 호스팅이 어렵지 않고 재미있어야 한다고 믿습니다. 그녀의 튜토리얼을 통해 커뮤니티가 하드웨어 설정의 신비를 풀도록돕고 있습니다. 첫 NAS 구축부터 Docker 컨테이너 마스터링까지.

가중치는 고정되어 있는 반면 토큰에 따라 달라지는 캐시, 활성화, 작업 공간은 컨텍스트와 동시성이 커질수록 확장되므로, 어텐션 메모리는 모델 파라미터 메모리보다 커질 수 있습니다.

양자화된 모델은 홈 서버의 RAM이나 VRAM에 여유 있게 들어갈 수 있지만, 긴 프롬프트, 여러 가구 구성원의 사용자, 멀티모달 입력 또는 대규모 배치로 인해 메모리 압박이 발생할 수 있습니다. 모델 파일은 지속적으로 유지되는 가중치를 나타낼 뿐, 전체 추론 작업 집합을 나타내지는 않습니다. 어텐션은 유지되는 각 토큰에 대해 요청별 상태를 만들며, 피크 사용량이 런타임에 따라 달라지는 임시 버퍼를 필요로 할 수 있습니다. 아래 섹션에서는 고정 파라미터 메모리와 시퀀스에 따라 달라지는 메모리를 구분하고, 후자가 실제 용량 한도가 되는 시점을 설명합니다.

모델 파라미터는 로드 후 고정된 기준을 형성합니다

모델 가중치는 개수와 수치 형식을 알면 예측 가능한 메모리 용량을 차지합니다. 4비트 모델은 8비트 또는 부동 소수점 버전보다 파라미터 저장 공간을 적게 사용하지만, 런타임 메타데이터와 스케일 값으로 인해 약간의 오버헤드가 추가됩니다.

Transformer 아키텍처는 짧은 프롬프트와 긴 프롬프트에 동일한 학습된 파라미터를 사용합니다. 사용자가 컨텍스트를 더 추가한다고 해서 파라미터 사용량이 단순히 두 배가 되지는 않습니다.

이 고정된 기준 때문에 모델 파일 크기는 초기 적합성 확인에 유용합니다. 하지만 피크 추론 메모리를 완전히 추정할 수 있는 값은 아닙니다.

전체 어텐션은 시퀀스 길이의 제곱에 비례하는 중간 작업을 만들 수 있습니다

기존 셀프 어텐션은 토큰 위치를 서로 비교합니다. 구현이 대규모 어텐션 점수 및 확률 행렬을 메모리에 생성하면, 그 차원은 시퀀스 길이의 제곱에 비례해 증가합니다.

FlashAttention은 제곱에 비례하는 어텐션 메모리를 긴 시퀀스의 핵심 문제로 지적하고, 타일 단위로 어텐션을 계산해 전체 행렬을 저장하지 않습니다.

따라서 최신 최적화 추론 커널은 단순한 공식이 제시하는 것보다 훨씬 적은 임시 메모리를 사용할 수 있습니다. 긴 시퀀스에서는 기본 어텐션 연산 자체가 여전히 더 어려워지지만, 전체 시퀀스 제곱 행렬이 디바이스 메모리에 나타나는지는 구현 방식에 따라 달라집니다.

피크 작업 공간은 커널 버전, 배치 형태, 헤드 차원, 그리고 런타임이 덜 효율적인 어텐션 경로로 대체되는지 여부에 따라서도 달라질 수 있습니다.

KV 캐시는 유지되는 각 토큰에 대한 지속 상태를 추가합니다

자동 회귀 디코딩은 이전 토큰의 키와 값을 저장하므로, 다음 토큰을 생성할 때마다 전체 프리픽스를 다시 계산할 필요가 없습니다.

PagedAttention은 KV 캐시 증가를 주요 서비스 메모리 제약으로 봅니다. KV 캐시 용량은 유지되는 토큰 수, 캐시를 생성하는 레이어 수, 키-값 차원, 정밀도, 활성 시퀀스 수에 따라 증가합니다.

임시 어텐션 행렬과 달리 이 상태는 활성 대화가 진행되는 동안 계속 사용할 수 있어야 합니다. 따라서 모델이 한 번에 새 토큰 하나만 생성하더라도 긴 컨텍스트는 메모리를 계속 소비할 수 있습니다.

ZimaSpace의 AI 메모리 여유 공간 설명에서는 모델 저장 공간과 컨텍스트 및 동시 사용자에 필요한 추가 용량을 구분합니다.

-15% OFF

동시 요청은 동적으로 생성되는 어텐션 상태를 배수로 늘립니다

여러 사용자가 모델 가중치 사본 하나를 공유할 수 있지만, 각자의 프롬프트, 생성 토큰, KV 캐시 분기는 일반적으로 별도로 유지됩니다.

vAttention은 동적 물리 메모리 할당을 사용합니다. 서비스를 시작할 때는 요청 길이와 완료 시간이 정해져 있지 않기 때문입니다.

32,000토큰 대화 하나를 처리할 수 있는 서버라도 이러한 대화 네 개를 동시에 처리하지 못할 수 있습니다. 모델 파라미터 총량은 변하지 않더라도 배치 크기와 사용자 수는 토큰에 따라 달라지는 상태를 배수로 늘립니다.

요청에 동일하게 캐시된 프리픽스가 있으면 프리픽스 공유로 중복을 줄일 수 있지만, 서로 다른 가구 구성원의 대화에는 여전히 독립적인 이어쓰기 상태가 필요합니다.

활성화와 런타임 예약이 피크 사용량을 더 높입니다

프롬프트 프리필, 멀티모달 프로젝션, 추측 디코딩, 그래프 캡처, 임시 텐서 변환, 라이브러리 작업 공간은 가중치와 KV 캐시 외에도 메모리를 할당할 수 있습니다.

FlashAttention-2는 더 나은 커널이 대규모 중간 데이터를 메모리에 생성하는 방식을 없애더라도 어텐션이 여전히 긴 시퀀스의 병목으로 남는다고 설명합니다.

프레임워크의 캐싱 할당자는 해제된 블록을 재사용하기 위해 보유할 수 있으므로, 피크 요청 하나가 완료된 후에도 디바이스 도구에 큰 프로세스 메모리 사용량이 표시될 수 있습니다. 이러한 예약 메모리는 실제로 사용 중인 텐서 메모리와는 다르지만, 다른 프로세스의 사용 가능 용량을 제한합니다.

따라서 가장 높은 메모리 사용량은 안정적인 토큰 단위 디코딩 중이 아니라 프리필이나 모델 전환 중에 발생할 수 있습니다.

어텐션 최적화는 경계를 이동할 뿐 없애지는 않습니다

플래시 어텐션은 임시 IO와 행렬 저장 공간을 줄이고, 페이징 할당은 KV 단편화를 줄이며, 낮은 캐시 정밀도는 토큰당 바이트 수를 줄이고, 그룹화된 쿼리 어텐션은 키-값 헤드 수를 줄입니다.

그룹화된 쿼리 어텐션은 키-값 헤드 메모리를 줄이면서도 단일 멀티 쿼리 헤드보다 더 많은 용량을 유지합니다.

슬라이딩 윈도, 캐시 제거, 오프로딩, 검색 증강은 어텐션 상태의 상한을 설정하거나 다른 위치로 옮길 수 있지만, 각각 지연 시간, 사용할 수 있는 컨텍스트 또는 답변 방식에 영향을 줍니다.

모델 정밀도, 실제 프롬프트 길이, 출력 한도, 배치 크기, 사용자 수, 비전 토큰 및 기타 로컬 서비스를 포함한 전체 작업 부하를 기준으로 테스트하세요. 모델 가중치를 변경하지 않고도 토큰 상태나 동시성을 줄였을 때 안정성이 회복된다면, 어텐션 메모리가 파라미터 메모리를 초과한 것입니다.

FAQ

어텐션 메모리는 항상 모델 가중치 메모리보다 큰가요?

아니요. 짧은 단일 사용자 프롬프트에서는 가중치가 주요 메모리 사용 요소로 남는 경우가 많습니다. 어텐션 상태는 컨텍스트, 배치 또는 동시성이 모델과 런타임에 따라 달라지는 특정 임계값을 넘을 때만 주요 요소가 됩니다.

FlashAttention이 KV 캐시 메모리를 없애나요?

아니요. 어텐션 연산과 임시 메모리 트래픽을 줄일 뿐입니다. 자동 회귀 서비스에서는 런타임이 해당 상태를 다시 계산하거나 제거하거나 오프로딩하지 않는 한, 유지되는 키와 값 상태가 여전히 필요합니다.

시스템 RAM으로 어텐션 메모리 부족 문제를 해결할 수 있나요?

호환되는 런타임에서는 CPU 추론이나 오프로딩을 지원할 수 있지만, 느린 연결을 통해 활성 상태를 이동하면 지연 시간이 늘어나고 출력 속도가 떨어질 수 있습니다.

기술 및 AI 허브

더 읽어보기

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.