Mac에서 Ollama가 느린가요? 로딩, 컨텍스트, 메모리 확인하기
Ollama가 느린 이유는 모델이 아직 로딩 중이거나, 프롬프트의 컨텍스트가 크거나, 모델 일부가 CPU에서 실행되거나, Mac이 메모리 압력을 받고 있기 때문일 수 있습니다. 이런 경우에는 각각 다른 조치가 필요합니다. 다운로드한 모델을 삭제하면 디스크 공간은 확보되지만, 현재 답변을 생성 중인 모델이 자동으로 빨라지지는 않습니다.
콜드 로딩과 두 번째 요청 비교하기
모델, 프롬프트, 설정을 동일하게 유지합니다. 짧은 요청을 실행한 뒤 모델이 로드된 상태에서 다시 반복합니다. 첫 번째 요청만 느리다면 로딩이 유력한 원인입니다. 두 요청 모두 느리게 생성된다면 실행과 메모리를 조사해야 합니다. 응답 하나를 벤치마크로 삼지 말고 비교 결과를 기록하세요.
Ollama의 API 문서는 완료된 응답에서 load_duration, prompt_eval_duration, eval_duration 같은 별도의 타이밍 필드를 제공합니다. 이 필드들은 로딩, 프롬프트 읽기, 출력 생성 시간을 구분합니다. 서로 다른 모델, 컨텍스트 크기, 프롬프트의 토큰 속도를 하나의 변경 사항을 측정한 것처럼 비교하지 마세요.
단계별로 로컬 요청 하나를 측정하기
일반적인 포트에서 실행되는 로컬 서버라면, 다음 요청은 JSON 응답 하나를 반환하므로 타이밍 필드를 더 쉽게 확인할 수 있습니다. MODEL_NAME를 ollama list에서 이미 설치된 로컬 모델로 바꾸세요. 이 비교에는 클라우드 모델을 사용하지 마세요. 이 요청은 추론을 수행하고 자원을 소비하지만 모델 데이터를 삭제하지는 않습니다.
curl -sS http://localhost:11434/api/generate \
-H 'Content-Type: application/json' \
-d '{"model":"MODEL_NAME","prompt":"Explain what a file cache does in two sentences.","stream":false,"options":{"num_predict":128}}'
모델이 여전히 로드된 상태에서 같은 요청을 다시 실행하세요. 스트리밍이 비활성화되어 있으면 터미널은 응답이 완료된 후에 표시하므로, 이 명령은 첫 토큰의 시간을 눈으로 재기 위한 것이 아니라 반환된 타이밍 필드를 확인하기 위한 것입니다. 요청이 실패하면 오류를 그대로 보관하고, 누락된 필드를 0으로 해석하지 말고 비교를 중단하세요.
| 반환되는 필드 | 활용 방법 |
|---|---|
load_duration |
첫 로딩 시간과 반복 로딩 시간 비교 |
prompt_eval_count 및 prompt_eval_duration |
입력이 얼마나 처리되었는지와 그 비용 확인 |
eval_count 및 eval_duration |
같은 작업량에 대한 출력 생성 비교 |
total_duration |
구성 요소별 타이밍 옆에 전체 요청 비용 함께 보관 |
문서에 기재된 시간 단위는 나노초입니다. 시간을 초로 얻으려면 1,000,000,000으로 나누세요. 출력 속도를 구하려면 시간이 양수일 때 eval_count를 eval_duration / 1,000,000,000로 나누세요. 산술 예시로, 5,000,000,000 나노초 동안 100 토큰이면 초당 20 토큰입니다. 이는 어떤 Mac이나 모델에 대해서도 측정된 결과가 아닙니다.
출력 토큰을 전체 시간으로 나눈 값을 순수 생성 속도라고 부르지 마세요. 그러면 로딩과 입력 작업이 포함됩니다. 또한 반복 프롬프트가 캐시된 입력을 사용하는지도 확인하세요. 두 번째 요청이 더 빠른 것은 워밍된 모델과 프롬프트 재사용이 모두 반영된 결과일 수 있기 때문입니다. 가장 좋게 나온 숫자만 보고하지 말고 전체 응답을 보관하세요.
실제로 로드된 상태 확인하기
터미널에서 현재 상태를 확인합니다:
ollama ps
Ollama FAQ에서 PROCESSOR 열을 설명합니다. 이 열은 GPU, CPU 또는 분할 실행을 보여줄 수 있습니다. 하드웨어 가이드는 Apple GPU의 Metal 가속을 문서화합니다. 로컬 모델이 GPU를 사용할 것이라고 예상했다면, Mac의 이름에 근거한 가정보다 실행 결과가 더 유용합니다.
또한 요청이 실제로 확인 중인 로컬 서버로 가는지 확인하세요. 프런트 엔드가 다른 호스트나 클라우드 모델을 가리킬 수 있습니다. 그런 경우 로컬 ollama ps 출력은 원격 요청을 설명하지 않습니다.
모델 크기를 탓하기 전에 컨텍스트 줄이기
모델 파일은 메모리 요구 사항의 일부일 뿐입니다. 컨텍스트가 커지면 추가 메모리가 필요하고, 동시 요청은 작업을 더합니다. Ollama의 컨텍스트 길이 문서는 하드웨어에 따라 달라지는 기본값과 앱의 컨텍스트 제어를 설명합니다. 모든 설치가 같은 기본값을 가진다고 가정하지 마세요.
통제된 테스트에는 짧은 프롬프트, 단일 요청, 테스트에 필요한 정보를 담은 더 작은 컨텍스트를 사용하세요. 이후 전체 코딩 작업에 더 많은 컨텍스트가 필요하다면 의미를 유지할 만큼 충분히 복원하세요. 필요한 지시를 조용히 잃으면서 더 빠른 답변은 성공적인 최적화가 아닙니다.
더 작은 모델이나 양자화는 별도의 비교로만 시도하세요. 자원 사용과 답변 품질이 모두 바뀝니다. 더 빠른 옵션이 여전히 유용한지 평가할 수 있도록 대표 질문 몇 개를 유지하세요.
컨텍스트 변경을 영구 적용하지 않고 테스트하기
짧은 진단용 프롬프트의 경우, API는 요청별 컨텍스트 옵션을 받아들입니다. 앞선 요청에서 options 안에 num_predict와 함께 "num_ctx":4096를 추가하되, 해당 컨텍스트를 지원하는 로컬 모델을 사용하세요. 이는 예시 테스트 크기이며 모든 모델이나 코딩 작업에 권장되는 설정은 아닙니다.
모델과 프롬프트는 그대로 두고, ollama ps로 실행 중인 모델을 확인하여 메모리 압력을 비교하세요. 긴 대화 주변에서 컨텍스트를 줄여 놓고 답변이 여전히 모든 지시를 포함한다고 가정하지 마세요. 먼저 적용 가능한 작은 작업으로 비교한 후, 실제 작업을 그 입력에 충분한 컨텍스트로 테스트하세요.
FAQ와 컨텍스트 길이 전용 페이지가 기본값을 다르게 설명하므로, 이 안내서는 보편적인 기본값에 의존하지 않습니다. 앱 설정, 프런트 엔드 또는 요청 수준 옵션도 실행 중인 값에 영향을 줄 수 있습니다. 설치된 버전이 ollama ps에서 CONTEXT를 보고하는 경우, 해당 값을 모델 파일 크기로 추론하지 말고 PROCESSOR와 함께 기록하세요.
메모리 수치가 낮아지는 것만이 유일한 성공 조건은 아닙니다. 작업은 여전히 수용 가능한 답변으로 완료되어야 하고, Mac의 나머지 부분도 계속 사용할 수 있어야 합니다. 더 작은 컨텍스트가 중요한 사실을 누락시키거나 변경이 반복 가능한 차이를 만들지 못하면, 테스트 옵션을 제거하고 이전에 작동하던 설정을 복원하세요.
생성 중에 Mac 전체 관찰하기
응답이 끝난 뒤가 아니라 생성 중에 활성 상태 보기 › 메모리를 열어 압력을 확인하세요. Apple Silicon은 시스템 메모리를 공유하므로 다른 앱도 영향을 줍니다. 모델이 디스크에 들어간다고 해서 나머지 작업과 함께 편안하게 들어간다는 뜻은 아닙니다.
작업을 저장하고 불필요한 무거운 작업을 닫은 뒤 같은 요청을 반복하세요. 압력이 개선되고 느려짐도 함께 바뀐다면 유용한 단서입니다. 메모리 압력 가이드는 캐시된 모든 바이트를 낭비로 취급하지 않고 Mac의 지표를 읽는 방법을 다룹니다.
유휴 모델을 삭제하지 않고 언로드하기
먼저 해당 모델을 사용하는 요청이 모두 끝날 때까지 기다리세요. 더 이상 필요 없는 로드된 모델을 해제하려면 ollama stop 뒤에 ollama ps에서 확인한 정확한 이름을 사용하세요:
ollama stop MODEL_NAME
실행 전에 MODEL_NAME를 바꾸세요. 이 명령은 모델을 메모리에서 언로드합니다. 다운로드한 파일을 삭제하지 않으며, 다음 요청에서 로딩 비용을 다시 치를 수 있습니다. 따라서 요청 사이에 모델을 반복적으로 언로드하면 경험이 더 느려질 수 있습니다.
디스크 공간이 실제 제약이라면 AI 모델 정리 가이드에서 저장된 모델을 별도로 검토하세요. 로컬에서 만든 모델과 다시 안정적으로 다운로드할 수 없는 모델은 유지하세요. 성능을 위해서는 한 번에 하나의 변경만 비교하고 결과를 같은 작업과 연결하세요.
서버 로그로 불일치 조사하기
로컬 요청이 계속 느리거나 프로세서 분할이 예상과 다르면, Ollama의 문제 해결 안내서에 Mac 서버 로그 위치가 ~/.ollama/logs/server.log로 나와 있습니다. 테스트 시간대의 부분을 읽고 로딩 실패, 메모리 할당 문제 또는 선택된 실행 백엔드를 찾아보세요. 수동으로 시작한 서버라면 해당 메시지가 터미널에 있을 수 있습니다.
Ollama 버전, 정확한 모델 태그, 컨텍스트, 프로세서 분할 및 타이밍에서 가장 큰 비중을 차지하는 단계를 기록하세요. 로그 발췌문을 공유하기 전에 개인 프롬프트와 로컬 경로가 포함되어 있지 않은지 검토하세요. 오래된 최적화 게시물에 등장한다는 이유만으로 여러 GPU 또는 서버 환경 변수를 변경하지 마세요. 로그가 먼저 변경으로 해결하려는 불일치를 식별해야 합니다.