[Test] Allow top-k cutoff ties in test_sampling_mask_matches_topk_logprobs (#37873)
This commit is contained in:
@@ -320,8 +320,10 @@ class TestSamplingMask(SamplingMaskTestMixin, CustomTestCase):
|
|||||||
``temperature=1.0`` these are the sampler's distribution, so
|
``temperature=1.0`` these are the sampler's distribution, so
|
||||||
``p = exp(logprob)`` are the exact probabilities. For each token, we check:
|
``p = exp(logprob)`` are the exact probabilities. For each token, we check:
|
||||||
|
|
||||||
1. the sampled token is in the returned top-k-bounded mask,
|
1. the sampled token is in the returned mask,
|
||||||
2. every mask token is present in the returned top logprobs,
|
2. every mask token is in the returned top logprobs and at or above
|
||||||
|
the top-k cutoff (ties at the cutoff survive, so the mask may
|
||||||
|
exceed ``top_k``),
|
||||||
3. sampling_logprob == log(p[sampled] / sum(p[t] for t in mask)).
|
3. sampling_logprob == log(p[sampled] / sum(p[t] for t in mask)).
|
||||||
"""
|
"""
|
||||||
top_k, top_p = _TOP_K, _TOP_P
|
top_k, top_p = _TOP_K, _TOP_P
|
||||||
@@ -359,8 +361,11 @@ class TestSamplingMask(SamplingMaskTestMixin, CustomTestCase):
|
|||||||
mask_set = set(mask)
|
mask_set = set(mask)
|
||||||
|
|
||||||
self.assertIn(output_id, mask_set)
|
self.assertIn(output_id, mask_set)
|
||||||
self.assertLessEqual(len(mask_set), top_k)
|
|
||||||
self.assertTrue(mask_set.issubset(probs))
|
self.assertTrue(mask_set.issubset(probs))
|
||||||
|
top_k_cutoff = sorted(probs.values(), reverse=True)[top_k - 1]
|
||||||
|
for token_id in mask_set:
|
||||||
|
# 1e-3 slack: the kernel cuts on its own probs, not these logprobs.
|
||||||
|
self.assertGreaterEqual(probs[token_id], top_k_cutoff * (1 - 1e-3))
|
||||||
|
|
||||||
support_mass = sum(probs[token_id] for token_id in mask_set)
|
support_mass = sum(probs[token_id] for token_id in mask_set)
|
||||||
expected_logprob = math.log(probs[output_id] / support_mass)
|
expected_logprob = math.log(probs[output_id] / support_mass)
|
||||||
|
|||||||
Reference in New Issue
Block a user