LING commited on
Commit
e5cbf19
·
1 Parent(s): f55264b

remove description markdown, add GPU support

Browse files
Files changed (2) hide show
  1. app.py +0 -1
  2. runtime.py +6 -6
app.py CHANGED
@@ -30,7 +30,6 @@ def process_fn(xml_path: str | None, use_example: bool, seed: int) -> str:
30
 
31
 
32
  with gr.Blocks(title="DExter", delete_cache=(3600, 86400)) as demo:
33
- gr.Markdown("Generate expressive piano MIDI from a MusicXML score. The official model samples 999 diffusion steps, so generation can take several minutes on CPU.")
34
  inputs = [
35
  gr.File(type="filepath", file_types=[".xml", ".musicxml"], label="Piano MusicXML score").set_info(
36
  "Uncompressed MusicXML, up to 2 MB and 400 notes. Upload takes priority over the example."
 
30
 
31
 
32
  with gr.Blocks(title="DExter", delete_cache=(3600, 86400)) as demo:
 
33
  inputs = [
34
  gr.File(type="filepath", file_types=[".xml", ".musicxml"], label="Piano MusicXML score").set_info(
35
  "Uncompressed MusicXML, up to 2 MB and 400 notes. Upload takes priority over the example."
runtime.py CHANGED
@@ -25,6 +25,7 @@ from renderer import Renderer
25
  CHECKPOINT = ROOT / "weights" / "last-v1.ckpt"
26
  EXAMPLE = ROOT / "examples" / "Schubert_D783_no15.musicxml"
27
  MAX_NOTES = 400
 
28
 
29
 
30
  @lru_cache(maxsize=1)
@@ -38,14 +39,13 @@ def load_model():
38
  cfg = compose(config_name="inference")
39
  args = OmegaConf.to_container(cfg.model.model.args, resolve=True)
40
  task = OmegaConf.to_container(cfg.task, resolve=True)
41
- # Preserve the normalization statistics embedded in the pretrained checkpoint.
42
  for key in ("dataset_means", "dataset_stds"):
43
  if task.get(key) is None:
44
  task.pop(key)
45
  model = getattr(dexter_model, cfg.model.model.name).load_from_checkpoint(
46
- checkpoint_path=str(CHECKPOINT), map_location="cpu", **args, **task
47
  )
48
- model.eval()
49
  return model, int(cfg.seg_len), int(cfg.overlap)
50
 
51
 
@@ -76,11 +76,11 @@ def render(score_path: str | Path, output_path: str | Path, seed: int = 13) -> P
76
  window = codec[start : start + seg_len]
77
  padded = np.pad(window, ((0, seg_len - len(window)), (0, 0)))
78
  segments.append(padded)
79
- score_batch = torch.from_numpy(np.stack(segments))
80
  batch = {
81
- "p_codec": torch.zeros(len(segments), seg_len, 5),
82
  "s_codec": score_batch,
83
- "c_codec": torch.zeros(len(segments), seg_len, 7),
84
  }
85
 
86
  with torch.inference_mode():
 
25
  CHECKPOINT = ROOT / "weights" / "last-v1.ckpt"
26
  EXAMPLE = ROOT / "examples" / "Schubert_D783_no15.musicxml"
27
  MAX_NOTES = 400
28
+ DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
29
 
30
 
31
  @lru_cache(maxsize=1)
 
39
  cfg = compose(config_name="inference")
40
  args = OmegaConf.to_container(cfg.model.model.args, resolve=True)
41
  task = OmegaConf.to_container(cfg.task, resolve=True)
 
42
  for key in ("dataset_means", "dataset_stds"):
43
  if task.get(key) is None:
44
  task.pop(key)
45
  model = getattr(dexter_model, cfg.model.model.name).load_from_checkpoint(
46
+ checkpoint_path=str(CHECKPOINT), map_location=DEVICE, **args, **task
47
  )
48
+ model.to(DEVICE).eval()
49
  return model, int(cfg.seg_len), int(cfg.overlap)
50
 
51
 
 
76
  window = codec[start : start + seg_len]
77
  padded = np.pad(window, ((0, seg_len - len(window)), (0, 0)))
78
  segments.append(padded)
79
+ score_batch = torch.from_numpy(np.stack(segments)).to(DEVICE)
80
  batch = {
81
+ "p_codec": torch.zeros(len(segments), seg_len, 5, device=DEVICE),
82
  "s_codec": score_batch,
83
+ "c_codec": torch.zeros(len(segments), seg_len, 7, device=DEVICE),
84
  }
85
 
86
  with torch.inference_mode():