temperature 0이 보장하는 범위
temperature를 0으로 설정하면 일반적으로 가장 확률이 높은 토큰을 고른다. 하지만 같은 프롬프트가 언제나 같은 문자열을 만든다는 보장까지 제공하지는 않는다. 추론 서버의 연산 방식과 배치 구성, 모델 제공자의 업데이트도 결과에 영향을 줄 수 있다.
Thinking Machines Lab이 2025년 공개한 실험에서는 한 모델에 같은 프롬프트를 temperature=0으로 1,000번 입력했을 때 80가지 완성 결과가 나왔다. 연구진이 배치 불변 연산을 적용한 공개 예제에서는 반복 실행 결과가 같아졌다. 이 실험은 샘플링 설정 외에 추론 구현도 재현성에 영향을 준다는 사례다.
부동소수점과 배치 구성이 함께 영향을 준다
GPU의 부동소수점 연산은 계산 순서에 따라 아주 작은 차이를 만들 수 있다. (a+b)+c와 a+(b+c)의 결과가 비트 단위로 다를 수 있기 때문이다. 병렬 추론에서는 요청을 묶는 방식도 이 계산 순서에 영향을 줄 수 있다.
한 가지 원인은 배치 불변성(batch invariance)의 부재다. 추론 서버는 처리량을 높이려고 여러 사용자의 요청을 한 배치로 묶어 계산한다. 정규화·행렬곱·어텐션 같은 연산은 구현에 따라 배치 구성과 내부 누적 순서의 영향을 받을 수 있다. 작은 수치 차이가 다음 토큰 선택이 팽팽한 지점에서 다른 출력으로 이어질 수 있다.
외부 API에서는 서버가 트래픽에 따라 요청을 묶으므로 사용자가 배치 구성을 직접 정하기 어렵다. 공급자가 고정된 모델 버전과 시드를 제공하더라도 추론 구현이 비트 단위 결정성을 보장하는지는 별도로 확인해야 한다.
재현성이 필요한 기능에서 생기는 문제
비결정성은 데모에선 안 보인다. 문제는 시스템으로 굳힐 때다.
- 회귀 테스트: 문자열 스냅샷만 비교하면 의미가 같은 표현 차이도 실패로 잡힌다. 구조, 필수 사실, 허용 범위를 따로 검사하는 편이 낫다.
- 버그 재현: 입력만 저장해서는 고객이 본 출력을 다시 만들지 못할 수 있다. 모델 버전, 도구 응답, 생성 파라미터와 원본 출력을 함께 기록해야 한다.
- 감사: 판단 근거를 설명해야 하는 업무에서는 같은 문장을 재생하는 것보다 당시 입력 데이터와 적용 규칙을 보존하는 일이 중요하다.
- 강화학습: 샘플 생성과 학습 시점의 추론 구현 차이는 on-policy 학습 가정에 영향을 줄 수 있다.
그래서 뭘 해야 하나
대응은 두 방향으로 나눌 수 있다.
첫째, 출력 변화를 허용하는 검증을 설계한다. 글자 단위 비교 대신 형식, 필수 필드, 사실 일치, 값의 허용 범위를 검사한다.
둘째, 비트 단위 재현이 필요한 범위를 정하고 추론 환경을 통제한다. Thinking Machines Lab은 배치 크기와 무관한 연산 커널의 예제를 공개했다. 이런 방식은 구현 복잡도와 처리량 비용이 따르므로 규제나 연구 재현처럼 필요한 기능에 선택적으로 적용한다.
외부 API를 쓰면 서버의 배치와 커널 구현을 사용자가 직접 통제하기 어렵다. 높은 재현성이 필요한 경우에는 공급자가 제공하는 고정 버전·시드·재현성 옵션을 먼저 확인하고, 그래도 부족할 때 전용 추론이나 자체 호스팅을 검토할 수 있다. 어느 방식을 택하든 문자열 일치만 믿기보다 입력, 모델 버전, 도구 결과와 판단 근거를 함께 기록해야 한다.