sta pypi test #42
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build wheels and deploy | |
on: | |
push: | |
branches: | |
- you-pypi-packaging-1 # Runs only when pushing to main | |
paths: | |
- "csrc/sliding_tile_attention/setup.py" | |
jobs: | |
check-version-change: | |
runs-on: ubuntu-latest | |
outputs: | |
version-changed: ${{ steps.check-version.outputs.changed }} | |
new-version: ${{ steps.check-version.outputs.new-version }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 2 | |
- name: Check if version changed | |
id: check-version | |
run: | | |
cd csrc/sliding_tile_attention | |
# Get current commit's version | |
NEW_VERSION=$(grep -oP 'VERSION\s*=\s*"\K[^"]+' setup.py) | |
echo "New version: $NEW_VERSION" | |
# Get previous version from git history | |
OLD_VERSION=$(git show HEAD~1:./setup.py | grep -oP 'VERSION\s*=\s*"\K[^"]+' || echo "0.0.0") | |
echo "Old version: $OLD_VERSION" | |
if [ "$NEW_VERSION" != "$OLD_VERSION" ]; then | |
echo "Version changed from $OLD_VERSION to $NEW_VERSION" | |
echo "changed=true" >> $GITHUB_OUTPUT | |
echo "new-version=$NEW_VERSION" >> $GITHUB_OUTPUT | |
else | |
echo "Version did not change" | |
echo "changed=false" >> $GITHUB_OUTPUT | |
fi | |
publish_package: | |
name: Publish package | |
needs: check-version-change | |
# needs: [build_wheels] | |
if: needs.check-version-change.outputs.version-changed == 'true' | |
runs-on: ubuntu-22.04 | |
permissions: | |
id-token: write # Needed for OIDC Trusted Publishing | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
- name: Install CUDA 12.4.1 | |
uses: Jimver/[email protected] | |
id: cuda-toolkit | |
with: | |
cuda: 12.4.1 | |
linux-local-args: '["--toolkit"]' | |
method: 'network' | |
sub-packages: '["nvcc"]' | |
- name: Install dependencies (GCC, Clang, CUDA Paths, Git) | |
run: | | |
sudo apt update | |
sudo apt install -y git patchelf gcc-11 g++-11 clang-11 | |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 --slave /usr/bin/g++ g++ /usr/bin/g++-11 | |
# Allow Git to Access Safe Directory | |
git config --global --add safe.directory /__w/FastVideo/FastVideo | |
# Set CUDA environment variables | |
export CUDA_HOME=/usr/local/cuda-12.4.1 | |
export PATH=${CUDA_HOME}/bin:${PATH} | |
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:$LD_LIBRARY_PATH | |
# Verify installation | |
gcc --version | |
g++ --version | |
clang-11 --version | |
nvcc --version | |
- name: Install PyTorch 2.5.1+cu12.4.1 | |
run: | | |
pip install --upgrade pip | |
# With python 3.13 and torch 2.5.1, unless we update typing-extensions, we get error | |
# AttributeError: attribute '__default__' of 'typing.ParamSpec' objects is not writable | |
pip install typing-extensions==4.12.2 | |
# We want to figure out the CUDA version to download pytorch | |
# e.g. we can have system CUDA version being 11.7 but if torch==1.12 then we need to download the wheel from cu116 | |
# see https://github.com/pytorch/pytorch/blob/main/RELEASE.md#release-compatibility-matrix | |
export TORCH_CUDA_VERSION=124 | |
pip install --no-cache-dir torch==2.5.1 --index-url https://download.pytorch.org/whl/cu${TORCH_CUDA_VERSION} | |
nvcc --version | |
python --version | |
python -c "import torch; print('PyTorch:', torch.__version__)" | |
python -c "import torch; print('CUDA:', torch.version.cuda)" | |
python -c "from torch.utils import cpp_extension; print (cpp_extension.CUDA_HOME)" | |
- name: Build source distribution | |
run: | | |
# We want setuptools >= 49.6.0 otherwise we can't compile the extension if system CUDA version is 11.7 and pytorch cuda version is 11.6 | |
# https://github.com/pytorch/pytorch/blob/664058fa83f1d8eede5d66418abff6e20bd76ca8/torch/utils/cpp_extension.py#L810 | |
# However this still fails so I'm using a newer version of setuptools | |
pip install setuptools | |
pip install ninja packaging wheel | |
cd csrc/sliding_tile_attention # Move into the correct folder | |
git submodule update --init --recursive tk # Ensure ThunderKittens submodule is initialized | |
python setup.py sdist --dist-dir=dist | |
- name: Publish release distributions to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
packages-dir: csrc/sliding_tile_attention/dist/ | |
build_wheels: | |
name: Build Wheel | |
needs: publish_package | |
# needs: check-version-change | |
if: needs.check-version-change.outputs.version-changed == 'true' | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
# Using ubuntu-20.04 instead of 22.04 for more compatibility (glibc). Ideally we'd use the | |
# manylinux docker image, but I haven't figured out how to install CUDA on manylinux. | |
os: [ubuntu-22.04] | |
python-version: ['3.10', '3.11', '3.12', '3.13'] | |
torch-version: ['2.5.1', '2.6.0'] | |
cuda-version: ['12.4.1', '12.5.1', '12.6.3'] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install CUDA ${{ matrix.cuda-version }} | |
uses: Jimver/[email protected] | |
id: cuda-toolkit | |
with: | |
cuda: ${{ matrix.cuda-version }} | |
linux-local-args: '["--toolkit"]' | |
method: 'network' | |
- name: Install dependencies (GCC, Clang, CUDA Paths, Git) | |
run: | | |
sudo apt update | |
sudo apt install -y git patchelf gcc-11 g++-11 clang-11 | |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 --slave /usr/bin/g++ g++ /usr/bin/g++-11 | |
# Allow Git to Access Safe Directory | |
git config --global --add safe.directory /__w/FastVideo/FastVideo | |
# Set CUDA environment variables | |
export CUDA_HOME=/usr/local/cuda-${{ matrix.cuda-version }} | |
export PATH=${CUDA_HOME}/bin:${PATH} | |
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:$LD_LIBRARY_PATH | |
# Verify installation | |
gcc --version | |
g++ --version | |
clang-11 --version | |
nvcc --version | |
- name: Install PyTorch ${{ matrix.torch-version }}+cu${{ matrix.cuda-version }} | |
run: | | |
pip install --upgrade pip | |
# With python 3.13 and torch 2.5.1, unless we update typing-extensions, we get error | |
# AttributeError: attribute '__default__' of 'typing.ParamSpec' objects is not writable | |
pip install typing-extensions==4.12.2 | |
# We want to figure out the CUDA version to download pytorch | |
# e.g. we can have system CUDA version being 11.7 but if torch==1.12 then we need to download the wheel from cu116 | |
# see https://github.com/pytorch/pytorch/blob/main/RELEASE.md#release-compatibility-matrix | |
export TORCH_CUDA_VERSION=124 | |
pip install --no-cache-dir torch==${{ matrix.torch-version }} --index-url https://download.pytorch.org/whl/cu${TORCH_CUDA_VERSION} | |
nvcc --version | |
python --version | |
python -c "import torch; print('PyTorch:', torch.__version__)" | |
python -c "import torch; print('CUDA:', torch.version.cuda)" | |
python -c "from torch.utils import cpp_extension; print (cpp_extension.CUDA_HOME)" | |
- name: Build wheel | |
run: | | |
# We want setuptools >= 49.6.0 otherwise we can't compile the extension if system CUDA version is 11.7 and pytorch cuda version is 11.6 | |
# https://github.com/pytorch/pytorch/blob/664058fa83f1d8eede5d66418abff6e20bd76ca8/torch/utils/cpp_extension.py#L810 | |
# However this still fails so I'm using a newer version of setuptools | |
pip install setuptools | |
pip install ninja packaging wheel | |
cd csrc/sliding_tile_attention # Move into the correct folder | |
git submodule update --init --recursive tk # Ensure ThunderKittens submodule is initialized | |
python setup.py bdist_wheel --dist-dir=dist | |
- name: Rename wheel file | |
run: | | |
cd csrc/sliding_tile_attention | |
CUDA_SHORT_VERSION=$(echo ${{ matrix.cuda-version }} | cut -d. -f1,2 | sed 's/\.//g') | |
TORCH_SHORT_VERSION=$(echo ${{ matrix.torch-version }} | cut -d. -f1,2) | |
# Get the correct version format | |
tmpname=cu${CUDA_SHORT_VERSION}torch${TORCH_SHORT_VERSION} | |
wheel_name=$(ls dist/*whl | xargs -n 1 basename | sed "s/-/+$tmpname-/2") | |
# Rename with version information | |
ls dist/*whl |xargs -I {} mv {} dist/${wheel_name} | |
echo "wheel_name=${wheel_name}" >> $GITHUB_ENV | |
- name: Upload wheel artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.wheel_name }} | |
path: csrc/sliding_tile_attention/dist/*.whl | |
retention-days: 1 |