Skip to content

Commit d826336

Browse files
deploy: 86b4ab4
1 parent 7f00019 commit d826336

File tree

6 files changed

+145
-3
lines changed

6 files changed

+145
-3
lines changed

api/_modules/opacus/grad_sample/grad_sample_module_fast_gradient_clipping.html

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,12 @@ <h1>Source code for opacus.grad_sample.grad_sample_module_fast_gradient_clipping
5353
<span class="n">create_or_accumulate_grad_sample</span><span class="p">,</span>
5454
<span class="n">promote_current_grad_sample</span><span class="p">,</span>
5555
<span class="p">)</span>
56-
<span class="kn">from</span> <span class="nn">opacus.utils.module_utils</span> <span class="kn">import</span> <span class="n">requires_grad</span><span class="p">,</span> <span class="n">trainable_parameters</span>
56+
<span class="kn">from</span> <span class="nn">opacus.layers.dp_rnn</span> <span class="kn">import</span> <span class="n">DPGRU</span><span class="p">,</span> <span class="n">DPLSTM</span><span class="p">,</span> <span class="n">DPRNN</span>
57+
<span class="kn">from</span> <span class="nn">opacus.utils.module_utils</span> <span class="kn">import</span> <span class="p">(</span>
58+
<span class="n">requires_grad</span><span class="p">,</span>
59+
<span class="n">trainable_modules</span><span class="p">,</span>
60+
<span class="n">trainable_parameters</span><span class="p">,</span>
61+
<span class="p">)</span>
5762

5863

