<h2 id=Non-Determinism> Non-Determinism</h2><div class="visible-content"> #Pocket #NLP #LanguageModel #Evaluation #NAACL #Decoding


Issue Date: 2025-09-09 [Paper Note] The Good, The Bad, and The Greedy: Evaluation of LLMs Should Not Ignore Non-Determinism, Yifan Song+, NAACL’25 GPT Summary- LLMの評価は非決定性を見落としがちで、単一出力に焦点を当てるため性能の変動理解が制限される。本研究では、貪欲デコーディングとサンプリングの性能差を探求し、非決定性に関するベンチマークの一貫性を特定。実験により、貪欲デコーディングが多くのタスクで優れていることを確認し、アライメントがサンプリングの分散を減少させる可能性を示した。また、小型LLMが大型モデルに匹敵する性能を持つことを明らかにし、LLM評価における非決定性の重要性を強調した。 Comment<p>関連:
- Non-Determinism of “Deterministic” LLM Settings, Berk Atil+, arXiv’24

利用されているデータセット:
- [Paper Note] Are We Done with MMLU?, Aryo Pradipta Gema+, NAACL’25
- AlpacaEval, tatsu-lab, 2023.06
- [Paper Note] MixEval: Deriving Wisdom of the Crowd from LLM Benchmark Mixtures, Jinjie Ni+, NeurIPS’24
- From Live Data to High-Quality Benchmarks: The Arena-Hard Pipeline, Li+, 2024.04
- Training Verifiers to Solve Math Word Problems, Karl Cobbe+, arXiv’21
- [Paper Note] Evaluating Large Language Models Trained on Code, Mark Chen+, arXiv’21 </p>


#Pocket #NLP #LanguageModel #Evaluation #Decoding #Selected Papers/Blogs


Issue Date: 2025-04-14 Non-Determinism of “Deterministic” LLM Settings, Berk Atil+, arXiv’24 GPT Summary- 本研究では、5つの決定論的LLMにおける非決定性を8つのタスクで調査し、最大15%の精度変動と70%のパフォーマンスギャップを観察。全てのタスクで一貫した精度を提供できないことが明らかになり、非決定性が計算リソースの効率的使用に寄与している可能性が示唆された。出力の合意率を示す新たなメトリクスTARr@NとTARa@Nを導入し、研究結果を定量化。コードとデータは公開されている。 Comment<p>- 論文中で利用されているベンチマーク:
- Beyond the Imitation Game: Quantifying and extrapolating the capabilities of language models, Aarohi Srivastava+, N/A, TMLR’23
- Measuring Massive Multitask Language Understanding, Dan Hendrycks+, N/A, ICLR’21 </p><p>同じモデルに対して、seedを固定し、temperatureを0に設定し、同じ計算機環境に対して、同じinputを入力したら理論上はLLMの出力はdeterministicになるはずだが、deterministicにならず、ベンチマーク上の性能とそもそものraw response自体も試行ごとに大きく変化する、という話。
ただし、これはプロプライエタリLLMや、何らかのinferenceの高速化を実施したInferenceEngine(本研究ではTogetherと呼ばれる実装を使っていそう。vLLM/SGLangだとどうなるのかが気になる)を用いてinferenceを実施した場合での実験結果であり、後述の通り計算の高速化のためのさまざまな実装無しで、deterministicな設定でOpenLLMでinferenceすると出力はdeterministicになる、という点には注意。

GPTやLlama、Mixtralに対して上記ベンチマークを用いてzero-shot/few-shotの設定で実験している。Reasoningモデルは実験に含まれていない。
<img width=”701” height=”325” alt=”Image” src=”

<a href=”https://github.com/user-attachments/assets/b33f14d8-ed86-4589-a427-18a70b35d61a”” target=”_blank” rel=”noopener noreferrer”>https://github.com/user-attachments/assets/b33f14d8-ed86-4589-a427-18a70b35d61a”</a>

/>

LLMのraw_response/multiple choiceのparse結果(i.e., 問題に対する解答部分を抽出した結果)の一致(TARr@N, TARa@N; Nはinferenceの試行回数)も理論上は100%になるはずなのに、ならないことが報告されている。

<img width=”712” height=”432” alt=”Image” src=”

<a href=”https://github.com/user-attachments/assets/3159ff26-fc92-4fa8-90a6-f8c5e7ccf20e”” target=”_blank” rel=”noopener noreferrer”>https://github.com/user-attachments/assets/3159ff26-fc92-4fa8-90a6-f8c5e7ccf20e”</a>

