로컬 모델을 OpenAI 호환 API로 호출할 때 많은 클라이언트는 temperature나 top_p를 보내지 않습니다. 이 경우 실제 샘플링에 쓰이는 값은 서버가 정합니다. Ollama v0.40.14 릴리스 노트는 이 기본값이 바뀌었다고 설명합니다. 같은 모델, 같은 프롬프트라도 서버가 어떤 값을 고르느냐에 따라 출력이 달라질 수 있으므로, 이 변경은 로컬 모델 비교 실험을 하는 개발자에게 직접 영향을 줍니다.

이 글은 릴리스 노트와 릴리스 페이지의 설명만 근거로 합니다. 두 버전을 직접 비교 실행하지 않았습니다.

무엇이 바뀌었나

릴리스 노트의 설명을 그대로 옮기면 다음과 같습니다.

  • OpenAI 호환 엔드포인트가 모델의 패키지된 샘플러 기본값을 덮어쓰지 않도록 수정했습니다.
  • 클라이언트가 temperature나 top_p를 보내지 않으면, 이전에는 1.0이 적용되었지만 이제는 모델 자체의 값을 씁니다.
  • 변경의 목적은 /api/chat의 동작과 맞추는 것입니다.

핵심은 생략된 경우입니다. 릴리스 노트가 바꾼 대상은 클라이언트가 값을 빼고 보냈을 때의 기본값이며, 클라이언트가 값을 명시하면 그 값이 쓰인다는 전제로 읽을 수 있습니다.

요청 상태 v0.40.14 이전 (릴리스 노트 설명) v0.40.14
temperature, top_p 생략 1.0 적용 모델 패키지의 기본값 적용
명시적으로 지정 지정한 값 릴리스 노트가 바꾼 대상이 아님

같은 릴리스에는 다른 변경도 있습니다. ollama launch claude는 모델의 출력 토큰 한도를 적용해 클라우드 모델이 기본 128k 상한에 걸리지 않게 합니다. /v1/responses는 이전 assistant의 거부(refusal) 응답을 포함한 입력 내용을 유지합니다. MLX에서는 큰 어휘 크기에 대한 top-k 샘플링이 빨라졌다고 적혀 있습니다. 다만 속도 개선의 크기는 수치로 제시되지 않았습니다.

샘플링 기본값이 출력에 영향을 주는 방식

모델은 다음 토큰의 확률 분포를 계산하고, 샘플러가 그중 하나를 고릅니다.

  • temperature는 분포의 날카로움을 조정합니다. 값이 높을수록 확률이 낮은 토큰이 선택될 기회가 늘어납니다.
  • top_p는 확률을 높은 순서로 더해 누적값이 p에 도달할 때까지의 후보 집합만 남깁니다.

따라서 기본값이 1.0인지, 모델 패키지가 정한 값인지에 따라 같은 프롬프트에서도 답변의 다양성과 안정성이 달라질 수 있습니다. 모델 패키지의 값은 Ollama에서 Modelfile의 PARAMETER 항목으로 정의되는 것이 일반적입니다. 어느 값이 더 좋은지는 모델과 작업에 따라 다르므로, 이 글은 어떤 값이 맞다고 주장하지 않습니다.

비교 실험에서 확인할 것

로컬 모델을 비교할 때 결과가 모델 차이인지, 샘플러 기본값 차이인지 구분하려면 다음을 기록해야 합니다.

  • Ollama 버전과 모델 태그
  • 클라이언트가 실제로 보낸 요청 본문의 temperature, top_p 값(생략 여부 포함)
  • 모델 패키지의 샘플러 값
  • 같은 프롬프트 묶음을 두 버전에서 실행한 결과

이 글에서는 실행하지 않은 절차입니다. 확인 방법으로는 같은 프롬프트 묶음을 v0.40.13과 v0.40.14에서 각각 실행하고, 요청 본문에 샘플링 값을 명시한 경우와 생략한 경우를 나눠 결과를 비교하는 방식을 제안합니다.

한계

  • 릴리스 노트와 릴리스 페이지 설명에 의존합니다. 소스 diff와 직접 실행 결과는 확인하지 않았습니다.
  • 릴리스 페이지에는 연도가 표시되지 않았습니다. 발표일은 11월 3일로 적혀 있습니다.
  • 속도 개선은 수치가 없어 효과의 크기를 말할 수 없습니다.
  • 샘플링 기본값이 답변 품질에 어떤 영향을 주는지는 이 글의 범위가 아닙니다.

결론

이 변경은 기능 추가가 아니라 기본값의 정합성을 맞춘 수정입니다. 그래서 오히려 실험 결과에 조용히 영향을 줄 수 있습니다. 같은 모델을 비교하는 실험이라면 샘플러 설정과 Ollama 버전을 함께 기록해야 합니다. 설정을 명시하지 않은 상태에서 얻은 수치는 버전이 바뀌면 재현되지 않을 수 있습니다.

참고