디코딩 루프는 256개의 토큰이 생성될 때마다 MLX의 해제된 버퍼 풀을 방출했는데, 이는 KV 캐시가 이전의 더 작은 버퍼를 증가시키고 떨어뜨
요약
MLX의 디코딩 루프가 토큰 생성 시 해제된 버퍼 풀을 방출하는 빈도가 문제였습니다. 이로 인해 긴 컨텍스트에서 메모리 사용량이 과도하게 증가하여 시스템 불안정을 초래했습니다. 이를 256 토큰 배수 단위로 변경하여 안정성을 크게 개선했습니다.
핵심 포인트
- MLX 디코딩 루프의 버퍼 풀 방출 빈도가 문제였습니다.
- 긴 컨텍스트에서 메모리 사용량이 과도하게 증가하는 문제가 있었습니다.
- 토큰 생성 배수를 256으로 변경하여 안정성을 확보했습니다.
- 98k 토큰 컨텍스트에서 메모리 사용량을 크게 줄일 수 있었습니다.
디코딩 루프는 256개의 토큰이 생성될 때마다 MLX의 해제된 버퍼 풀을 방출했는데, 이는 KV 캐시가 이전의 더 작은 버퍼를 증가시키고 떨어뜨리는 빈도와 같습니다. 이 확인은 토큰 수가 정확히 256의 배수가 될 때만 작동합니다. 추측 디코딩(Speculative decoding)은 라운드당 여러 개의 토큰을 방출하므로, 대부분의 라운드는 경계를 건너뛰고 풀이 방출되지 않았습니다. 긴 컨텍스트에서의 각 증가는 나중에 할당할 수 없는 몇 GB의 버퍼를 남겨두어, 시스템 메모리가 부족해질 때까지 러너(runner)의 사용량이 계속 상승했습니다.
이제 라운드가 256 토큰의 배수를 넘을 때마다 풀을 방출하도록 변경했으며, 이는 단일 토큰 라운드에서 이미 수행하던 작업입니다. 128 GB 장치에서 qwen3.8:27b-mlx를 사용하여 98k 토큰 컨텍스트로 긴 추측 생성을 할 경우, 이전에는 러너가 90 GB 이상으로 증가하여 커널을 패닉 상태에 빠뜨렸지만, 이제는 30 GB 수준에서 안정적으로 유지됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 RSS: GitHub ollama/ollama releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기