A lightweight tool for deploying many tasks automatically, without any modification to your code.
I recommend you install from github to get the newest features:
pip install git+https://github.com/dugu9sword/manytasks.git
You can also install the package (maybe outdated) from pypi:
pip install manytasks [not recommended]
cd examples/python
# configuration is stored in tasks.json
manytasks run tasks
All running logs are stored in tasks.logs
.
-
The running log of the manytasks is written into
task.logs/status.txt
-
The IO stream of tasks (e.g.
print()
,Exception
,Error
, ...) are redirected totask.logs/task-[index].txt
.
For more complex cases, see ADVANCED_CASES.md
.
{
"executor": "python some.py",
"cuda": [4, 5, 6, 7],
"concurrency": 4, # num of tasks to run in parallel
"cuda_per_task": 1,
"configs": {
# basic configurations
"==base==": [
"arg0",
"--a", [50, 100], # `--a` takes value from [50, 100]
"--name", "a_${a}" # "${a}" refers to the value of `--a`
],
# more disjoint configurations
"==more==": [
[ "--c1", [1, 2] ], # [1, 2]
[ "--c2", "$<x|y>.$<1:4>" ], # [x.1, x.2, x.3, y.1, y.2, y.3]
]
}
}
which yields:
--- ---- --- ------ ---- ----
idx __1 --a --name --c1 --c2
0 arg0 50 a_50 1 -
1 arg0 50 a_50 2 -
2 arg0 100 a_100 1 -
3 arg0 100 a_100 2 -
4 arg0 50 a_50 - x.1
5 arg0 50 a_50 - x.2
6 arg0 50 a_50 - x.3
7 arg0 50 a_50 - y.1
8 arg0 50 a_50 - y.2
9 arg0 50 a_50 - y.3
10 arg0 100 a_100 - x.1
11 arg0 100 a_100 - x.2
12 arg0 100 a_100 - x.3
13 arg0 100 a_100 - y.1
14 arg0 100 a_100 - y.2
15 arg0 100 a_100 - y.3
--- ---- --- ------ ---- ----
The syntax sugar makes the enumeration of arguments more easier.
Type | Example Input | Example Output |
---|---|---|
list | $<1:6> |
[1, 2, 3, 4, 5] |
list (with step) | $<1:6:2> |
[1, 3, 5] |
list (with zero-pad) | $<1:6:2;3> |
[001, 003, 005] |
files | $<files:/home/*.py> |
[/home/foo.py, /home/bar.py, ...] |
files (without path) | $<files:/home/*.py;nameonly> |
[foo.py, bar.py, ...] |
lines | $<lines:urls.txt> |
[baidu.com, google.com, ...] |
set | $<a|b|c> |
[a, b, c] |
composition | x_$<1:3;3>.txt |
[x_001.txt, x_002.txt] |
composition (more) | logs/$<a|b>.$<1:3> |
[logs/a.1, logs/a.2, logs/b.1, logs/b.2] |
Q: Why not use other open-source tools for hyper-parameter tuning, such as optuna
, hydra
, wandb
?
A: The first time I developed this tool is 2019-1-1, when most of those tools (except optuna
) were not born yet. What's more,
- These tools are heavy, which means:
- You need to modify your code (add several lines of
import xxx; xxx.foo(); xxx.bar();
) to integrate their functionalities. - You may have to replace your
print(...)
orlog(...)
function with theirs, sometimes your results may be logged to their server. - These tools are highly binded with
python
, which means they may fail if your code is written inperl
(such asmosetokenizer
in machine translation),bash
(such as your code for preprocessing), etc.
- You need to modify your code (add several lines of
manytasks
is a lightweight tool which helps you deploy many tasks without any modification to your code, all logs will be saved in your machine.
Q:When should you use other open-source tools for hyper-parameter tuning, such as optuna
, hydra
, wandb
?
A: For complex cases when you would like to enjoy their power of hyper-parameter tuning.
See Analysis.md
.
See History.md
.