From 1764916df45481195f722e73cf28a1c5959ce8b5 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 16:14:46 +0200 Subject: [PATCH 01/13] Update profile() --- utils/torch_utils.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index 55a5fd7875bb..3173bf11ee75 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -110,9 +110,10 @@ def profile(x, ops, n=100, device=None): x.requires_grad = True print(f"{'Params':>12s}{'GFLOPs':>12s}{'forward (ms)':>16s}{'backward (ms)':>16s}{'input':>24s}{'output':>24s}") for m in ops if isinstance(ops, list) else [ops]: + torch.cuda.empty_cache() m = m.to(device) if hasattr(m, 'to') else m # device m = m.half() if hasattr(m, 'half') and isinstance(x, torch.Tensor) and x.dtype is torch.float16 else m # type - dtf, dtb, t = 0., 0., [0., 0., 0.] # dt forward, backward + tf, tb, t = 0., 0., [0., 0., 0.] # dt forward, backward try: flops = thop.profile(m, inputs=(x,), verbose=False)[0] / 1E9 * 2 # GFLOPs except: @@ -127,13 +128,15 @@ def profile(x, ops, n=100, device=None): t[2] = time_sync() except: # no backward method t[2] = float('nan') - dtf += (t[1] - t[0]) * 1000 / n # ms per op forward - dtb += (t[2] - t[1]) * 1000 / n # ms per op backward + tf += (t[1] - t[0]) * 1000 / n # ms per op forward + tb += (t[2] - t[1]) * 1000 / n # ms per op backward + mem = f'{torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0:.3g}G' # (GB) + print(mem) s_in = tuple(x.shape) if isinstance(x, torch.Tensor) else 'list' s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters - print(f'{p:12}{flops:12.4g}{dtf:16.4g}{dtb:16.4g}{str(s_in):>24s}{str(s_out):>24s}') + print(f'{p:12}{flops:12.4g}{tf:16.4g}{tb:16.4g}{str(s_in):>24s}{str(s_out):>24s}') def is_parallel(model): From 6923902d105b26f2b70774f761978868cfd93ff7 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 16:22:25 +0200 Subject: [PATCH 02/13] Update profile() --- utils/torch_utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index 3173bf11ee75..d0270693f579 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -108,7 +108,8 @@ def profile(x, ops, n=100, device=None): device = device or select_device() x = x.to(device) x.requires_grad = True - print(f"{'Params':>12s}{'GFLOPs':>12s}{'forward (ms)':>16s}{'backward (ms)':>16s}{'input':>24s}{'output':>24s}") + print(f"{'Params':>12s}{'GFLOPs':>12s}{'GPU_mem (GB)':>12s}{'forward (ms)':>14s}{'backward (ms)':>14s}" + f"{'input':>24s}{'output':>24s}") for m in ops if isinstance(ops, list) else [ops]: torch.cuda.empty_cache() m = m.to(device) if hasattr(m, 'to') else m # device @@ -130,13 +131,12 @@ def profile(x, ops, n=100, device=None): t[2] = float('nan') tf += (t[1] - t[0]) * 1000 / n # ms per op forward tb += (t[2] - t[1]) * 1000 / n # ms per op backward - mem = f'{torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0:.3g}G' # (GB) - print(mem) + mem = f'{torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0:.3g}G' # (GB) s_in = tuple(x.shape) if isinstance(x, torch.Tensor) else 'list' s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters - print(f'{p:12}{flops:12.4g}{tf:16.4g}{tb:16.4g}{str(s_in):>24s}{str(s_out):>24s}') + print(f'{p:12}{flops:12.4g}{mem:12.3g}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}') def is_parallel(model): From 3245b750bf4670c641c3bb650491d325cac7aa98 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 16:24:52 +0200 Subject: [PATCH 03/13] Update profile() --- utils/torch_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index d0270693f579..3ab45e2595dc 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -108,7 +108,7 @@ def profile(x, ops, n=100, device=None): device = device or select_device() x = x.to(device) x.requires_grad = True - print(f"{'Params':>12s}{'GFLOPs':>12s}{'GPU_mem (GB)':>12s}{'forward (ms)':>14s}{'backward (ms)':>14s}" + print(f"{'Params':>12s}{'GFLOPs':>12s}{'GPU Memory':>12s}{'forward (ms)':>14s}{'backward (ms)':>14s}" f"{'input':>24s}{'output':>24s}") for m in ops if isinstance(ops, list) else [ops]: torch.cuda.empty_cache() @@ -136,7 +136,7 @@ def profile(x, ops, n=100, device=None): s_in = tuple(x.shape) if isinstance(x, torch.Tensor) else 'list' s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters - print(f'{p:12}{flops:12.4g}{mem:12.3g}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}') + print(f'{p:12}{flops:12.4g}{mem:12s}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}') def is_parallel(model): From 182f5de027f61a4252e27e1c03975dc636492272 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 16:25:43 +0200 Subject: [PATCH 04/13] Update profile() --- utils/torch_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index 3ab45e2595dc..763e22b29e90 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -136,7 +136,7 @@ def profile(x, ops, n=100, device=None): s_in = tuple(x.shape) if isinstance(x, torch.Tensor) else 'list' s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters - print(f'{p:12}{flops:12.4g}{mem:12s}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}') + print(f'{p:12}{flops:12.4g}{mem:>12s}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}') def is_parallel(model): From dff8112aff56dd44f27b10687e6953fdec9be60a Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 16:26:31 +0200 Subject: [PATCH 05/13] Update profile() --- utils/torch_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index 763e22b29e90..126adf923244 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -108,7 +108,7 @@ def profile(x, ops, n=100, device=None): device = device or select_device() x = x.to(device) x.requires_grad = True - print(f"{'Params':>12s}{'GFLOPs':>12s}{'GPU Memory':>12s}{'forward (ms)':>14s}{'backward (ms)':>14s}" + print(f"{'Params':>12s}{'GFLOPs':>12s}{'GPU_memory':>12s}{'forward (ms)':>14s}{'backward (ms)':>14s}" f"{'input':>24s}{'output':>24s}") for m in ops if isinstance(ops, list) else [ops]: torch.cuda.empty_cache() @@ -132,7 +132,7 @@ def profile(x, ops, n=100, device=None): tf += (t[1] - t[0]) * 1000 / n # ms per op forward tb += (t[2] - t[1]) * 1000 / n # ms per op backward - mem = f'{torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0:.3g}G' # (GB) + mem = f'{torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0:.3f}G' # (GB) s_in = tuple(x.shape) if isinstance(x, torch.Tensor) else 'list' s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters From 1d609d4148bd10b23ceeaf19c309a539323a6947 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 16:27:43 +0200 Subject: [PATCH 06/13] Update profile() --- utils/torch_utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index 126adf923244..755089e7cd86 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -108,7 +108,7 @@ def profile(x, ops, n=100, device=None): device = device or select_device() x = x.to(device) x.requires_grad = True - print(f"{'Params':>12s}{'GFLOPs':>12s}{'GPU_memory':>12s}{'forward (ms)':>14s}{'backward (ms)':>14s}" + print(f"{'Params':>12s}{'GFLOPs':>12s}{'GPU_mem (GB)':>14s}{'forward (ms)':>14s}{'backward (ms)':>14s}" f"{'input':>24s}{'output':>24s}") for m in ops if isinstance(ops, list) else [ops]: torch.cuda.empty_cache() @@ -132,11 +132,11 @@ def profile(x, ops, n=100, device=None): tf += (t[1] - t[0]) * 1000 / n # ms per op forward tb += (t[2] - t[1]) * 1000 / n # ms per op backward - mem = f'{torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0:.3f}G' # (GB) + mem = torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0 # (GB) s_in = tuple(x.shape) if isinstance(x, torch.Tensor) else 'list' s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters - print(f'{p:12}{flops:12.4g}{mem:>12s}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}') + print(f'{p:12}{flops:12.4g}{mem:>14.3f}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}') def is_parallel(model): From acfa057a37851edc75ce6d88aae1c3cee5a5937a Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 16:36:17 +0200 Subject: [PATCH 07/13] Update profile() --- utils/torch_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index 755089e7cd86..38647e87cf72 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -125,7 +125,7 @@ def profile(x, ops, n=100, device=None): y = m(x) t[1] = time_sync() try: - _ = y.sum().backward() + _ = [y.sum().backward() for y in y] if isinstance(y, list) else y.sum().backward() t[2] = time_sync() except: # no backward method t[2] = float('nan') From e094387eaa55f5cd42058dc18bae3e8a4b21ebbb Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 16:50:24 +0200 Subject: [PATCH 08/13] Update profile() --- utils/torch_utils.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index 38647e87cf72..28f204f53783 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -125,9 +125,10 @@ def profile(x, ops, n=100, device=None): y = m(x) t[1] = time_sync() try: - _ = [y.sum().backward() for y in y] if isinstance(y, list) else y.sum().backward() + _ = (sum([yi.sum() for yi in y]) if isinstance(y, list) else y).sum().backward() t[2] = time_sync() - except: # no backward method + except Exception as e: # no backward method + print(e) t[2] = float('nan') tf += (t[1] - t[0]) * 1000 / n # ms per op forward tb += (t[2] - t[1]) * 1000 / n # ms per op backward From 917567ec07b6f86ed79852e86bfcfeb6960789f5 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 16:57:21 +0200 Subject: [PATCH 09/13] Update profile() --- utils/torch_utils.py | 62 +++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index 28f204f53783..e53c9c2580d3 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -98,7 +98,7 @@ def time_sync(): return time.time() -def profile(x, ops, n=100, device=None): +def profile(input, ops, n=100, device=None): # profile a pytorch module or list of modules. Example usage: # x = torch.randn(16, 3, 640, 640) # input # m1 = lambda x: x * torch.sigmoid(x) @@ -106,38 +106,40 @@ def profile(x, ops, n=100, device=None): # profile(x, [m1, m2], n=100) # profile speed over 100 iterations device = device or select_device() - x = x.to(device) - x.requires_grad = True print(f"{'Params':>12s}{'GFLOPs':>12s}{'GPU_mem (GB)':>14s}{'forward (ms)':>14s}{'backward (ms)':>14s}" f"{'input':>24s}{'output':>24s}") - for m in ops if isinstance(ops, list) else [ops]: - torch.cuda.empty_cache() - m = m.to(device) if hasattr(m, 'to') else m # device - m = m.half() if hasattr(m, 'half') and isinstance(x, torch.Tensor) and x.dtype is torch.float16 else m # type - tf, tb, t = 0., 0., [0., 0., 0.] # dt forward, backward - try: - flops = thop.profile(m, inputs=(x,), verbose=False)[0] / 1E9 * 2 # GFLOPs - except: - flops = 0 - - for _ in range(n): - t[0] = time_sync() - y = m(x) - t[1] = time_sync() + + for x in input if isinstance(input, list) else [input]: + x = x.to(device) + x.requires_grad = True + for m in ops if isinstance(ops, list) else [ops]: + torch.cuda.empty_cache() + m = m.to(device) if hasattr(m, 'to') else m # device + m = m.half() if hasattr(m, 'half') and isinstance(x, torch.Tensor) and x.dtype is torch.float16 else m + tf, tb, t = 0., 0., [0., 0., 0.] # dt forward, backward try: - _ = (sum([yi.sum() for yi in y]) if isinstance(y, list) else y).sum().backward() - t[2] = time_sync() - except Exception as e: # no backward method - print(e) - t[2] = float('nan') - tf += (t[1] - t[0]) * 1000 / n # ms per op forward - tb += (t[2] - t[1]) * 1000 / n # ms per op backward - - mem = torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0 # (GB) - s_in = tuple(x.shape) if isinstance(x, torch.Tensor) else 'list' - s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' - p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters - print(f'{p:12}{flops:12.4g}{mem:>14.3f}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}') + flops = thop.profile(m, inputs=(x,), verbose=False)[0] / 1E9 * 2 # GFLOPs + except: + flops = 0 + + for _ in range(n): + t[0] = time_sync() + y = m(x) + t[1] = time_sync() + try: + _ = (sum([yi.sum() for yi in y]) if isinstance(y, list) else y).sum().backward() + t[2] = time_sync() + except Exception as e: # no backward method + print(e) + t[2] = float('nan') + tf += (t[1] - t[0]) * 1000 / n # ms per op forward + tb += (t[2] - t[1]) * 1000 / n # ms per op backward + + mem = torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0 # (GB) + s_in = tuple(x.shape) if isinstance(x, torch.Tensor) else 'list' + s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' + p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters + print(f'{p:12}{flops:12.4g}{mem:>14.3f}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}') def is_parallel(model): From e6c763bbb8a3fd935fa9c4789d4ff3fe53490918 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 17:05:50 +0200 Subject: [PATCH 10/13] Update profile() --- utils/torch_utils.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index e53c9c2580d3..27858974c0bc 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -98,12 +98,14 @@ def time_sync(): return time.time() -def profile(input, ops, n=100, device=None): - # profile a pytorch module or list of modules. Example usage: - # x = torch.randn(16, 3, 640, 640) # input +def profile(input, ops, n=10, device=None): + # YOLOv5 speed/memory/FLOPs profiler + # + # Usage: + # input = torch.randn(16, 3, 640, 640) # m1 = lambda x: x * torch.sigmoid(x) # m2 = nn.SiLU() - # profile(x, [m1, m2], n=100) # profile speed over 100 iterations + # profile(input, [m1, m2], n=100) # profile over 100 iterations device = device or select_device() print(f"{'Params':>12s}{'GFLOPs':>12s}{'GPU_mem (GB)':>14s}{'forward (ms)':>14s}{'backward (ms)':>14s}" From 04c88764aaf28b74afe477d36b7f89f67bd5bc07 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 17:10:50 +0200 Subject: [PATCH 11/13] Update profile() --- utils/torch_utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index 27858974c0bc..57a8ab59b7b9 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -115,7 +115,6 @@ def profile(input, ops, n=10, device=None): x = x.to(device) x.requires_grad = True for m in ops if isinstance(ops, list) else [ops]: - torch.cuda.empty_cache() m = m.to(device) if hasattr(m, 'to') else m # device m = m.half() if hasattr(m, 'half') and isinstance(x, torch.Tensor) and x.dtype is torch.float16 else m tf, tb, t = 0., 0., [0., 0., 0.] # dt forward, backward @@ -142,6 +141,8 @@ def profile(input, ops, n=10, device=None): s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters print(f'{p:12}{flops:12.4g}{mem:>14.3f}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}') + del x, y + torch.cuda.empty_cache() def is_parallel(model): From a6d089fc60c51814420408fe952a898e88942672 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 17:21:49 +0200 Subject: [PATCH 12/13] Update profile() --- utils/torch_utils.py | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index 57a8ab59b7b9..0b8f2163a129 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -123,25 +123,26 @@ def profile(input, ops, n=10, device=None): except: flops = 0 - for _ in range(n): - t[0] = time_sync() - y = m(x) - t[1] = time_sync() - try: - _ = (sum([yi.sum() for yi in y]) if isinstance(y, list) else y).sum().backward() - t[2] = time_sync() - except Exception as e: # no backward method - print(e) - t[2] = float('nan') - tf += (t[1] - t[0]) * 1000 / n # ms per op forward - tb += (t[2] - t[1]) * 1000 / n # ms per op backward - - mem = torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0 # (GB) - s_in = tuple(x.shape) if isinstance(x, torch.Tensor) else 'list' - s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' - p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters - print(f'{p:12}{flops:12.4g}{mem:>14.3f}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}') - del x, y + try: + for _ in range(n): + t[0] = time_sync() + y = m(x) + t[1] = time_sync() + try: + _ = (sum([yi.sum() for yi in y]) if isinstance(y, list) else y).sum().backward() + t[2] = time_sync() + except Exception as e: # no backward method + print(e) + t[2] = float('nan') + tf += (t[1] - t[0]) * 1000 / n # ms per op forward + tb += (t[2] - t[1]) * 1000 / n # ms per op backward + mem = torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0 # (GB) + s_in = tuple(x.shape) if isinstance(x, torch.Tensor) else 'list' + s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' + p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters + print(f'{p:12}{flops:12.4g}{mem:>14.3f}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}') + except Exception as e: + print(e) torch.cuda.empty_cache() From 9730c6d03b8021b765e0f12ae1f7707740980848 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 30 Jul 2021 18:11:17 +0200 Subject: [PATCH 13/13] Cleanup --- tutorial.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorial.ipynb b/tutorial.ipynb index 8d9c3f8b7a15..b16506275288 100644 --- a/tutorial.ipynb +++ b/tutorial.ipynb @@ -1172,11 +1172,11 @@ }, "source": [ "# Profile\n", - "from utils.torch_utils import profile \n", + "from utils.torch_utils import profile\n", "\n", "m1 = lambda x: x * torch.sigmoid(x)\n", "m2 = torch.nn.SiLU()\n", - "profile(x=torch.randn(16, 3, 640, 640), ops=[m1, m2], n=100)" + "results = profile(input=torch.randn(16, 3, 640, 640), ops=[m1, m2], n=100)" ], "execution_count": null, "outputs": []