/>

correlation analysisによって、応答の長さ と TAR{r, a}が強い負の相関を示しており、応答が長くなればなるほど不安定さは増すことが分析されている。このため、ontput tokenの最大値を制限することで出力の安定性が増すことを考察している。また、few-shotにおいて高いAcc.の場合は出力がdeterministicになるわけではないが、性能が安定する傾向とのこと。また、OpenAIプラットフォーム上でGPTのfinetuningを実施し実験したが、安定性に寄与はしたが、こちらもdeterministicになるわけではないとのこと。

deterministicにならない原因として、まずmulti gpu環境について検討しているが、multi-gpu環境ではある程度のランダム性が生じることがNvidiaの研究によって報告されているが、これはseedを固定すれば決定論的にできるため問題にならないとのこと。
続いて、inferenceを高速化するための実装上の工夫(e.g., Chunk Prefilling, Prefix Caching, Continuous Batching)などの実装がdeterministicなハイパーパラメータでもdeterministicにならない原因であると考察しており、実際にlocalマシン上でこれらinferenceを高速化するための最適化を何も実施しない状態でLlama-8Bでinferenceを実施したところ、outputはdeterministicになったとのこと。</p><p>論文中に記載がなかったため、どのようなInferenceEngineを利用したか公開されているgithubを見ると下記が利用されていた:

- Together:

https://github.com/togethercomputer/together-python?tab=readme-ov-file



Togetherが内部的にどのような処理をしているかまでは追えていないのだが、異なるInferenceEngineを利用した場合に、どの程度outputの不安定さに差が出るのか(あるいは出ないのか)は気になる。たとえば、transformers/vLLM/SGLangを利用した場合などである。

論文中でも報告されている通り、昔管理人がtransformersを用いて、deterministicな設定でzephyrを用いてinferenceをしたときは、出力はdeterministicになっていたと記憶している(スループットは絶望的だったが…)。</p><p>あと個人的には現実的な速度でオフラインでinference engineを利用した時にdeterministicにはせめてなって欲しいなあという気はするので、何が原因なのかを実装レベルで突き詰めてくれるととても嬉しい(KV Cacheが怪しい気がするけど)。

たとえば最近SLMだったらKVCacheしてVRAM食うより計算し直した方が効率良いよ、みたいな研究があったような。そういうことをしたらlocal llmでdeterministicにならないのだろうか。</p><p>- Defeating Nondeterminism in LLM Inference, Horace He in collaboration with others at Thinking Machines, 2025.09

においてvLLMを用いた場合にDeterministicな推論をするための解決方法が提案されている。</p></span>

#Article #NLP #LanguageModel #python #Blog #read-later #Selected Papers/Blogs


Issue Date: 2025-09-11 Defeating Nondeterminism in LLM Inference, Horace He in collaboration with others at Thinking Machines, 2025.09 Comment<p>元ポスト:

Loading…

</p><p>ポイント解説:

Loading…

</p><p>vLLMにおいてinferenceをdeterministicにする方法が、vLLMのissue number 24583に記載されているので参照のこと。</p><p>transformersでの実装例:

Loading…

</p></span>

</div>

if ('IntersectionObserver' in window) {
  const observer = new IntersectionObserver((entries, obs) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        const el = entry.target;
        const html = el.getAttribute('data-embed');
        if (html) {
          const placeholder = el.querySelector('.tweet-placeholder');
          if (placeholder) placeholder.remove();

          el.innerHTML = html.trim();

          if (window.twttr?.widgets?.load) {
            window.twttr.widgets.load(el);
          }
        }
        obs.unobserve(el); // 処理済みは監視解除
      }
    });
  }, {
    rootMargin: '500px 0px', // 画面手前200pxで読み込み開始
    threshold: 0
  });

  tweets.forEach(tweet => observer.observe(tweet));

} else {
  // IntersectionObserver未対応ブラウザ用のフォールバック
  function lazyLoadFallback() {
    tweets.forEach(el => {
      if (el.getAttribute('data-embed') && el.getBoundingClientRect().top < window.innerHeight) {
        const html = el.getAttribute('data-embed');
        const loadingImg = el.querySelector('.tweet-loading');
        if (loadingImg) loadingImg.remove();
        el.innerHTML = html.trim();
        el.removeAttribute('data-embed');
        if (window.twttr?.widgets?.load) {
          window.twttr.widgets.load(el);
        }
      }
    });
  }
  window.addEventListener('scroll', lazyLoadFallback);
  lazyLoadFallback();
}   }); </script>