質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

1562閲覧

Python RAM使用量の計測

Take1024

総合スコア0

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/08/30 05:27

編集2021/08/30 12:20

Pythonコードの動作に必要なRAMサイズの計測方法が知りたく投稿させて頂きました。

自分で書いた範囲だけでなく、インポートしたライブラリ(pytorch)の中でどれだけのRAMが使用されているかまで知りたいです。

profile系のライブラリやtracemalloc等をいろいろ試しましたが、ライブラリの中まではトレース出来ませんでした。

Linuxコマンドのfreeを用いれば10ms毎のRAMサイズを測ることはできますが、処理時間全体が0.5msとそれ以上に短すぎて、詳細に計測することが出来ませんでした。

お分かりのかたがおられましたらご教授頂けますと幸いです。

[追記]
すみません、情報が不足しておりました。

インポートするライブラリの全体のサイズが知りたいのではなく、メインコードから呼び出している関数(ライブラリ内の関数単体)の実行に必要なRAMサイズを知りたいです。

今後、使用する関数のみを取り出してC言語化させたいと考えてるのですが、そのCコードの実行に必要なRAMサイズを事前に見積もりたいと考えております。(言語が変わるのであくまで目安ですが)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

いったい、何を知りたいのでしょう。
インポートしたライブラリ(pytorch)をロードしただけで必要なメモリ量と、pytorchを使うことで「自分で書いた範囲」で生成したテンソルなどが使うメモリ量では、通常は後者の方が圧倒的に多いです。
したがって、pytorchをロードするだけで必要なメモリ量を調べても意味はないのではないでしょうか。

どうしても計測したいのであれば以下の方法があります。

shellを二つ立ち上げる。
一方のshellからpythonインタプリタを実行する。

shell

1$ python 2Python 3.8.3 (default, Jul 2 2020, 16:21:59) 3[GCC 7.3.0] :: Anaconda, Inc. on linux 4Type "help", "copyright", "credits" or "license" for more information. 5>>>

も一方のshellで以下を実行する。

shell

1$ ps alx | head -1 2F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND

さらに以下を実行する。

shell

1$ ps alx | grep python 24 0 660 1 20 0 359208 29816 poll_s Ssl ? 0:04 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid 34 0 1121 1 20 0 574284 19472 poll_s Ssl ? 0:01 /usr/bin/python2 -Es /usr/sbin/tuned -l -P 40 1000 1923 1232 20 0 126932 6980 poll_s S+ pts/0 0:00 /home/XXX/.pyenv/versions/anaconda3-2020.07/bin/python 50 1000 1957 1336 20 0 112828 976 pipe_w S+ pts/1 0:00 grep --color=auto python

VSZが仮想メモリの全サイズ、RSSが使用中の物理メモリー量です。(単位:KB)

次にpythonで何かのライブラリをimportする。たとえばpandasをimportしてみる。

python

1>>> import pandas as pd 2```shell 3 4もう一度他方のshellでps alx | grep pythonを実行する。 5 6```shell 7$ ps alx | grep python 84 0 660 1 20 0 359208 29816 poll_s Ssl ? 0:04 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid 94 0 1121 1 20 0 574284 19472 poll_s Ssl ? 0:01 /usr/bin/python2 -Es /usr/sbin/tuned -l -P 100 1000 1923 1232 20 0 379136 52472 poll_s S+ pts/0 0:02 /home/XXX/.pyenv/versions/anaconda3-2020.07/bin/python 110 1000 1959 1336 20 0 112824 976 - R+ pts/1 0:00 grep --color=auto python

この差がライブラリをimportしたことによる使用メモリの増加量です。

仮想メモリ VSZ 379136 - 126932 = 252204KByte増加
物理メモリー RSS 52472 - 6980 = 45492KByte増加
物理メモリの量は、他のプロセスの使用具合によってページアウトされるため変動します。

ただし、これはpandasだけの使用メモリの増加量ではありません。pandasがその中でimportしたnumpyやdatetimeやsubprocessやその他多くのライブラリがロードされた結果の使用メモリの増加量であることに注意してください。

同様に、処理を途中まで実行してそこで同じことをすればそれぞれで増加したメモリの量は測定することができます。

投稿2021/08/30 07:42

ppaul

総合スコア24668

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そのあなたのコードの要所要所で、freeコマンドを実行させるようにして測ればいいのでは

投稿2021/08/30 05:53

y_waiwai

総合スコア88024

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問