Files

26 lines
1.8 KiB
Python

import json,pathlib,subprocess,stat
root=pathlib.Path('/home/ps/huobao-gpu-selection')
def run(*a):return subprocess.check_output(a,text=True,stderr=subprocess.STDOUT)
report={'workers':{},'existing_gpu1_services':{}}
for name in ('huobao-comfy-gpu1','comfyui','h3-caption-gpu3-canary-8a5f'):
d=json.loads(run('docker','inspect',name))[0]
report['workers'][name]={'running':d['State']['Running'],'started_at':d['State']['StartedAt'],'gpu':d['HostConfig'].get('DeviceRequests'),'networks':list(d['NetworkSettings']['Networks'])}
if name=='huobao-comfy-gpu1':
assert not d['HostConfig']['PortBindings'] and d['HostConfig']['ReadonlyRootfs'] and not d['HostConfig']['Privileged']
assert list(d['NetworkSettings']['Networks'])==['zq-platform-network']
assert d['HostConfig']['DeviceRequests'][0]['DeviceIDs']==['1']
for name in ('comfyui-manju','canvas-minimax-lipsync','canvas-cosyvoice','followup-audio-asr'):
d=json.loads(run('docker','inspect',name))[0]
report['existing_gpu1_services'][name]={'running':d['State']['Running'],'started_at':d['State']['StartedAt']}
assert d['State']['Running']
d=json.loads(run('docker','inspect','canvas-h3-prompt-normalizer-healthy-20261026'))[0]
tokens=pathlib.Path(next(m['Source'] for m in d['Mounts'] if m['Destination']=='/run/h3-workers'))
assert stat.S_IMODE((tokens/'gpu1.token').stat().st_mode)&0o007==0
report['gpu1_token_not_world_readable']=True
state=json.loads((root/'state.json').read_text());report['admission']=json.loads(pathlib.Path(state['admission']).read_text())
assert set(report['admission']['admit'])=={'default','gpu1','gpu3'}
assert all(v['running'] for v in report['workers'].values())
(root/'final-audit.json').write_text(json.dumps(report,indent=2))
print(json.dumps(report,ensure_ascii=False))
print(run('nvidia-smi','--query-gpu=index,memory.total,memory.used,memory.free','--format=csv,noheader'))