Skip to content

Commit

Permalink
fix: backticks & translation PyTorchKorea#767
Browse files Browse the repository at this point in the history
  • Loading branch information
Ssunbell committed Sep 17, 2023
1 parent 897559d commit b3a7633
Showing 1 changed file with 20 additions and 21 deletions.
41 changes: 20 additions & 21 deletions intermediate_source/fx_profiling_tutorial.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@
(๋ฒ ํƒ€) FX๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ CPU ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋Ÿฌ(Profiler) ๋งŒ๋“ค๊ธฐ
*******************************************************
**์ €์ž**: `James Reed <https://github.com/jamesr66a>`_
**๋ฒˆ์—ญ:** `์œ ์„ ์ข… <https://github.com/Ssunbell>`_
์ด๋ฒˆ ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” FX๋ฅผ ์ด์šฉํ•ด์„œ ๋‹ค์Œ์„ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:
1) ์ฝ”๋“œ์˜ ๊ตฌ์กฐ์™€ ์‹คํ–‰์— ๋Œ€ํ•œ ํ†ต๊ณ„๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ํŒŒ์ดํ† ์น˜ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ํฌ์ฐฉํ•ฉ๋‹ˆ๋‹ค.
2) ์‹ค์ œ ์‹คํ–‰์—์„œ ๋ชจ๋ธ์˜ ๊ฐ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ๋Ÿฐํƒ€์ž„ ํ†ต๊ณ„๋“ค์„ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์„ฑ๋Šฅ "ํ”„๋กœํŒŒ์ผ๋Ÿฌ" ์—ญํ• ์„ ํ•  ์ž‘์€ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ด…๋‹ˆ๋‹ค.
1) ํŒŒ์ดํ† ์น˜ ํŒŒ์ด์ฌ ์ฝ”๋“œ์—์„œ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ์™€ ์‹คํ–‰์— ๋Œ€ํ•œ ํ†ต๊ณ„๋ฅผ ์กฐ์‚ฌํ•˜์—ฌ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.
2) ์‹ค์ œ ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ ๋ชจ๋ธ์˜ ๊ฐ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ๋Ÿฐํƒ€์ž„ ํ†ต๊ณ„๋“ค์„ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์„ฑ๋Šฅ "ํ”„๋กœํŒŒ์ผ๋Ÿฌ" ์—ญํ• ์„ ํ•  ์ž‘์€ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ด…๋‹ˆ๋‹ค.
"""

Expand Down Expand Up @@ -50,7 +49,7 @@

######################################################################
# .. note::
# ``tabulate``๋Š” ํŒŒ์ดํ† ์น˜์— ์ข…์†์„ฑ์ด ์—†๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
# ``tabulate`` ๋Š” ํŒŒ์ดํ† ์น˜์— ์ข…์†์„ฑ์ด ์—†๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
# ์šฐ๋ฆฌ๋Š” tabulate๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ข€๋” ์‰ฝ๊ฒŒ ์„ฑ๋Šฅ์— ๊ด€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
# ๋‹น์‹ ์ด ์„ ํ˜ธํ•˜๋Š” ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ tabulate๋ฅผ ์„ค์น˜ํ•ด์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Expand All @@ -68,7 +67,7 @@
# ์ด๊ฒƒ์€ ResNet18 ๋ชจ๋ธ์˜ ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
# ๊ทธ๋ž˜ํ”„๋Š” ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ์ผ๋ จ์˜ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
# ๊ฐ ๋…ธ๋“œ๋Š” Python ์ฝ”๋“œ(ํ•จ์ˆ˜, ๋ชจ๋“ˆ ๋˜๋Š” ๋ฉ”์†Œ๋“œ ์—ฌ๋ถ€)์—์„œ ํ˜ธ์ถœ ์‚ฌ์ดํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ ,
# ์—ฃ์ง€(๊ฐ ๋…ธ๋“œ์—์„œ "args" ๋ฐ "kwargs"๋กœ ํ‘œ์‹œ๋จ)๋Š”
# ์—ฃ์ง€(๊ฐ ๋…ธ๋“œ์—์„œ ``args`` ๋ฐ ``kwargs`` ๋กœ ํ‘œ์‹œ๋จ)๋Š”
# ์ด๋Ÿฌํ•œ ํ˜ธ์ถœ ๊ฒฝ๋กœ ์‚ฌ์ด์— ์ „๋‹ฌ๋œ ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
# ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„๊ณผ FX์˜ ๋‚˜๋จธ์ง€ API์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š”
# FX ์„ค๋ช…์„œ https://pytorch.org/docs/master/fx.html ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Expand All @@ -77,13 +76,13 @@
######################################################################
# ํ”„๋กœํŒŒ์ผ๋ง Interpreter ์ƒ์„ฑํ•˜๊ธฐ
# --------------------------------
# ๋‹ค์Œ์œผ๋กœ, ์šฐ๋ฆฌ๋Š” ``torch.fx.Interpreter``๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
# ๋น„๋ก ``symbolic_trace``๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ``GraphModule``์€ ``GraphModule``์„
# ํ˜ธ์ถœํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ์— ์ปดํŒŒ์ผํ•˜์ง€๋งŒ, ``GraphModule``์„ ์‹คํ–‰ํ•˜๋Š”
# ๋Œ€์•ˆ์ ์ธ ๋ฐฉ๋ฒ•์€ ``graph``์˜ ๊ฐ ``node``๋ฅผ ํ•˜๋‚˜์”ฉ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
# ์ด๊ฒƒ์ด ``Interpreter``๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Interpreter๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ๋…ธ๋“œ ๋‹จ์œ„๋กœ ์ธํ„ฐํ”„๋ฆฌํŠธํ•ฉ๋‹ˆ๋‹ค.
# ๋‹ค์Œ์œผ๋กœ, ์šฐ๋ฆฌ๋Š” ``torch.fx.Interpreter`` ๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
# ๋น„๋ก ``symbolic_trace`` ๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ``GraphModule`` ์€ ``GraphModule`` ์„
# ํ˜ธ์ถœํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ์— ์ปดํŒŒ์ผํ•˜์ง€๋งŒ, ``GraphModule`` ์„ ์‹คํ–‰ํ•˜๋Š”
# ๋Œ€์•ˆ์ ์ธ ๋ฐฉ๋ฒ•์€ ``graph`` ์˜ ๊ฐ ``node`` ๋ฅผ ํ•˜๋‚˜์”ฉ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
# ์ด๊ฒƒ์ด ``Interpreter`` ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Interpreter๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ๋…ธ๋“œ ๋‹จ์œ„๋กœ ์ธํ„ฐํ”„๋ฆฌํŠธํ•ฉ๋‹ˆ๋‹ค.
#
# ``Interpreter``๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์Œ์œผ๋กœ์จ, ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๋ฎ์—ฌ์”Œ์šธ ์ˆ˜ ์žˆ๊ณ 
# ``Interpreter`` ๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์Œ์œผ๋กœ์จ, ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๋ฎ์—ฌ์”Œ์šธ ์ˆ˜ ์žˆ๊ณ 
# ์›ํ•˜๋Š” ํ”„๋กœํŒŒ์ผ๋ง ํ–‰๋™์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๋ชจ๋ธ์„ ์ „๋‹ฌํ•˜๊ณ  ๋ชจ๋ธ์„
# 1ํšŒ ์ด์ƒ ํ˜ธ์ถœํ•œ ๋‹ค์Œ ๋ชจ๋ธ๊ณผ ๋ชจ๋ธ์˜ ๊ฐ ๋ถ€๋ถ„์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์— ๋Œ€ํ•œ
# ํ†ต๊ณ„๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
Expand All @@ -94,22 +93,22 @@ class ProfilingInterpreter(Interpreter):
def __init__(self, mod : torch.nn.Module):
# ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ๋ชจ๋ธ์„ ์ƒ์ง•์ ์œผ๋กœ ์ถ”์ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š”,
# ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ constructor์—์„œ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ
# ์‚ฌ์šฉ์ž๋Š” ๊ธฐํ˜ธ ์ถ”์  API์— ๋Œ€ํ•œ ๊ฑฑ์ • ์—†์ด ``Module``์„
# ์‚ฌ์šฉ์ž๋Š” ์ƒ์ง•์  ์ถ”์  API์— ๋Œ€ํ•œ ๊ฑฑ์ • ์—†์ด ``Module``์„
# ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
gm = torch.fx.symbolic_trace(mod)
super().__init__(gm)

# ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์— ๋‘ ๊ฐ€์ง€๋ฅผ ์ €์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค:
#
# 1. "mod"์˜ ์ด ์‹คํ–‰ ์‹œ๊ฐ„ ๋ชฉ๋ก. ์ฆ‰, ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ํ˜ธ์ถœ๋ 
# ๋•Œ๋งˆ๋‹ค `mod(...)`` ์‹œ๊ฐ„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
# ๋•Œ๋งˆ๋‹ค ``mod(...)`` ์‹œ๊ฐ„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
self.total_runtime_sec : List[float] = []
# 2. ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„(์ดˆ) ๋ชฉ๋ก์— ๋Œ€ํ•œ ``๋…ธ๋“œ``์˜ ๋งต์ž…๋‹ˆ๋‹ค.
# 2. ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„(์ดˆ) ๋ชฉ๋ก์— ๋Œ€ํ•œ ``๋…ธ๋“œ`` ์˜ ๋งต์ž…๋‹ˆ๋‹ค.
# ์ด๋Š” (1)๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ชจ๋ธ์˜ ํŠน์ • ํ•˜์œ„ ๋ถ€๋ถ„์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
self.runtimes_sec : Dict[torch.fx.Node, List[float]] = {}

######################################################################
# ๋‹ค์Œ์œผ๋กœ, ์šฐ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋งค์„œ๋“œ์ธ ``run()``์„ ๋ฎ์—ฌ์”Œ์›๋‹ˆ๋‹ค. ``Interpreter``์˜ ``run``
# ๋‹ค์Œ์œผ๋กœ, ์šฐ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋งค์„œ๋“œ์ธ ``run()`` ์„ ๋ฎ์—ฌ์”Œ์›๋‹ˆ๋‹ค. ``Interpreter`` ์˜ ``run``
# ๋งค์„œ๋“œ๋Š” ๋ชจ๋ธ ์‹คํ–‰์„ ์œ„ํ•œ ์ตœ์ƒ์œ„ ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ์˜ ์ด ๋Ÿฐํƒ€์ž„์„ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋„๋ก
# ์ด ๋งค์„œ๋“œ๋ฅผ ๊ฐ€๋กœ์ฑ„๊ณ ์ž ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Expand All @@ -120,13 +119,13 @@ def run(self, *args) -> Any:
return_val = super().run(*args)
# ๋ชจ๋ธ ๋™์ž‘์ด ๋๋‚œ ์‹œ์ ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
t_end = time.time()
# ``ProfilingInterpreter``์— ๋ชจ๋ธ ์‹คํ–‰์— ๊ฑธ๋ฆฐ ์ด ๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค
# ``ProfilingInterpreter`` ์— ๋ชจ๋ธ ์‹คํ–‰์— ๊ฑธ๋ฆฐ ์ด ๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค
self.total_runtime_sec.append(t_end - t_start)
return return_val

######################################################################
# ์ด์ œ, ``run_node``๋ฅผ ๋ฎ์—ฌ์”Œ์›๋‹ˆ๋‹ค. ``Interpreter``๋Š” ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด
# ``run_node``๋ฅผ ๊ฐ๊ฐ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์—์„œ ๊ฐ๊ฐ์˜ ๊ฐœ๋ณ„ ํ˜ธ์ถœ์— ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•˜๊ณ 
# ์ด์ œ, ``run_node`` ๋ฅผ ๋ฎ์—ฌ์”Œ์›๋‹ˆ๋‹ค. ``Interpreter`` ๋Š” ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด
# ``run_node`` ๋ฅผ ๊ฐ๊ฐ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์—์„œ ๊ฐ๊ฐ์˜ ๊ฐœ๋ณ„ ํ˜ธ์ถœ์— ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•˜๊ณ 
# ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์ด๊ฒƒ์„ ๊ฐ€๋กœ์ฑŒ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

def run_node(self, n : torch.fx.Node) -> Any:
Expand Down Expand Up @@ -157,7 +156,7 @@ def summary(self, should_sort : bool = False) -> str:

# ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์š”์•ฝ ํ†ต๊ณ„๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
for node, runtimes in self.runtimes_sec.items():
# ๋น„์Šทํ•˜๊ฒŒ, ``node``์— ๋Œ€ํ•œ ํ‰๊ท  ๋Ÿฐํƒ€์ž„์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
# ๋น„์Šทํ•˜๊ฒŒ, ``node`` ์— ๋Œ€ํ•œ ํ‰๊ท  ๋Ÿฐํƒ€์ž„์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
mean_runtime = statistics.mean(runtimes)
# ๋” ์‰ฌ์šด ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด, ์ „์ฒด ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด์„œ
# ๊ฐ๊ฐ์˜ ๋…ธ๋“œ์˜ ํผ์„ผํŠธ ์‹œ๊ฐ„ ๋˜ํ•œ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
Expand Down Expand Up @@ -188,7 +187,7 @@ def summary(self, should_sort : bool = False) -> str:
######################################################################
# ResNet18์˜ ์„ฑ๋Šฅ ์กฐ์‚ฌํ•˜๊ธฐ
# -----------------------------------------
# ``ProfilingInterpreter``๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ResNet18 ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ ํŠน์ง•๋“ค์„ ์กฐ์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
# ``ProfilingInterpreter`` ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ResNet18 ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ ํŠน์ง•๋“ค์„ ์กฐ์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

interp = ProfilingInterpreter(rn18)
interp.run(input)
Expand All @@ -198,7 +197,7 @@ def summary(self, should_sort : bool = False) -> str:
# ๊ผญ ํ˜ธ์ถœํ•ด์•ผ ํ•  ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
# There are two things we should call out here:
#
# * ``MaxPool2d``์€ ๊ฐ€์žฅ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž˜ ์•Œ๋ ค์ ธ์žˆ๋Š” ์ด์Šˆ์ž…๋‹ˆ๋‹ค:
# * ``MaxPool2d`` ์€ ๊ฐ€์žฅ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž˜ ์•Œ๋ ค์ ธ์žˆ๋Š” ์ด์Šˆ์ž…๋‹ˆ๋‹ค:
# https://github.com/pytorch/pytorch/issues/51393
# * BatchNorm2d ๋˜ํ•œ ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. FX ํŠœํ† ๋ฆฌ์–ผ
# <https://tutorials.pytorch.kr/intermediate/fx_conv_bn_fuser.html>`_.
Expand Down

0 comments on commit b3a7633

Please sign in to comment.