Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
superbenchmark
Commits
7b0b0e9a
Unverified
Commit
7b0b0e9a
authored
Jul 01, 2021
by
Yifan Xiong
Committed by
GitHub
Jul 01, 2021
Browse files
CLI - Support custom output directory (#110)
* Support custom output directory. * Update document.
parent
2710fad5
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
103 additions
and
60 deletions
+103
-60
docs/cli.md
docs/cli.md
+6
-0
superbench/cli/_commands.py
superbench/cli/_commands.py
+5
-0
superbench/cli/_handler.py
superbench/cli/_handler.py
+31
-13
superbench/common/utils/__init__.py
superbench/common/utils/__init__.py
+2
-2
superbench/common/utils/file_handler.py
superbench/common/utils/file_handler.py
+11
-7
superbench/executor/executor.py
superbench/executor/executor.py
+8
-7
superbench/runner/runner.py
superbench/runner/runner.py
+13
-9
tests/executor/test_executor.py
tests/executor/test_executor.py
+9
-9
tests/runner/test_runner.py
tests/runner/test_runner.py
+18
-13
No files found.
docs/cli.md
View file @
7b0b0e9a
...
...
@@ -35,6 +35,7 @@ sb deploy [--docker-image]
[--host-list]
[--host-password]
[--host-username]
[--output-dir]
[--private-key]
```
...
...
@@ -49,6 +50,7 @@ sb deploy [--docker-image]
|
`--host-list`
`-l`
|
`None`
| Comma separated host list. |
|
`--host-password`
|
`None`
| Host password or key passphase if needed. |
|
`--host-username`
|
`None`
| Host username if needed. |
|
`--output-dir`
|
`None`
| Path to output directory, outputs/{datetime} will be used if not specified. |
|
`--private-key`
|
`None`
| Path to private key if needed. |
#### Global arguments
...
...
@@ -70,6 +72,7 @@ Execute the SuperBench benchmarks locally.
```
bash title="SB CLI"
sb exec [--config-file]
[--config-override]
[--output-dir]
```
#### Optional arguments
...
...
@@ -78,6 +81,7 @@ sb exec [--config-file]
| --- | --- | --- |
|
`--config-file`
`-c`
|
`None`
| Path to SuperBench config file. |
|
`--config-override`
`-C`
|
`None`
| Extra arguments to override config_file. |
|
`--output-dir`
|
`None`
| Path to output directory, outputs/{datetime} will be used if not specified. |
#### Global arguments
...
...
@@ -105,6 +109,7 @@ sb run [--config-file]
[--host-list]
[--host-password]
[--host-username]
[--output-dir]
[--private-key]
```
...
...
@@ -121,6 +126,7 @@ sb run [--config-file]
|
`--host-list`
`-l`
|
`None`
| Comma separated host list. |
|
`--host-password`
|
`None`
| Host password or key passphase if needed. |
|
`--host-username`
|
`None`
| Host username if needed. |
|
`--output-dir`
|
`None`
| Path to output directory, outputs/{datetime} will be used if not specified. |
|
`--private-key`
|
`None`
| Path to private key if needed. |
#### Global arguments
...
...
superbench/cli/_commands.py
View file @
7b0b0e9a
...
...
@@ -41,6 +41,11 @@ class SuperBenchCommandsLoader(CLICommandsLoader):
ac
.
argument
(
'host_list'
,
options_list
=
(
'--host-list'
,
'-l'
),
type
=
str
,
help
=
'Comma separated host list.'
)
ac
.
argument
(
'host_username'
,
type
=
str
,
help
=
'Host username if needed.'
)
ac
.
argument
(
'host_password'
,
type
=
str
,
help
=
'Host password or key passphase if needed.'
)
ac
.
argument
(
'output_dir'
,
type
=
str
,
help
=
'Path to output directory, outputs/{datetime} will be used if not specified.'
)
ac
.
argument
(
'private_key'
,
type
=
str
,
help
=
'Path to private key if needed.'
)
ac
.
argument
(
'config_file'
,
options_list
=
(
'--config-file'
,
'-c'
),
type
=
str
,
help
=
'Path to SuperBench config file.'
...
...
superbench/cli/_handler.py
View file @
7b0b0e9a
...
...
@@ -11,7 +11,7 @@ from omegaconf import OmegaConf
import
superbench
from
superbench.runner
import
SuperBenchRunner
from
superbench.executor
import
SuperBenchExecutor
from
superbench.common.utils
import
create_output_dir
,
get_sb_config
from
superbench.common.utils
import
create_
sb_
output_dir
,
get_sb_config
def
check_argument_file
(
name
,
file
):
...
...
@@ -62,13 +62,14 @@ def split_docker_domain(name):
return
domain
,
remainder
def
process_config_arguments
(
config_file
=
None
,
config_override
=
None
):
def
process_config_arguments
(
config_file
=
None
,
config_override
=
None
,
output_dir
=
None
):
"""Process configuration arguments.
Args:
config_file (str, optional): Path to SuperBench config file. Defaults to None.
config_override (str, optional): Extra arguments to override config_file,
following [Hydra syntax](https://hydra.cc/docs/advanced/override_grammar/basic). Defaults to None.
output_dir (str, optional): Path to output directory. Defaults to None.
Returns:
DictConfig: SuperBench config object.
...
...
@@ -86,9 +87,9 @@ def process_config_arguments(config_file=None, config_override=None):
sb_config
=
OmegaConf
.
merge
(
sb_config
,
sb_config_from_override
)
# Create output directory
output_dir
=
create_output_dir
()
sb_
output_dir
=
create_
sb_
output_dir
(
output_dir
)
return
sb_config
,
output_dir
return
sb_config
,
sb_
output_dir
def
process_runner_arguments
(
...
...
@@ -100,6 +101,7 @@ def process_runner_arguments(
host_username
=
None
,
host_password
=
None
,
private_key
=
None
,
output_dir
=
None
,
config_file
=
None
,
config_override
=
None
):
...
...
@@ -114,6 +116,7 @@ def process_runner_arguments(
host_username (str, optional): Host username if needed. Defaults to None.
host_password (str, optional): Host password or key passphase if needed. Defaults to None.
private_key (str, optional): Path to private key if needed. Defaults to None.
output_dir (str, optional): Path to output directory. Defaults to None.
config_file (str, optional): Path to SuperBench config file. Defaults to None.
config_override (str, optional): Extra arguments to override config_file,
following [Hydra syntax](https://hydra.cc/docs/advanced/override_grammar/basic). Defaults to None.
...
...
@@ -154,9 +157,13 @@ def process_runner_arguments(
}
)
sb_config
,
output_dir
=
process_config_arguments
(
config_file
=
config_file
,
config_override
=
config_override
)
sb_config
,
sb_output_dir
=
process_config_arguments
(
config_file
=
config_file
,
config_override
=
config_override
,
output_dir
=
output_dir
,
)
return
docker_config
,
ansible_config
,
sb_config
,
output_dir
return
docker_config
,
ansible_config
,
sb_config
,
sb_
output_dir
def
version_command_handler
():
...
...
@@ -168,20 +175,25 @@ def version_command_handler():
return
superbench
.
__version__
def
exec_command_handler
(
config_file
=
None
,
config_override
=
None
):
def
exec_command_handler
(
config_file
=
None
,
config_override
=
None
,
output_dir
=
None
):
"""Run the SuperBench benchmarks locally.
Args:
config_file (str, optional): Path to SuperBench config file. Defaults to None.
config_override (str, optional): Extra arguments to override config_file,
following [Hydra syntax](https://hydra.cc/docs/advanced/override_grammar/basic). Defaults to None.
output_dir (str, optional): Path to output directory. Defaults to None.
Raises:
CLIError: If input arguments are invalid.
"""
sb_config
,
output_dir
=
process_config_arguments
(
config_file
=
config_file
,
config_override
=
config_override
)
sb_config
,
sb_output_dir
=
process_config_arguments
(
config_file
=
config_file
,
config_override
=
config_override
,
output_dir
=
output_dir
,
)
executor
=
SuperBenchExecutor
(
sb_config
,
output_dir
)
executor
=
SuperBenchExecutor
(
sb_config
,
sb_
output_dir
)
executor
.
exec
()
...
...
@@ -193,6 +205,7 @@ def deploy_command_handler(
host_list
=
None
,
host_username
=
None
,
host_password
=
None
,
output_dir
=
None
,
private_key
=
None
):
"""Deploy the SuperBench environments to all given nodes.
...
...
@@ -211,12 +224,13 @@ def deploy_command_handler(
host_list (str, optional): Comma separated host list. Defaults to None.
host_username (str, optional): Host username if needed. Defaults to None.
host_password (str, optional): Host password or key passphase if needed. Defaults to None.
output_dir (str, optional): Path to output directory. Defaults to None.
private_key (str, optional): Path to private key if needed. Defaults to None.
Raises:
CLIError: If input arguments are invalid.
"""
docker_config
,
ansible_config
,
sb_config
,
output_dir
=
process_runner_arguments
(
docker_config
,
ansible_config
,
sb_config
,
sb_
output_dir
=
process_runner_arguments
(
docker_image
=
docker_image
,
docker_username
=
docker_username
,
docker_password
=
docker_password
,
...
...
@@ -224,10 +238,11 @@ def deploy_command_handler(
host_list
=
host_list
,
host_username
=
host_username
,
host_password
=
host_password
,
output_dir
=
output_dir
,
private_key
=
private_key
,
)
runner
=
SuperBenchRunner
(
sb_config
,
docker_config
,
ansible_config
,
output_dir
)
runner
=
SuperBenchRunner
(
sb_config
,
docker_config
,
ansible_config
,
sb_
output_dir
)
runner
.
deploy
()
...
...
@@ -239,6 +254,7 @@ def run_command_handler(
host_list
=
None
,
host_username
=
None
,
host_password
=
None
,
output_dir
=
None
,
private_key
=
None
,
config_file
=
None
,
config_override
=
None
...
...
@@ -255,6 +271,7 @@ def run_command_handler(
host_list (str, optional): Comma separated host list. Defaults to None.
host_username (str, optional): Host username if needed. Defaults to None.
host_password (str, optional): Host password or key passphase if needed. Defaults to None.
output_dir (str, optional): Path to output directory. Defaults to None.
private_key (str, optional): Path to private key if needed. Defaults to None.
config_file (str, optional): Path to SuperBench config file. Defaults to None.
config_override (str, optional): Extra arguments to override config_file,
...
...
@@ -263,7 +280,7 @@ def run_command_handler(
Raises:
CLIError: If input arguments are invalid.
"""
docker_config
,
ansible_config
,
sb_config
,
output_dir
=
process_runner_arguments
(
docker_config
,
ansible_config
,
sb_config
,
sb_
output_dir
=
process_runner_arguments
(
docker_image
=
docker_image
,
docker_username
=
docker_username
,
docker_password
=
docker_password
,
...
...
@@ -271,10 +288,11 @@ def run_command_handler(
host_list
=
host_list
,
host_username
=
host_username
,
host_password
=
host_password
,
output_dir
=
output_dir
,
private_key
=
private_key
,
config_file
=
config_file
,
config_override
=
config_override
,
)
runner
=
SuperBenchRunner
(
sb_config
,
docker_config
,
ansible_config
,
output_dir
)
runner
=
SuperBenchRunner
(
sb_config
,
docker_config
,
ansible_config
,
sb_
output_dir
)
runner
.
run
()
superbench/common/utils/__init__.py
View file @
7b0b0e9a
...
...
@@ -4,9 +4,9 @@
"""Exposes the interface of SuperBench common utilities."""
from
superbench.common.utils.logging
import
SuperBenchLogger
,
logger
from
superbench.common.utils.file_handler
import
create_output_dir
,
get_sb_config
from
superbench.common.utils.file_handler
import
create_
sb_
output_dir
,
get_sb_config
from
superbench.common.utils.lazy_import
import
LazyImport
nv_helper
=
LazyImport
(
'superbench.common.utils.nvidia_helper'
)
__all__
=
[
'SuperBenchLogger'
,
'logger'
,
'create_output_dir'
,
'get_sb_config'
,
'LazyImport'
,
'nv_helper'
]
__all__
=
[
'SuperBenchLogger'
,
'logger'
,
'create_
sb_
output_dir'
,
'get_sb_config'
,
'LazyImport'
,
'nv_helper'
]
superbench/common/utils/file_handler.py
View file @
7b0b0e9a
...
...
@@ -10,18 +10,22 @@ import yaml
from
omegaconf
import
OmegaConf
def
create_output_dir
():
"""Create
a new
output directory.
def
create_
sb_
output_dir
(
output_dir
=
None
):
"""Create output directory.
Generate a new output directory name based on current time and create it on filesystem.
Create output directory on filesystem, generate a new name based on current time if not provided.
Args:
output_dir (str): Output directory. Defaults to None.
Returns:
str:
O
utput directory
name
.
str:
Given or generated o
utput directory.
"""
output_name
=
datetime
.
now
().
strftime
(
'%Y-%m-%d_%H-%M-%S'
)
output_path
=
Path
(
'.'
,
'outputs'
,
output_name
).
resolve
()
if
not
output_dir
:
output_dir
=
str
(
Path
(
'outputs'
,
datetime
.
now
().
strftime
(
'%Y-%m-%d_%H-%M-%S'
)))
output_path
=
Path
(
output_dir
).
expanduser
().
resolve
()
output_path
.
mkdir
(
mode
=
0o755
,
parents
=
True
,
exist_ok
=
True
)
return
str
(
output_
path
)
return
output_
dir
def
get_sb_config
(
config_file
):
...
...
superbench/executor/executor.py
View file @
7b0b0e9a
...
...
@@ -15,19 +15,20 @@ from superbench.common.utils import SuperBenchLogger, logger
class
SuperBenchExecutor
():
"""SuperBench executor class."""
def
__init__
(
self
,
sb_config
,
output_dir
):
def
__init__
(
self
,
sb_config
,
sb_
output_dir
):
"""Initilize.
Args:
sb_config (DictConfig): SuperBench config object.
output_dir (str):
Dir for output
.
sb_
output_dir (str):
SuperBench output directory
.
"""
self
.
_sb_config
=
sb_config
self
.
_output_dir
=
output_dir
self
.
_sb_output_dir
=
sb_output_dir
self
.
_output_path
=
Path
(
sb_output_dir
).
expanduser
().
resolve
()
self
.
__set_logger
(
'sb-exec.log'
)
logger
.
info
(
'Executor uses config: %s.'
,
self
.
_sb_config
)
logger
.
info
(
'Executor writes to: %s.'
,
self
.
_output_
dir
)
logger
.
info
(
'Executor writes to: %s.'
,
str
(
self
.
_output_
path
)
)
self
.
__validate_sb_config
()
self
.
_sb_benchmarks
=
self
.
_sb_config
.
superbench
.
benchmarks
...
...
@@ -40,7 +41,7 @@ class SuperBenchExecutor():
Args:
filename (str): Log file name.
"""
SuperBenchLogger
.
add_handler
(
logger
.
logger
,
filename
=
str
(
Path
(
self
.
_output_
dir
)
/
filename
))
SuperBenchLogger
.
add_handler
(
logger
.
logger
,
filename
=
str
(
self
.
_output_
path
/
filename
))
def
__validate_sb_config
(
self
):
"""Validate SuperBench config object.
...
...
@@ -127,7 +128,7 @@ class SuperBenchExecutor():
Args:
benchmark_name (str): Benchmark name.
"""
benchmark_output_dir
=
Path
(
self
.
_output_
dir
,
'benchmarks'
,
benchmark_name
)
benchmark_output_dir
=
self
.
_output_
path
/
'benchmarks'
/
benchmark_name
if
benchmark_output_dir
.
is_dir
()
and
any
(
benchmark_output_dir
.
iterdir
()):
logger
.
warning
(
'Benchmark output directory %s is not empty.'
,
str
(
benchmark_output_dir
))
for
i
in
itertools
.
count
(
start
=
1
):
...
...
@@ -144,7 +145,7 @@ class SuperBenchExecutor():
benchmark_name (str): Benchmark name.
benchmark_results (dict): Benchmark results.
"""
with
Path
(
self
.
_output_
dir
,
'benchmarks'
,
benchmark_name
,
'results.json'
).
open
(
mode
=
'w'
)
as
f
:
with
(
self
.
_output_
path
/
'benchmarks'
/
benchmark_name
/
'results.json'
).
open
(
mode
=
'w'
)
as
f
:
json
.
dump
(
benchmark_results
,
f
,
indent
=
2
)
def
exec
(
self
):
...
...
superbench/runner/runner.py
View file @
7b0b0e9a
...
...
@@ -15,24 +15,25 @@ from superbench.runner.ansible import AnsibleClient
class
SuperBenchRunner
():
"""SuperBench runner class."""
def
__init__
(
self
,
sb_config
,
docker_config
,
ansible_config
,
output_dir
):
def
__init__
(
self
,
sb_config
,
docker_config
,
ansible_config
,
sb_
output_dir
):
"""Initilize.
Args:
sb_config (DictConfig): SuperBench config object.
docker_config (DictConfig): Docker config object.
ansible_config (DictConfig): Ansible config object.
output_dir (str):
Dir for output
.
sb_
output_dir (str):
SuperBench output directory
.
"""
self
.
_sb_config
=
sb_config
self
.
_docker_config
=
docker_config
self
.
_ansible_config
=
ansible_config
self
.
_output_dir
=
output_dir
self
.
_sb_output_dir
=
sb_output_dir
self
.
_output_path
=
Path
(
sb_output_dir
).
expanduser
().
resolve
()
self
.
_ansible_client
=
AnsibleClient
(
ansible_config
)
self
.
__set_logger
(
'sb-run.log'
)
logger
.
info
(
'Runner uses config: %s.'
,
self
.
_sb_config
)
logger
.
info
(
'Runner writes to: %s.'
,
self
.
_output_
dir
)
logger
.
info
(
'Runner writes to: %s.'
,
str
(
self
.
_output_
path
)
)
self
.
_sb_benchmarks
=
self
.
_sb_config
.
superbench
.
benchmarks
self
.
__validate_sb_config
()
...
...
@@ -45,7 +46,7 @@ class SuperBenchRunner():
Args:
filename (str): Log file name.
"""
SuperBenchLogger
.
add_handler
(
logger
.
logger
,
filename
=
str
(
Path
(
self
.
_output_
dir
)
/
filename
))
SuperBenchLogger
.
add_handler
(
logger
.
logger
,
filename
=
str
(
self
.
_output_
path
/
filename
))
def
__validate_sb_config
(
self
):
"""Validate SuperBench config object.
...
...
@@ -92,7 +93,10 @@ class SuperBenchRunner():
Return:
str: Runner command.
"""
exec_command
=
(
'sb exec -c sb.config.yaml -C superbench.enable={name}'
).
format
(
name
=
benchmark_name
)
exec_command
=
(
'sb exec --output-dir {output_dir} -c sb.config.yaml -C superbench.enable={name}'
).
format
(
name
=
benchmark_name
,
output_dir
=
self
.
_sb_output_dir
,
)
mode_command
=
exec_command
if
mode
.
name
==
'local'
:
mode_command
=
'{prefix} {command}'
.
format
(
...
...
@@ -124,7 +128,7 @@ class SuperBenchRunner():
logger
.
info
(
'Preparing SuperBench environment.'
)
extravars
=
{
'ssh_port'
:
random
.
randint
(
1
<<
14
,
(
1
<<
15
)
-
1
),
'output_dir'
:
self
.
_output_
dir
,
'output_dir'
:
str
(
self
.
_output_
path
)
,
'docker_image'
:
self
.
_docker_config
.
image
,
'gpu_vendor'
:
'nvidia'
,
}
...
...
@@ -141,12 +145,12 @@ class SuperBenchRunner():
def
check_env
(
self
):
# pragma: no cover
"""Check SuperBench environment."""
logger
.
info
(
'Checking SuperBench environment.'
)
OmegaConf
.
save
(
config
=
self
.
_sb_config
,
f
=
str
(
Path
(
self
.
_output_
dir
)
/
'sb.config.yaml'
))
OmegaConf
.
save
(
config
=
self
.
_sb_config
,
f
=
str
(
self
.
_output_
path
/
'sb.config.yaml'
))
self
.
_ansible_client
.
run
(
self
.
_ansible_client
.
get_playbook_config
(
'check_env.yaml'
,
extravars
=
{
'output_dir'
:
self
.
_output_
dir
,
'output_dir'
:
str
(
self
.
_output_
path
)
,
'env'
:
'
\n
'
.
join
(
f
'
{
k
}
=
{
v
}
'
for
k
,
v
in
self
.
_sb_config
.
superbench
.
env
.
items
()),
}
)
...
...
tests/executor/test_executor.py
View file @
7b0b0e9a
...
...
@@ -27,17 +27,17 @@ class ExecutorTestCase(unittest.TestCase):
default_config_file
=
Path
(
__file__
).
parent
/
'../../superbench/config/default.yaml'
with
default_config_file
.
open
()
as
fp
:
self
.
default_config
=
OmegaConf
.
create
(
yaml
.
load
(
fp
,
Loader
=
yaml
.
SafeLoader
))
self
.
output_dir
=
tempfile
.
mkdtemp
()
self
.
sb_
output_dir
=
tempfile
.
mkdtemp
()
self
.
executor
=
SuperBenchExecutor
(
self
.
default_config
,
self
.
output_dir
)
self
.
executor
=
SuperBenchExecutor
(
self
.
default_config
,
self
.
sb_
output_dir
)
def
tearDown
(
self
):
"""Hook method for deconstructing the test fixture after testing it."""
shutil
.
rmtree
(
self
.
output_dir
)
shutil
.
rmtree
(
self
.
sb_
output_dir
)
def
test_set_logger
(
self
):
"""Test log file exists."""
expected_log_file
=
Path
(
self
.
executor
.
_output_dir
)
/
'sb-exec.log'
expected_log_file
=
Path
(
self
.
executor
.
_
sb_
output_dir
)
/
'sb-exec.log'
self
.
assertTrue
(
expected_log_file
.
is_file
())
def
test_get_enabled_benchmarks_enable_none
(
self
):
...
...
@@ -92,7 +92,7 @@ class ExecutorTestCase(unittest.TestCase):
def
test_create_benchmark_dir
(
self
):
"""Test __create_benchmark_dir."""
foo_path
=
Path
(
self
.
output_dir
,
'benchmarks'
,
'foo'
)
foo_path
=
Path
(
self
.
sb_
output_dir
,
'benchmarks'
,
'foo'
)
self
.
executor
.
_SuperBenchExecutor__create_benchmark_dir
(
'foo'
)
self
.
assertTrue
(
foo_path
.
is_dir
())
self
.
assertFalse
(
any
(
foo_path
.
iterdir
()))
...
...
@@ -115,7 +115,7 @@ class ExecutorTestCase(unittest.TestCase):
def
test_write_benchmark_results
(
self
):
"""Test __write_benchmark_results."""
foobar_path
=
Path
(
self
.
output_dir
,
'benchmarks'
,
'foobar'
)
foobar_path
=
Path
(
self
.
sb_
output_dir
,
'benchmarks'
,
'foobar'
)
foobar_results_path
=
foobar_path
/
'results.json'
self
.
executor
.
_SuperBenchExecutor__create_benchmark_dir
(
'foobar'
)
foobar_results
=
{
...
...
@@ -142,7 +142,7 @@ class ExecutorTestCase(unittest.TestCase):
mock_exec_benchmark
.
return_value
=
{}
self
.
executor
.
exec
()
self
.
assertTrue
(
Path
(
self
.
output_dir
,
'benchmarks'
).
is_dir
())
self
.
assertTrue
(
Path
(
self
.
sb_
output_dir
,
'benchmarks'
).
is_dir
())
for
benchmark_name
in
self
.
executor
.
_sb_benchmarks
:
self
.
assertTrue
(
Path
(
self
.
output_dir
,
'benchmarks'
,
benchmark_name
).
is_dir
())
self
.
assertTrue
(
Path
(
self
.
output_dir
,
'benchmarks'
,
benchmark_name
,
'results.json'
).
is_file
())
self
.
assertTrue
(
Path
(
self
.
sb_
output_dir
,
'benchmarks'
,
benchmark_name
).
is_dir
())
self
.
assertTrue
(
Path
(
self
.
sb_
output_dir
,
'benchmarks'
,
benchmark_name
,
'results.json'
).
is_file
())
tests/runner/test_runner.py
View file @
7b0b0e9a
...
...
@@ -22,17 +22,17 @@ class RunnerTestCase(unittest.TestCase):
default_config_file
=
Path
(
__file__
).
parent
/
'../../superbench/config/default.yaml'
with
default_config_file
.
open
()
as
fp
:
self
.
default_config
=
OmegaConf
.
create
(
yaml
.
load
(
fp
,
Loader
=
yaml
.
SafeLoader
))
self
.
output_dir
=
tempfile
.
mkdtemp
()
self
.
sb_
output_dir
=
tempfile
.
mkdtemp
()
self
.
runner
=
SuperBenchRunner
(
self
.
default_config
,
None
,
None
,
self
.
output_dir
)
self
.
runner
=
SuperBenchRunner
(
self
.
default_config
,
None
,
None
,
self
.
sb_
output_dir
)
def
tearDown
(
self
):
"""Hook method for deconstructing the test fixture after testing it."""
shutil
.
rmtree
(
self
.
output_dir
)
shutil
.
rmtree
(
self
.
sb_
output_dir
)
def
test_set_logger
(
self
):
"""Test log file exists."""
expected_log_file
=
Path
(
self
.
runner
.
_output_dir
)
/
'sb-run.log'
expected_log_file
=
Path
(
self
.
runner
.
_
sb_
output_dir
)
/
'sb-run.log'
self
.
assertTrue
(
expected_log_file
.
is_file
())
def
test_get_mode_command
(
self
):
...
...
@@ -43,7 +43,8 @@ class RunnerTestCase(unittest.TestCase):
'mode'
:
{
'name'
:
'non_exist'
,
},
'expected_command'
:
'sb exec -c sb.config.yaml -C superbench.enable=foo'
,
'expected_command'
:
f
'sb exec --output-dir
{
self
.
sb_output_dir
}
-c sb.config.yaml -C superbench.enable=foo'
,
},
{
'benchmark_name'
:
'foo'
,
...
...
@@ -52,7 +53,8 @@ class RunnerTestCase(unittest.TestCase):
'proc_num'
:
1
,
'prefix'
:
''
,
},
'expected_command'
:
'sb exec -c sb.config.yaml -C superbench.enable=foo'
,
'expected_command'
:
f
'sb exec --output-dir
{
self
.
sb_output_dir
}
-c sb.config.yaml -C superbench.enable=foo'
,
},
{
'benchmark_name'
:
...
...
@@ -63,19 +65,22 @@ class RunnerTestCase(unittest.TestCase):
'proc_rank'
:
6
,
'prefix'
:
'CUDA_VISIBLE_DEVICES={proc_rank} numactl -c $(({proc_rank}/2))'
},
'expected_command'
:
(
'CUDA_VISIBLE_DEVICES=6 numactl -c $((6/2)) '
'sb exec -c sb.config.yaml -C superbench.enable=foo'
),
'expected_command'
:
(
'CUDA_VISIBLE_DEVICES=6 numactl -c $((6/2)) '
f
'sb exec --output-dir
{
self
.
sb_output_dir
}
-c sb.config.yaml -C superbench.enable=foo'
),
},
{
'benchmark_name'
:
'foo'
,
'benchmark_name'
:
'foo'
,
'mode'
:
{
'name'
:
'local'
,
'proc_num'
:
16
,
'proc_rank'
:
1
,
'prefix'
:
'RANK={proc_rank} NUM={proc_num}'
},
'expected_command'
:
'RANK=1 NUM=16 sb exec -c sb.config.yaml -C superbench.enable=foo'
,
'expected_command'
:
f
'RANK=1 NUM=16 sb exec --output-dir
{
self
.
sb_output_dir
}
-c sb.config.yaml -C superbench.enable=foo'
,
},
{
'benchmark_name'
:
...
...
@@ -90,7 +95,7 @@ class RunnerTestCase(unittest.TestCase):
'--use_env --no_python --nproc_per_node=1 '
'--nnodes=$NNODES --node_rank=$NODE_RANK '
'--master_addr=$MASTER_ADDR --master_port=$MASTER_PORT '
'sb exec -c sb.config.yaml -C superbench.enable=foo '
f
'sb exec
--output-dir
{
self
.
sb_output_dir
}
-c sb.config.yaml -C superbench.enable=foo '
'superbench.benchmarks.foo.parameters.distributed_impl=ddp '
'superbench.benchmarks.foo.parameters.distributed_backend=nccl'
),
...
...
@@ -108,7 +113,7 @@ class RunnerTestCase(unittest.TestCase):
'--use_env --no_python --nproc_per_node=8 '
'--nnodes=1 --node_rank=$NODE_RANK '
'--master_addr=$MASTER_ADDR --master_port=$MASTER_PORT '
'sb exec -c sb.config.yaml -C superbench.enable=foo '
f
'sb exec
--output-dir
{
self
.
sb_output_dir
}
-c sb.config.yaml -C superbench.enable=foo '
'superbench.benchmarks.foo.parameters.distributed_impl=ddp '
'superbench.benchmarks.foo.parameters.distributed_backend=nccl'
),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment