File size: 2,313 Bytes
dee7f43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""Run each delivery with the same TensorFlow Lite release as Android (Linux ABI)."""
import os
os.environ.update(CUDA_VISIBLE_DEVICES='',TF_CPP_MIN_LOG_LEVEL='2',TF_NUM_INTRAOP_THREADS='4',TF_NUM_INTEROP_THREADS='2')
import sys,json,hashlib,tempfile
from pathlib import Path
import tensorflow as tf,numpy as np
root=Path('/workspace/vds-litert-batch2')
for key in sys.argv[1:]:
    out=root/'learning'/key;artifact=out/'model.tflite'
    def load():
        i=tf.lite.Interpreter(model_path=str(artifact),num_threads=4,experimental_op_resolver_type=tf.lite.experimental.OpResolverType.BUILTIN_WITHOUT_DEFAULT_DELEGATES)
        return i,{n:i.get_signature_runner(n) for n in ['infer','train','save','restore']}
    i,s=load();x=np.random.default_rng(420).uniform(0,1,(1,3,128,192)).astype(np.float32)
    if 'dinov3' in key:
        y=np.zeros((1,3,448,448),np.float32);y[:,2]=1;y[:,0,100:250,150:300]=1;y[:,1,160:170,200:210]=1
        targets={'y':y,'presence':np.array([[1,0]],np.float32),'abstention':np.array([0],np.float32),'supervision':np.ones(4,np.float32)}
    else:
        y=np.zeros((1,100,6),np.float32);y[0,0]=[.2,.2,.4,.5,0,1];y[0,1]=[.6,.5,.8,.8,1,1];targets={'y':y}
    before=s['infer'](x=x);loss=float(s['train'](x=x,**targets,learning_rate=np.float32(.001))['loss']);assert np.isfinite(loss)
    after=s['infer'](x=x);assert any(not np.array_equal(before[n],after[n]) for n in before)
    with tempfile.TemporaryDirectory() as d:
        path=np.array(str(Path(d)/'weights'),dtype=np.bytes_);s['save'](checkpoint_path=path)
        j,t=load();t['restore'](checkpoint_path=path)
        for n,v in after.items():np.testing.assert_array_equal(v,t['infer'](x=x)[n])
        for runner in [s,t]:runner['train'](x=x,**targets,learning_rate=np.float32(.001))
        a=s['infer'](x=x);b=t['infer'](x=x)
        for n in a:np.testing.assert_array_equal(a[n],b[n])
    report={'key':key,'runtime':tf.__version__,'platform':'Linux x86_64; same LiteRT release as Android, different ABI','sha256':hashlib.sha256(artifact.read_bytes()).hexdigest(),'train':True,'loss':loss,'restart_exact':True,'optimizer_resume_exact':True,'two_object_fixture':'dinov3' not in key}
    (out/'runtime216_validation.json').write_text(json.dumps(report,indent=2)+'\n');print(json.dumps(report),flush=True)
    del i,s,j,t