我在Ubuntu 14.04上安装了GPU版本的tensorflow。
我在GPU服务器上,tensorflow可以访问可用的GPU。
我想在CPU上运行tensorflow。
通常我可以使用env CUDA_VISIBLE_DEVICES=0
在GPU上运行。 0
如何在CPU之间进行选择?
我不想用with tf.device("/cpu:0"):
答案 0 :(得分:140)
您还可以将环境变量设置为
CUDA_VISIBLE_DEVICES=""
无需修改源代码。
答案 1 :(得分:95)
您可以按display: flex
:
$item->set*()
参数
device_count
另见protobuf配置文件:
答案 2 :(得分:54)
如果上述答案无效,请尝试:
os.environ['CUDA_VISIBLE_DEVICES'] = ''
或
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
答案 3 :(得分:10)
对我来说,仅将CUDA_VISIBLE_DEVICES
设置为恰好为-1
即可:
作品:
import os
import tensorflow as tf
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
if tf.test.gpu_device_name():
print('GPU found')
else:
print("No GPU found")
# No GPU found
不有效:
import os
import tensorflow as tf
os.environ['CUDA_VISIBLE_DEVICES'] = ''
if tf.test.gpu_device_name():
print('GPU found')
else:
print("No GPU found")
# GPU found
答案 4 :(得分:3)
只需使用以下代码。
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
答案 5 :(得分:1)
环境变量解决方案不适用于运行tensorflow 2.3.1的我。我认为通过github线程中的注释,以下解决方案适用于版本> = 2.1.0。
import tensorflow as tf
# Hide GPU from visible devices
tf.config.set_visible_devices([], 'GPU')
请确保在导入后使用新的Tensorflow实例立即执行此操作(如果您正在运行jupyter Notebook,请重新启动内核)。
并检查您是否确实在CPU上运行:
# To find out which devices your operations and tensors are assigned to
tf.debugging.set_log_device_placement(True)
# Create some tensors and perform an operation
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 = tf.matmul(a, b)
print(c)
预期输出:
2.3.1
Executing op MatMul in device /job:localhost/replica:0/task:0/device:CPU:0
tf.Tensor(
[[22. 28.]
[49. 64.]], shape=(2, 2), dtype=float32)
答案 6 :(得分:1)
按照Tensorflow GPU guide的建议。
# Place tensors on the CPU
with tf.device('/CPU:0'):
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]])
# Any additional tf code placed in this block will be executed on the CPU
答案 7 :(得分:0)
在某些系统中,必须指定:
import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]="" # or even "-1"
在导入张量流之前。
答案 8 :(得分:0)
您可以使用tf.config.set_visible_devices
。一种允许您设置是否使用以及使用哪些GPU的可能功能是:
import tensorflow as tf
def set_gpu(gpu_ids_list):
gpus = tf.config.list_physical_devices('GPU')
if gpus:
try:
gpus_used = [gpus[i] for i in gpu_ids_list]
tf.config.set_visible_devices(gpus_used, 'GPU')
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPU")
except RuntimeError as e:
# Visible devices must be set before GPUs have been initialized
print(e)
假设您在具有4个GPU的系统上,并且只想使用两个GPU,一个GPU使用id = 0
,另一个GPU使用id = 2
,那么在导入后立即使用代码的第一个命令这些库将是:
set_gpu([0, 2])
在您的情况下,仅使用CPU,您可以使用空列表调用该功能:
set_gpu([])
出于完整性考虑,如果要避免运行时初始化将分配设备上的所有内存,则可以使用tf.config.experimental.set_memory_growth
。
最后,用于管理要使用的设备的功能(动态占用GPU的内存)变为:
import tensorflow as tf
def set_gpu(gpu_ids_list):
gpus = tf.config.list_physical_devices('GPU')
if gpus:
try:
gpus_used = [gpus[i] for i in gpu_ids_list]
tf.config.set_visible_devices(gpus_used, 'GPU')
for gpu in gpus_used:
tf.config.experimental.set_memory_growth(gpu, True)
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPU")
except RuntimeError as e:
# Visible devices must be set before GPUs have been initialized
print(e)
答案 9 :(得分:0)
在安装级别上的另一种可能的解决方案是寻找仅CPU的变体:https://www.tensorflow.org/install/pip#package-location
以我为例,现在给出:
// [[Rcpp::plugins(openmp)]]
// [[Rcpp::export]]
Rcpp::List func1(const arma::vec & x, const arma::vec & y){
#pragma omp parallel proc_bind(spread) num_threads(2)
{
#pragma omp for
for(int i = 0; i < n; i++){ // for-loop 1
some calculation
}
#pragma omp for
for(int i = 0; i < n; i++){ // for-loop 2
some calculation
}
}
return Rcpp::List::create(Rcpp::Named("variable 1") = v1,
Rcpp::Named("variable 2") = v2);
}
只需选择正确的版本。像使用this answer中所述的使用venv的奖励积分。
答案 10 :(得分:0)
对于我来说,对于tensorflow 2.4.0,除非您安装tensorflow-cpu
pip install tensorflow-cpu