restore CDBTune

This commit is contained in:
yangdsh
2019-12-05 06:13:26 +00:00
committed by Dana Van Aken
parent 1e17c78956
commit 5579d8d94f
3 changed files with 124 additions and 50 deletions

View File

@@ -3,7 +3,7 @@
#
# Copyright (c) 2017-18, Carnegie Mellon University Database Group
#
# from: https://github.com/KqSMea8/CDBTune
# from: https://github.com/KqSMea8/use_default
# Zhang, Ji, et al. "An end-to-end automatic cloud database tuning system using
# deep reinforcement learning." Proceedings of the 2019 International Conference
# on Management of Data. ACM, 2019
@@ -23,22 +23,36 @@ LOG = get_analysis_logger(__name__)
class Actor(nn.Module):
def __init__(self, n_states, n_actions, hidden_sizes):
def __init__(self, n_states, n_actions, hidden_sizes, use_default):
super(Actor, self).__init__()
self.layers = nn.Sequential(
nn.Linear(n_states, hidden_sizes[0]),
nn.LeakyReLU(negative_slope=0.2),
nn.BatchNorm1d(hidden_sizes[0]),
nn.Linear(hidden_sizes[0], hidden_sizes[1]),
nn.Tanh(),
nn.Dropout(0.3),
nn.BatchNorm1d(hidden_sizes[1]),
nn.Linear(hidden_sizes[1], hidden_sizes[2]),
nn.Tanh(),
nn.Dropout(0.3),
nn.BatchNorm1d(hidden_sizes[2]),
nn.Linear(hidden_sizes[2], n_actions)
)
if use_default:
self.layers = nn.Sequential(
nn.Linear(n_states, 128),
nn.LeakyReLU(negative_slope=0.2),
nn.BatchNorm1d(hidden_sizes[0]),
nn.Linear(128, 128),
nn.Tanh(),
nn.Dropout(0.3),
nn.Linear(128, 128),
nn.Tanh(),
nn.Linear(128, 64),
nn.Linear(64, n_actions)
)
else:
self.layers = nn.Sequential(
nn.Linear(n_states, hidden_sizes[0]),
nn.LeakyReLU(negative_slope=0.2),
nn.BatchNorm1d(hidden_sizes[0]),
nn.Linear(hidden_sizes[0], hidden_sizes[1]),
nn.Tanh(),
nn.Dropout(0.3),
nn.BatchNorm1d(hidden_sizes[1]),
nn.Linear(hidden_sizes[1], hidden_sizes[2]),
nn.Tanh(),
nn.Dropout(0.3),
nn.BatchNorm1d(hidden_sizes[2]),
nn.Linear(hidden_sizes[2], n_actions)
)
# This act layer maps the output to (0, 1)
self.act = nn.Sigmoid()
self._init_weights()
@@ -58,22 +72,37 @@ class Actor(nn.Module):
class Critic(nn.Module):
def __init__(self, n_states, n_actions, hidden_sizes):
def __init__(self, n_states, n_actions, hidden_sizes, use_default):
super(Critic, self).__init__()
self.state_input = nn.Linear(n_states, hidden_sizes[0])
self.action_input = nn.Linear(n_actions, hidden_sizes[0])
self.act = nn.Tanh()
self.layers = nn.Sequential(
nn.Linear(hidden_sizes[0] * 2, hidden_sizes[1]),
nn.LeakyReLU(negative_slope=0.2),
nn.Dropout(0.3),
nn.BatchNorm1d(hidden_sizes[1]),
nn.Linear(hidden_sizes[1], hidden_sizes[2]),
nn.Tanh(),
nn.Dropout(0.3),
nn.BatchNorm1d(hidden_sizes[2]),
nn.Linear(hidden_sizes[2], 1),
)
if use_default:
self.state_input = nn.Linear(n_states, 128)
self.action_input = nn.Linear(n_actions, 128)
self.layers = nn.Sequential(
nn.Linear(256, 256),
nn.LeakyReLU(negative_slope=0.2),
nn.BatchNorm1d(256),
nn.Linear(256, 256),
nn.Linear(256, 64),
nn.Tanh(),
nn.Dropout(0.3),
nn.BatchNorm1d(64),
nn.Linear(64, 1)
)
else:
self.state_input = nn.Linear(n_states, hidden_sizes[0])
self.action_input = nn.Linear(n_actions, hidden_sizes[0])
self.layers = nn.Sequential(
nn.Linear(hidden_sizes[0] * 2, hidden_sizes[1]),
nn.LeakyReLU(negative_slope=0.2),
nn.Dropout(0.3),
nn.BatchNorm1d(hidden_sizes[1]),
nn.Linear(hidden_sizes[1], hidden_sizes[2]),
nn.Tanh(),
nn.Dropout(0.3),
nn.BatchNorm1d(hidden_sizes[2]),
nn.Linear(hidden_sizes[2], 1)
)
self._init_weights()
def _init_weights(self):
@@ -101,7 +130,8 @@ class DDPG(object):
def __init__(self, n_states, n_actions, model_name='', alr=0.001, clr=0.001,
gamma=0.9, batch_size=32, tau=0.002, shift=0, memory_size=100000,
a_hidden_sizes=[128, 128, 64], c_hidden_sizes=[128, 256, 64]):
a_hidden_sizes=[128, 128, 64], c_hidden_sizes=[128, 256, 64],
use_default=False):
self.n_states = n_states
self.n_actions = n_actions
self.alr = alr
@@ -113,6 +143,7 @@ class DDPG(object):
self.a_hidden_sizes = a_hidden_sizes
self.c_hidden_sizes = c_hidden_sizes
self.shift = shift
self.use_default = use_default
self._build_network()
@@ -124,10 +155,12 @@ class DDPG(object):
return Variable(torch.FloatTensor(x))
def _build_network(self):
self.actor = Actor(self.n_states, self.n_actions, self.a_hidden_sizes)
self.target_actor = Actor(self.n_states, self.n_actions, self.a_hidden_sizes)
self.critic = Critic(self.n_states, self.n_actions, self.c_hidden_sizes)
self.target_critic = Critic(self.n_states, self.n_actions, self.c_hidden_sizes)
self.actor = Actor(self.n_states, self.n_actions, self.a_hidden_sizes, self.use_default)
self.target_actor = Actor(self.n_states, self.n_actions, self.a_hidden_sizes,
self.use_default)
self.critic = Critic(self.n_states, self.n_actions, self.c_hidden_sizes, self.use_default)
self.target_critic = Critic(self.n_states, self.n_actions, self.c_hidden_sizes,
self.use_default)
# Copy actor's parameters
self._update_target(self.target_actor, self.actor, tau=1.0)