Add ARM64 cross-compilation build on OS X (#49751)
Summary:
Tests cross-compilation of ARM64 architecture in MacOS CI.
This should be merged after PR https://github.com/pytorch/pytorch/issues/50243 and https://github.com/pytorch/pytorch/issues/50922 (adding a fix).
The reason we pin the wheel to be version 0.36.2 is because lower versions cannot handle c38 as a tag for the wheel.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/49751
Reviewed By: albanD
Differential Revision: D26411133
Pulled By: janeyx99
fbshipit-source-id: 00a5cf597aee10adea1547579270cb3b38732563
diff --git a/.circleci/cimodel/data/simple/macos_definitions.py b/.circleci/cimodel/data/simple/macos_definitions.py
index 8f6fcb4..bfe9d74 100644
--- a/.circleci/cimodel/data/simple/macos_definitions.py
+++ b/.circleci/cimodel/data/simple/macos_definitions.py
@@ -21,7 +21,7 @@
return [{full_job_name: props_dict}]
-WORKFLOW_DATA = [MacOsJob("10_13"), MacOsJob("10_13", True)]
+WORKFLOW_DATA = [MacOsJob("10_15"), MacOsJob("10_13"), MacOsJob("10_13", True)]
def get_workflow_jobs():
diff --git a/.circleci/config.yml b/.circleci/config.yml
index b08c41c..e4ca1ac 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -1257,6 +1257,43 @@
paths:
- .
+ pytorch_macos_10_15_py3_build:
+ environment:
+ BUILD_ENVIRONMENT: pytorch-macos-10.15-py3-arm64-build
+ macos:
+ xcode: "12.3.0"
+ steps:
+ - checkout
+ - run_brew_for_macos_build
+ - run:
+ name: Build
+ no_output_timeout: "1h"
+ command: |
+ set -e
+ export IN_CI=1
+ export CROSS_COMPILE_ARM=1
+
+ # Install sccache
+ sudo curl --retry 3 https://s3.amazonaws.com/ossci-macos/sccache_v2.15 --output /usr/local/bin/sccache
+ sudo chmod +x /usr/local/bin/sccache
+ export SCCACHE_BUCKET=ossci-compiler-cache-circleci-v2
+
+ # This IAM user allows write access to S3 bucket for sccache
+ set +x
+ export AWS_ACCESS_KEY_ID=${CIRCLECI_AWS_ACCESS_KEY_FOR_SCCACHE_S3_BUCKET_V4}
+ export AWS_SECRET_ACCESS_KEY=${CIRCLECI_AWS_SECRET_KEY_FOR_SCCACHE_S3_BUCKET_V4}
+ set -x
+
+ chmod a+x .jenkins/pytorch/macos-build.sh
+ unbuffer .jenkins/pytorch/macos-build.sh 2>&1 | ts
+
+ - persist_to_workspace:
+ root: /Users/distiller/workspace/
+ paths:
+ - miniconda3
+ - store_artifacts:
+ path: /Users/distiller/project/dist
+
pytorch_macos_10_13_py3_build:
environment:
BUILD_ENVIRONMENT: pytorch-macos-10.13-py3-build
@@ -7058,6 +7095,8 @@
build_environment: "pytorch-linux-bionic-rocm3.9-py3.6-build"
docker_image: "308535385114.dkr.ecr.us-east-1.amazonaws.com/pytorch/pytorch-linux-bionic-rocm3.9-py3.6"
resource_class: xlarge
+ - pytorch_macos_10_15_py3_build:
+ name: pytorch_macos_10_15_py3_build
- pytorch_macos_10_13_py3_build:
name: pytorch_macos_10_13_py3_build
- pytorch_macos_10_13_py3_test:
diff --git a/.circleci/verbatim-sources/job-specs/job-specs-custom.yml b/.circleci/verbatim-sources/job-specs/job-specs-custom.yml
index 17c6fbb..20c2649 100644
--- a/.circleci/verbatim-sources/job-specs/job-specs-custom.yml
+++ b/.circleci/verbatim-sources/job-specs/job-specs-custom.yml
@@ -111,6 +111,43 @@
paths:
- .
+ pytorch_macos_10_15_py3_build:
+ environment:
+ BUILD_ENVIRONMENT: pytorch-macos-10.15-py3-arm64-build
+ macos:
+ xcode: "12.3.0"
+ steps:
+ - checkout
+ - run_brew_for_macos_build
+ - run:
+ name: Build
+ no_output_timeout: "1h"
+ command: |
+ set -e
+ export IN_CI=1
+ export CROSS_COMPILE_ARM=1
+
+ # Install sccache
+ sudo curl --retry 3 https://s3.amazonaws.com/ossci-macos/sccache_v2.15 --output /usr/local/bin/sccache
+ sudo chmod +x /usr/local/bin/sccache
+ export SCCACHE_BUCKET=ossci-compiler-cache-circleci-v2
+
+ # This IAM user allows write access to S3 bucket for sccache
+ set +x
+ export AWS_ACCESS_KEY_ID=${CIRCLECI_AWS_ACCESS_KEY_FOR_SCCACHE_S3_BUCKET_V4}
+ export AWS_SECRET_ACCESS_KEY=${CIRCLECI_AWS_SECRET_KEY_FOR_SCCACHE_S3_BUCKET_V4}
+ set -x
+
+ chmod a+x .jenkins/pytorch/macos-build.sh
+ unbuffer .jenkins/pytorch/macos-build.sh 2>&1 | ts
+
+ - persist_to_workspace:
+ root: /Users/distiller/workspace/
+ paths:
+ - miniconda3
+ - store_artifacts:
+ path: /Users/distiller/project/dist
+
pytorch_macos_10_13_py3_build:
environment:
BUILD_ENVIRONMENT: pytorch-macos-10.13-py3-build
diff --git a/.jenkins/pytorch/macos-build.sh b/.jenkins/pytorch/macos-build.sh
index 3fb3868..5b3a178 100755
--- a/.jenkins/pytorch/macos-build.sh
+++ b/.jenkins/pytorch/macos-build.sh
@@ -28,7 +28,12 @@
export PATH="${WORKSPACE_DIR}:$PATH"
fi
-USE_DISTRIBUTED=1 python setup.py install
+if [ -z "${CROSS_COMPILE_ARM}" ]; then
+ USE_DISTRIBUTED=1 python setup.py install
+else
+ export MACOSX_DEPLOYMENT_TARGET=11.0
+ USE_DISTRIBUTED=1 CMAKE_OSX_ARCHITECTURES=arm64 USE_MKLDNN=OFF USE_NNPACK=OFF USE_QNNPACK=OFF USE_PYTORCH_QNNPACK=OFF BUILD_TEST=OFF python setup.py bdist_wheel
+fi
assert_git_not_dirty
diff --git a/.jenkins/pytorch/macos-common.sh b/.jenkins/pytorch/macos-common.sh
index 27c9d4c..c0148ed 100755
--- a/.jenkins/pytorch/macos-common.sh
+++ b/.jenkins/pytorch/macos-common.sh
@@ -12,16 +12,21 @@
export WORKSPACE_DIR="${HOME}/workspace"
mkdir -p ${WORKSPACE_DIR}
+if [[ "${COMPACT_JOB_NAME}" == *arm64* ]]; then
+ MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-py38_4.9.2-MacOSX-x86_64.sh"
+else
+ MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-py37_4.8.3-MacOSX-x86_64.sh"
+fi
+
# If a local installation of conda doesn't exist, we download and install conda
if [ ! -d "${WORKSPACE_DIR}/miniconda3" ]; then
mkdir -p ${WORKSPACE_DIR}
- curl --retry 3 https://repo.anaconda.com/miniconda/Miniconda3-py37_4.8.3-MacOSX-x86_64.sh -o ${WORKSPACE_DIR}/miniconda3.sh
+ curl --retry 3 ${MINICONDA_URL} -o ${WORKSPACE_DIR}/miniconda3.sh
retry bash ${WORKSPACE_DIR}/miniconda3.sh -b -p ${WORKSPACE_DIR}/miniconda3
fi
export PATH="${WORKSPACE_DIR}/miniconda3/bin:$PATH"
source ${WORKSPACE_DIR}/miniconda3/bin/activate
-retry conda install -y mkl mkl-include numpy=1.18.5 pyyaml=5.3 setuptools=46.0.0 cmake cffi ninja typing_extensions dataclasses
-
+retry conda install -y mkl mkl-include numpy=1.18.5 pyyaml=5.3 setuptools=46.0.0 cmake cffi ninja typing_extensions dataclasses pip
# The torch.hub tests make requests to GitHub.
#
# The certifi package from conda-forge is new enough to make the
@@ -31,7 +36,7 @@
# > certificate verify failed: unable to get local issuer certificate
# > (_ssl.c:1056)
#
-retry conda install -y -c conda-forge certifi
+retry conda install -y -c conda-forge certifi wheel=0.36.2
# Needed by torchvision, which is imported from TestHub in test_utils.py.
retry conda install -y pillow