name: Build on M1 on: pull_request: paths: - .github/workflows/build-m1-binaries.yml push: branches: - nightly workflow_dispatch: jobs: build_wheels: name: "Build TorchVision M1 wheels" runs-on: macos-m1 strategy: matrix: py_vers: [ "3.8", "3.9", "3.10" ] steps: - name: Checkout repository uses: actions/checkout@v2 - name: Build TorchVision M1 wheel shell: arch -arch arm64 bash {0} env: ENV_NAME: conda-env-${{ github.run_id }} PY_VERS: ${{ matrix.py_vers }} run: | . ~/miniconda3/etc/profile.d/conda.sh # Needed for JPEG library detection as setup.py detects conda presence by running `shlex.which('conda')` export PATH=~/miniconda3/bin:$PATH set -ex . packaging/pkg_helpers.bash setup_build_version WHL_NAME=torchvision-${BUILD_VERSION}-cp${PY_VERS/.}-cp${PY_VERS/.}-macosx_11_0_arm64.whl conda create -yp ${ENV_NAME} python=${PY_VERS} numpy libpng "jpeg<=9b" wheel pkg-config conda run -p ${ENV_NAME} python3 -mpip install torch --pre --extra-index-url=https://download.pytorch.org/whl/nightly conda run -p ${ENV_NAME} python3 -mpip install delocate conda run -p ${ENV_NAME} python3 setup.py bdist_wheel export PYTORCH_VERSION="$(conda run -p ${ENV_NAME} python3 -mpip show torch | grep ^Version: | sed 's/Version: *//')" conda run -p ${ENV_NAME} DYLD_FALLBACK_LIBRARY_PATH="${ENV_NAME}/lib" delocate-wheel -v --ignore-missing-dependencies dist/${WHL_NAME} conda env remove -p ${ENV_NAME} - name: Test wheel shell: arch -arch arm64 bash {0} env: ENV_NAME: conda-test-env-${{ github.run_id }} PY_VERS: ${{ matrix.py_vers }} run: | . ~/miniconda3/etc/profile.d/conda.sh set -ex conda create -yp ${ENV_NAME} python=${PY_VERS} numpy conda run -p ${ENV_NAME} python3 -mpip install torch --pre --extra-index-url=https://download.pytorch.org/whl/nightly conda run -p ${ENV_NAME} python3 -mpip install dist/*.whl # Test torch is importable, by changing cwd and running import commands conda run --cwd /tmp -p ${ENV_NAME} python3 -c "import torchvision;print('torchvision version is ', torchvision.__version__)" conda run --cwd /tmp -p ${ENV_NAME} python3 -c "import torch;import torchvision;print('Is torchvision useable?', all(x is not None for x in [torch.ops.image.decode_png, torch.ops.torchvision.roi_align]))" conda run --cwd /tmp -p ${ENV_NAME} python3 -c "import torchvision;print(torchvision.io.read_image('${PWD}/gallery/assets/dog1.jpg').shape)" conda env remove -p ${ENV_NAME} - name: Upload wheel to GitHub uses: actions/upload-artifact@v3 with: name: torchvision-py${{ matrix.py_vers }}-macos11-m1 path: dist/ - name: Upload wheel to S3 shell: arch -arch arm64 bash {0} env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }} CHANNEL: nightly run: | for pkg in dist/*; do aws s3 cp "$pkg" "s3://pytorch/whl/${CHANNEL}/cpu/" --acl public-read done