我在一个共享计算资源的环境中工作,也就是说,我们有几台服务器,每台都配备了几个Nvidia Titan X GPU。
对于小到中等大小的模型,12 GB的Titan X通常足以让2-3个人在同一GPU上同时运行训练。如果模型足够小,以至于单个模型没有充分利用GPU的所有计算单元,那么与一个接一个地运行训练过程相比,这实际上可以导致加速。即使在对GPU的并发访问确实减慢了个人训练时间的情况下,拥有多个用户同时在GPU上进行训练的灵活性仍然是很好的。
TensorFlow的问题是,默认情况下,它会在启动时分配全部可用GPU内存。即使是一个小的两层神经网络,我也看到所有12 GB的GPU内存都用完了。
有没有办法让TensorFlow只分配,比方说,4 GB的图形处理器内存,如果一个人知道这对一个给定的型号是足够的?
发布于 2015-12-10 19:00:19
在构造tf.Session
时,您可以通过将tf.GPUOptions
作为可选config
参数的一部分进行传递,来设置要分配的GPU内存的分数:
# Assume that you have 12GB of GPU memory and want to allocate ~4GB:
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
per_process_gpu_memory_fraction
作为同一台计算机上的每个GPU上的进程将使用的GPU内存量的硬上限。目前,此部分统一应用于同一台计算机上的所有GPU;无法在每个GPU基础上设置此部分。
发布于 2016-05-26 15:43:45
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)
发布于 2019-06-03 01:15:29
您可以使用
TF_FORCE_GPU_ALLOW_GROWTH=true
在环境变量中。
在tensorflow代码中:
bool GPUBFCAllocator::GetAllowGrowthValue(const GPUOptions& gpu_options) {
const char* force_allow_growth_string =
std::getenv("TF_FORCE_GPU_ALLOW_GROWTH");
if (force_allow_growth_string == nullptr) {
return gpu_options.allow_growth();
}
https://stackoverflow.com/questions/34199233
复制相似问题