26 lines
1.8 KiB
Python
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'))
|