Fix offload disk for loading derivated model checkpoint into base model (#27253)
* fix * style * add test
This commit is contained in:
@@ -750,6 +750,46 @@ class ModelUtilsTest(TestCasePlus):
|
||||
|
||||
self.assertTrue(torch.allclose(outputs1.logits.cpu(), outputs2.logits.cpu()))
|
||||
|
||||
@require_accelerate
|
||||
@mark.accelerate_tests
|
||||
@require_torch_accelerator
|
||||
def test_from_pretrained_disk_offload_derived_to_base_model(self):
|
||||
derived_model = AutoModelForCausalLM.from_pretrained("hf-internal-testing/tiny-random-gpt2")
|
||||
|
||||
device_map = {
|
||||
"wte": 0,
|
||||
"wpe": 0,
|
||||
"h.0": "cpu",
|
||||
"h.1": "cpu",
|
||||
"h.2": "cpu",
|
||||
"h.3": "disk",
|
||||
"h.4": "disk",
|
||||
"ln_f": 0,
|
||||
}
|
||||
with tempfile.TemporaryDirectory() as tmp_dir:
|
||||
inputs = torch.tensor([[1, 2, 3]]).to(0)
|
||||
derived_model.save_pretrained(tmp_dir, use_safetensors=True)
|
||||
base_model = AutoModel.from_pretrained(tmp_dir)
|
||||
outputs1 = base_model.to(0)(inputs)
|
||||
|
||||
# with disk offload
|
||||
offload_folder = os.path.join(tmp_dir, "offload")
|
||||
base_model_with_offload = AutoModel.from_pretrained(
|
||||
tmp_dir, device_map=device_map, offload_folder=offload_folder
|
||||
)
|
||||
outputs2 = base_model_with_offload(inputs)
|
||||
self.assertTrue(torch.allclose(outputs1[0].cpu(), outputs2[0].cpu()))
|
||||
|
||||
# With state dict temp offload
|
||||
new_model_with_offload = AutoModel.from_pretrained(
|
||||
tmp_dir,
|
||||
device_map=device_map,
|
||||
offload_folder=offload_folder,
|
||||
offload_state_dict=True,
|
||||
)
|
||||
outputs2 = new_model_with_offload(inputs)
|
||||
self.assertTrue(torch.allclose(outputs1[0].cpu(), outputs2[0].cpu()))
|
||||
|
||||
def test_cached_files_are_used_when_internet_is_down(self):
|
||||
# A mock response for an HTTP head request to emulate server down
|
||||
response_mock = mock.Mock()
|
||||
|
||||
Reference in New Issue
Block a user