Eliovp
Publish balanced MXFP4 conversion of abenzerps BF16 fine-tune
f5b159e
Raw History Blame Contribute Delete
2.47 kB
import sys,json,hashlib
from pathlib import Path
import argparse
PACKAGE=Path(__file__).resolve().parent.parent
sys.path.insert(0,str(PACKAGE))
p=argparse.ArgumentParser()
p.add_argument('--model-dir',type=Path,required=True)
p.add_argument('--output',type=Path,required=True)
a=p.parse_args()
from qwen_image21.runtime import ImageEngine
import torch
from PIL import Image
out=a.output;out.mkdir(parents=True,exist_ok=False)
e=ImageEngine(a.model_dir)
# Keep snapshots on CPU, outside timed qualification; trace request boundaries.
captured={}
def capture_tensor(name,t):
if isinstance(t,tuple):t=t[0]
if not isinstance(t,torch.Tensor):return
captured[name]=t.detach().cpu().contiguous()
orig=e.pipeline.encode_prompt
def encode(*args,**kwargs):
r=orig(*args,**kwargs);capture_tensor('prompt',r[0]);return r
e.pipeline.encode_prompt=encode
e.pipeline.vae.decoder.register_forward_pre_hook(lambda m,a: capture_tensor('vae_input',a[0]))
e.pipeline.vae.decoder.register_forward_hook(lambda m,a,o: capture_tensor('vae_output',o))
prompt='A blue ceramic teapot on a wooden table, soft daylight, studio photograph'
records=[];control=None;image=None
for name,mode in [('a0','text-to-image'),('a1','text-to-image'),('b_rgba','rgba'),('a2','text-to-image'),('b_edit','edit'),('a3','text-to-image'),('a4','text-to-image')]:
captured={}
if mode=='text-to-image':p=prompt;seed=51;im=None
elif mode=='rgba':p='A cute cartoon dragon sticker.';seed=52;im=None
else:p='Change the blue teapot to bright red. Keep the table and composition.';seed=53;im=image
result,png,metrics=e.generate(p,width=1024,height=1024,seed=seed,mode=mode,image=im)
(out/(name+'.png')).write_bytes(png)
if image is None:image=result
row={'name':name,'sha':hashlib.sha256(png).hexdigest(),'metrics':metrics}
if mode=='text-to-image':
if control is None:control=captured
row['stages']={}
for key,t in captured.items():
diff=(t.float()-control[key].float()).abs()
row['stages'][key]={'exact':torch.equal(t,control[key]),'max':diff.max().item(),'mae':diff.mean().item()}
records.append(row);print(json.dumps(row),flush=True)
(out/'result.json').write_text(json.dumps(records,indent=2)+'\n')
assert all(row['stages'][stage]['exact'] for row in records if 'stages' in row
for stage in ('prompt','vae_input')), 'Request conditioning or denoising state leaked across requests'
print('PASS: exact prompt embeddings and final denoising latents across immediate and A-B-A repeats')