File size: 907 Bytes
4fcc185 | 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 | import datetime,json,os,signal
from pathlib import Path
import torch
STOP=False
def stop_request(signum,frame):
global STOP
STOP=True
def install_signals():
signal.signal(signal.SIGTERM,stop_request);signal.signal(signal.SIGINT,stop_request)
def expired():
from recovery_state import deadline
return STOP or datetime.datetime.now(datetime.timezone.utc)>=deadline()
def require_cuda():
if not torch.cuda.is_available():raise RuntimeError('CUDA is unavailable. Run scripts/run_gpu.sh from the normal Ubuntu SSH shell. CPU fallback is forbidden.')
x=torch.ones((32,32),device='cuda');y=x@x;torch.cuda.synchronize();assert y[0,0].item()==32
return torch.device('cuda')
def atomic_save(state,path):
path=Path(path);temp=path.with_suffix(path.suffix+'.tmp');torch.save(state,temp);os.replace(temp,path)
def cpu_state(model):return {k:v.detach().cpu().clone() for k,v in model.state_dict().items()}
|