blob: ce6dcac48cdbbef8b0844bcb6573a0ffcac89dde [file] [log] [blame]
#!/usr/bin/env python
"""
Script to launch all caffe2 MobileLab tests
MobieLab uses `flow-cli` to launch jobs
To install flow-cli on your devserver, run
```
sudo feature install fblearner_flow
```
Example usage:
- Run all tests: ~/fbsource/xplat/caffe2/scripts/run_mobilelab.py --diff_id 56041720 --base_commit 583c0d7396c8d0469a225bf2bb19d8ecd25ba3af
- Run all android tests: ~/fbsource/xplat/caffe2/scripts/run_mobilelab.py --diff_id 56041720 --base_commit <commit_id> --android
- Run all android tests: ~/fbsource/xplat/caffe2/scripts/run_mobilelab.py --diff_id 56041720 --base_commit <commit_id> --iOS
- Run all tests and let LabBot post lab run results on your diff: ~/fbsource/xplat/caffe2/scripts/run_mobilelab.py --diff_id 56041720 --base_commit 583c0d7396c8d0469a225bf2bb19d8ecd25ba3af --comment_on_revision D8756131
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import argparse
import json
import os
import subprocess
import sys
# comment out the tests you don't need to run
android_tests = [
"android_microbenchmark.aml.microbenchmark_caffe2.correctness.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.body_tracking_cold_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.body_tracking_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.body_tracking_memory.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.body_tracking_operator_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.hand_tracking_cold_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.hand_tracking_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.hand_tracking_memory.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.hand_tracking_operator_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.person_segmentation_cold_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.person_segmentation_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.person_segmentation_memory.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.person_segmentation_operator_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.xray_mobile_42_cold_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.xray_mobile_42_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.xray_mobile_42_memory.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.xray_mobile_42_operator_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.xray_mobile_84_v1_cold_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.xray_mobile_84_v1_delay.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.xray_mobile_84_v1_memory.nexus6",
"android_microbenchmark.aml.microbenchmark_caffe2.xray_mobile_84_v1_operator_delay.nexus6",
]
iOS_tests = [
"xcui.caffe2.correctness.ios10.iPhone7",
"xcui.caffe2.body_tracking_cold_delay.ios10.iPhone7",
"xcui.caffe2.body_tracking_delay.ios10.iPhone7",
"xcui.caffe2.body_tracking_memory.ios10.iPhone7",
"xcui.caffe2.hand_tracking_cold_delay.ios10.iPhone7",
"xcui.caffe2.hand_tracking_delay.ios10.iPhone7",
"xcui.caffe2.hand_tracking_memory.ios10.iPhone7",
"xcui.caffe2.person_segmentation_cold_delay.ios10.iPhone7",
"xcui.caffe2.person_segmentation_delay.ios10.iPhone7",
"xcui.caffe2.person_segmentation_memory.ios10.iPhone7",
"xcui.caffe2.xray_mobile_42_cold_delay.ios10.iPhone7",
"xcui.caffe2.xray_mobile_42_delay.ios10.iPhone7",
"xcui.caffe2.xray_mobile_42_memory.ios10.iPhone7",
"xcui.caffe2.xray_mobile_84_v1_cold_delay.ios10.iPhone7",
"xcui.caffe2.xray_mobile_84_v1_delay.ios10.iPhone7",
"xcui.caffe2.xray_mobile_84_v1_memory.ios10.iPhone7",
]
android_job_inputs = json.loads(
"""{
"test_config_name": "android_microbenchmark.aml.microbenchmark_caffe2.correctness.nexus6",
"workflow_inputs": {
"gating_overrides": null,
"android_microbenchmark": {
"experiment_store_config": {
"metadata": {
"entry_point": "frontend"
}
},
"one_world_priority": -10,
"experiment_request": {
"treatment": {
"build_request": {
"build_spec": {
"diff_id": "replaceme"
},
"priority": 0
}
},
"control": {
"build_request": {
"build_spec": {
"commit_hash": "replaceme"
},
"priority": 0
}
}
},
"comment_on_revision": "replaceme"
}
}
}"""
)
iOS_job_inputs = json.loads(
"""{
"test_config_name": "xcui.caffe2.correctness.ios10.iPhone7",
"workflow_inputs": {
"xcui": {
"gating_overrides": null,
"experiment_store_config": {
"metadata": {
"entry_point": "frontend"
}
},
"one_world_priority": -10,
"experiment_request": {
"treatment": {
"build_request": {
"build_spec": {
"diff_id": "replaceme"
},
"priority": 0
}
},
"control": {
"build_request": {
"build_spec": {
"commit_hash": "replaceme"
},
"priority": 0
}
}
},
"comment_on_revision": "replaceme"
}
}
}"""
)
parser = argparse.ArgumentParser(description="Launch all caffe2 mobilelab jobs")
parser.add_argument(
"--diff_id",
required=True,
help="the diff version (not the DNNNNNNNN revision) for your change, e.g. 55434539",
)
parser.add_argument(
"--base_commit",
required=True,
help="base commit hash, e.g. 583c0d7396c8d0469a225bf2bb19d8ecd25ba3af",
)
parser.add_argument(
"--comment_on_revision",
default=None,
help="the phabricator revision (the DNNNNNNNN revision), eg. D8756131 or D8756131",
)
parser.add_argument("--android", action="store_true", help="Run all android tests")
parser.add_argument("--iOS", action="store_true", help="Run all iOS tests")
def main(args):
options = parser.parse_args(args)
diff_id = options.diff_id
base_commit = options.base_commit
comment_on_revision = options.comment_on_revision
if comment_on_revision and comment_on_revision.startswith("D"):
comment_on_revision = comment_on_revision[1:]
# Launch all jobs if the user didn't specify android or iOS
run_all_jobs = True if not (options.android) and not (options.iOS) else False
# Must launch jobs from fbcode
os.system("cd ~/fbsource/fbcode")
if run_all_jobs or options.android:
for t in android_tests:
android_job_inputs["workflow_inputs"]["android_microbenchmark"][
"experiment_request"
]["treatment"]["build_request"]["build_spec"]["diff_id"] = diff_id
android_job_inputs["workflow_inputs"]["android_microbenchmark"][
"experiment_request"
]["control"]["build_request"]["build_spec"]["commit_hash"] = base_commit
android_job_inputs["workflow_inputs"]["android_microbenchmark"][
"comment_on_revision"
] = comment_on_revision
android_job_inputs["test_config_name"] = t
subprocess.check_call(
[
"flow-cli",
"launch",
"lab.run_test.entry",
"--parameters-json",
json.dumps(android_job_inputs),
"--entitlement",
"oneworld_prn",
"--name",
"Run with test config " + t,
]
)
if run_all_jobs or options.iOS:
for t in iOS_tests:
iOS_job_inputs["workflow_inputs"]["xcui"]["experiment_request"][
"treatment"
]["build_request"]["build_spec"]["diff_id"] = diff_id
iOS_job_inputs["workflow_inputs"]["xcui"]["experiment_request"]["control"][
"build_request"
]["build_spec"]["commit_hash"] = base_commit
iOS_job_inputs["workflow_inputs"]["xcui"][
"comment_on_revision"
] = comment_on_revision
iOS_job_inputs["test_config_name"] = t
subprocess.check_call(
[
"flow-cli",
"launch",
"lab.run_test.entry",
"--parameters-json",
json.dumps(iOS_job_inputs),
"--entitlement",
"oneworld_prn",
"--name",
"Run with test config " + t,
]
)
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))