AudioModel-v1 / benchmark_throughput.py
TobiasLogic's picture
Upload benchmark_throughput.py with huggingface_hub
b673e72 verified
Raw
History Blame Contribute Delete
2.46 kB
from __future__ import annotations
import argparse
import time
import torch
import torch.nn.functional as F
from audio_dit import AudioDiT
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--batch-sizes", type=int, nargs="+", default=[64, 128, 256])
ap.add_argument("--x-res", type=int, default=384)
ap.add_argument("--y-res", type=int, default=256)
ap.add_argument("--warmup", type=int, default=10)
ap.add_argument("--iters", type=int, default=40)
args = ap.parse_args()
dev = "cuda"
torch.backends.cuda.matmul.allow_tf32 = True
torch.backends.cudnn.allow_tf32 = True
model = AudioDiT(x_res=args.x_res, y_res=args.y_res).to(dev)
opt = torch.optim.AdamW(model.parameters(), lr=2e-4)
print(f"[bench] {model.num_params()/1e6:.2f}M params, grid {model.grid_h}x{model.grid_w} "
f"({model.grid_h*model.grid_w} tokens) at x_res={args.x_res} y_res={args.y_res}", flush=True)
for B in args.batch_sizes:
try:
torch.cuda.reset_peak_memory_stats()
x1 = torch.randn(B, 1, args.y_res, args.x_res, device=dev)
seq = torch.randn(B, 32, 768, device=dev)
pool = torch.randn(B, 512, device=dev)
def step():
x0 = torch.randn_like(x1)
t = torch.sigmoid(torch.randn(B, device=dev))
tb = t.view(-1, 1, 1, 1)
xt = (1 - tb) * x0 + tb * x1
target = x1 - x0
with torch.autocast("cuda", dtype=torch.bfloat16):
v = model(xt, t, seq, pool)
loss = F.mse_loss(v.float(), target)
opt.zero_grad(set_to_none=True)
loss.backward()
opt.step()
for _ in range(args.warmup):
step()
torch.cuda.synchronize()
t0 = time.time()
for _ in range(args.iters):
step()
torch.cuda.synchronize()
el = time.time() - t0
sps = args.iters / el
peak = torch.cuda.max_memory_allocated() / 2**30
print(f"[bench] batch={B:<5} {sps:6.2f} steps/s {sps*B:8.1f} samples/s "
f"peak {peak:5.1f} GiB 90k-step ETA {90000/sps/3600:5.2f} h", flush=True)
except torch.cuda.OutOfMemoryError:
print(f"[bench] batch={B:<5} OOM", flush=True)
torch.cuda.empty_cache()
if __name__ == "__main__":
main()