5964
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
@@ -141,6 +146,12 @@ <h1>Source code for opacus.grad_sample.grad_sample_module_fast_gradient_clipping
141146
<span class="sd"> If ``strict`` is set to ``True`` and module ``m`` (or any of its</span>
142147
<span class="sd"> submodules) includes a buffer.</span>
143148
<span class="sd"> """</span>
149+
<span class="k">if</span> <span class="n">logger</span><span class="o">.</span><span class="n">isEnabledFor</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">):</span>
150+
<span class="bp">self</span><span class="o">.</span><span class="n">log_module_gradient_sample_mode</span><span class="p">(</span>
151+
<span class="n">module</span><span class="o">=</span><span class="n">m</span><span class="p">,</span>
152+
<span class="n">force_functorch</span><span class="o">=</span><span class="n">force_functorch</span><span class="p">,</span>
153+
<span class="n">use_ghost_clipping</span><span class="o">=</span><span class="n">use_ghost_clipping</span><span class="p">,</span>
154+
<span class="p">)</span>
144155

145156
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
146157
<span class="n">m</span><span class="p">,</span>
@@ -275,6 +286,46 @@ <h1>Source code for opacus.grad_sample.grad_sample_module_fast_gradient_clipping
275286
<span class="k">del</span> <span class="n">module</span><span class="o">.</span><span class="n">max_batch_len</span></div>
276287

277288

289+
<div class="viewcode-block" id="GradSampleModuleFastGradientClipping.log_module_gradient_sample_mode">
290+
<a class="viewcode-back" href="../../../grad_sample_module_fast_gradient_clipping.html#opacus.grad_sample.grad_sample_module_fast_gradient_clipping.GradSampleModuleFastGradientClipping.log_module_gradient_sample_mode">[docs]</a>
291+
<span class="k">def</span> <span class="nf">log_module_gradient_sample_mode</span><span class="p">(</span>
292+
<span class="bp">self</span><span class="p">,</span> <span class="n">module</span><span class="p">:</span> <span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">force_functorch</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">use_ghost_clipping</span><span class="o">=</span><span class="kc">True</span>
293+
<span class="p">):</span>
294+
<span class="w"> </span><span class="sd">"""</span>
295+
<span class="sd"> Add logs to track gradient sample mode for each part of the module, including 1) Ghost Clipping, 2) Fast Gradient Clipping (hook mode), and 3) Fast Gradient Clipping (functorch mode).</span>
296+
297+
<span class="sd"> Args:</span>
298+
<span class="sd"> module: nn.Module to be checked</span>
299+
<span class="sd"> force_functorch: If set to ``True``, will use functorch to compute</span>
300+
<span class="sd"> all per sample gradients. Otherwise, functorch will be used only</span>
301+
<span class="sd"> for layers without registered grad sampler methods.</span>
302+
<span class="sd"> use_ghost_clipping: If set to ``True``, Ghost Clipping</span>
303+
<span class="sd"> will be used for clipping gradients of supported layers. If ``False``, Fast</span>
304+
<span class="sd"> Gradient Clipping will be used for all layers.</span>
305+
<span class="sd"> """</span>
306+
<span class="k">for</span> <span class="n">m_name</span><span class="p">,</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">trainable_modules</span><span class="p">(</span><span class="n">module</span><span class="p">):</span>
307+
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span><span class="n">DPRNN</span><span class="p">,</span> <span class="n">DPLSTM</span><span class="p">,</span> <span class="n">DPGRU</span><span class="p">]:</span>
308+
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
309+
<span class="sa">f</span><span class="s2">"Module name: </span><span class="si">{</span><span class="n">m_name</span><span class="si">}</span><span class="s2">, module type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span><span class="si">}</span><span class="s2">. No hook or functorch is added."</span>
310+
<span class="p">)</span>
311+
312+
<span class="k">elif</span> <span class="n">use_ghost_clipping</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORM_SAMPLERS</span><span class="p">:</span>
313+
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
314+
<span class="sa">f</span><span class="s2">"Module name: </span><span class="si">{</span><span class="n">m_name</span><span class="si">}</span><span class="s2">, module type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span><span class="si">}</span><span class="s2">, under Ghost Clipping."</span>
315+
<span class="p">)</span>
316+
317+
<span class="k">else</span><span class="p">:</span>
318+
<span class="k">if</span> <span class="ow">not</span> <span class="n">force_functorch</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">GRAD_SAMPLERS</span><span class="p">:</span>
319+
<span class="c1"># When functorch is not enforced, use FGC (hook mode) if the layer has a registered grad_sampler (supported). Otherwise, use FGC (functorch mode).</span>
320+
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
321+
<span class="sa">f</span><span class="s2">"Module name: </span><span class="si">{</span><span class="n">m_name</span><span class="si">}</span><span class="s2">, module type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span><span class="si">}</span><span class="s2">, under Fast Gradient Clipping (hook mode)."</span>
322+
<span class="p">)</span>
323+
<span class="k">else</span><span class="p">:</span>
324+
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
325+
<span class="sa">f</span><span class="s2">"Module name: </span><span class="si">{</span><span class="n">m_name</span><span class="si">}</span><span class="s2">, module type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span><span class="si">}</span><span class="s2">, under Fast Gradient Clipping (functorch mode)."</span>
326+
<span class="p">)</span></div>
327+
328+
278329
<span class="nd">@property</span>
279330
<span class="k">def</span> <span class="nf">per_sample_gradient_norms</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">torch</span><span class="o">.</span><span class="n">Tensor</span><span class="p">:</span>
280331
<span class="w"> </span><span class="sd">"""Returns per sample gradient norms. Note that these are not privatized and should only be used for debugging purposes or in non-private settings"""</span>

api/_modules/opacus/grad_sample/grad_sample_module_fast_gradient_clipping/index.html

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,12 @@ <h1>Source code for opacus.grad_sample.grad_sample_module_fast_gradient_clipping
5353
<span class="n">create_or_accumulate_grad_sample</span><span class="p">,</span>
5454
<span class="n">promote_current_grad_sample</span><span class="p">,</span>
5555
<span class="p">)</span>
56-
<span class="kn">from</span> <span class="nn">opacus.utils.module_utils</span> <span class="kn">import</span> <span class="n">requires_grad</span><span class="p">,</span> <span class="n">trainable_parameters</span>
56+
<span class="kn">from</span> <span class="nn">opacus.layers.dp_rnn</span> <span class="kn">import</span> <span class="n">DPGRU</span><span class="p">,</span> <span class="n">DPLSTM</span><span class="p">,</span> <span class="n">DPRNN</span>
57+
<span class="kn">from</span> <span class="nn">opacus.utils.module_utils</span> <span class="kn">import</span> <span class="p">(</span>
58+
<span class="n">requires_grad</span><span class="p">,</span>
59+
<span class="n">trainable_modules</span><span class="p">,</span>
60+
<span class="n">trainable_parameters</span><span class="p">,</span>
61+
<span class="p">)</span>
5762

5863

5964
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
@@ -141,6 +146,12 @@ <h1>Source code for opacus.grad_sample.grad_sample_module_fast_gradient_clipping
141146
<span class="sd"> If ``strict`` is set to ``True`` and module ``m`` (or any of its</span>
142147
<span class="sd"> submodules) includes a buffer.</span>
143148
<span class="sd"> """</span>
149+
<span class="k">if</span> <span class="n">logger</span><span class="o">.</span><span class="n">isEnabledFor</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">):</span>
150+
<span class="bp">self</span><span class="o">.</span><span class="n">log_module_gradient_sample_mode</span><span class="p">(</span>
151+
<span class="n">module</span><span class="o">=</span><span class="n">m</span><span class="p">,</span>
152+
<span class="n">force_functorch</span><span class="o">=</span><span class="n">force_functorch</span><span class="p">,</span>
153+
<span class="n">use_ghost_clipping</span><span class="o">=</span><span class="n">use_ghost_clipping</span><span class="p">,</span>
154+
<span class="p">)</span>
144155

145156
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
146157
<span class="n">m</span><span class="p">,</span>
@@ -275,6 +286,46 @@ <h1>Source code for opacus.grad_sample.grad_sample_module_fast_gradient_clipping
275286
<span class="k">del</span> <span class="n">module</span><span class="o">.</span><span class="n">max_batch_len</span></div>
276287

277288

