我目前正在嘗試找到一種有效的方法,使用tensorflow. 根據我發現的信息,有兩種主要方法可以做到這一點。第一個是使用兩個 tensorflow 變量 intra_op_parallelism_threads 和 inter_op_parallelism_threads,然后使用此配置創建會話。第二個是使用OpenMP. 設置環境變量OMP_NUM_THREADS允許操作為進程生成的線程數量。當我發現通過 conda 和通過 pip 安裝 tensorflow 提供了兩種不同的環境時,我的問題就出現了。在conda install修改OpenMP環境變量時似乎改變了進程并行化的方式,而在“pip 環境”中似乎唯一改變它的是我之前提到的 inter/intra 配置變量。由于基準測試的原因,這導致在嘗試比較兩個安裝時遇到一些困難。如果我OMP_NUM_THREADS在 48 核處理器上設置為 1 和 inter/intra 為 16,conda install我只能得到大約 200% 的 CPU 使用率,因為大多數線程在任何給定時間都是空閑的。omp_threads = 1mkl_threads = 1os.environ["OMP_NUM_THREADS"] = str(omp_threads)os.environ["MKL_NUM_THREADS"] = str(mkl_threads)config = tf.ConfigProto()config.intra_op_parallelism_threads = 16config.inter_op_parallelism_threads = 16session = tf.Session(config=config)K.set_session(session)我希望這段代碼會產生 32 個線程,其中大部分線程在任何給定時間都在使用,而實際上它會產生 32 個線程并且一次只使用 4-5 個線程。在使用 tensorflow 之前,有沒有人遇到過類似的情況?為什么通過 conda 和通過 pip 安裝似乎會給出兩種不同的環境?通過使用前面討論的兩種方法的某種組合,是否有任何方法可以在兩次安裝上獲得可比的性能?最后,是否有更好的方法將 python 限制為特定數量的核心?
2 回答

MMMHUHU
TA貢獻1834條經驗 獲得超8個贊
回答你的第一個和最后一個問題。
是的,我在使用通過 pip 安裝的 TensorFlow 時遇到了類似的情況。您可以通過在 Linux 上使用線程關聯、numatcl 或任務集將 python 限制為特定數量的內核。
查看以下鏈接提供的詳細信息,TensorFlow 將始終生成多個線程,其中大多數默認情況下會處于休眠狀態。

慕桂英546537
TA貢獻1848條經驗 獲得超10個贊
我認為這里的重點是 conda 使用 MKL 安裝 Tensorflow,但 pip 沒有。
OpenMP 控件僅在 MKL 中有效,在 pip install 中,OpenMP 環境變量不起作用,僅將 TFSessionConfig 設置為 intra/inter 可能會影響多線程
添加回答
舉報
0/150
提交
取消