待補充圖片和1.4
1. tensorflow2
默認情況下,tensorflow2會自動選擇設備,如果有GPU,優先使用GPU,且自動佔滿多塊GPU顯存。
1.1 設置使用cpu
os.environ['CUDA_VISIBLE_DEVICES'] = "-1"
tf.config.experimental.set_visible_devices(devices=cpus[0], device_type='CPU')
1.2 設置使用GPU個數
首先可以先看看自己設備的GPU和CPU情況
# GPU
gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
print(os.environ['CUDA_VISIBLE_DEVICES'])
# CPU
cpus = tf.config.experimental.list_physical_devices(device_type='CPU')
- 如果有多塊GPU,可以設置使用其中的幾塊,方法有三種:
- 設置當前程序可見的設備範圍:
tf.config.experimental.set_visible_devices(devices=gpus[2:4], device_type='GPU')
,設置設備2,3,4可見,當前程序只會使用自己可見的設備,不可見的設備不會被當前程序使用 - 在終端使用環境變量限制GPU:
export CUDA_VISIBLE_DEVICES=2,3
- 在代碼中指定GPU設備(類似於第一種方法):
os.environ['CUDA_VISIBLE_DEVICES'] = "2,3"
- 設置當前程序可見的設備範圍:
1.3設置使用GPU顯存大小
tensorflow提供了兩種限定顯存的方法:
- 動態申請內存,需要多少,申請多少
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
- 限制消耗固定大小的顯存(程序不會超出限定的顯存大小,若超報錯)
# 限制使用2G顯存
tf.config.experimental.set_virtual_device_configuration(
gpus[0],
[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=2048)]
)
1.4 單GPU模擬多GPU環境
當只有一塊GPU時,假如顯存爲10G,但我們的程序可能只佔用5G,那麼剩下的5G不就浪費了,這時可以將這塊10G的顯存分成兩塊,這樣相當於分佈式使用2塊GPU
tf.config.experimental.set_virtual_device_configuration(
gpus[0],
[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=2048),
tf.config.experimental.VirtualDeviceConfiguration(memory_limit=2048)])
按照上述,2塊GPU也可以當做4塊使用,具體方法待補充