笔者需要得到 使用100组超参数训练后模型的测试准确率,其中不同的超参数对应于不同的网络结构,故Graph和Session均不能共享。即笔者需要执行100次“构建Graph-新建Session-Train&Test-Close&Quit”的操作。
程序本身占用资源不多,便想要实现并行,加速调参。
需求:
- 输入100组超参数,返回相应超参数对应的测试准确率
- 每组超参数对应程序跑在单独的GPU上,不占用其他GPU资源(因为已有代码并无实现GPU间并行的部分)
- 无显存泄露/爆炸等问题
- GPU资源被高效利用
系统环境:
服务器1:Ubuntu 16.04+CUDA8.0+tensorflow 1.0.1+python3.5.2
服务器2:Ubuntu 16.04+CUDA9.0+tensorflow 1.9.0+python3.5.2
单组超参数运行在单GPU上的实现:
已有代码中已经实现了Model
类,提供了 创建图-新建Session-Train&Test-Close&Quit 的 全套操作,简要代码如下:
import tensorflow as tf
class Model:
def __init__(self,param):
self.param = param
# create & build graph
self.graph = tf.Graph()
self.build_graph()
# create session
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
gpu_num = random.choice(cuda_gpu_count())
config.gpu_options.visible_device_list= str(gpu_num)
self.sess = tf.Session(config=config,graph=self.graph)