748 lines
30 KiB
YAML
748 lines
30 KiB
YAML
pytorch_doc_push:
|
|
resource_class: medium
|
|
machine:
|
|
image: ubuntu-2004:202104-01
|
|
parameters:
|
|
branch:
|
|
type: string
|
|
default: "main"
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- run:
|
|
name: Generate netrc
|
|
command: |
|
|
# set credentials for https pushing
|
|
cat > ~/.netrc \<<DONE
|
|
machine github.com
|
|
login pytorchbot
|
|
password ${GITHUB_PYTORCHBOT_TOKEN}
|
|
DONE
|
|
- run:
|
|
name: Docs push
|
|
command: |
|
|
pushd /tmp/workspace
|
|
git push -u origin "<< parameters.branch >>"
|
|
|
|
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 CROSS_COMPILE_ARM64=1
|
|
export JOB_BASE_NAME=$CIRCLE_JOB
|
|
|
|
# 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 .ci/pytorch/macos-build.sh
|
|
unbuffer .ci/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
|
|
macos:
|
|
xcode: "12.0"
|
|
steps:
|
|
- checkout
|
|
- run_brew_for_macos_build
|
|
- run:
|
|
name: Build
|
|
no_output_timeout: "1h"
|
|
command: |
|
|
set -e
|
|
export JOB_BASE_NAME=$CIRCLE_JOB
|
|
|
|
# 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 .ci/pytorch/macos-build.sh
|
|
unbuffer .ci/pytorch/macos-build.sh 2>&1 | ts
|
|
|
|
- persist_to_workspace:
|
|
root: /Users/distiller/workspace/
|
|
paths:
|
|
- miniconda3
|
|
|
|
mac_build:
|
|
parameters:
|
|
build-environment:
|
|
type: string
|
|
description: Top-level label for what's being built/tested.
|
|
xcode-version:
|
|
type: string
|
|
default: "13.3.1"
|
|
description: What xcode version to build with.
|
|
build-generates-artifacts:
|
|
type: boolean
|
|
default: true
|
|
description: if the build generates build artifacts
|
|
python-version:
|
|
type: string
|
|
default: "3.8"
|
|
macos:
|
|
xcode: << parameters.xcode-version >>
|
|
resource_class: medium
|
|
environment:
|
|
BUILD_ENVIRONMENT: << parameters.build-environment >>
|
|
AWS_REGION: us-east-1
|
|
steps:
|
|
|
|
- checkout
|
|
- run_brew_for_macos_build
|
|
|
|
- run:
|
|
name: Install sccache
|
|
command: |
|
|
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
|
|
echo "export SCCACHE_BUCKET=ossci-compiler-cache-circleci-v2" >> "${BASH_ENV}"
|
|
echo "export SCCACHE_S3_KEY_PREFIX=${GITHUB_WORKFLOW}" >> "${BASH_ENV}"
|
|
|
|
set +x
|
|
echo "export AWS_ACCESS_KEY_ID=${CIRCLECI_AWS_ACCESS_KEY_FOR_SCCACHE_S3_BUCKET_V4}" >> "${BASH_ENV}"
|
|
echo "export AWS_SECRET_ACCESS_KEY=${CIRCLECI_AWS_SECRET_KEY_FOR_SCCACHE_S3_BUCKET_V4}" >> "${BASH_ENV}"
|
|
set -x
|
|
|
|
- run:
|
|
name: Get workflow job id
|
|
command: |
|
|
echo "export OUR_GITHUB_JOB_ID=${CIRCLE_WORKFLOW_JOB_ID}" >> "${BASH_ENV}"
|
|
|
|
- run:
|
|
name: Build
|
|
command: |
|
|
set -x
|
|
|
|
git submodule sync
|
|
git submodule update --init --recursive --depth 1 --jobs 0
|
|
|
|
export PATH="/usr/local/bin:$PATH"
|
|
export WORKSPACE_DIR="${HOME}/workspace"
|
|
mkdir -p "${WORKSPACE_DIR}"
|
|
MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-py38_4.12.0-MacOSX-x86_64.sh"
|
|
if [ << parameters.python-version >> == 3.9.12 ]; then
|
|
MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-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 ${MINICONDA_URL} -o "${WORKSPACE_DIR}"/miniconda3.sh
|
|
bash "${WORKSPACE_DIR}"/miniconda3.sh -b -p "${WORKSPACE_DIR}"/miniconda3
|
|
fi
|
|
export PATH="${WORKSPACE_DIR}/miniconda3/bin:$PATH"
|
|
# shellcheck disable=SC1091
|
|
source "${WORKSPACE_DIR}"/miniconda3/bin/activate
|
|
|
|
brew link --force libomp
|
|
|
|
echo "export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname "$(which conda)")/../"}" >> "${BASH_ENV}"
|
|
.ci/pytorch/macos-build.sh
|
|
|
|
- when:
|
|
condition: << parameters.build-generates-artifacts >>
|
|
steps:
|
|
- run:
|
|
name: Archive artifacts into zip
|
|
command: |
|
|
zip -1 -r artifacts.zip dist/ build/.ninja_log build/compile_commands.json .pytorch-test-times.json .pytorch-test-file-ratings.json
|
|
cp artifacts.zip /Users/distiller/workspace
|
|
|
|
- persist_to_workspace:
|
|
root: /Users/distiller/workspace/
|
|
paths:
|
|
- miniconda3
|
|
- artifacts.zip
|
|
|
|
- store_artifacts:
|
|
path: /Users/distiller/project/artifacts.zip
|
|
|
|
mac_test:
|
|
parameters:
|
|
build-environment:
|
|
type: string
|
|
shard-number:
|
|
type: string
|
|
num-test-shards:
|
|
type: string
|
|
xcode-version:
|
|
type: string
|
|
test-config:
|
|
type: string
|
|
default: 'default'
|
|
|
|
macos:
|
|
xcode: << parameters.xcode-version >>
|
|
environment:
|
|
GIT_DEFAULT_BRANCH: 'master'
|
|
BUILD_ENVIRONMENT: << parameters.build-environment >>
|
|
TEST_CONFIG: << parameters.test-config >>
|
|
SHARD_NUMBER: << parameters.shard-number >>
|
|
NUM_TEST_SHARDS: << parameters.num-test-shards >>
|
|
PYTORCH_RETRY_TEST_CASES: 1
|
|
PYTORCH_OVERRIDE_FLAKY_SIGNAL: 1
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: ~/workspace
|
|
- run_brew_for_macos_build
|
|
- run:
|
|
name: Test
|
|
no_output_timeout: "2h"
|
|
command: |
|
|
set -x
|
|
|
|
git submodule sync --recursive
|
|
git submodule update --init --recursive
|
|
|
|
mv ~/workspace/artifacts.zip .
|
|
unzip artifacts.zip
|
|
|
|
export IN_CI=1
|
|
|
|
COMMIT_MESSAGES=$(git cherry -v "origin/${GIT_DEFAULT_BRANCH:-master}")
|
|
|
|
export PATH="/usr/local/bin:$PATH"
|
|
export WORKSPACE_DIR="${HOME}/workspace"
|
|
mkdir -p "${WORKSPACE_DIR}"
|
|
|
|
export PATH="${WORKSPACE_DIR}/miniconda3/bin:$PATH"
|
|
source "${WORKSPACE_DIR}"/miniconda3/bin/activate
|
|
|
|
# sanitize the input commit message and PR body here:
|
|
|
|
# trim all new lines from commit messages to avoid issues with batch environment
|
|
# variable copying. see https://github.com/pytorch/pytorch/pull/80043#issuecomment-1167796028
|
|
COMMIT_MESSAGES="${COMMIT_MESSAGES//[$'\n\r']}"
|
|
|
|
# then trim all special characters like single and double quotes to avoid unescaped inputs to
|
|
# wreak havoc internally
|
|
export COMMIT_MESSAGES="${COMMIT_MESSAGES//[\'\"]}"
|
|
|
|
python3 -mpip install dist/*.whl
|
|
.ci/pytorch/macos-test.sh
|
|
- run:
|
|
name: Copy files for uploading test stats
|
|
command: |
|
|
# copy into a parent folder test-reports because we can't use CIRCLEI_BUILD_NUM in path when persisting to workspace
|
|
mkdir -p test-reports/test-reports_${CIRCLE_BUILD_NUM}/test/test-reports
|
|
cp -r test/test-reports test-reports/test-reports_${CIRCLE_BUILD_NUM}/test/test-reports
|
|
- store_test_results:
|
|
path: test/test-reports
|
|
- persist_to_workspace:
|
|
root: /Users/distiller/project/
|
|
paths:
|
|
- test-reports
|
|
|
|
upload_test_stats:
|
|
machine: # executor type
|
|
image: ubuntu-2004:202010-01 # # recommended linux image - includes Ubuntu 20.04, docker 19.03.13, docker-compose 1.27.4
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: ~/workspace
|
|
- run:
|
|
name: upload
|
|
command: |
|
|
set -ex
|
|
if [ -z ${AWS_ACCESS_KEY_FOR_OSSCI_ARTIFACT_UPLOAD} ]; then
|
|
echo "No credentials found, cannot upload test stats (are you on a fork?)"
|
|
exit 0
|
|
fi
|
|
cp -r ~/workspace/test-reports/* ~/project
|
|
pip3 install requests==2.26 rockset==1.0.3 boto3==1.19.12
|
|
export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_FOR_OSSCI_ARTIFACT_UPLOAD}
|
|
export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_KEY_FOR_OSSCI_ARTIFACT_UPLOAD}
|
|
# i dont know how to get the run attempt number for reruns so default to 1
|
|
python3 -m tools.stats.upload_test_stats --workflow-run-id "${CIRCLE_WORKFLOW_JOB_ID}" --workflow-run-attempt 1 --head-branch << pipeline.git.branch >> --circleci
|
|
pytorch_macos_10_13_py3_test:
|
|
environment:
|
|
BUILD_ENVIRONMENT: pytorch-macos-10.13-py3-test
|
|
macos:
|
|
xcode: "12.0"
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: ~/workspace
|
|
- run_brew_for_macos_build
|
|
- run:
|
|
name: Test
|
|
no_output_timeout: "1h"
|
|
command: |
|
|
set -e
|
|
export JOB_BASE_NAME=$CIRCLE_JOB
|
|
|
|
chmod a+x .ci/pytorch/macos-test.sh
|
|
unbuffer .ci/pytorch/macos-test.sh 2>&1 | ts
|
|
- store_test_results:
|
|
path: test/test-reports
|
|
|
|
pytorch_macos_10_13_py3_lite_interpreter_build_test:
|
|
environment:
|
|
BUILD_ENVIRONMENT: pytorch-macos-10.13-py3-test
|
|
macos:
|
|
xcode: "12.0"
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: ~/workspace
|
|
- run_brew_for_macos_build
|
|
- run:
|
|
name: Test
|
|
no_output_timeout: "1h"
|
|
command: |
|
|
set -e
|
|
export BUILD_LITE_INTERPRETER=1
|
|
export JOB_BASE_NAME=$CIRCLE_JOB
|
|
chmod a+x ${HOME}/project/.ci/pytorch/macos-lite-interpreter-build-test.sh
|
|
unbuffer ${HOME}/project/.ci/pytorch/macos-lite-interpreter-build-test.sh 2>&1 | ts
|
|
- store_test_results:
|
|
path: test/test-reports
|
|
|
|
pytorch_android_gradle_build:
|
|
environment:
|
|
BUILD_ENVIRONMENT: pytorch-linux-xenial-py3-clang5-android-ndk-r19c-gradle-build
|
|
DOCKER_IMAGE: "308535385114.dkr.ecr.us-east-1.amazonaws.com/pytorch/pytorch-linux-xenial-py3-clang5-android-ndk-r19c"
|
|
PYTHON_VERSION: "3.7"
|
|
resource_class: large
|
|
machine:
|
|
image: ubuntu-2004:202104-01
|
|
steps:
|
|
- checkout
|
|
- calculate_docker_image_tag
|
|
- setup_linux_system_environment
|
|
- setup_ci_environment
|
|
- run:
|
|
name: pytorch android gradle build
|
|
no_output_timeout: "1h"
|
|
command: |
|
|
set -eux
|
|
docker_image_commit=${DOCKER_IMAGE}:build-${DOCKER_TAG}-${CIRCLE_SHA1}
|
|
|
|
docker_image_libtorch_android_x86_32=${docker_image_commit}-android-x86_32
|
|
docker_image_libtorch_android_x86_64=${docker_image_commit}-android-x86_64
|
|
docker_image_libtorch_android_arm_v7a=${docker_image_commit}-android-arm-v7a
|
|
docker_image_libtorch_android_arm_v8a=${docker_image_commit}-android-arm-v8a
|
|
|
|
echo "docker_image_commit: "${docker_image_commit}
|
|
echo "docker_image_libtorch_android_x86_32: "${docker_image_libtorch_android_x86_32}
|
|
echo "docker_image_libtorch_android_x86_64: "${docker_image_libtorch_android_x86_64}
|
|
echo "docker_image_libtorch_android_arm_v7a: "${docker_image_libtorch_android_arm_v7a}
|
|
echo "docker_image_libtorch_android_arm_v8a: "${docker_image_libtorch_android_arm_v8a}
|
|
|
|
# x86_32
|
|
time docker pull ${docker_image_libtorch_android_x86_32} >/dev/null
|
|
export id_x86_32=$(docker run --env-file "${BASH_ENV}" -e GRADLE_OFFLINE=1 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -t -d -w /var/lib/jenkins ${docker_image_libtorch_android_x86_32})
|
|
|
|
export COMMAND='((echo "sudo chown -R jenkins workspace") | docker exec -u jenkins -i "$id_x86_32" bash) 2>&1'
|
|
echo ${COMMAND} > ./command.sh && unbuffer bash ./command.sh | ts
|
|
|
|
# arm-v7a
|
|
time docker pull ${docker_image_libtorch_android_arm_v7a} >/dev/null
|
|
export id_arm_v7a=$(docker run --env-file "${BASH_ENV}" --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -t -d -w /var/lib/jenkins ${docker_image_libtorch_android_arm_v7a})
|
|
|
|
export COMMAND='((echo "sudo chown -R jenkins workspace") | docker exec -u jenkins -i "$id_arm_v7a" bash) 2>&1'
|
|
echo ${COMMAND} > ./command.sh && unbuffer bash ./command.sh | ts
|
|
|
|
mkdir -p ~/workspace/build_android_install_arm_v7a
|
|
docker cp $id_arm_v7a:/var/lib/jenkins/workspace/build_android/install ~/workspace/build_android_install_arm_v7a
|
|
|
|
# x86_64
|
|
time docker pull ${docker_image_libtorch_android_x86_64} >/dev/null
|
|
export id_x86_64=$(docker run --env-file "${BASH_ENV}" --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -t -d -w /var/lib/jenkins ${docker_image_libtorch_android_x86_64})
|
|
|
|
export COMMAND='((echo "sudo chown -R jenkins workspace") | docker exec -u jenkins -i "$id_x86_64" bash) 2>&1'
|
|
echo ${COMMAND} > ./command.sh && unbuffer bash ./command.sh | ts
|
|
|
|
mkdir -p ~/workspace/build_android_install_x86_64
|
|
docker cp $id_x86_64:/var/lib/jenkins/workspace/build_android/install ~/workspace/build_android_install_x86_64
|
|
|
|
# arm-v8a
|
|
time docker pull ${docker_image_libtorch_android_arm_v8a} >/dev/null
|
|
export id_arm_v8a=$(docker run --env-file "${BASH_ENV}" --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -t -d -w /var/lib/jenkins ${docker_image_libtorch_android_arm_v8a})
|
|
|
|
export COMMAND='((echo "sudo chown -R jenkins workspace") | docker exec -u jenkins -i "$id_arm_v8a" bash) 2>&1'
|
|
echo ${COMMAND} > ./command.sh && unbuffer bash ./command.sh | ts
|
|
|
|
mkdir -p ~/workspace/build_android_install_arm_v8a
|
|
docker cp $id_arm_v8a:/var/lib/jenkins/workspace/build_android/install ~/workspace/build_android_install_arm_v8a
|
|
|
|
docker cp ~/workspace/build_android_install_arm_v7a $id_x86_32:/var/lib/jenkins/workspace/build_android_install_arm_v7a
|
|
docker cp ~/workspace/build_android_install_x86_64 $id_x86_32:/var/lib/jenkins/workspace/build_android_install_x86_64
|
|
docker cp ~/workspace/build_android_install_arm_v8a $id_x86_32:/var/lib/jenkins/workspace/build_android_install_arm_v8a
|
|
|
|
# run gradle buildRelease
|
|
export COMMAND='((echo "sudo chown -R jenkins workspace && cd workspace && ./.circleci/scripts/build_android_gradle.sh") | docker exec -u jenkins -i "$id_x86_32" bash) 2>&1'
|
|
echo ${COMMAND} > ./command.sh && unbuffer bash ./command.sh | ts
|
|
|
|
mkdir -p ~/workspace/build_android_artifacts
|
|
docker cp $id_x86_32:/var/lib/jenkins/workspace/android/artifacts.tgz ~/workspace/build_android_artifacts/
|
|
|
|
output_image=$docker_image_libtorch_android_x86_32-gradle
|
|
docker commit "$id_x86_32" ${output_image}
|
|
time docker push ${output_image}
|
|
- store_artifacts:
|
|
path: ~/workspace/build_android_artifacts/artifacts.tgz
|
|
destination: artifacts.tgz
|
|
|
|
pytorch_android_publish_snapshot:
|
|
environment:
|
|
BUILD_ENVIRONMENT: pytorch-linux-xenial-py3-clang5-android-ndk-r19c-gradle-publish-snapshot
|
|
DOCKER_IMAGE: "308535385114.dkr.ecr.us-east-1.amazonaws.com/pytorch/pytorch-linux-xenial-py3-clang5-android-ndk-r19c"
|
|
PYTHON_VERSION: "3.7"
|
|
resource_class: large
|
|
machine:
|
|
image: ubuntu-2004:202104-01
|
|
steps:
|
|
- checkout
|
|
- calculate_docker_image_tag
|
|
- setup_linux_system_environment
|
|
- setup_ci_environment
|
|
- run:
|
|
name: pytorch android gradle build
|
|
no_output_timeout: "1h"
|
|
command: |
|
|
set -eux
|
|
docker_image_commit=${DOCKER_IMAGE}:build-${DOCKER_TAG}-${CIRCLE_SHA1}
|
|
|
|
docker_image_libtorch_android_x86_32_gradle=${docker_image_commit}-android-x86_32-gradle
|
|
|
|
echo "docker_image_commit: "${docker_image_commit}
|
|
echo "docker_image_libtorch_android_x86_32_gradle: "${docker_image_libtorch_android_x86_32_gradle}
|
|
|
|
# x86_32
|
|
time docker pull ${docker_image_libtorch_android_x86_32_gradle} >/dev/null
|
|
export id_x86_32=$(docker run --env-file "${BASH_ENV}" --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -t -d -w /var/lib/jenkins ${docker_image_libtorch_android_x86_32_gradle})
|
|
|
|
export COMMAND='((echo "sudo chown -R jenkins workspace" && echo "export BUILD_ENVIRONMENT=${BUILD_ENVIRONMENT}" && echo "export SONATYPE_NEXUS_USERNAME=${SONATYPE_NEXUS_USERNAME}" && echo "export SONATYPE_NEXUS_PASSWORD=${SONATYPE_NEXUS_PASSWORD}" && echo "export ANDROID_SIGN_KEY=${ANDROID_SIGN_KEY}" && echo "export ANDROID_SIGN_PASS=${ANDROID_SIGN_PASS}" && echo "sudo chown -R jenkins workspace && cd workspace && ./.circleci/scripts/publish_android_snapshot.sh") | docker exec -u jenkins -i "$id_x86_32" bash) 2>&1'
|
|
echo ${COMMAND} > ./command.sh && unbuffer bash ./command.sh | ts
|
|
|
|
output_image=${docker_image_libtorch_android_x86_32_gradle}-publish-snapshot
|
|
docker commit "$id_x86_32" ${output_image}
|
|
time docker push ${output_image}
|
|
|
|
pytorch_android_gradle_build-x86_32:
|
|
environment:
|
|
BUILD_ENVIRONMENT: pytorch-linux-xenial-py3-clang5-android-ndk-r19c-gradle-build-only-x86_32
|
|
DOCKER_IMAGE: "308535385114.dkr.ecr.us-east-1.amazonaws.com/pytorch/pytorch-linux-xenial-py3-clang5-android-ndk-r19c"
|
|
PYTHON_VERSION: "3.7"
|
|
resource_class: large
|
|
machine:
|
|
image: ubuntu-2004:202104-01
|
|
steps:
|
|
- checkout
|
|
- calculate_docker_image_tag
|
|
- setup_linux_system_environment
|
|
- checkout
|
|
- setup_ci_environment
|
|
- run:
|
|
name: pytorch android gradle build only x86_32 (for PR)
|
|
no_output_timeout: "1h"
|
|
command: |
|
|
set -e
|
|
docker_image_libtorch_android_x86_32=${DOCKER_IMAGE}:build-${DOCKER_TAG}-${CIRCLE_SHA1}-android-x86_32
|
|
echo "docker_image_libtorch_android_x86_32: "${docker_image_libtorch_android_x86_32}
|
|
|
|
# x86
|
|
time docker pull ${docker_image_libtorch_android_x86_32} >/dev/null
|
|
export id=$(docker run --env-file "${BASH_ENV}" --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -t -d -w /var/lib/jenkins ${docker_image_libtorch_android_x86_32})
|
|
|
|
export COMMAND='((echo "export BUILD_ENVIRONMENT=${BUILD_ENVIRONMENT}" && echo "export GRADLE_OFFLINE=1" && echo "sudo chown -R jenkins workspace && cd workspace && ./.circleci/scripts/build_android_gradle.sh") | docker exec -u jenkins -i "$id" bash) 2>&1'
|
|
echo ${COMMAND} > ./command.sh && unbuffer bash ./command.sh | ts
|
|
|
|
mkdir -p ~/workspace/build_android_x86_32_artifacts
|
|
docker cp $id:/var/lib/jenkins/workspace/android/artifacts.tgz ~/workspace/build_android_x86_32_artifacts/
|
|
|
|
output_image=${docker_image_libtorch_android_x86_32}-gradle
|
|
docker commit "$id" ${output_image}
|
|
time docker push ${output_image}
|
|
- store_artifacts:
|
|
path: ~/workspace/build_android_x86_32_artifacts/artifacts.tgz
|
|
destination: artifacts.tgz
|
|
|
|
pytorch_ios_build:
|
|
<<: *pytorch_ios_params
|
|
macos:
|
|
xcode: "12.5.1"
|
|
steps:
|
|
- run:
|
|
name: checkout with retry
|
|
command: |
|
|
checkout() {
|
|
set -ex
|
|
# Workaround old docker images with incorrect $HOME
|
|
# check https://github.com/docker/docker/issues/2968 for details
|
|
if [ "${HOME}" = "/" ]
|
|
then
|
|
export HOME=$(getent passwd $(id -un) | cut -d: -f6)
|
|
fi
|
|
|
|
mkdir -p ~/.ssh
|
|
|
|
echo 'github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
|
|
' >> ~/.ssh/known_hosts
|
|
|
|
# use git+ssh instead of https
|
|
git config --global url."ssh://git@github.com".insteadOf "https://github.com" || true
|
|
git config --global gc.auto 0 || true
|
|
|
|
echo 'Cloning git repository'
|
|
mkdir -p '/Users/distiller/project'
|
|
cd '/Users/distiller/project'
|
|
git clone "$CIRCLE_REPOSITORY_URL" .
|
|
echo 'Checking out branch'
|
|
git checkout --force -B "$CIRCLE_BRANCH" "$CIRCLE_SHA1"
|
|
git --no-pager log --no-color -n 1 --format='HEAD is now at %h %s'
|
|
}
|
|
|
|
retry () {
|
|
$* || (sleep 1 && $*) || (sleep 2 && $*) || (sleep 4 && $*) || (sleep 8 && $*)
|
|
}
|
|
retry checkout
|
|
- run_brew_for_ios_build
|
|
- run:
|
|
name: Setup Fastlane
|
|
no_output_timeout: "1h"
|
|
command: |
|
|
set -e
|
|
PROJ_ROOT=/Users/distiller/project
|
|
cd ${PROJ_ROOT}/ios/TestApp
|
|
# install fastlane
|
|
sudo gem install bundler && bundle install
|
|
- run:
|
|
name: Build
|
|
no_output_timeout: "1h"
|
|
command: |
|
|
set -e
|
|
WORKSPACE=/Users/distiller/workspace
|
|
PROJ_ROOT=/Users/distiller/project
|
|
export TCLLIBPATH="/usr/local/lib"
|
|
|
|
# Install conda
|
|
curl --retry 3 -o ~/conda.sh https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-MacOSX-x86_64.sh
|
|
chmod +x ~/conda.sh
|
|
/bin/bash ~/conda.sh -b -p ~/anaconda
|
|
export PATH="~/anaconda/bin:${PATH}"
|
|
source ~/anaconda/bin/activate
|
|
|
|
# Install dependencies
|
|
retry () {
|
|
$* || (sleep 1 && $*) || (sleep 2 && $*) || (sleep 4 && $*) || (sleep 8 && $*)
|
|
}
|
|
|
|
retry conda install numpy ninja pyyaml mkl mkl-include setuptools cmake requests typing-extensions --yes
|
|
|
|
# sync submodules
|
|
cd ${PROJ_ROOT}
|
|
git submodule sync
|
|
git submodule update --init --recursive --depth 1 --jobs 0
|
|
|
|
# export
|
|
export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
|
|
|
|
# run build script
|
|
chmod a+x ${PROJ_ROOT}/scripts/build_ios.sh
|
|
echo "IOS_ARCH: ${IOS_ARCH}"
|
|
echo "IOS_PLATFORM: ${IOS_PLATFORM}"
|
|
echo "USE_PYTORCH_METAL": "${USE_METAL}"
|
|
echo "BUILD_LITE_INTERPRETER": "${BUILD_LITE_INTERPRETER}"
|
|
echo "USE_COREML_DELEGATE": "${USE_COREML_DELEGATE}"
|
|
|
|
#check the custom build flag
|
|
echo "SELECTED_OP_LIST: ${SELECTED_OP_LIST}"
|
|
if [ -n "${SELECTED_OP_LIST}" ]; then
|
|
export SELECTED_OP_LIST="${PROJ_ROOT}/ios/TestApp/custom_build/${SELECTED_OP_LIST}"
|
|
fi
|
|
export IOS_ARCH=${IOS_ARCH}
|
|
export IOS_PLATFORM=${IOS_PLATFORM}
|
|
export USE_COREML_DELEGATE=${USE_COREML_DELEGATE}
|
|
if [ ${IOS_PLATFORM} != "SIMULATOR" ]; then
|
|
export USE_PYTORCH_METAL=${USE_METAL}
|
|
fi
|
|
unbuffer ${PROJ_ROOT}/scripts/build_ios.sh 2>&1 | ts
|
|
- run:
|
|
name: Run Build Test
|
|
no_output_timeout: "30m"
|
|
command: |
|
|
set -e
|
|
PROJ_ROOT=/Users/distiller/project
|
|
# run the ruby build script
|
|
if ! [ -x "$(command -v xcodebuild)" ]; then
|
|
echo 'Error: xcodebuild is not installed.'
|
|
exit 1
|
|
fi
|
|
ruby ${PROJ_ROOT}/scripts/xcode_build.rb -i ${PROJ_ROOT}/build_ios/install -x ${PROJ_ROOT}/ios/TestApp/TestApp.xcodeproj -p ${IOS_PLATFORM}
|
|
if ! [ "$?" -eq "0" ]; then
|
|
echo 'xcodebuild failed!'
|
|
exit 1
|
|
fi
|
|
- run:
|
|
name: Run Simulator Tests
|
|
no_output_timeout: "2h"
|
|
command: |
|
|
set -e
|
|
if [ ${IOS_PLATFORM} != "SIMULATOR" ]; then
|
|
echo "not SIMULATOR build, skip it."
|
|
exit 0
|
|
fi
|
|
WORKSPACE=/Users/distiller/workspace
|
|
PROJ_ROOT=/Users/distiller/project
|
|
source ~/anaconda/bin/activate
|
|
# use the pytorch nightly build to generate models
|
|
pip3 install --pre torch torchvision torchaudio -f https://download.pytorch.org/whl/nightly/cpu/torch_nightly.html
|
|
# generate models for differnet backends
|
|
cd ${PROJ_ROOT}/ios/TestApp/benchmark
|
|
mkdir -p ../models
|
|
if [ ${USE_COREML_DELEGATE} == 1 ]; then
|
|
pip install coremltools==5.0b5 protobuf==3.20.1
|
|
python coreml_backend.py
|
|
else
|
|
cd "${PROJ_ROOT}"
|
|
python test/mobile/model_test/gen_test_model.py ios-test
|
|
fi
|
|
cd "${PROJ_ROOT}/ios/TestApp/benchmark"
|
|
if [ ${BUILD_LITE_INTERPRETER} == 1 ]; then
|
|
echo "Setting up the TestApp for LiteInterpreter"
|
|
ruby setup.rb --lite 1
|
|
else
|
|
echo "Setting up the TestApp for Full JIT"
|
|
ruby setup.rb
|
|
fi
|
|
cd "${PROJ_ROOT}/ios/TestApp"
|
|
# instruments -s -devices
|
|
if [ "${BUILD_LITE_INTERPRETER}" == 1 ]; then
|
|
if [ "${USE_COREML_DELEGATE}" == 1 ]; then
|
|
fastlane scan --only_testing TestAppTests/TestAppTests/testCoreML
|
|
else
|
|
fastlane scan --only_testing TestAppTests/TestAppTests/testLiteInterpreter
|
|
fi
|
|
else
|
|
fastlane scan --only_testing TestAppTests/TestAppTests/testFullJIT
|
|
fi
|
|
pytorch_linux_bazel_build:
|
|
<<: *pytorch_params
|
|
machine:
|
|
image: ubuntu-2004:202104-01
|
|
steps:
|
|
- checkout
|
|
- calculate_docker_image_tag
|
|
- setup_linux_system_environment
|
|
- setup_ci_environment
|
|
- run:
|
|
name: Bazel Build
|
|
no_output_timeout: "1h"
|
|
command: |
|
|
set -e
|
|
# Pull Docker image and run build
|
|
echo "DOCKER_IMAGE: "${DOCKER_IMAGE}:${DOCKER_TAG}
|
|
time docker pull ${DOCKER_IMAGE}:${DOCKER_TAG} >/dev/null
|
|
export id=$(docker run --env-file "${BASH_ENV}" --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -t -d -w /var/lib/jenkins ${DOCKER_IMAGE}:${DOCKER_TAG})
|
|
|
|
echo "Do NOT merge main branch into $CIRCLE_BRANCH in environment $BUILD_ENVIRONMENT"
|
|
|
|
git submodule sync && git submodule update -q --init --recursive --depth 1 --jobs 0
|
|
|
|
docker cp /home/circleci/project/. $id:/var/lib/jenkins/workspace
|
|
|
|
export COMMAND='((echo "sudo chown -R jenkins workspace && cd workspace && .ci/pytorch/build.sh") | docker exec -u jenkins -i "$id" bash) 2>&1'
|
|
|
|
echo ${COMMAND} > ./command.sh && unbuffer bash ./command.sh | ts
|
|
|
|
# Push intermediate Docker image for next phase to use
|
|
if [ -z "${BUILD_ONLY}" ]; then
|
|
# Augment our output image name with bazel to avoid collisions
|
|
output_image=${DOCKER_IMAGE}:build-${DOCKER_TAG}-bazel-${CIRCLE_SHA1}
|
|
export COMMIT_DOCKER_IMAGE=$output_image
|
|
docker commit "$id" ${COMMIT_DOCKER_IMAGE}
|
|
time docker push ${COMMIT_DOCKER_IMAGE}
|
|
fi
|
|
|
|
pytorch_linux_bazel_test:
|
|
<<: *pytorch_params
|
|
machine:
|
|
image: ubuntu-2004:202104-01
|
|
steps:
|
|
- checkout
|
|
- calculate_docker_image_tag
|
|
- setup_linux_system_environment
|
|
- setup_ci_environment
|
|
- run:
|
|
name: Test
|
|
no_output_timeout: "90m"
|
|
command: |
|
|
set -e
|
|
output_image=${DOCKER_IMAGE}:build-${DOCKER_TAG}-bazel-${CIRCLE_SHA1}
|
|
export COMMIT_DOCKER_IMAGE=$output_image
|
|
echo "DOCKER_IMAGE: "${COMMIT_DOCKER_IMAGE}
|
|
|
|
time docker pull ${COMMIT_DOCKER_IMAGE} >/dev/null
|
|
|
|
if [ -n "${USE_CUDA_DOCKER_RUNTIME}" ]; then
|
|
export id=$(docker run --env-file "${BASH_ENV}" --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --gpus all -t -d -w /var/lib/jenkins ${COMMIT_DOCKER_IMAGE})
|
|
else
|
|
export id=$(docker run --env-file "${BASH_ENV}" --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -t -d -w /var/lib/jenkins ${COMMIT_DOCKER_IMAGE})
|
|
fi
|
|
|
|
retrieve_test_reports() {
|
|
echo "retrieving test reports"
|
|
docker cp -L $id:/var/lib/jenkins/workspace/bazel-testlogs ./ || echo 'No test reports found!'
|
|
}
|
|
trap "retrieve_test_reports" ERR
|
|
|
|
if [[ ${BUILD_ENVIRONMENT} == *"multigpu"* ]]; then
|
|
export COMMAND='((echo "sudo chown -R jenkins workspace && cd workspace && .ci/pytorch/multigpu-test.sh") | docker exec -u jenkins -i "$id" bash) 2>&1'
|
|
else
|
|
export COMMAND='((echo "sudo chown -R jenkins workspace && cd workspace && .ci/pytorch/test.sh") | docker exec -u jenkins -i "$id" bash) 2>&1'
|
|
fi
|
|
echo ${COMMAND} > ./command.sh && unbuffer bash ./command.sh | ts
|
|
|
|
retrieve_test_reports
|
|
docker stats --all --no-stream
|
|
- store_test_results:
|
|
path: bazel-testlogs
|
|
|
|
pytorch_windows_test_multigpu:
|
|
machine:
|
|
image: ubuntu-2004:202104-01
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Test
|
|
no_output_timeout: "90m"
|
|
command: |
|
|
set -e
|
|
python3 -m pip install requests
|
|
python3 ./.circleci/scripts/trigger_azure_pipeline.py
|