MCPcopy Create free account
hub / github.com/MeiGen-AI/MultiTalk / init_weights_on_device

Function init_weights_on_device

src/utils.py:6–60  ·  view source on GitHub ↗
(device=torch.device("meta"), include_buffers: bool = False)

Source from the content-addressed store, hash-verified

4
5@contextmanager
6def init_weights_on_device(device=torch.device("meta"), include_buffers: bool = False):
7 old_register_parameter = torch.nn.Module.register_parameter
8 if include_buffers:
9 old_register_buffer = torch.nn.Module.register_buffer
10
11 def register_empty_parameter(module, name, param):
12 old_register_parameter(module, name, param)
13 if param is not None:
14 param_cls = type(module._parameters[name])
15 kwargs = module._parameters[name].__dict__
16 kwargs["requires_grad"] = param.requires_grad
17 module._parameters[name] = param_cls(
18 module._parameters[name].to(device), **kwargs
19 )
20
21 def register_empty_buffer(module, name, buffer, persistent=True):
22 old_register_buffer(module, name, buffer, persistent=persistent)
23 if buffer is not None:
24 module._buffers[name] = module._buffers[name].to(device)
25
26 def patch_tensor_constructor(fn):
27 def wrapper(*args, **kwargs):
28 kwargs["device"] = device
29 return fn(*args, **kwargs)
30
31 return wrapper
32
33 if include_buffers:
34 tensor_constructors_to_patch = {
35 torch_function_name: getattr(torch, torch_function_name)
36 for torch_function_name in ["empty", "zeros", "ones", "full"]
37 }
38 else:
39 tensor_constructors_to_patch = {}
40
41 try:
42 torch.nn.Module.register_parameter = register_empty_parameter
43 if include_buffers:
44 torch.nn.Module.register_buffer = register_empty_buffer
45 for torch_function_name in tensor_constructors_to_patch.keys():
46 setattr(
47 torch,
48 torch_function_name,
49 patch_tensor_constructor(getattr(torch, torch_function_name)),
50 )
51 yield
52 finally:
53 torch.nn.Module.register_parameter = old_register_parameter
54 if include_buffers:
55 torch.nn.Module.register_buffer = old_register_buffer
56 for (
57 torch_function_name,
58 old_torch_function,
59 ) in tensor_constructors_to_patch.items():
60 setattr(torch, torch_function_name, old_torch_function)

Callers 2

__init__Method · 0.90
__init__Method · 0.90

Calls 2

patch_tensor_constructorFunction · 0.85
deviceMethod · 0.80

Tested by

no test coverage detected