in src/peft/utils/integrations.py [0:0]
def get_layer_device_map(model):
"""
Derive the device map for the layers of the model.
"""
main_device = [d for d in model.hf_device_map.values() if d not in ["cpu", "disk"]][0]
execution_device_map = {
name: main_device if device in ["cpu", "disk"] else device for name, device in model.hf_device_map.items()
}
if execution_device_map is None:
return None
if len(execution_device_map) == 1 and "" in execution_device_map:
return {idx: execution_device_map[""] for idx in range(model.config.num_hidden_layers)}
layer_device_map = {}
for layer in execution_device_map:
for idx in range(model.config.num_hidden_layers):
if f".{idx}." in f"{layer}.":
layer_device_map[idx] = execution_device_map[layer]
break
for idx in range(model.config.num_hidden_layers):
if idx not in layer_device_map:
raise RuntimeError(f"layer {idx} has not been mapped to a device.")
return layer_device_map