Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev adam graph conf #5709

Merged
merged 50 commits into from
Aug 10, 2021
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
5e79c4c
add conf for adam
MARD1NO Aug 3, 2021
8784447
add unittest for adam
MARD1NO Aug 3, 2021
562103f
Merge branch 'master' into dev_adam_graph_conf
MARD1NO Aug 4, 2021
cd0d197
revert back
MARD1NO Aug 4, 2021
513099b
Add eager like unittest, still have problem
MARD1NO Aug 4, 2021
7a17a45
Merge branch 'master' into dev_adam_graph_conf
MARD1NO Aug 4, 2021
dc3f117
init tensor in graph cause failure
MARD1NO Aug 4, 2021
ea56866
add sgd optim unittest
MARD1NO Aug 4, 2021
f9ad6ff
small fix
MARD1NO Aug 4, 2021
47730b5
modify back
MARD1NO Aug 4, 2021
71ca83d
update code
MARD1NO Aug 4, 2021
fe63384
add adam optimizer unittest
MARD1NO Aug 5, 2021
89206d0
remove redundant
MARD1NO Aug 5, 2021
c63f453
test sgd
MARD1NO Aug 5, 2021
650c367
modify back
MARD1NO Aug 5, 2021
8c9b0f9
Merge branch 'master' into dev_adam_graph_conf
MARD1NO Aug 5, 2021
e12787c
remove useless code
MARD1NO Aug 5, 2021
79ce30b
Merge branch 'dev_adam_graph_conf' of https://github.com/Oneflow-Inc/…
MARD1NO Aug 5, 2021
82294c8
fix comment
MARD1NO Aug 5, 2021
582c0e0
support do bias correction
MARD1NO Aug 6, 2021
199798c
add unittest when do bias correction is True
MARD1NO Aug 6, 2021
3ba357c
add unittest
MARD1NO Aug 6, 2021
37bdf3e
remove
MARD1NO Aug 6, 2021
59815bf
add do bias correction
MARD1NO Aug 6, 2021
7fab457
Merge branch 'master' into dev_adam_graph_conf
Ldpe2G Aug 9, 2021
9645ac5
auto format by CI
oneflow-ci-bot Aug 9, 2021
f8f28d2
Merge branch 'master' into dev_adam_graph_conf
oneflow-ci-bot Aug 9, 2021
b45c415
Merge branch 'master' into dev_adam_graph_conf
oneflow-ci-bot Aug 9, 2021
291ab71
Merge branch 'master' into dev_adam_graph_conf
oneflow-ci-bot Aug 9, 2021
b9a8a41
Merge branch 'master' into dev_adam_graph_conf
MARD1NO Aug 10, 2021
b60bc21
remove scale params
MARD1NO Aug 10, 2021
6214f29
fix unittest
MARD1NO Aug 10, 2021
40cd318
fix unittest
MARD1NO Aug 10, 2021
8700038
remove scale
MARD1NO Aug 10, 2021
4d2b2e1
remove scale in unittest
MARD1NO Aug 10, 2021
e81e8c1
remove scale
MARD1NO Aug 10, 2021
bce2435
fix to allclose
MARD1NO Aug 10, 2021
5da86af
Merge branch 'master' into dev_adam_graph_conf
oneflow-ci-bot Aug 10, 2021
c0d925a
Merge branch 'master' into dev_adam_graph_conf
oneflow-ci-bot Aug 10, 2021
1958017
auto format by CI
oneflow-ci-bot Aug 10, 2021
6a086c4
Merge branch 'master' into dev_adam_graph_conf
oneflow-ci-bot Aug 10, 2021
6bf8ee9
Merge branch 'master' into dev_adam_graph_conf
oneflow-ci-bot Aug 10, 2021
e6d8f16
Merge branch 'master' into dev_adam_graph_conf
oneflow-ci-bot Aug 10, 2021
9d707df
add test util
MARD1NO Aug 10, 2021
17edb71
remove scale
MARD1NO Aug 10, 2021
8977784
fix graph unittest
MARD1NO Aug 10, 2021
9e0f733
Merge branch 'dev_adam_graph_conf' of https://github.com/Oneflow-Inc/…
MARD1NO Aug 10, 2021
36480bd
Merge branch 'master' into dev_adam_graph_conf
oneflow-ci-bot Aug 10, 2021
a635978
auto format by CI
oneflow-ci-bot Aug 10, 2021
e7c9a2d
Merge branch 'master' into dev_adam_graph_conf
oneflow-ci-bot Aug 10, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions python/oneflow/nn/optimizer/adam.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
limitations under the License.
"""
import collections
import math
from typing import Callable, Dict, Iterator, List, Tuple, Union

import oneflow as flow
Expand Down Expand Up @@ -138,3 +139,38 @@ def step(self, closure: Callable = None):
self._op(param, param.grad, m_tensor, v_tensor, **kwargs)
self._state["step"] = self._state["step"] + 1
return loss

def generate_conf_for_graph(self, train_conf, vars_conf):
for param_group in self.param_groups:
optimizer_conf = train_conf.mutable_optimizer_conf().Add()

lr = param_group["lr"]
scale = param_group["scale"]
l2 = param_group["weight_decay"]
beta1 = param_group["betas"][0]
beta2 = param_group["betas"][1]

epsilon = param_group["eps"]
# TODO(): optimizer_conf need to have loss_scale_factor field to support multi scale factor
base_scale = train_conf.loss_scale_factor()
assert math.isclose(base_scale, 1, rel_tol=1e-4) or math.isclose(
scale, base_scale, rel_tol=1e-4
), "nn.Graph only support one scale factor at the moment, base_scale {} vs scale {}".format(
base_scale, scale
)

train_conf.set_loss_scale_factor(scale)
optimizer_conf.set_base_learning_rate(lr)

optimizer_conf.mutable_adam_conf().set_beta1(beta1)
optimizer_conf.mutable_adam_conf().set_beta2(beta2)
optimizer_conf.mutable_adam_conf().set_epsilon(epsilon)
optimizer_conf.mutable_adam_conf().set_do_bias_correction(
False
) # TODO(zzk): Check this option

for param in param_group.parameters:
vars_conf[param].l2 = l2
if not param.requires_grad:
continue
optimizer_conf.add_variable_op_names(vars_conf[param].name)
50 changes: 49 additions & 1 deletion python/oneflow/test/graph/test_graph_optimizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

@flow.unittest.skip_unless_1n1d()
class TestGraphOptimizer(flow.unittest.TestCase):
def test_optimizer(test_case):
def test_sgd_optimizer(test_case):
class CustomModule(flow.nn.Module):
def __init__(self):
super().__init__()
Expand Down Expand Up @@ -72,6 +72,54 @@ def build(self, x):
print("g.config.proto: \n", g.config.proto)
print("graph proto: \n", g._graph_proto)

def test_adam_optimizer(test_case):
class CustomModule(flow.nn.Module):
def __init__(self):
super().__init__()
self.para0 = flow.nn.Parameter(flow.Tensor(10, 4))

def forward(self, x):
x = flow.F.matmul(x, self.para0)
return x

m = CustomModule()
learning_rate = 0.1
betas = [0.9, 0.999]
scale = 0.3
weight_decay = 0.7
eps = 1e-8
adam0 = flow.optim.Adam(
[
{
"params": [m.para0],
"lr": learning_rate,
"betas": betas,
"eps": eps,
"weight_decay": weight_decay,
"scale": scale,
}
]
)

class CustomGraph0(flow.nn.Graph):
def __init__(self):
super().__init__()
self.m = m
self.add_optimizer("adam0", adam0)

def build(self, x):
out = self.m(x)
out.backward()
return out

g = CustomGraph0()
x = flow.Tensor(4, 10)
flow.nn.init.uniform_(x, a=-1.0, b=1.0)
z = g._compile(x)
print("repr(g): \n", repr(g))
print("g.config.proto: \n", g.config.proto)
print("graph proto: \n", g._graph_proto)

def test_multi_optimizer_conf(test_case):
class CustomModule(flow.nn.Module):
def __init__(self):
Expand Down