I am trying to adopt this wonderful repository with Lightning-Hydra template to my workflow.
My workflow looks like following.
Create a new git branch for a new experiment.
Write a code (plus configs) to implement an idea (including debugging and testing)
Commit
Pack everything into a zip archive (zip -rp experiment-$(git rev-parse HEAD).zip *
)
Add to the archive the file __main__.py
, calling main()
This file helps python interpreter to recognize the archive as a python script and allows the call python experiment-aabbcc.zip
Approximate content of this file is
import sys
from src.train import main
main(sys.argv[1:])
Submit to the job queue command python /path/to/experiment-aabbcc.zip --other --command --line-args
.
I use this fork of the task-spooler
as a job scheduler. Because of technical limitations of the PC that I use, I cannot run docker (actually I ssh to a docker container that doesn't support docker-in-docker, and I cannot change that).
git checkout master
go to 1
The issue is that hydra + OmegaConf refuse to load configs from created zip archive, they always look into a file system.
Since I frequently switch branches, content of working directory often changes, and I have high chances that a job submitted to a job queue will run the code that is different from what was intended.
So, I am looking for a solution that would allow me to isolate a code, submitted to the task spooler, without making extra copies of a repo on a file system.
In principle this potentially be implemented using a ConfigSource plugin. Example here.