[diffusion] refactor: simplify sampling params' override logic (#14539)
This commit is contained in:
@@ -116,8 +116,8 @@ class SamplingParams:
|
||||
fps: int = 24
|
||||
|
||||
# Denoising parameters
|
||||
num_inference_steps: int = 50
|
||||
guidance_scale: float = 1.0
|
||||
num_inference_steps: int = None
|
||||
guidance_scale: float = None
|
||||
guidance_rescale: float = 0.0
|
||||
boundary_ratio: float | None = None
|
||||
|
||||
@@ -559,35 +559,26 @@ class SamplingParams:
|
||||
def _merge_with_user_params(self, user_params: "SamplingParams"):
|
||||
"""
|
||||
Merges parameters from a user-provided SamplingParams object.
|
||||
|
||||
This method updates the current object with values from `user_params`,
|
||||
but skips any fields that are explicitly defined in the current object's
|
||||
subclass. This is to preserve model-specific optimal parameters.
|
||||
It also skips fields that the user has not changed from the default
|
||||
in `user_params`.
|
||||
"""
|
||||
if user_params is None:
|
||||
return
|
||||
|
||||
# user is not allowed to modify any param defined in the SamplingParams subclass
|
||||
subclass_defined_fields = set(type(self).__annotations__.keys())
|
||||
predefined_fields = set(type(self).__annotations__.keys())
|
||||
|
||||
# global switch: if True, allow overriding protected fields
|
||||
allow_override_protected = not user_params.no_override_protected_fields
|
||||
|
||||
for field in dataclasses.fields(user_params):
|
||||
field_name = field.name
|
||||
user_value = getattr(user_params, field_name)
|
||||
default_value = getattr(self, field_name)
|
||||
default_class_value = getattr(SamplingParams, field_name)
|
||||
|
||||
# A field is considered user-modified if its value is different from
|
||||
# the default
|
||||
is_user_modified = user_value != default_value
|
||||
# A field is considered user-modified if its value is different from the default
|
||||
is_user_modified = user_value != default_class_value
|
||||
is_protected_field = field_name in predefined_fields
|
||||
if is_user_modified and (
|
||||
allow_override_protected or field_name not in subclass_defined_fields
|
||||
allow_override_protected or not is_protected_field
|
||||
):
|
||||
if hasattr(self, field_name):
|
||||
setattr(self, field_name, user_value)
|
||||
setattr(self, field_name, user_value)
|
||||
self.height_not_provided = user_params.height_not_provided
|
||||
self.width_not_provided = user_params.width_not_provided
|
||||
self.__post_init__()
|
||||
|
||||
@@ -237,7 +237,7 @@
|
||||
"LatentPreparationStage": 12.71,
|
||||
"TimestepPreparationStage": 2.91,
|
||||
"DenoisingStage": 26403.1,
|
||||
"DecodingStage": 286.85
|
||||
"DecodingStage": 489.8
|
||||
},
|
||||
"denoise_step_ms": {
|
||||
"0": 511.3,
|
||||
|
||||
Reference in New Issue
Block a user