With SigOpt installed and your Python environment set up, let's take a look at how to record a SigOpt Run in a Python IDE with the SigOpt CLI.
Instrument the Run
import tensorflow as tf
import sigopt
import os
os.environ["SIGOPT_API_TOKEN"] = # SIGOPT_API_TOKEN
os.environ["SIGOPT_PROJECT"] = "run-examples"
class KerasNNModel:
def __init__(self, hidden_layer_size, activation_fn):
model = tf.keras.Sequential(
[
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(hidden_layer_size, activation=activation_fn),
tf.keras.layers.Dense(10),
]
)
self.model = model
def get_keras_nn_model(self):
return self.model
def train_model(self, train_images, train_labels, optimizer_type, metrics_list, num_epochs):
self.model.compile(
optimizer=optimizer_type,
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=metrics_list,
)
self.model.fit(train_images, train_labels, epochs=num_epochs)
def evaluate_model(self, test_images, test_labels):
metrics_dict = self.model.evaluate(test_images, test_labels, verbose=2, return_dict=True)
return metrics_dict
def load_data_train_model():
sigopt.log_dataset(name="mnist")
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()
# set model training, architecture parameters and hyperparameters
sigopt.params.num_epochs = 2
sigopt.params.hidden_layer_size = 200
sigopt.params.activation_fn = "relu"
# create the model
keras_nn_model = KerasNNModel(
hidden_layer_size=sigopt.params.hidden_layer_size, activation_fn=sigopt.params.activation_fn
)
sigopt.log_model("Keras NN Model with 1 Hidden layer")
# train the model
keras_nn_model.train_model(train_images, train_labels, "adam", ["accuracy"], sigopt.params.num_epochs)
sigopt.log_metadata("sgd optimizer", "adam")
metrics_dict = keras_nn_model.evaluate_model(test_images, test_labels)
# log performance metrics
sigopt.log_metric("accuracy", metrics_dict["accuracy"])
sigopt.log_metric("loss", metrics_dict["loss"])
if __name__ == "__main__":
load_data_train_model()
Run the Code with the SigOpt CLI
$ sigopt run python keras_model.py
Run started, view it on the SigOpt dashboard at https://app.sigopt.com/run/1234
Epoch 1/2
1875/1875 [==============================] - 5s 2ms/step - loss: 2.7513 - accuracy: 0.8826
Epoch 2/2
1875/1875 [==============================] - 4s 2ms/step - loss: 0.3313 - accuracy: 0.9265
313/313 - 0s - loss: 0.2941 - accuracy: 0.9478
Run finished, view it on the SigOpt dashboard at https://app.sigopt.com/run/1234
Orchestrate a Run with the SigOpt CLI
#run.yml
name: My Run
run: python keras_model.py
resources:
limits:
cpu: 2
memory: 4Gi
gpus: 1
image: my-run bab
$ sigopt cluster run --run-file run.yml
When you execute the above, SigOpt Orchestrate will look into the specified run.yml file. It will allocate 2 CPUs, 4 GiB memory, and 1 GPU of your kubernetes cluster for your Run, and will execute the command provided for run.
Run started, view it on the SigOpt dashboard at https://app.sigopt.com/run/1234
Epoch 1/2
1875/1875 [==============================] - 5s 2ms/step - loss: 2.7513 - accuracy: 0.8826
Epoch 2/2
1875/1875 [==============================] - 4s 2ms/step - loss: 0.3313 - accuracy: 0.9265
313/313 - 0s - loss: 0.2941 - accuracy: 0.9478
Run finished, view it on the SigOpt dashboard at https://app.sigopt.com/run/1234
SigOpt Orchestrate allows you to confidently scale your modeling experimentation on either your existing Kubernetes infrastructure or a Kubernetes cluster managed by SigOpt. To set up SigOpt Orchestrate, follow this . With SigOpt Orchestrate installed, all you have to do is set up yourrun.yml file and execute the following command locally to orchestrate your Run on your Kubernetes cluster: