筆者需要tensorflow僅執行在乙個gpu上(機器本身有多gpu),而且需要依據系統引數動態調節,故無法簡單使用cuda_visible_devices。
一種方式是全域性使用tf.device函式生成的域,但裝置號需要在繪製graph前指定,仍然不夠靈活。
查閱文件發現config的gpuoptions中的visible_device_list可以定義gpu編號從visible到virtual的對映,即可以設定tensorflow可見的www.cppcns.comgpu device,從而全域性設定了tensorflow可見的gpu編號。**如下:
config = tf.configproto()
config.gpu_options.visible_device_list = str(device_num)
sess = tf.session(config=config)
參考 多卡伺服器下隱藏部分 gpu 和 tensorflow 的視訊記憶體使用設定,還可以通過os包設定全域性變數cuda_visible_devices,**如下:
os.environ["程式設計客棧cuda_visible_devices"] = "2"
補充知識:tensorflow 設定程式可見gpu與邏輯分割槽
tensorflow 設定程式可見gpu(多gpu情況)
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow_core.python.keras.api._v2 import keras
print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, tf, keras:
print(module.__name__, module.__version__)
# 列印變數所在位置
tf.debugging.set_log_device_placement(true)
# 獲取物理gpu的個數
gpus = tf.config程式設計客棧.experimental.list_physical_devices("gpu")
if len(gpus) >= 1:
# 設定第幾個gpu 當前程式可見
tf.config.experimental.set_visible_devices(gpus[0], "gpu")
print("物理gpu個數:", len(gpus))
# 獲取邏輯gpu的個數
logical_gpus = tf.config.experimental.list_logical_devices("gpu")
print("邏輯gpu個數:", len(logical_gpus))
tensorflow 設定gpu的 邏輯分割槽
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow_core.python.keras.api._v2 import keras
print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, tf, keras:
print(module.__name__, module.__version__)
# 列印變數所在位置
tf.debugging.set_log_device_placement(true)
# 獲取物理gpu的個數
gpus = tf.config.experimental.list_physical_devices("gpu") 程式設計客棧
if len(gpus) >= 1:
# 設定第幾個gpu 當前程式可見
tf.config.experimental.set_visible_devices(gpus[0], "gpu")
# 設定gpu的 邏輯分割槽
tf.config.experimental.set_virtual_device_configuration(
gpus[0],
[tf.config.experimental.virtualdeviceconfiguration(memory_limit=3072),
tf.config.experimental.virtualdeviceconfiguration(memory_limit=3072)])
print("物理gpu個數:", len(gpus))
# 獲取邏輯gpu的個數
logical_gpus = tf.config.experimental.list_logical_devices("gwww.cppcns.compu")
print("邏輯gpu個數:", len(logical_gpus))
tensorflow 手動設定處理gpu
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow_core.python.keras.api._v2 import keras
print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, tf, keras:
print(module.__name__, module.__version__)
# 列印變數所在位置
tf.debugging.set_log_device_placement(true)
# 自動指定處理裝置
tf.config.set_soft_device_placement(true)
# 獲取物理gpu的個數
gpus = tf.config.experimental.list_physical_devices("gpu")
for gpu in gpus:
# 設定記憶體自增長方式
tf.config.experimental.set_memory_growth(gpu, true)
print("物理gpu個數:", len(gpus))
# 獲取邏輯gpu的個數
logical_gpus = tf.config.experimental.list_logical_devices("gpu")
print("邏輯gpu個數:", len(logical_gpus))
c =
# 迴圈遍歷當前邏輯gpu
for gpu in logical_gpus:
print(gpu.name)
# 手動設定處理gpu
with tf.device(gpu.name):
a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
# 矩陣相乘 並且新增至列表
c.append(tf.matmul(a, b))
# 手動設定處理gpu
with tf.device("/gpu:0"):
matmul_sum = tf.add_n(c)
print(matmul_sum)
本文標題: tensorflow全域性設定可見gpu編號操作
本文位址:
Tensorflow全域性設定可見GPU編號
筆者需要tensorflow僅執行在乙個gpu上 機器本身有多gpu 而且需要依據系統引數動態調節,故無法簡單使用cuda visible devices。一種方式是全域性使用tf.device函式生成的域,但裝置號需要在繪製graph前指定,仍然不夠靈活。查閱文件發現config的gpuoptio...
python設定全域性可訪問的driver物件方法
最近專案要用python來寫自動化,我根據之前現有的ruby框架來重寫。發現乙個最大的區別,全域性變數,ruby是可以全工程可見,而python只能在當前py檔案內可見。其實在開發中我們都會要求盡量少用全域性變數,以避免帶來的不可預見的問題。但是在做selenium框架時,driver物件的必須全工...
tensorflow結果可重複
最近在學吳恩達的深度學習課程,在參考別人的 的時候,發現在cpu多執行緒情況下和gpu執行的情況下,同樣的 資料,每次訓練出來的結果都不一樣,這還怎麼調參,於是stackoverflow走起。windows10 64位 python 3.6 tensorflow 1.14 keras 2.2.5 c...