Skip to content

Commit ffadfb1

Browse files
author
Daniel Park
committed
update
1 parent 2820dcd commit ffadfb1

14 files changed

Lines changed: 258 additions & 70 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Release notes
22

3+
34
## v.0.0.15
45
- fix classification/anomaly detection
56
- fix from_pretrained

examples/run_prediction_simple.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ def parse_args():
2929
parser.add_argument("--epochs", type=int, default=50, help="Number of training epochs")
3030
parser.add_argument("--batch_size", type=int, default=16, help="Batch size for training")
3131
parser.add_argument("--learning_rate", type=float, default=1e-3, help="learning rate")
32+
parser.add_argument(
33+
"--strategy",
34+
type=str,
35+
default="auto",
36+
help="Distribution strategy: auto/default/one_device/mirrored/multi_worker",
37+
)
3238
parser.add_argument("--manual", action="store_true", help="Use the manual API instead of pipeline")
3339
return parser.parse_args()
3440

@@ -90,7 +96,13 @@ def run_manual(args):
9096
config = tfts.AutoConfig.for_model(args.use_model)
9197
model = tfts.AutoModel.from_config(config, predict_sequence_length=args.predict_sequence_length)
9298

93-
trainer = tfts.Trainer(model)
99+
trainer = tfts.Trainer(
100+
model,
101+
args=tfts.TrainingArguments(
102+
output_dir=os.path.join(os.getcwd(), "output"),
103+
strategy=getattr(args, "strategy", "auto"),
104+
),
105+
)
94106
trainer.train(
95107
train,
96108
valid,

tests/test_demo.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88

99
import tfts
1010
from tfts import AutoConfig, AutoModel, KerasTrainer as Trainer
11+
from tfts.training_args import TrainingArguments
12+
13+
# Smoke tests validate end-to-end training, not device distribution, so they pin a
14+
# single-device strategy. This keeps them deterministic on CI (no GPU) and on local
15+
# multi-GPU hosts alike.
16+
_SINGLE_DEVICE_ARGS = TrainingArguments(output_dir="./weights", strategy="default")
1117

1218

1319
class DemoTest(unittest.TestCase):
@@ -22,7 +28,7 @@ def test_demo(self):
2228
config = AutoConfig.for_model("seq2seq")
2329
model = AutoModel.from_config(config, predict_sequence_length=predict_sequence_length)
2430

25-
trainer = Trainer(model)
31+
trainer = Trainer(model, args=_SINGLE_DEVICE_ARGS)
2632
trainer.train((x_train, y_train), (x_valid, y_valid), epochs=1)
2733

2834
pred = trainer.predict(x_valid)
@@ -40,7 +46,7 @@ def test_demo2(self):
4046
model = AutoModel.from_config(config=config, predict_sequence_length=predict_sequence_length)
4147
print(x_train.shape, y_train.shape, x_valid.shape, y_valid.shape)
4248

43-
trainer = Trainer(model)
49+
trainer = Trainer(model, args=_SINGLE_DEVICE_ARGS)
4450
trainer.train((x_train, y_train), optimizer=tf.keras.optimizers.Adam(0.001), epochs=2)
4551

4652
pred = trainer.predict(x_valid)

tests/test_examples/test_prediction.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class args(object):
2323
epochs = 1
2424
batch_size = 32
2525
learning_rate = 0.003
26+
strategy = "default"
2627

2728
set_seed(args.seed)
2829
run_manual(args)

tests/test_examples/test_tfts_inputs.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,14 @@
55
import tensorflow as tf
66

77
from tfts import AutoConfig, AutoModel, KerasTrainer
8+
from tfts.training_args import TrainingArguments
89

910
logger = logging.getLogger(__name__)
1011

12+
# Smoke test pinning a single-device strategy so it runs identically on CI and
13+
# any multi-GPU host.
14+
_SINGLE_DEVICE_ARGS = TrainingArguments(output_dir="./weights", strategy="default")
15+
1116

1217
class InputsTest(unittest.TestCase):
1318
def setUp(self):
@@ -26,7 +31,7 @@ def test_encoder_array(self):
2631
print(f"==== Test model {m} ====")
2732
config = AutoConfig.for_model(m)
2833
model = AutoModel.from_config(config, predict_sequence_length=predict_sequence_length)
29-
trainer = KerasTrainer(model)
34+
trainer = KerasTrainer(model, args=_SINGLE_DEVICE_ARGS)
3035
trainer.train(
3136
train_dataset=(x_train, y_train),
3237
valid_dataset=(x_valid, y_valid),
@@ -55,7 +60,7 @@ def test_encoder_decoder_array(self):
5560
for m in self.test_models:
5661
config = AutoConfig.for_model(m)
5762
model = AutoModel.from_config(config, predict_sequence_length=predict_sequence_length)
58-
trainer = KerasTrainer(model)
63+
trainer = KerasTrainer(model, args=_SINGLE_DEVICE_ARGS)
5964
trainer.train((x_train, y_train), (x_valid, y_valid), optimizer=tf.keras.optimizers.Adam(0.003), epochs=1)
6065

6166
def test_encoder_decoder_array2(self):
@@ -82,7 +87,7 @@ def test_encoder_decoder_array2(self):
8287
print(f"==== Test model {m} ====")
8388
config = AutoConfig.for_model(m)
8489
model = AutoModel.from_config(config, predict_sequence_length=predict_sequence_length)
85-
trainer = KerasTrainer(model)
90+
trainer = KerasTrainer(model, args=_SINGLE_DEVICE_ARGS)
8691
trainer.train((x_train, y_train), (x_valid, y_valid), optimizer=tf.keras.optimizers.Adam(0.003), epochs=1)
8792

8893
# def test_encoder_tfdata(self):
@@ -121,7 +126,7 @@ def test_encoder_decoder_tfdata(self):
121126
print(f"==== Test model {m} ====")
122127
config = AutoConfig.for_model(m)
123128
model = AutoModel.from_config(config, predict_sequence_length=predict_sequence_length)
124-
trainer = KerasTrainer(model)
129+
trainer = KerasTrainer(model, args=_SINGLE_DEVICE_ARGS)
125130
trainer.train(
126131
train_dataset=train_loader,
127132
valid_dataset=valid_loader,

tests/test_models/test_dlinear.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
import tfts
77
from tfts import AutoConfig, AutoModel, KerasTrainer, Trainer
88
from tfts.models.dlinear import DLinear, DLinearConfig
9+
from tfts.training_args import TrainingArguments
10+
11+
# Smoke test pinning a single-device strategy so it runs identically on CI and
12+
# any multi-GPU host.
13+
_SINGLE_DEVICE_ARGS = TrainingArguments(output_dir="./weights", strategy="default")
914

1015

1116
class DLinearTest(unittest.TestCase):
@@ -26,9 +31,7 @@ def test_train(self):
2631
config.channels = 1 # number of features
2732

2833
model = AutoModel.from_config(config, predict_sequence_length=8)
29-
trainer = KerasTrainer(
30-
model,
31-
)
34+
trainer = KerasTrainer(model, args=_SINGLE_DEVICE_ARGS)
3235

3336
trainer.train(train, valid, optimizer=tf.keras.optimizers.Adam(0.003), epochs=1)
3437

tests/test_models/test_informer.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@
1111
from tfts import AutoConfig, AutoModel, KerasTrainer, Trainer
1212
from tfts.layers.attention_layer import Attention, ProbAttention
1313
from tfts.models.informer import Decoder, DecoderLayer, DistilConv, Encoder, EncoderLayer, Informer
14+
from tfts.training_args import TrainingArguments
15+
16+
# Smoke test pinning a single-device strategy so it runs identically on CI and
17+
# any multi-GPU host.
18+
_SINGLE_DEVICE_ARGS = TrainingArguments(output_dir="./weights", strategy="default")
1419

1520
tf.config.run_functions_eagerly(True)
1621

@@ -144,5 +149,5 @@ def test_train(self):
144149

145150
config = AutoConfig.for_model("informer")
146151
model = AutoModel.from_config(config, predict_sequence_length)
147-
trainer = KerasTrainer(model)
152+
trainer = KerasTrainer(model, args=_SINGLE_DEVICE_ARGS)
148153
trainer.train((x_train, y_train), (x_valid, y_valid), optimizer=tf.keras.optimizers.Adam(0.003), epochs=1)

tests/test_models/test_nbeats.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
from tfts import AutoConfig, AutoModel, KerasTrainer
99
from tfts.data import TimeSeriesSequence, get_data
1010
from tfts.models.nbeats import NBeats
11+
from tfts.training_args import TrainingArguments
12+
13+
# Smoke test pinning a single-device strategy so it runs identically on CI and
14+
# any multi-GPU host.
15+
_SINGLE_DEVICE_ARGS = TrainingArguments(output_dir="./weights", strategy="default")
1116

1217

1318
class NBeatsTest(unittest.TestCase):
@@ -40,5 +45,5 @@ def test_train(self):
4045
config = AutoConfig.for_model("tft")
4146

4247
model = AutoModel.from_config(config, predict_sequence_length=predict_sequence_length)
43-
trainer = KerasTrainer(model)
48+
trainer = KerasTrainer(model, args=_SINGLE_DEVICE_ARGS)
4449
trainer.train(ts_sequence, epochs=1)

tests/test_models/test_rnn.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
import tfts
66
from tfts import AutoConfig, AutoModel, KerasTrainer, Trainer
77
from tfts.models.rnn import RNN, RNN2
8+
from tfts.training_args import TrainingArguments
9+
10+
# Smoke test pinning a single-device strategy so it runs identically on CI and
11+
# any multi-GPU host.
12+
_SINGLE_DEVICE_ARGS = TrainingArguments(output_dir="./weights", strategy="default")
813

914

1015
class RNNTest(unittest.TestCase):
@@ -20,7 +25,7 @@ def test_train(self):
2025
train, valid = tfts.get_data("sine", test_size=0.1)
2126
config = AutoConfig.for_model("rnn")
2227
model = AutoModel.from_config(config, predict_sequence_length=8)
23-
trainer = KerasTrainer(model)
28+
trainer = KerasTrainer(model, args=_SINGLE_DEVICE_ARGS)
2429
trainer.train(train, valid, optimizer=tf.keras.optimizers.Adam(0.003), epochs=1)
2530
y_test = trainer.predict(valid[0])
2631
self.assertEqual(y_test.shape, valid[1].shape)

tests/test_models/test_tcn.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
import tfts
66
from tfts import AutoConfig, AutoModel, KerasTrainer, Trainer
77
from tfts.models.tcn import TCN
8+
from tfts.training_args import TrainingArguments
9+
10+
# Smoke test pinning a single-device strategy so it runs identically on CI and
11+
# any multi-GPU host.
12+
_SINGLE_DEVICE_ARGS = TrainingArguments(output_dir="./weights", strategy="default")
813

914

1015
class TCNTest(unittest.TestCase):
@@ -20,9 +25,7 @@ def test_train(self):
2025
train, valid = tfts.get_data("sine", test_size=0.1)
2126
config = AutoConfig.for_model("tcn")
2227
model = AutoModel.from_config(config=config, predict_sequence_length=8)
23-
trainer = KerasTrainer(
24-
model,
25-
)
28+
trainer = KerasTrainer(model, args=_SINGLE_DEVICE_ARGS)
2629
trainer.train(train, valid, optimizer=tf.keras.optimizers.Adam(0.003), epochs=1)
2730
y_test = trainer.predict(valid[0])
2831
self.assertEqual(y_test.shape, valid[1].shape)

0 commit comments

Comments
 (0)