Experiment Config via stdin, pipes¶
In addition to passing an explicit JSON file to caliban cloud
--experiment_config, if you pass the string stdin as the flag’s value
caliban cloud will attempt to read the experiment config in off of stdin.
As an example, this command pipes in a config and also passes --dry_run to
show the series of jobs that WILL be submitted when the --dry_run flag is
removed:
cat experiment.json | caliban cloud --experiment_config stdin --dry_run trainer.train
Because experiment.json is a file on disk, the above command is not that
interesting, and equivalent to running:
caliban cloud --experiment_config experiment.json --dry_run trainer.train
Things get more interesting when you need to dynamically generate an experiment config.
Imagine you’ve written some python script generate_config.py that builds up a
list of complex, interdependent experiments. If you modify that script to print
a json list of json dicts when executed, you can pipe the results of the
script directly into caliban cloud:
python generate_config.py --turing_award 'winning' | \
caliban cloud --experiment_config stdin --dry_run trainer.train
And see immediately (thanks to --dry_run) the list of jobs that would be
executed on AI Platform with a real run.
Experiment File Expansion and Pipes¶
The expansion command described above
allows you to expand an experiment config into its component JSON objects.
Because these are printed to stdout, you can pipe them directly in to
Caliban’s commands, like this:
expansion experiment.json | caliban cloud --experiment_config stdin trainer.train
You can also insert your own script into the middle of this pipeline. Imagine a
script called my_script.py that:
reads a JSON list of experiments in via
stdinmodifies each entry by inserting a new key whose value is a function of one or more existing entries
prints the resulting JSON list back out to
stdout
You could sequence these steps together like so:
cat experiment.json | \
expansion experiment.json | \
my_script.py | \
caliban cloud --experiment_config stdin --dry_run trainer.train
If you supply --dry_run to caliban, as in the example above, caliban will
print out all of the jobs that this particular command will kick off when you
remove --dry_run. This is a great way to generate complex experiments and test
everything out before submitting your jobs.