name: Build for M1 on: pull_request: paths: - .github/workflows/build-m1-binaries.yml push: branches: - nightly - release/* tags: # NOTE: Binary build pipelines should only get triggered on release candidate builds # Release candidate tags look like: v1.11.0-rc1 - v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+ workflow_dispatch: env: CHANNEL: "nightly" jobs: build_wheels: name: "Build TorchAudio M1 wheels" runs-on: macos-m1-12 strategy: matrix: py_vers: [ "3.8", "3.9", "3.10" ] steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set CHANNEL (only for tagged pushes) if: ${{ github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/') }} run: | # reference ends with an RC suffix if [[ ${GITHUB_REF_NAME} = *-rc[0-9]* ]]; then echo "CHANNEL=test" >> "$GITHUB_ENV" fi - name: Set Release CHANNEL (for release) if: ${{ (github.event_name == 'pull_request' && startsWith(github.base_ref, 'release')) || startsWith(github.ref, 'refs/heads/release') }} run: | echo "CHANNEL=test" >> "$GITHUB_ENV" - name: Setup miniconda uses: pytorch/test-infra/.github/actions/setup-miniconda@main - name: Build TorchAudio M1 wheel shell: arch -arch arm64 bash {0} env: ENV_NAME: conda-env-${{ github.run_id }} PY_VERS: ${{ matrix.py_vers }} CU_VERSION: cpu USE_FFMPEG: true USE_OPENMP: false USE_CUDA: false # Needed so that delocate puts files in places it can actually modify TMPDIR: ${{ runner.temp }} run: | set -ex . packaging/pkg_helpers.bash # if we are uploading to test channell, our version consist only of the base: 0.x.x - no date string or suffix added if [[ $CHANNEL == "test" ]]; then setup_base_build_version else setup_build_version fi git submodule update --init --recursive export SOURCE_ROOT_DIR=$(pwd) export FFMPEG_ROOT="${SOURCE_ROOT_DIR}/third_party/ffmpeg" . packaging/ffmpeg/build.sh conda create -yp ${ENV_NAME} python=${PY_VERS} numpy cmake ninja wheel pkg-config conda run -p ${ENV_NAME} python3 -mpip install torch --pre --extra-index-url=https://download.pytorch.org/whl/${CHANNEL} 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 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: | 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/${CHANNEL} 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 torchaudio;print('torchaudio version is ', torchaudio.__version__)" conda run --cwd /tmp -p ${ENV_NAME} python3 -c "import torch;import torchaudio;torchaudio.set_audio_backend('sox_io')" conda env remove -p ${ENV_NAME} - name: Upload wheel to GitHub uses: actions/upload-artifact@v3 with: name: torchaudio-py${{ matrix.py_vers }}-macos11-m1 path: dist/ - name: Upload wheel to S3 if: ${{ github.event_name == 'push' && (github.event.ref == 'refs/heads/nightly' || startsWith(github.event.ref, 'refs/tags/')) }} 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 }} run: | for pkg in dist/*; do aws s3 cp "$pkg" "s3://pytorch/whl/${CHANNEL}/cpu/" --acl public-read done build_conda: name: "Build TorchAudio M1 conda packages" runs-on: macos-m1-12 strategy: matrix: py_vers: [ "3.8", "3.9", "3.10" ] steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set CHANNEL (only for tagged pushes) if: ${{ github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/') }} run: | # reference ends with an RC suffix if [[ ${GITHUB_REF_NAME} = *-rc[0-9]* ]]; then echo "CHANNEL=test" >> "$GITHUB_ENV" fi - name: Set Release CHANNEL (for release) if: ${{ (github.event_name == 'pull_request' && startsWith(github.base_ref, 'release')) || startsWith(github.ref, 'refs/heads/release') }} run: | echo "CHANNEL=test" >> "$GITHUB_ENV" - name: Setup miniconda uses: pytorch/test-infra/.github/actions/setup-miniconda@main - name: Install conda-build and purge previous artifacts shell: arch -arch arm64 bash {0} run: | conda install -yq conda-build conda build purge-all - name: Build TorchAudio M1 conda package shell: arch -arch arm64 bash {0} env: ENV_NAME: conda-env-${{ github.run_id }} PY_VERS: ${{ matrix.py_vers }} CU_VERSION: cpu USE_FFMPEG: true USE_OPENMP: false USE_CUDA: false run: | set -ex . packaging/pkg_helpers.bash export CONDA_CHANNEL_FLAGS="" if [[ $CHANNEL == "test" ]]; then setup_cuda setup_base_build_version export CONDA_CHANNEL_FLAGS="-c pytorch-test" setup_macos else setup_cuda setup_build_version setup_macos fi export PYTORCH_VERSION="$(conda run -p ${ENV_NAME} python3 -mpip show torch | grep ^Version: | sed 's/Version: *//')" git submodule update --init --recursive export SOURCE_ROOT_DIR=$(pwd) export FFMPEG_ROOT="${SOURCE_ROOT_DIR}/third_party/ffmpeg" . packaging/ffmpeg/build.sh setup_conda_pytorch_constraint setup_conda_cudatoolkit_constraint setup_visual_studio_constraint conda build \ -c defaults \ $CONDA_CHANNEL_FLAGS \ --no-anaconda-upload \ --python "$PY_VERS" \ --output-folder=dist/ \ packaging/torchaudio - name: Upload package to GitHub uses: actions/upload-artifact@v3 with: name: torchaudio-py${{ matrix.py_vers }}-macos11-m1-conda path: dist/ - name: Upload package to conda if: ${{ github.event_name == 'push' && (github.event.ref == 'refs/heads/nightly' || startsWith(github.event.ref, 'refs/tags/')) }} shell: arch -arch arm64 bash {0} env: CONDA_PYTORCHBOT_TOKEN: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }} run: | conda install -yq anaconda-client set -x export ANACONDA_PATH=$(conda info --base)/bin $ANACONDA_PATH/anaconda -t "${CONDA_PYTORCHBOT_TOKEN}" upload dist/osx-arm64/*.tar.bz2 -u "pytorch-${CHANNEL}" --label main --no-progress --force concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}-${{ github.event_name == 'workflow_dispatch' }} cancel-in-progress: true