Files
dj/integration-work/install_gpu1_worker.py

36 lines
2.5 KiB
Python

"""Prepare a reviewable GPU1 container definition; this script starts no services."""
import pathlib,json,hashlib,secrets,subprocess,sys
sys.path.insert(0,'/home/ps/huobao-gpu-selection')
from docker_worker_ops import api,inspect,clone,set_env,replace_bind,write_json
root=pathlib.Path('/home/ps/huobao-gpu-selection');work=root/'gpu1';name='huobao-comfy-gpu1'
assert not work.exists(),'GPU1 preparation already exists; inspect rather than overwrite'
work.mkdir(mode=0o700)
source=inspect('comfyui');cfg=clone(source,name)
write_json(work/'source.inspect.json',source)
for kind in ('input','output','user','temp','control'):(work/kind).mkdir(mode=0o700)
token=secrets.token_hex(32);(work/'control/canary.token').write_text(token);(work/'control/canary.token').chmod(0o600)
write_json(work/'control/control.json',{'schema':1,'maintenance':True,'purpose':'Huobao GPU1 authenticated submissions only'})
hist=work/'history.json';write_json(hist,{'schema':1,'queue_empty':True,'source_container_id':'huobao-gpu1-initial','history':{}})
for kind in ('input','output','user','temp'):replace_bind(cfg,'/app/'+kind,work/kind)
replace_bind(cfg,'/run/h3-control',work/'control')
replace_bind(cfg,'/run/h3-history.json',hist)
set_env(cfg,'H3_HISTORY_SNAPSHOT_SHA256',hashlib.sha256(hist.read_bytes()).hexdigest())
set_env(cfg,'H3_HISTORY_SOURCE_CONTAINER_ID','huobao-gpu1-initial')
# Reuse the existing read-only visual-verification socket, not its GPU workload.
control=next(m['Source'] for m in source['Mounts'] if m['Destination']=='/run/h3-control')
vision=pathlib.Path(control)/'vision'
if vision.exists():
cfg['HostConfig']['Binds'].append(str(vision)+':/run/h3-shared-vision:ro')
set_env(cfg,'H3_VISION_SOCKET','/run/h3-shared-vision/vision.sock')
for i,a in enumerate(cfg['Cmd']):
if a=='--temp-directory':cfg['Cmd'][i+1]='/app/temp'
cfg['Cmd']+=['--reserve-vram','8']
cfg['HostConfig']['DeviceRequests']=[{'Driver':'nvidia','Count':0,'DeviceIDs':['1'],'Capabilities':[['gpu','gpu']],'Options':{}}]
cfg['HostConfig']['PortBindings']={};cfg['HostConfig']['PublishAllPorts']=False
cfg['HostConfig']['NetworkMode']='zq-platform-network'
cfg['NetworkingConfig']={'EndpointsConfig':{'zq-platform-network':{'Aliases':[name]}}}
cfg['HostConfig']['RestartPolicy']={'Name':'unless-stopped','MaximumRetryCount':0}
assert cfg['HostConfig']['Privileged'] is False and cfg['HostConfig']['ReadonlyRootfs'] is True
write_json(work/'create.json',cfg)
print('Prepared GPU1 definition only; no container created or started. Device 1, reserve 8 GiB, private zq-platform-network, no host ports, read-only root, user 1000.')