11"""
2- λ―ΈλΆμλν(autograd) μ μ₯λ ν
μλ₯Ό μν Hooks
2+ λ―ΈλΆμλν(autograd) μ μ₯λ tensorλ₯Ό μν Hooks
33================================================
44
55"""
88######################################################################
99# νμ΄ν μΉλ μΌλ°μ μΌλ‘ μμ νλ₯Ό μ¬μ©νμ¬ κΈ°μΈκΈ°λ₯Ό κ³μ°ν©λλ€.
1010# κ·Έλ¬λ νΉμ μμ
μμλ μμ νλ₯Ό μννκΈ° μν μ€κ°κ²°κ³Όλ₯Ό μ μ₯ν΄μΌ ν©λλ€.
11- # μ΄λ² νν 리μΌμμλ μ΄λ¬ν ν
μλ₯Ό μ μ₯/κ²μνλ λ°©λ²κ³Ό ν¨νΉ/μΈν¨νΉ νλ‘μΈμ€λ₯Ό μ μ΄νκΈ°μν hooksμ μ νλ λ°©λ²μ μλ΄ν©λλ€.
11+ # μ΄λ² νν 리μΌμμλ μ΄λ¬ν tensorλ₯Ό μ μ₯/κ²μνλ λ°©λ²κ³Ό
12+ # ν¨νΉ/μΈν¨νΉ μ μ°¨λ₯Ό μ μ΄νλ hooksμ μ μνλ λ°©λ²μ μλ΄ν©λλ€.
1213
13- # μ΄ νν 리μΌμμλ μ¬μ©μκ° μμ νκ° μ΄λ‘ μμμ μλνλ λ°©μμ μ΅μνλ€κ³ κ°μ ν©λλ€. μλλΌλ©΄, μλμ μλ£λ₯Ό λ¨Όμ μ½μ΄λ³΄μΈμ.
14+ # μ΄ νν 리μΌμμλ λ
μκ° μμ νκ° μ΄λ»κ² λμνλμ§λ₯Ό μ΄λ‘ μ μΌλ‘ μ μκ³ μλ€κ³ κ°μ ν©λλ€.
15+ # μλλΌλ©΄, μλμ μλ£λ₯Ό λ¨Όμ μ½μ΄λ³΄μΈμ.
1416# https://colab.research.google.com/drive/1aWNdmYt7RcHMbUk-Xz2Cv5-cGFSWPXe0#scrollTo=AHcEJ6nXUb7W
1517
1618######################################################################
1921
2022
2123######################################################################
22- # λͺ¨λΈμ νλ ¨μ μΌλ°μ μΌλ‘ λͺ¨λΈμ μΈνΌλ°μ€νλ κ²λ³΄λ€ νμ΅νλ κ³Όμ μμ λ©λͺ¨λ¦¬λ₯Ό λ λ§μ΄ μ¬μ©ν©λλ€.
23- # λλ΅μ μΌλ‘ λ§νλ©΄ νμ΄ν μΉλ μμ νλ₯Ό νΈμΆνλλ° νμν κ³μ° κ·Έλνλ₯Ό μ μ₯ν΄μΌνλ―λ‘ μΆκ° λ©λͺ¨λ¦¬ μ¬μ©λμ΄ μκΈ° λλ¬Έμ
λλ€.
24- # μ΄ νν 리μΌμ νκ°μ§ λͺ©νλ μ΄λ¬ν μ΄ν΄μ λν λ―ΈμΈ μ‘°μ μ μ€ννλ κ²μ
λλ€.
24+ # μΌλ°μ μΌλ‘ λͺ¨λΈμ μΆλ‘ νλ κ²λ³΄λ€ νμ΅νλ κ³Όμ μμ λ©λͺ¨λ¦¬λ₯Ό λ λ§μ΄ μ¬μ©ν©λλ€.
25+ # λλ΅μ μΌλ‘ λ§νλ©΄ νμ΄ν μΉλ μμ νλ₯Ό νΈμΆνλλ° νμν κ³μ° κ·Έλνλ₯Ό μ μ₯ν΄μΌνλ―λ‘
26+ # μΆκ° λ©λͺ¨λ¦¬ μ¬μ©νκΈ° λλ¬Έμ
λλ€.
27+ # μ΄ νν 리μΌμ λͺ©ν μ€ νλλ μ΄λ° λ΄μ©μ μ΄ν΄μ λ―ΈμΈ μ‘°μ μ μ 곡νλ κ²μ
λλ€.
2528#
26- # μ¬μ€, μ΄ κ·Έλν μ체λ‘λ κ°λμ κ·Έλ€μ§ λ§μ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νμ§ μμ΅λλ€. μ¬νμ ν
μλ€μ 볡μ νμ§ μλ κ² μ²λΌμ .
27- # κ·Έλ¬λ , κ·Έλνλ *μ°Έμ‘°* λ₯Ό μ μ§ν μ μμ΅λλ€.
28- # κ·Έλ μ§ μμΌλ©΄ λ²μλ₯Ό λ²μ΄λ ν
μλ₯Ό : **μ μ₯λ ν
μ ** λΌκ³ λͺ
λͺ
ν μ μμ΅λλ€ .
29+ # μ€μ λ‘ λλλ‘ (μ°μ°) κ·Έλν μ체λ tensorλ€μ μ ν 볡μ νμ§ μκΈ° λλ¬Έμ λ§μ λ©λͺ¨λ¦¬λ₯Ό μλͺ¨νμ§λ μμ΅λλ€ .
30+ # νμ§λ§ , κ·Έλνλ λ²μμμ λ²μ΄λ tensorλ€μ λν *μ°Έμ‘°(reference)* λ μ μ§ν μ μμ΅λλ€.
31+ # μ΄λ¬ν tensorλ€μ **μ μ₯λ tensor(saved tensor) ** λΌκ³ ν©λλ€ .
2932
3033
3134######################################################################
3437
3538
3639######################################################################
37- # κ°λ¨ν μμ λ₯Ό μμν΄λ΄
μλ€: :math:`y = a \cdot b` , μ΄κ²μ λ―ΈλΆλ(κ·ΈλλμΈνΈ)λ‘ μκ³ μλ :math: `y`,λ‘ κ°κ° :math: `a` and
38- # :math: `b`:λ‘ μμ ν©λλ€ .
40+ # κ°λ¨ν μμ λ₯Ό μμν΄λ΄
μλ€: :math:`y = a \cdot b`, λ³νλλ₯Ό μκ³ μλ :math: `y`,λ‘ κ°κ° :math: `a` and
41+ # :math: `b`:λ‘ ν©λλ€ .
3942
4043# .. math:: \frac{\partial y}{\partial a} = b
4144# .. math:: \frac{\partial y}{\partial b} = a
5558
5659
5760######################################################################
58- # μ΄ μμ μμ νμ΄ν μΉλ μ€κ° κ° :math: `a` λ° :math: `b` λ₯Ό μ μ₯νμ¬ μλ°©ν₯ λμ κΈ°μΈκΈ°λ₯Ό κ³μ°ν©λλ€.
61+ # μ΄ μμ μμ νμ΄ν μΉλ μ€κ° κ° :math: `a` λ° :math: `b` λ₯Ό μ μ₯νμ¬
62+ # μλ°©ν₯ λμ λ³νλλ₯Ό κ³μ°ν©λλ€.
5963#
6064# .. figure:: https://user-images.githubusercontent.com/8019486/130124538-3da50977-6f0b-46d0-8909-5456ade9b598.png
6165# :width: 300
6266# :align: center
6367
6468
6569######################################################################
66- # μ΄λ¬ν μ€κ° κ°(μμ μ£Όν©μ)μ μ λμ¬ ``_saved``λ‘ μμνλ ``y``μ ``grad_fn`` μμ±μ μ°Ύμ (λλ²κΉ
λͺ©μ μΌλ‘) μ‘μΈμ€ν μ μμ΅λλ€.
70+ # μ΄λ¬ν μ€κ° κ°(μμ μ£Όν©μ)μ μ λμ¬ ``_saved``λ‘ μμνλ
71+ # ``y``μ ``grad_fn`` μμ±μ μ°Ύμ (λλ²κΉ
λͺ©μ μΌλ‘) μ κ·Ό ν μ μμ΅λλ€.
6772
6873print (y .grad_fn ._saved_self )
6974print (y .grad_fn ._saved_other )
7075
7176
7277######################################################################
73- # κ³μ° κ·Έλνκ° κΉμ΄μ§μλ‘ *μ μ₯λ ν
μ*κ° λ λ§μ΄ μ μ₯λ©λλ€. ννΈ, ν
μλ κ·Έλνκ° μλμλ€λ©΄ λ²μλ₯Ό λ²μ΄λκ² λ©λλ€.
78+ # κ³μ° κ·Έλνκ° κΉμ΄μ§μλ‘ *μ μ₯λ tensor*κ° λ λ§μ΄ μ μ₯λ©λλ€.
79+ # ννΈ, tensorλ κ·Έλνκ° μλμλ€λ©΄ λ²μλ₯Ό λ²μ΄λκ² λ©λλ€.
7480
7581def f (x ):
7682 return x * x
@@ -86,17 +92,20 @@ def f(x):
8692######################################################################
8793# μμ μμ μμ λ―ΈλΆ(grad)μμ΄ μ€ννλ©΄ λ²μλ΄μ ``x`` μ ``y`` λ μ μ§λμ§λ§
8894# κ·Έλνμμλ ``f(x)`` μ ``f(f(x))`` κ° μΆκ°λ‘ μ μ₯λ©λλ€.
89- # λ°λΌμ νλ ¨ μ€ μ λ°©ν₯ κ²½λ‘λ₯Ό μ€ννλ©΄ νκ°μ€μ (λ μ ννκ²λ μλλ―ΈλΆ(auto grad)κ° νμνμ§ μμ κ²½μ°λ³΄λ€) λ©λͺ¨λ¦¬ μ¬μ©λΉμ€μ΄ λ λ§μμ§κ² λ©λλ€.
95+ # λ°λΌμ νλ ¨ μ€ μ λ°©ν₯ κ²½λ‘λ₯Ό μ€ννλ©΄ νκ°μ€μ
96+ # (λ μ ννκ²λ μλλ―ΈλΆ(auto grad)κ° νμνμ§ μμ κ²½μ°λ³΄λ€)
97+ # λ©λͺ¨λ¦¬ μ¬μ©λμ΄ λ λ§μμ§κ² λ©λλ€.
9098
9199
92100######################################################################
93101# ν¨νΉκ³Ό μΈν¨νΉμ κ°λ
94- # ~~~~~~~~~~~~~~~~~~~
102+ # ~~~~~~~~~~~~~~~~~~~~
95103
96104
97105
98106######################################################################
99- # 첫 λ²μ§Έ μμ λ‘ λμκ°μ ``y.grad_fn._saved_self`` μ ``y.grad_fn._saved_other`` λ κ°κ° μλ ν
μ κ°μ²΄ ``a`` μ ``b`` λ₯Ό κ°λ¦¬ν΅λλ€.
107+ # 첫 λ²μ§Έ μμ λ‘ λμκ°μ ``y.grad_fn._saved_self`` μ ``y.grad_fn._saved_other`` λ
108+ # κ°κ° μλ tensor κ°μ²΄ ``a`` μ ``b`` λ₯Ό κ°λ¦¬ν΅λλ€.
100109
101110a = torch .randn (5 , requires_grad = True )
102111b = torch .ones (5 , requires_grad = True )
@@ -116,18 +125,21 @@ def f(x):
116125
117126
118127######################################################################
119- # λ΄λΆμ μΌλ‘λ νμ΄ν μΉλ μ°Έμ‘°μ£ΌκΈ°λ₯Ό λ°©μ§νκΈ° μν΄μ ν
μ ``y`` λ₯Ό **ν¨νΉ** λ° **μΈν¨νΉ** νμ΅λλ€
120- # κ²½νμ, μμ ν μ μ₯λ ν
μμ μμΈμ€νλ©΄ μλ ν
μμ λμΌν ν
μμ κ°μ²΄κ° μμ±λλ€λ κ²°κ³Όλ₯Ό κΈ°λν΄μλ *μλ©λλ€.*
121- # κ·Έλ¬λ λμΌν *μ μ₯μ*λ₯Ό 곡μ ν©λλ€.
128+ # λ΄λΆμ μΌλ‘λ νμ΄ν μΉλ μ°Έμ‘°μ£ΌκΈ°λ₯Ό λ°©μ§νκΈ° μν΄μ tensor ``y`` λ₯Ό
129+ # **ν¨νΉ** λ° **μΈν¨νΉ** νμ΅λλ€
130+ # κ²½νμ, μμ ν μ μ₯λ tensorμ μμΈμ€νλ©΄ μλ tensorμ
131+ # λμΌν tensorμ κ°μ²΄κ° μμ±λλ€λ κ²°κ³Όλ₯Ό κΈ°λν΄μλ *μλ©λλ€*.
132+ # κ·Έλ¬λ tensorλ λμΌν *μ μ₯μ*λ₯Ό 곡μ ν©λλ€.
122133
123134######################################################################
124- # μ μ₯λ ν
μ hooks
135+ # μ μ₯λ tensors hooks
125136# -------------------
126137
127138
128139
129140######################################################################
130- # νμ΄ν μΉλ ν
μλ€μ΄ ν¨νΉλκ³ μΈν¨νΉλλμ§ μ μ₯ν μ μλ μ‘°μ κ°λ₯ν APIλ₯Ό μ 곡ν©λλ€.
141+ # νμ΄ν μΉλ tensorλ€μ΄ μ΄λ»κ² ν¨νΉλκ³ μΈν¨νΉλλμ§
142+ # μ μ₯ν μ μλ μ μ΄ κ°λ₯ν APIλ₯Ό μ 곡ν©λλ€.
131143
132144def pack_hook (x ):
133145 print ("Packing" , x )
@@ -146,9 +158,9 @@ def unpack_hook(x):
146158
147159
148160######################################################################
149- # ``pack_hook`` ν¨μλ μμ
μ΄ μμ νλ₯Ό μν΄ ν
μλ₯Ό μ μ₯ν λ λ§λ€ νΈμΆλ©λλ€. κ·Έλ¬λ©΄
150- # ``pack_hook`` μ μΆλ ₯μ΄ μλ ν
μ λμ κ³μ° κ·Έλνμ μ μ₯λ©λλ€.
151- # ``unpack_hook`` μ ν΄λΉ λ°ν κ°μ μ¬μ©νμ¬ μλ°©ν₯ μ λ¬ μ€μ μ€μ λ‘ μ¬μ©λ ν
μλ₯Ό μ ν
μλ‘ κ³μ°ν©λλ€.
161+ # ``pack_hook`` ν¨μλ μμ
μ΄ μμ νλ₯Ό μν΄ tensorλ₯Ό μ μ₯ν λ λ§λ€ νΈμΆλ©λλ€. κ·Έλ¬λ©΄
162+ # ``pack_hook`` μ μΆλ ₯μ΄ μλ tensor λμ κ³μ° κ·Έλνμ μ μ₯λ©λλ€.
163+ # ``unpack_hook`` μ ν΄λΉ λ°ν κ°μ μ¬μ©νμ¬ μλ°©ν₯ μ λ¬ μ€μ μ€μ λ‘ μ¬μ©λ tensorλ₯Ό μ tensorλ‘ κ³μ°ν©λλ€.
152164# μΌλ°μ μΌλ‘ ``unpack_hook(pack_hook(t))`` κ° ``t`` μ κ°κΈΈ κΈ°λν©λλ€.
153165
154166
@@ -160,8 +172,8 @@ def unpack_hook(x):
160172
161173
162174######################################################################
163- # ν κ°μ§ μ£Όμν μ μ ``unpack_hook`` μ΄ μ¬λ°λ₯Έ κ°μ κ°μ§ ν
μλ₯Ό νμν μ μλ ν
164- # ``pack_hook`` μ μΆλ ₯μ *λͺ¨λ νμ΄μ¬ κ°μ²΄* κ° λ μ μλ€λ κ²μ
λλ€.
175+ # ν κ°μ§ μ£Όμν μ μ ``unpack_hook`` μ΄ μ¬λ°λ₯Έ κ°μ κ°μ§ tensorλ₯Ό νμν μ μλ ν
176+ # ``pack_hook`` μ μΆλ ₯μ *any νμ΄μ¬ κ°μ²΄* κ° λ μ μλ€λ κ²μ
λλ€.
165177
166178######################################################################
167179# λͺ κ°μ§ νΉμ΄ν μμ λ€
@@ -170,14 +182,13 @@ def unpack_hook(x):
170182
171183
172184######################################################################
173- # λ¨Όμ , κ°λ₯μ±μ μ€λͺ
νκΈ° μν΄μ λͺ κ°μ§ μ΄λ¦¬μμ΄λ³΄μ΄λ μκ° μμ§λ§ μλ§ νκ³ μΆμ§ μμ μλ μμ΅λλ€ .
185+ # λ¨Όμ , κ°λ₯μ νμ§λ§ λ°λ³΄κ°μμ λꡬλ νκ³ μΆμ΄νμ§ μλ μμ λͺκ°μ§λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€ .
174186
175187######################################################################
176188# **λ°ν λ° int**
177- #
178- # νμ΄μ¬ 리μ€νΈμ μΈλ±μ€λ°ν
179- #
180- # μλμ μΌλ‘λ μκ΄μμ§λ§ λ
Όλμ μ¬μ§κ° μλ μ μ©μ±
189+
190+ # νμ΄μ¬ 리μ€νΈμ μΈλ±μ€ λ°ν
191+ # μλμ μΌλ‘λ μννμ§ μμ§λ§ λ
Όλμ μ¬μ§κ° μλ μ μ©μ±
181192
182193storage = []
183194
@@ -198,7 +209,7 @@ def unpack(x):
198209######################################################################
199210# **ννμ λ°ν**
200211#
201- # μΌλΆ ν
μμ ν¨μλ₯Ό λ°ννκ³ μμΆμ νΈλ λ°©λ²μ νμ¬ ννλ‘λ μ μ©νμ§ μμ κ²μ
λλ€.
212+ # μΌλΆ tensorμ ν¨μλ₯Ό λ°ννκ³ ν¨νΉμ νΈλ λ°©λ²μ μ΄λ° ννλ‘λ μ μ©νμ§ μμ κ²μ
λλ€.
202213
203214def pack (x ):
204215 delta = torch .randn (* x .size ())
@@ -219,8 +230,8 @@ def unpack(packed):
219230######################################################################
220231# **strμ λ°ν**
221232#
222- # ν
μμ __repr__ λ°νμ
223- # μλ§λ μ λ μ΄λ κ² νμ§ μμ κ²!
233+ # tensorμ __repr__ λ°ν
234+ # μλ§λ μ΄λ κ² νμ§ λ§ κ²
224235
225236x = torch .randn (5 , requires_grad = True )
226237with torch .autograd .graph .saved_tensors_hooks (lambda x : repr (x ), lambda x : eval ("torch." + x )):
@@ -230,20 +241,23 @@ def unpack(packed):
230241
231242
232243######################################################################
233- # μ΄λ¬ν μμ λ μ€μ λ‘ μ μ©νμ§ μμ κ²μ΄μ§λ§ ``pack_hook`` μ μΆλ ₯μ΄ μλ ν
μμ λ΄μ©μ κ²μνκΈ°μ μΆ©λΆν μ 보λ₯Ό ν¬ν¨νλ ν
234- # μ€μ λ‘ λͺ¨λ Pythonμ κ°μ²΄κ° λ μ μμμ 보μ¬μ€λλ€.
244+ # μ΄λ¬ν μμ λ μ€μ λ‘ μ μ©νμ§ μμ κ²μ΄μ§λ§
245+ # μλ tensorμ λ΄μ©μ κ°μ Έμ€κΈ°μ μΆ©λΆν μ 보λ₯Ό κ°μ§κ³ μλ€λ©΄
246+ # ``pack_hook`` μ κ²°κ³Όλ¬Όμ΄ μ΄λ€ νμ΄μ¬ κ°μ²΄λΌλ
247+ # λ μ μμμ 보μ¬μ€λλ€.
235248# λ€μ μΉμ
μμλ λ μ μ©ν μμ©νλ‘κ·Έλ¨μ μ€μ μ λκ² μ΅λλ€.
236249
237250######################################################################
238- # ν
μλ₯Ό CPUμ μ μ₯νκΈ°
251+ # tensorλ₯Ό CPUμ μ μ₯νκΈ°
239252# ~~~~~~~~~~~~~~~~~~~~~~~~
240253
241254
242255
243256######################################################################
244- # λ§€μ° λΉλ²νκ², κ³μ° κ·Έλνλ₯Ό μλ°νλ ν
μλ GPUμ μμ΅λλ€.
245- # κ·Έλνμ μ΄λ¬ν ν
μμ λν μ°Έμ‘°λ₯Ό μ μ§νλ κ²μ λλΆλΆμ λͺ¨λΈμ΄ νκ°μ€μ μ μμ μΌλ‘ μνλμμ λ
246- # νλ ¨μ€μ GPU λ©λͺ¨λ¦¬κ° λΆμ‘±νκ² λ§λλ μμΈμ΄ λ©λλ€.
257+ # λ§€μ° λΉλ²νκ², tensor κ³μ° κ·Έλν GPUμ μ΄μ μμ΅λλ€.
258+ # λλΆλΆ κ²½μ°μμ λͺ¨λΈμ΄ νκ°μ€μ μ μμ μΌλ‘ μνλμ§λ§ νλ ¨ μ€μ λ©λͺ¨λ¦¬κ° λΆμ‘±νλ€λ©΄,
259+ # κ³μ° κ·Έλνμμ tensorμ λν μ°Έμ‘° μ μ§κ°
260+ # GPU λ©λͺ¨λ¦¬λ₯Ό λΆμ‘±νκ² λ§λλ μμΈμ΄ λ©λλ€.
247261#
248262# hooksλ μ΄λ₯Ό ꡬννλ λ§€μ° κ°λ¨ν λ°©λ²μ μ 곡ν©λλ€.
249263
@@ -265,7 +279,8 @@ def unpack_hook(packed):
265279
266280
267281######################################################################
268- # μ€μ λ‘ νμ΄ν μΉλ μ΄λ¬ν hooksλ₯Ό νΈλ¦¬νκ² μ¬μ©ν μ μλ APIλ₯Ό μ 곡ν©λλ€. (κ³ μ λ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νλ κΈ°λ₯λ ν¬ν¨.)
282+ # μ€μ λ‘ νμ΄ν μΉλ μ΄λ¬ν hooksλ₯Ό νΈλ¦¬νκ² μ¬μ©ν μ μλ APIλ₯Ό μ 곡ν©λλ€.
283+ # (κ³ μ λ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νλ κΈ°λ₯λ ν¬ν¨).
269284
270285import torch .nn as nn
271286
@@ -287,11 +302,11 @@ def forward(self, x):
287302
288303######################################################################
289304# μ€μ λ‘ A100 GPUμμ λ°°μΉν¬κΈ°κ° 256μΈ resnet-152μ κ²½μ° μ΄λ GPUλ©λͺ¨λ¦¬ μ¬μ©λμ΄
290- # 48Gμμ 5GBλ‘ 6λ°° λλ €μ§λ λΉμ© κ°μμ ν΄λΉν©λλ€ .
305+ # 48Gμμ 5GBλ‘ μ€μ΄λ€μ§λ§, μ΄λ 6λ°° λλ €μ§λ λκ°λ₯Ό μΉλ€μΌν©λλ€ .
291306#
292307# λ¬Όλ‘ λ€νΈμν¬ νΉμ λΆλΆλ§ CPUμ μ μ₯νμ¬ μ μΆ©μμ μ‘°μ ν μ μμ΅λλ€.
293308#
294- # μλ₯Ό λ€μ΄, λͺ¨λ λͺ¨λμ κ°μΈλκ³ ν΄λΉ ν
μλ₯Ό CPUμ μ μ₯νλ νΉλ³ν
309+ # μλ₯Ό λ€μ΄, μ΄λ€ λͺ¨λμ κ°μΈλκ³ ν΄λΉ tensorλ₯Ό CPUμ μ μ₯νλ νΉλ³ν
295310# ``nn.Module`` μ μ μν μ μμ΅λλ€.
296311
297312class SaveToCpu (nn .Module ):
@@ -315,18 +330,19 @@ def forward(self, *args, **kwargs):
315330
316331
317332######################################################################
318- # ν
μλ₯Ό λμ€ν¬μ μ μ₯νκΈ°
333+ # tensorλ₯Ό λμ€ν¬μ μ μ₯νκΈ°
319334# ~~~~~~~~~~~~~~~~~~~~~~~~~~~
320335
321336
322337
323338######################################################################
324- # λ§μ°¬κ°μ§λ‘, μ΄λ¬ν ν
μλ₯Ό λμ€ν¬μ μ μ₯νκ³ μΆμ μ λ μμ΅λλ€. λ€μ λ§νμ§λ§ μ΄κ²μ μμλ§ν hooksλ‘ λ¬μ±ν μ μμ΅λλ€.
339+ # λΉμ·νκ², μ΄λ¬ν tensorλ₯Ό λμ€ν¬μ μ μ₯νκ³ μΆμ μ λ μμ΅λλ€.
340+ # λ€μ λ§νμ§λ§ μ΄κ²μ μμλ§ν hooksλ‘ λ¬μ±ν μ μμ΅λλ€.
325341
326342######################################################################
327- # λ¨μν λ²μ μ μλ§ μ΄λ΄κ²μ
λλ€.
343+ # λͺ¨μλ λ²μ μ λ³΄ν΅ μ΄λ΄κ²μ
λλ€.
328344#
329- # λ¨μλ²μ - ννΈ: μ΄λ κ² νμ§ λ§μμ€.
345+ # λͺ¨μλ λ²μ (naive version) - ννΈ: μ΄λ κ² νμ§ λ§μμ€.
330346
331347import uuid
332348tmp_dir = "temp"
@@ -365,7 +381,7 @@ def unpack_hook(name):
365381
366382######################################################################
367383# μμ μ½λκ° μλνμ§ μλ μ΄μ λ ``unpack_hook`` κ° μ¬λ¬λ² νΈμΆλκΈ° λλ¬Έμ
λλ€.
368- # λ¨Όμ μμΆμ ν λ νμΌμ μμ νλ©΄ μ²μμ, μ μ₯λ ν
μμ μμΈμ€μμ μ¬μ©ν μ μμ΅λλ€.
384+ # λ¨Όμ μμΆμ ν λ νμΌμ μμ νλ©΄ μ²μμ, μ μ₯λ tensorμ μ κ·Όμμ μ¬μ©ν μ μμ΅λλ€.
369385# λ λ²μ§Έμλ μ€λ₯κ° λ°μν©λλ€.
370386
371387x = torch .ones (5 , requires_grad = True )
@@ -380,8 +396,9 @@ def unpack_hook(name):
380396
381397
382398######################################################################
383- # μ΄λ¬Έμ λ₯Ό ν΄κ²°νκΈ°μν΄ μ΄μ μ νμ©νλ hooksμ λ²μ μ μμ±ν μ μμ΅λλ€.
384- # νμ΄ν μΉκ° μ μ₯λ λ°μ΄ν°λ₯Ό μλμΌλ‘ ν΄μ (μμ )νλ€λ μ¬μ€μ΄ λμ΄μ νμνμ§ μμ λμ
λλ€.
399+ # μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄,
400+ # νμ΄ν μΉλ μ μ₯λ λ°μ΄ν°λ₯Ό λμ΄μ νμνμ§ μμ λ
401+ # μλμΌλ‘ ν΄μ (μμ ) νλ μ΄μ μ νμ©νλ hooksμ λ²μ μ μμ±ν μ μμ΅λλ€.
385402
386403class SelfDeletingTempFile ():
387404 def __init__ (self ):
@@ -405,7 +422,7 @@ def unpack_hook(temp_file):
405422#
406423# λ€μκ³Ό κ°μ λ°©μμΌλ‘ λͺ¨λΈμ μ¬μ©ν μ μμ΅λλ€.
407424
408- # μ¬μ΄μ¦ >=1000μΈ ν
μλ§μ΄ λμ€ν¬μ μ μ₯λ μ μμ΅λλ€.
425+ # μ¬μ΄μ¦ >=1000μΈ tensorλ§μ΄ λμ€ν¬μ μ μ₯λ μ μμ΅λλ€.
409426
410427SAVE_ON_DISK_THRESHOLD = 1000
411428
@@ -434,10 +451,11 @@ def forward(self, *args, **kwargs):
434451
435452
436453######################################################################
437- # μ΄ λ§μ§λ§ μμ μμλ μ μ₯ν΄μΌ νλ (μ¬κΈ°μμλ μμμ μκ° 1000 μ΄μμΈ) ν
μλ€μ 골λΌλ΄λ λ°©λ²κ³Ό
454+ # μ΄ λ§μ§λ§ μμ μμλ μ μ₯ν΄μΌ νλ (μ¬κΈ°μμλ μμμ μκ° 1000 μ΄μμΈ) tensorλ€μ 골λΌλ΄λ λ°©λ²κ³Ό
438455# μ΄ κΈ°λ₯μ ``nn.DataParallel`` κ³Ό ν¨κ» μ¬μ©νλ λ°©λ²μ μ΄ν΄λ³΄μμ΅λλ€.
439456
440457
441458######################################################################
442459# μ¬κΈ°κΉμ§ μ λ°λΌμ€μ
¨λμ? μΆνν©λλ€!
443- # μ΄μ μ μ₯λ ν
μ hooksμ μ΄λ»κ² μ¬μ©νλμ§μ μ°μ° μ λ©λͺ¨λ¦¬ κ΄λ¦¬(trade-offs)μ μ μ©νκ² μ¬μ©ν μ μλ λ°©λ²μ μκ² λμ
¨μ΅λλ€.
460+ # μ΄μ μ μ₯λ tensor hooksλ₯Ό μ΄λ»κ² μ¬μ©νλμ§μ
461+ # μ°μ° μ λ©λͺ¨λ¦¬ κ΄λ¦¬(trade-offs)μ μ μ©νκ² μ¬μ©ν μ μλ λ°©λ²μ μκ² λμ
¨μ΅λλ€.
0 commit comments