NeMo
Megatron-LM / megatron /core /inference /sampling_params.py
KexuanShi's picture
Upload folder using huggingface_hub
88e6849 verified
Raw
History Blame Contribute Delete
3.5 kB
# Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
import warnings
from dataclasses import dataclass
from typing import List, Optional
@dataclass
class SamplingParams:
"""Inference parameters sent along with the prompts.
This class contains request-level attributes that control the sampling techniques used when
generating text. This is distinct from megatron.core.inference.contexts.BaseInferenceContext,
which is sets model-level
inference attributes such as the maximum sequence length, and contains the KV cache.
For an explanation of these parameters refer to this blog
https://ivibudh.medium.com/a-guide-to-controlling-llm-model-output-exploring-top-k-top-p-and-
temperature-parameters-ed6a31313910
"""
temperature: float = 1.0
top_k: int = 0
top_p: float = 0.0
return_log_probs: bool = False
skip_prompt_log_probs: bool = False
return_segments: bool = False # Whether to return individually detokenized tokens
num_tokens_to_generate: int = 30
num_tokens_total: Optional[int] = None # Cannot set both this and num_tokens_to_generate
termination_id: Optional[int] = None
top_n_logprobs: int = 0
return_prompt_top_n_logprobs: bool = False # Deprecated field for backwards compatibility
add_BOS: bool = False
stop_words: Optional[List[str]] = (
None # List of strings that will stop generation when produced
)
def __post_init__(self):
"""Ensure backward compatibility for return_prompt_top_n_logprobs.
Sets return_prompt_top_n_logprobs based on skip_prompt_log_probs and top_n_logprobs:
- return_prompt_top_n_logprobs = not skip_prompt_log_probs and top_n_logprobs > 0
"""
self._sync_prompt_logprobs_fields()
def _sync_prompt_logprobs_fields(self):
"""Synchronize return_prompt_top_n_logprobs with skip_prompt_log_probs."""
if self.return_prompt_top_n_logprobs:
warnings.warn(
"return_prompt_top_n_logprobs is deprecated, use skip_prompt_log_probs instead",
DeprecationWarning,
)
assert (
not self.skip_prompt_log_probs
), "return_prompt_top_n_logprobs requires skip_prompt_log_probs to be False"
if self.top_n_logprobs > 0:
self.return_prompt_top_n_logprobs = not self.skip_prompt_log_probs
else:
self.return_prompt_top_n_logprobs = False
def add_attributes(self, attribute_value_pair: dict):
"""Utility to add more attributes to sampling params
Use this method to pass in a custom dictionary to add more sampling parameter attributes.
c = SamplingParams
c.add_attributes({'min_length':4, 'eod_id':153})
Args:
attribute_value_pair (dict): A dictionary containing attributes as the key names and
their values as the values.
"""
for key, value in attribute_value_pair.items():
setattr(self, key, value)
# Synchronize fields after setting attributes
self._sync_prompt_logprobs_fields()
def serialize(self) -> dict:
"""Return a dictionary that is msgpack-serializable."""
return self.__dict__.copy()
@classmethod
def deserialize(cls, data: dict) -> "SamplingParams":
"""Construct SamplingParams from a msgpack-compatible dictionary."""
obj = cls()
obj.add_attributes(data)
return obj