dvlt / diagnose.py
aburzio-nv's picture
Isolate native dependency imports
a58d165 verified
Raw History Blame Contribute Delete
2.2 kB
"""Temporary ZeroGPU isolation entrypoint; select a stage with DVLT_DIAGNOSTIC_MODE."""
import os
os.environ.setdefault('OMP_NUM_THREADS', '1')
os.environ.setdefault('MKL_NUM_THREADS', '1')
os.environ.setdefault('OPENBLAS_NUM_THREADS', '1')
import faulthandler
import sys
from pathlib import Path
import platform
import time
faulthandler.enable()
def child_trace():
print('DIAGNOSTIC: child forked', flush=True)
faulthandler.dump_traceback_later(30, repeat=True)
os.register_at_fork(after_in_child=child_trace)
import spaces
import torch
import gradio as gr
torch.set_num_threads(1)
sys.path.insert(0, str(Path(__file__).resolve().parent / 'src'))
mode = os.getenv('DVLT_DIAGNOSTIC_MODE', 'minimal')
print(f'DIAGNOSTIC: mode={mode}, python={platform.python_version()}, torch={torch.__version__}, cuda={torch.version.cuda}, gradio={gr.__version__}', flush=True)
if mode in ('open3d', 'onnxruntime', 'rerun', 'cv2', 'accelerate', 'torchvision'):
import importlib
importlib.import_module(mode)
print(f'DIAGNOSTIC: imported {mode}', flush=True)
if mode in ('imports', 'model'):
import dvlt.scripts.gradio_demo
print('DIAGNOSTIC: DVLT imports complete', flush=True)
if mode == 'model':
from accelerate import Accelerator
from dvlt.util.model_registry import ModelEntry
accelerator = Accelerator(mixed_precision='bf16')
entry = ModelEntry(label='DVLT', config_name='dvlt')
entry.ensure_loaded(accelerator)
print('DIAGNOSTIC: DVLT model loaded', flush=True)
@spaces.GPU(duration=30)
def probe():
print('DIAGNOSTIC: GPU function entered', flush=True)
start = time.monotonic()
x = torch.ones((32, 32), device='cuda')
result = float((x @ x).sum().item())
torch.cuda.synchronize()
print('DIAGNOSTIC: CUDA calculation complete', flush=True)
return {'mode': mode, 'result': result, 'expected': 32768.0, 'gpu': torch.cuda.get_device_name(0), 'seconds': time.monotonic()-start}
with gr.Blocks() as demo:
gr.Markdown(f'# ZeroGPU diagnostic — {mode}')
run = gr.Button('Run GPU probe')
out = gr.JSON()
run.click(probe, outputs=out, api_name='probe')
if __name__ == '__main__':
demo.queue().launch(ssr_mode=False)