289+
<div class="viewcode-block" id="GradSampleModuleFastGradientClipping.log_module_gradient_sample_mode">
290+
<a class="viewcode-back" href="../../../grad_sample_module_fast_gradient_clipping.html#opacus.grad_sample.grad_sample_module_fast_gradient_clipping.GradSampleModuleFastGradientClipping.log_module_gradient_sample_mode">[docs]</a>
291+
<span class="k">def</span> <span class="nf">log_module_gradient_sample_mode</span><span class="p">(</span>
292+
<span class="bp">self</span><span class="p">,</span> <span class="n">module</span><span class="p">:</span> <span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">force_functorch</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">use_ghost_clipping</span><span class="o">=</span><span class="kc">True</span>
293+
<span class="p">):</span>
294+
<span class="w"> </span><span class="sd">"""</span>
295+
<span class="sd"> Add logs to track gradient sample mode for each part of the module, including 1) Ghost Clipping, 2) Fast Gradient Clipping (hook mode), and 3) Fast Gradient Clipping (functorch mode).</span>
296+
297+
<span class="sd"> Args:</span>
298+
<span class="sd"> module: nn.Module to be checked</span>
299+
<span class="sd"> force_functorch: If set to ``True``, will use functorch to compute</span>
300+
<span class="sd"> all per sample gradients. Otherwise, functorch will be used only</span>
301+
<span class="sd"> for layers without registered grad sampler methods.</span>
302+
<span class="sd"> use_ghost_clipping: If set to ``True``, Ghost Clipping</span>
303+
<span class="sd"> will be used for clipping gradients of supported layers. If ``False``, Fast</span>
304+
<span class="sd"> Gradient Clipping will be used for all layers.</span>
305+
<span class="sd"> """</span>
306+
<span class="k">for</span> <span class="n">m_name</span><span class="p">,</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">trainable_modules</span><span class="p">(</span><span class="n">module</span><span class="p">):</span>
307+
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span><span class="n">DPRNN</span><span class="p">,</span> <span class="n">DPLSTM</span><span class="p">,</span> <span class="n">DPGRU</span><span class="p">]:</span>
308+
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
309+
<span class="sa">f</span><span class="s2">"Module name: </span><span class="si">{</span><span class="n">m_name</span><span class="si">}</span><span class="s2">, module type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span><span class="si">}</span><span class="s2">. No hook or functorch is added."</span>
310+
<span class="p">)</span>
311+
312+
<span class="k">elif</span> <span class="n">use_ghost_clipping</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORM_SAMPLERS</span><span class="p">:</span>
313+
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
314+
<span class="sa">f</span><span class="s2">"Module name: </span><span class="si">{</span><span class="n">m_name</span><span class="si">}</span><span class="s2">, module type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span><span class="si">}</span><span class="s2">, under Ghost Clipping."</span>
315+
<span class="p">)</span>
316+
317+
<span class="k">else</span><span class="p">:</span>
318+
<span class="k">if</span> <span class="ow">not</span> <span class="n">force_functorch</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">GRAD_SAMPLERS</span><span class="p">:</span>
319+
<span class="c1"># When functorch is not enforced, use FGC (hook mode) if the layer has a registered grad_sampler (supported). Otherwise, use FGC (functorch mode).</span>
320+
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
321+
<span class="sa">f</span><span class="s2">"Module name: </span><span class="si">{</span><span class="n">m_name</span><span class="si">}</span><span class="s2">, module type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span><span class="si">}</span><span class="s2">, under Fast Gradient Clipping (hook mode)."</span>
322+
<span class="p">)</span>
323+
<span class="k">else</span><span class="p">:</span>
324+
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
325+
<span class="sa">f</span><span class="s2">"Module name: </span><span class="si">{</span><span class="n">m_name</span><span class="si">}</span><span class="s2">, module type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span><span class="si">}</span><span class="s2">, under Fast Gradient Clipping (functorch mode)."</span>
326+
<span class="p">)</span></div>
327+
328+
278329
<span class="nd">@property</span>
279330
<span class="k">def</span> <span class="nf">per_sample_gradient_norms</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">torch</span><span class="o">.</span><span class="n">Tensor</span><span class="p">:</span>
280331
<span class="w"> </span><span class="sd">"""Returns per sample gradient norms. Note that these are not privatized and should only be used for debugging purposes or in non-private settings"""</span>

api/genindex.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,10 @@ <h2 id="L">L</h2>
295295
</li>
296296
</ul></li>
297297
</ul></td>
298+
<td style="width: 33%; vertical-align: top;"><ul>
299+
<li><a href="grad_sample_module_fast_gradient_clipping.html#opacus.grad_sample.grad_sample_module_fast_gradient_clipping.GradSampleModuleFastGradientClipping.log_module_gradient_sample_mode">log_module_gradient_sample_mode() (opacus.grad_sample.grad_sample_module_fast_gradient_clipping.GradSampleModuleFastGradientClipping method)</a>
300+
</li>
301+
</ul></td>
298302
</tr></table>
299303
<h2 id="M">M</h2>
300304
<table class="indextable genindextable" style="width: 100%"><tr>

0 commit comments

Comments
 (0)