¡ほら! コース
「PythonでのWeb開発者」の立ち上げに特化した一連の出版物を継続し、現在、別の興味深い記事の翻訳を共有しています。
Zendeskでは、Pythonを使用して機械学習製品を作成しています。 機械学習アプリケーションでは、私たちが遭遇した最も一般的な問題の1つは、メモリリークとスパイクです。 Pythonコードは通常、
Hadoop 、
Spark、 AWS Batchなどの分散処理フレームワークを使用してコンテナで実行されます。 各コンテナには、一定量のメモリが割り当てられます。 コードの実行が指定されたメモリ制限を超えるとすぐに、コンテナはメモリ不足のために発生するエラーのために動作を停止します。

さらに多くのメモリを割り当てることにより、問題をすばやく修正できます。 ただし、これはリソースの浪費につながり、予測できないメモリのバーストによりアプリケーションの安定性に影響を与える可能性があります。 メモリリークの原因は
次のとおりです。
- 削除されない大きなオブジェクトの長期保存。
- コード内のループバックリンク 。
- Cのベースライブラリ/拡張機能により、メモリリークが発生します。
メモリ使用量をアプリケーションでプロファイリングして、使用するコードスペースとパッケージの効率をよりよく理解することをお勧めします。
この記事では、次の側面について説明します。
- 経時的なアプリケーションメモリ使用量のプロファイリング。
- プログラムの特定の部分のメモリ使用量を確認する方法。
- メモリの問題が原因のエラーをデバッグするためのヒント。
経時的なメモリプロファイリングmemory-profilerパッケージを使用して、Pythonプログラムの実行中の可変メモリ使用量を確認できます。
図A.時間の関数としてのメモリプロファイリングinclude-childrenオプションは、親プロセスによって生成されたすべての子プロセスによるメモリ使用を有効にします。 図Aは、トレーニングデータパケットが処理される瞬間にメモリをサイクルで増加させる反復学習プロセスを反映しています。 オブジェクトはガベージコレクション中に削除されます。
メモリ使用量が絶えず増加している場合、これはメモリリークの潜在的な脅威と見なされます。 これを反映したサンプルコードを
次に示します。
図B.時間とともに増加するメモリ使用量メモリ使用量が特定のしきい値を超えたらすぐに、デバッガーにブレークポイントを設定する必要があります。 これを行うには、トラブルシューティング中に便利な
pdb-mmemパラメーターを使用できます。
特定の時点でのメモリダンププログラム内の大規模なオブジェクトの予想される数を推定し、それらを複製したり、さまざまな形式に変換したりする必要があるかどうかを推定すると便利です。
メモリ内のオブジェクトをさらに分析するために、
muppyを使用してプログラムの特定の行に
ダンプヒープを作成できます。
図C.ダンプヒープダンプのサンプルもう1つの有用なメモリプロファイリングライブラリは
objgraphです 。これにより、オブジェクトの起源を確認するグラフを生成できます。
便利なポインター有用なアプローチは、メモリリークを引き起こす適切なコードを実行する小さな「テストケース」を作成することです。 本格的な入力の処理に時間がかかる場合は、ランダムに選択したデータのサブセットの使用を検討してください。
別のプロセスでメモリ負荷が高いタスクを実行するPythonは、オペレーティングシステムのメモリをすぐに解放する必要はありません。 メモリが解放されたことを確認するには、コードを実行した後に別のプロセスを開始する必要があります。 Pythonのガベージコレクターの詳細については、
こちらをご覧ください 。
デバッガーはオブジェクトへの参照を追加できます。pdbなどのブレークポイントデバッガーを使用する場合、デバッガーによって手動で参照されるすべての作成済みオブジェクトはメモリに残ります。 これにより、オブジェクトがタイムリーに削除されないため、メモリリークの誤った感覚が生じる可能性があります。
メモリリークを引き起こす可能性のあるパッケージに注意してください。Pythonの一部のライブラリは潜在的にリークを引き起こす可能性があります。たとえば、
pandas
はいくつかの既知の
メモリリークの問題があります。
リークを探しましょう!
便利なリンク:docs.python.org/3/c-api/memory.htmldocs.python.org/3/library/debug.htmlこの記事がお役に立てばコメントをお書きください。 そして、私たちのコースについてもっと知りたい方は、4月22日に開催される
オープンデーにご招待します。