Skip to content

Build rocm wheels

Build rocm wheels #454

Workflow file for this run

name: conda
on:
workflow_dispatch: {}
pull_request:
paths:
- "packaging/**"
- ".github/workflows/conda.yml"
- "setup.py"
- "requirements*.txt"
push:
branches:
- main
tags:
- "v[0-9]+*"
# this yaml file can be cleaned up using yaml anchors, but they're not supported in github actions yet
# https://github.com/actions/runner/issues/1182
env:
MAX_JOBS: 3 # Avoids OOMs
XFORMERS_BUILD_TYPE: "Release"
XFORMERS_PACKAGE_FROM: "conda-${{ github.ref_name }}"
# https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: "true"
jobs:
build:
strategy:
fail-fast: false
matrix:
python:
- "3.9"
- "3.10"
config:
- torch_version: "2.4.0"
torch_channel: "pytorch"
cuda_version: "12.1.0"
cuda_dep_runtime: ">=12.0,<13.0"
cuda_short_version: "121"
- torch_version: "2.4.0"
torch_channel: "pytorch"
cuda_version: "11.8.0"
cuda_dep_runtime: ">=11.7,<11.9"
cuda_short_version: "118"
name: py${{ matrix.python }}-torch${{ matrix.config.torch_version }}-cu${{ matrix.config.cuda_version }}
runs-on: 8-core-ubuntu # 32GB RAM, 8 vCPUs
container:
image: pytorch/conda-builder:cuda${{ matrix.config.cuda_short_version }}
env:
# alias for the current python version
PY: /opt/conda/bin/python
# you need at least cuda 5.0 for some of the stuff compiled here.
TORCH_CUDA_ARCH_LIST: ${{ join('6.0+PTX 7.0 7.5 8.0+PTX', fromJSON(inputs.cuda_short_version) >= 118 && ' 9.0a' || '') }}
timeout-minutes: 360
defaults:
run:
shell: bash
steps:
- name: System info
run: |
pwd
df -h
ldd --version
$PY --version
echo "Memory and swap:"
free -h
echo
swapon --show
- name: Set tag = 'dev'
run: echo "XFORMERS_CONDA_TAG=dev" >> $GITHUB_ENV
- name: Set tag = 'main'
if: startsWith(github.ref, 'refs/tags/v')
run: echo "XFORMERS_CONDA_TAG=main" >> $GITHUB_ENV
- run: echo "${XFORMERS_CONDA_TAG}"
- name: Free up disk space
run: |
df -h /
sudo rm -rf /__t/Python /__t/CodeQL /__t/go /__t/Python /__t/PyPy /__t/node
sudo rm -rf /opt/conda/pkgs
df -h /
- name: Recursive checkout
uses: actions/checkout@v3
with:
submodules: recursive
path: "."
fetch-depth: 0 # for tags
- name: Define version
env:
VERSION_SOURCE: ${{ github.ref_type == 'tag' && 'tag' || 'dev' }}
run: |
set -Eeuo pipefail
git config --global --add safe.directory "$(pwd)"
git rev-parse --short HEAD
$PY -m pip install packaging
version=`$PY packaging/compute_wheel_version.py --source $VERSION_SOURCE`
echo "BUILD_VERSION=$version" >> ${GITHUB_ENV}
cat ${GITHUB_ENV}
- name: Build & store/upload
env:
# NOTE: Ternary operator: ${{ cond && 'trueVal' || 'falseVal' }}
STORE_PT_PACKAGE: ${{ matrix.config.torch_channel != 'pytorch' && '--store-pytorch-package' || '' }}
run: |
$PY packaging/build_conda.py \
--cuda ${{ matrix.config.cuda_version }} \
--python ${{ matrix.python }} \
--pytorch ${{ matrix.config.torch_version }} \
--pytorch-channel ${{ matrix.config.torch_channel }} \
--cuda-dep-runtime "${{ matrix.config.cuda_dep_runtime }}" \
--store $STORE_PT_PACKAGE
- name: Upload
if: github.repository == 'facebookresearch/xformers' && github.event_name != 'pull_request' && matrix.config.torch_channel == 'pytorch'
env:
ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
run: |
# This might fail, let's retry it multiple times
for i in {1..20}
do
[[ $i != 1 ]] && sleep 15
echo "Attempt $i"
anaconda upload --user xformers --label ${XFORMERS_CONDA_TAG} packages/* && break
done
- uses: actions/upload-artifact@v3
if: success() || failure()
with:
name: linux-py${{ matrix.python }}-torch${{ matrix.config.torch_version }}
path: packages
# Note: it might be helpful to have additional steps that test if the built wheels actually work