mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-01-25 13:50:15 +08:00
move string_to_seed to utils.py
This needs to be visible by ops which may want to do stochastic rounding on the fly.
This commit is contained in:
parent
babccae951
commit
f1e8ccae5c
@ -40,19 +40,6 @@ from comfy.quant_ops import QuantizedTensor
|
|||||||
from comfy.patcher_extension import CallbacksMP, PatcherInjection, WrappersMP
|
from comfy.patcher_extension import CallbacksMP, PatcherInjection, WrappersMP
|
||||||
|
|
||||||
|
|
||||||
def string_to_seed(data):
|
|
||||||
crc = 0xFFFFFFFF
|
|
||||||
for byte in data:
|
|
||||||
if isinstance(byte, str):
|
|
||||||
byte = ord(byte)
|
|
||||||
crc ^= byte
|
|
||||||
for _ in range(8):
|
|
||||||
if crc & 1:
|
|
||||||
crc = (crc >> 1) ^ 0xEDB88320
|
|
||||||
else:
|
|
||||||
crc >>= 1
|
|
||||||
return crc ^ 0xFFFFFFFF
|
|
||||||
|
|
||||||
def set_model_options_patch_replace(model_options, patch, name, block_name, number, transformer_index=None):
|
def set_model_options_patch_replace(model_options, patch, name, block_name, number, transformer_index=None):
|
||||||
to = model_options["transformer_options"].copy()
|
to = model_options["transformer_options"].copy()
|
||||||
|
|
||||||
@ -653,7 +640,7 @@ class ModelPatcher:
|
|||||||
|
|
||||||
out_weight = comfy.lora.calculate_weight(self.patches[key], temp_weight, key)
|
out_weight = comfy.lora.calculate_weight(self.patches[key], temp_weight, key)
|
||||||
if set_func is None:
|
if set_func is None:
|
||||||
out_weight = comfy.float.stochastic_rounding(out_weight, weight.dtype, seed=string_to_seed(key))
|
out_weight = comfy.float.stochastic_rounding(out_weight, weight.dtype, seed=comfy.utils.string_to_seed(key))
|
||||||
if return_weight:
|
if return_weight:
|
||||||
return out_weight
|
return out_weight
|
||||||
elif inplace_update:
|
elif inplace_update:
|
||||||
@ -661,7 +648,7 @@ class ModelPatcher:
|
|||||||
else:
|
else:
|
||||||
comfy.utils.set_attr_param(self.model, key, out_weight)
|
comfy.utils.set_attr_param(self.model, key, out_weight)
|
||||||
else:
|
else:
|
||||||
return set_func(out_weight, inplace_update=inplace_update, seed=string_to_seed(key), return_weight=return_weight)
|
return set_func(out_weight, inplace_update=inplace_update, seed=comfy.utils.string_to_seed(key), return_weight=return_weight)
|
||||||
|
|
||||||
def pin_weight_to_device(self, key):
|
def pin_weight_to_device(self, key):
|
||||||
weight, set_func, convert_func = get_key_weight(self.model, key)
|
weight, set_func, convert_func = get_key_weight(self.model, key)
|
||||||
@ -1341,10 +1328,10 @@ class ModelPatcher:
|
|||||||
key, original_weights=original_weights)
|
key, original_weights=original_weights)
|
||||||
del original_weights[key]
|
del original_weights[key]
|
||||||
if set_func is None:
|
if set_func is None:
|
||||||
out_weight = comfy.float.stochastic_rounding(out_weight, weight.dtype, seed=string_to_seed(key))
|
out_weight = comfy.float.stochastic_rounding(out_weight, weight.dtype, seed=comfy.utils.string_to_seed(key))
|
||||||
comfy.utils.copy_to_param(self.model, key, out_weight)
|
comfy.utils.copy_to_param(self.model, key, out_weight)
|
||||||
else:
|
else:
|
||||||
set_func(out_weight, inplace_update=True, seed=string_to_seed(key))
|
set_func(out_weight, inplace_update=True, seed=comfy.utils.string_to_seed(key))
|
||||||
if self.hook_mode == comfy.hooks.EnumHookMode.MaxSpeed:
|
if self.hook_mode == comfy.hooks.EnumHookMode.MaxSpeed:
|
||||||
# TODO: disable caching if not enough system RAM to do so
|
# TODO: disable caching if not enough system RAM to do so
|
||||||
target_device = self.offload_device
|
target_device = self.offload_device
|
||||||
|
|||||||
@ -1267,3 +1267,16 @@ def convert_old_quants(state_dict, model_prefix="", metadata={}):
|
|||||||
state_dict["{}.comfy_quant".format(k)] = torch.tensor(list(json.dumps(v).encode('utf-8')), dtype=torch.uint8)
|
state_dict["{}.comfy_quant".format(k)] = torch.tensor(list(json.dumps(v).encode('utf-8')), dtype=torch.uint8)
|
||||||
|
|
||||||
return state_dict, metadata
|
return state_dict, metadata
|
||||||
|
|
||||||
|
def string_to_seed(data):
|
||||||
|
crc = 0xFFFFFFFF
|
||||||
|
for byte in data:
|
||||||
|
if isinstance(byte, str):
|
||||||
|
byte = ord(byte)
|
||||||
|
crc ^= byte
|
||||||
|
for _ in range(8):
|
||||||
|
if crc & 1:
|
||||||
|
crc = (crc >> 1) ^ 0xEDB88320
|
||||||
|
else:
|
||||||
|
crc >>= 1
|
||||||
|
return crc ^ 0xFFFFFFFF
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user