5

CPU コアとスレッドを制限したい。そこで、これらを制限する 3 つの方法を見つけました。

1) 「Keras バックエンド + Tensorflow」

from keras import backend as K
import tensorflow as tf

config = tf.ConfigProto(intra_op_parallelism_threads=2, \ 
                        inter_op_parallelism_threads=4, \
                        allow_soft_placement=True, \
                        device_count = {'CPU': 1})
session = tf.Session(config=config)
K.set_session(session)

2)「テンソルフローのケラス」

import tensorflow as tf
from tensorflow import keras

tf.config.threading.set_intra_op_parallelism_threads(2)  
tf.config.threading.set_inter_op_parallelism_threads(4) 

3) 「Tensorflow からの keras」

import os

os.environ['TF_NUM_INTRAOP_THREADS'] = '2'
os.environ['TF_NUM_INTEROP_THREADS'] = '4'

これらの 3 つの方法は同じ影響ですか?

最後に、以下に書いたようなパラメーターについて理解しました

  • intra_op_parallelism_threads("CPUコア数")
  • inter_op_parallelism_threads("スレッド数")

これは正しいですか?わからない場合はお知らせください。

ありがとうございました。

4

1 に答える 1

1

正確ではありません。それほど単純ではありません。公式ドキュメントによると -

intra_op_parallelism_threads - 行列の乗算やリダクションなどの特定の演算では、高速化のために並列スレッドを利用できます。値 0 は、システムが適切な番号を選択することを意味します。これを参照

inter_op_parallelism_threads - 独立したノンブロッキング操作で使用される並列スレッドの数を決定します。0 は、システムが適切な番号を選択することを意味します。これを参照

したがって、技術的には、CPU の数を制限することはできませんが、並列スレッドの数のみを制限できます。これは、リソースの消費を制限するために十分です。


メソッドに関しては、使用しています-

os3 番目の方法では、ライブラリを使用して環境変数を直接設定できます。

import os

os.environ['TF_NUM_INTRAOP_THREADS'] = '2'
os.environ['TF_NUM_INTEROP_THREADS'] = '4'

2 番目のアプローチは、まったく同じことを行う (環境変数を設定する) tf2 のメソッドです。違いは、Keras が tf2 にパッケージ化されていることです。

import tensorflow as tf
from tensorflow import keras

tf.config.threading.set_intra_op_parallelism_threads(2)  
tf.config.threading.set_inter_op_parallelism_threads(4)

最初のアプローチは、スタンドアロンの Keras 用です。このアプローチは、keras が tensorflow バックエンドに設定されている場合に機能します。繰り返しますが、環境変数を間接的に設定するのと同じことを行います。

from keras import backend as K
import tensorflow as tf

config = tf.ConfigProto(intra_op_parallelism_threads=2, \ 
                        inter_op_parallelism_threads=4, \
                        allow_soft_placement=True, \
                        device_count = {'CPU': 1})
session = tf.Session(config=config)
K.set_session(session)

それでも疑問がある場合は、3つすべてを個別に実行した後に環境変数に何が起こるかを確認し、oswith -を使用して特定の変数を確認できます。

print(os.environ.get('KEY_THAT_MIGHT_EXIST'))

このトピックをよりよく理解するには、このリンクをチェックしてください。


TLDR; tf2 を使用している場合は、2 番目または 3 番目の方法を使用できます。それ以外の場合は、テンソルフロー バックエンドでスタンドアロンの Keras を使用している場合は、最初または 3 番目のアプローチを使用します。

于 2020-12-01T07:03:48.730 に答える