VoiceMem-Jev / python /voicemem_jev /studio_adapter.py
Sorbett's picture
Update VoiceMem-Jev
268e727 verified
Raw History Blame Contribute Delete
2.53 kB
"""Expose VoiceMem-Jev through Studio's routing lifecycle."""
from .cuda_runtime import BUCKETS, CompiledCudaRouter
from .adapter import VoiceDepthRouter
class CompiledVoiceDepthRouter(VoiceDepthRouter):
"""Keep host cancellation, caching and GPU admission around compiled calls."""
def _load(self):
import torch
from voicemem.engine import cpu_thread_budget
threads = cpu_thread_budget()
if torch.get_num_threads() != threads:
torch.set_num_threads(threads)
print(f'[jev] Torch CPU thread budget fixed before compilation: {threads}', flush=True)
runtime = CompiledCudaRouter(self.path, device=self.device)
runtime._load()
self._model, self._tokenizer = runtime.model, runtime.tokenizer
with torch.inference_mode():
for bucket in BUCKETS:
ids = torch.full((2, bucket), self._tokenizer.pad_token_id,
dtype=torch.long, device=self.device)
ids[:, 0] = self._tokenizer.cls_token_id
ids[:, -1] = self._tokenizer.sep_token_id
mask = torch.ones_like(ids)
observed = torch.zeros((1, 7), dtype=torch.float32, device=self.device)
for _ in range(3):
self._model(ids, mask, observed).float().cpu().numpy().copy()
if self._model.execution_mode == 'compiled-cuda':
print('[jev] VoiceMem-Jev: compiled CUDA runtime ready; all five buckets warm', flush=True)
else:
print('[jev] VoiceMem-Jev: same-weight eager CUDA fallback ready', flush=True)
def create(*, model, base_url='', api_key='', options=None):
"""Select the existing eager/ONNX adapter or opt into compiled CUDA."""
options = dict(options or {})
compiled = options.pop('compiled', False)
if type(compiled) is not bool:
raise ValueError('compiled must be a boolean')
if compiled and (options.get('backend', 'onnx') != 'eager'
or not str(options.get('device', 'cpu')).startswith('cuda')):
raise ValueError('Compiled inference requires eager CUDA')
from .adapter import create as ordinary
adapter = ordinary(model=model, base_url=base_url, api_key=api_key, options=options)
if not compiled:
return adapter
if adapter.backend != 'eager' or not adapter.device.startswith('cuda'):
raise ValueError('Compiled inference requires eager CUDA')
return CompiledVoiceDepthRouter(model, **options)