Views
No views yet
├── checkpoint-900/ # Training checkpoint at step 900
├── checkpoint-950/ # Training checkpoint at step 950
├── model-00001-of-00002.safetensors # Full model weights (part 1)
├── model-00002-of-00002.safetensors # Full model weights (part 2)
├── model.safetensors.index.json
├── config.json
├── generation_config.json
├── tokenizer files...
├── trainer_state.json
├── training_args.bin
└── train_results.json1import torch
2import glob
3from transformers import AutoModel, AutoTokenizer
4from safetensors.torch import load_file
5
6BASE_MODEL = "OpenGVLab/InternVL3-1B"
7CHECKPOINT = "path/to/downloaded/checkpoint"
8
9# Load base model
10model = AutoModel.from_pretrained(BASE_MODEL, torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")
11tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, trust_remote_code=True)
12
13# Load checkpoint weights
14safetensor_files = sorted(glob.glob(f"{CHECKPOINT}/model*.safetensors"))
15all_weights = {}
16for sf in safetensor_files:
17 all_weights.update(load_file(sf))
18
19# Separate and merge LoRA weights
20model_state = model.state_dict()
21for key, value in all_weights.items():
22 if '.base_layer.' in key:
23 # Find LoRA weights
24 lora_a_key = key.replace('.base_layer.', '.lora_A.default.')
25 lora_b_key = key.replace('.base_layer.', '.lora_B.default.')
26 model_key = key.replace('base_model.model.', '').replace('.base_layer', '')
27
28 if lora_a_key in all_weights and lora_b_key in all_weights:
29 lora_a = all_weights[lora_a_key].float()
30 lora_b = all_weights[lora_b_key].float()
31 merged = value.float() + torch.matmul(lora_b, lora_a)
32 if model_key in model_state:
33 model_state[model_key] = merged.to(value.dtype)
34
35model.load_state_dict(model_state)
36print("✅ Model loaded with merged LoRA weights")1from peft import PeftModel
2model = PeftModel.from_pretrained(base_model, "blind-assist/internvl2-5-4b-walk-lora-v2-100")