gatilin's picture
Publish pinned visual components with exact source payloads and native numerical validation
6b38b7c verified
Raw History Blame Contribute Delete
1.06 kB
import json
from pathlib import Path
from functools import partial
import torch
from torch import nn
from accelerate import init_empty_weights
from safetensors.torch import load_file
from native.transformer import VisionTransformer,LayerNorm
def construct(root):
cfg=json.loads((Path(root)/'source_config.json').read_text())['model_cfg']
v=cfg['vision_cfg']
return VisionTransformer(image_size=v['image_size'],patch_size=v['patch_size'],width=v['width'],layers=v['layers'],heads=v['width']//v['head_width'],mlp_ratio=4.0,in_channels=v['in_channels'],no_ln_pre=v['no_ln_pre'],pool_type=v['pool_type'],final_ln_after_pool=v['final_ln_after_pool'],norm_layer=partial(LayerNorm,**v['norm_kwargs']),act_layer=nn.GELU,output_tokens=v['output_tokens'],output_dim=cfg['embed_dim'])
def load_model(root,device='cpu',dtype=torch.float32):
with init_empty_weights(include_buffers=False):m=construct(root)
m.load_state_dict(load_file(str(Path(root)/'model.safetensors')),strict=True,assign=True)
return m.to(device=device,dtype=dtype).eval()