From b3a763363dadf51eb09744bd2bb5d0ad4cd9c76b Mon Sep 17 00:00:00 2001 From: Ssunbell Date: Sun, 17 Sep 2023 17:29:17 +0900 Subject: [PATCH] fix: backticks & translation #767 --- intermediate_source/fx_profiling_tutorial.py | 41 ++++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/intermediate_source/fx_profiling_tutorial.py b/intermediate_source/fx_profiling_tutorial.py index 18bf0979..eff0125f 100644 --- a/intermediate_source/fx_profiling_tutorial.py +++ b/intermediate_source/fx_profiling_tutorial.py @@ -3,13 +3,12 @@ (베타) FX를 이용하여 간단한 CPU 성능 프로파일러(Profiler) 만들기 ******************************************************* **저자**: `James Reed `_ - **번역:** `유선종 `_ 이번 튜토리얼에서는 FX를 이용해서 다음을 진행해보겠습니다: -1) 코드의 구조와 실행에 대한 통계를 조사하고 수집할 수 있는 방식으로 파이토치 파이썬 코드를 포착합니다. -2) 실제 실행에서 모델의 각 부분에 대해서 런타임 통계들을 수집하는 간단한 성능 "프로파일러" 역할을 할 작은 클래스를 만들어봅니다. +1) 파이토치 파이썬 코드에서 코드의 구조와 실행에 대한 통계를 조사하여 수집합니다. +2) 실제 실행 단계에서 모델의 각 부분에 대해서 런타임 통계들을 수집하는 간단한 성능 "프로파일러" 역할을 할 작은 클래스를 만들어봅니다. """ @@ -50,7 +49,7 @@ ###################################################################### # .. note:: -# ``tabulate``는 파이토치에 종속성이 없는 외부 라이브러리입니다. +# ``tabulate`` 는 파이토치에 종속성이 없는 외부 라이브러리입니다. # 우리는 tabulate를 사용하여 좀더 쉽게 성능에 관한 데이터를 시각화할 것입니다. # 당신이 선호하는 파이썬 패키지 소스로부터 tabulate를 설치해주시길 바랍니다. @@ -68,7 +67,7 @@ # 이것은 ResNet18 모델의 그래프 표현을 제공합니다. # 그래프는 서로 연결된 일련의 노드로 구성됩니다. # 각 노드는 Python 코드(함수, 모듈 또는 메소드 여부)에서 호출 사이트를 나타내고, -# 엣지(각 노드에서 "args" 및 "kwargs"로 표시됨)는 +# 엣지(각 노드에서 ``args`` 및 ``kwargs`` 로 표시됨)는 # 이러한 호출 경로 사이에 전달된 값을 나타냅니다. # 그래프 표현과 FX의 나머지 API에 대한 자세한 정보는 # FX 설명서 https://pytorch.org/docs/master/fx.html 에서 확인할 수 있습니다. @@ -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회 이상 호출한 다음 모델과 모델의 각 부분이 실행되는 동안 걸린 시간에 대한 # 통계를 얻을 수 있는 객체를 갖는 것입니다. @@ -94,7 +93,7 @@ class ProfilingInterpreter(Interpreter): def __init__(self, mod : torch.nn.Module): # 사용자가 자신의 모델을 상징적으로 추적하도록 하는 것보다는, # 우리는 그것을 constructor에서 할 것입니다. 결과적으로 - # 사용자는 기호 추적 API에 대한 걱정 없이 ``Module``을 + # 사용자는 상징적 추적 API에 대한 걱정 없이 ``Module``을 # 통과할 수 있습니다 gm = torch.fx.symbolic_trace(mod) super().__init__(gm) @@ -102,14 +101,14 @@ def __init__(self, mod : torch.nn.Module): # 우리는 여기에 두 가지를 저장할 것입니다: # # 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`` # 매서드는 모델 실행을 위한 최상위 진입점입니다. 모델의 총 런타임을 기록할 수 있도록 # 이 매서드를 가로채고자 할 것입니다. @@ -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: @@ -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) # 더 쉬운 이해를 돕기 위해, 전체 네트워크에 대해서 # 각각의 노드의 퍼센트 시간 또한 계산합니다. @@ -188,7 +187,7 @@ def summary(self, should_sort : bool = False) -> str: ###################################################################### # ResNet18의 성능 조사하기 # ----------------------------------------- -# ``ProfilingInterpreter``를 사용하여 ResNet18 모델의 성능 특징들을 조사할 수 있습니다. +# ``ProfilingInterpreter`` 를 사용하여 ResNet18 모델의 성능 특징들을 조사할 수 있습니다. interp = ProfilingInterpreter(rn18) interp.run(input) @@ -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 튜토리얼 # `_.