コンテキスト デコレータを使用した Pytorch のメモリ リーク問題のデバッグ
Apr 10, 2023 am 11:31 AM
python
デコレータ
メモリーリーク
デコレーターは、Python コンテキスト マネージャーの特定の実装です。この記事では、pytorch GPU デバッグの例を通じてそれらの使用方法を説明します。すべての状況で機能するとは限りませんが、非常に便利であることがわかりました。
メモリ リークの問題のデバッグ
メモリ リークをデバッグするには、さまざまな方法があります。この記事では、コード内で問題のある行を特定するための便利な方法を紹介します。この方法は、特定の場所を簡潔な方法で見つけるのに役立ちます。
行ごとの手動デバッグ
問題が発生した場合、一般的に使用される古典的な方法は、次の例のように、デバッガーを使用して行ごとにチェックすることです。
- ##検索エンジンで pytorch のすべてのテンソルの合計数を計算する方法に関するコード スニペットを探します。たとえば、tensor-counter-snippet
- コードにブレークポイントを設定します
- tensor-counter-snippet を使用して tensor の合計数を取得します
- デバッガーを使用して次のステップを実行します
- tensor-counter-snippet を再実行し、tensor 数が正しいかどうかを確認します増加しました
- 上記の手順を複製します
def memleak_wrapper(func): def wrap(*args, **kwargs): print("num tensors start is ...") out = func(*args, **kwargs) print("num tensors end is ...") return out return wrap@memleak_wrapper def function_to_debug(x): print(f"put line(s) of code here. Input is {x}") out = x + 10 return outout = function_to_debug(x=1000) print(f"out is {out}") #输入类似这样 #num tensors start is ... #put line(s) of code here. Input is 1000 #num tensors end is ... #outis 1010
ログイン後にコピー
with open("file") as f: …
ログイン後にコピー
from contextlib import ContextDecorator class check_memory_leak_context(ContextDecorator): def __enter__(self): print('Starting') return self def __exit__(self, *exc): print('Finishing') return False
ログイン後にコピー
class check_memory_leak_context(ContextDecorator): def __enter__(self): self.start = get_n_tensors() return self def __exit__(self, *exc): self.end = get_n_tensors() increase = self.end — self.start if increase > 0: print(f”num tensors increased with" f"{self.end — self.start} !”) else: print(”no added tensors”) return False
ログイン後にコピー
import gc def get_n_tensors(): tensors= [] for obj in gc.get_objects(): try: if (torch.is_tensor(obj) or (hasattr(obj, ‘data’) and torch.is_tensor(obj.data))): tensors.append(obj) except: pass return len(tensors)
ログイン後にコピー
x = arbitrary_operation(x) ... with check_memory_leak_context(): y = x[0].permute(1, 2, 0).cpu().detach().numpy() x = some_harmless_operation() ... x = another_arbitrary_operation(x)
ログイン後にコピー
以上がコンテキスト デコレータを使用した Pytorch のメモリ リーク問題のデバッグの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
2週間前
By 尊渡假赌尊渡假赌尊渡假赌
レポ:チームメイトを復活させる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
R.E.P.O.ファイルの保存場所:それはどこにあり、それを保護する方法は?
3週間前
By DDD

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
2週間前
By 尊渡假赌尊渡假赌尊渡假赌
レポ:チームメイトを復活させる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
R.E.P.O.ファイルの保存場所:それはどこにあり、それを保護する方法は?
3週間前
By DDD

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック
Gmailメールのログイン入り口はどこですか?
7311
9


Java チュートリアル
1624
14


CakePHP チュートリアル
1346
46


Laravel チュートリアル
1259
25


PHP チュートリアル
1207
29



Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表

Golang の技術的なパフォーマンスの最適化でメモリ リークを回避するにはどうすればよいですか?

Valgrind または AddressSanitizer を使用して C++ でメモリ リークを見つけるにはどうすればよいですか?
