Sync fbcode/caffe2 and xplat/caffe2 (1) (#19218)
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/19218
Sync some contents between fbcode/caffe2 and xplat/caffe2 to move closer towards a world where they are identical.
Reviewed By: dzhulgakov
Differential Revision: D14919916
fbshipit-source-id: 29c6b6d89ac556d58ae3cd02619aca88c79591c1
diff --git a/scripts/proto.ps1 b/scripts/proto.ps1
new file mode 100644
index 0000000..53812f9
--- /dev/null
+++ b/scripts/proto.ps1
@@ -0,0 +1,17 @@
+param(
+ [string]$protoc,
+ [string]$srcdir,
+ [string]$unprocessed,
+ [string]$processed,
+ [string]$out
+)
+$ErrorActionPreference = "Stop"
+Get-Content $unprocessed | % {$_ -Replace "caffe2/proto/caffe2.proto", "caffe2.proto"} | Set-Content $processed
+Add-Content -Path $processed -Value "option optimize_for = LITE_RUNTIME;`n" -NoNewline
+$dir = (Get-Item $processed).DirectoryName
+
+copy $srcdir/caffe2/proto/caffe2.proto $srcdir/caffe2.proto
+Add-Content -Path $srcdir/caffe2.proto -Value "option optimize_for = LITE_RUNTIME;`n" -NoNewline
+
+$cmd = "$protoc -I${dir} --cpp_out=$out $processed"
+Invoke-Expression $cmd
diff --git a/scripts/run_mobilelab.py b/scripts/run_mobilelab.py
new file mode 100755
index 0000000..ce6dcac
--- /dev/null
+++ b/scripts/run_mobilelab.py
@@ -0,0 +1,238 @@
+#!/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:]))