Skip to content

Commit

Permalink
try no conda
Browse files Browse the repository at this point in the history
  • Loading branch information
bottler committed Oct 23, 2024
1 parent f411e81 commit 9a8c4c9
Show file tree
Hide file tree
Showing 2 changed files with 166 additions and 6 deletions.
158 changes: 158 additions & 0 deletions .github/actions/setup-env-build/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
name: Install env + build
inputs:
arch:
description: 'GPU architecture'
required: true
python:
description: 'Python version'
required: false
default: "3.11"
cuda:
description: 'CUDA version'
required: false
default: "11.8"
pytorch_version:
description: 'PyTorch version'
default: "2"
pytorch_channel:
description: 'PyTorch channel on conda'
default: "pytorch"

runs:
using: composite
steps:
- name: Cleanup
shell: bash
run: rm -f ~/.profile ~/.bashrc
- id: prepare_conda_env_paths
shell: python
run: |
import os
import subprocess
import hashlib
import glob
import datetime
from pathlib import Path
CONDA_INSTALL_CMD = "micromamba create python=${{ inputs.python }} zlib pip ninja pytorch=${{ inputs.pytorch_version }} ccache=4.8 pytorch-mutex==1.0=cuda pytorch-cuda=${{ inputs.cuda }} -c ${{ inputs.pytorch_channel }} -c nvidia -c conda-forge -q -y"
conda_env_key = CONDA_INSTALL_CMD
for file in sorted(glob.glob("requirement*.txt")):
conda_env_key += f"\n########## {file}\n"
conda_env_key += Path(file).read_text()
if "${{ inputs.pytorch_channel }}" != "pytorch":
# Nightly or Test, update every week
conda_env_key += datetime.date.today().strftime("%Y-week%W") + "\n"
conda_env_hash = hashlib.sha224(conda_env_key.encode("ascii")).hexdigest()[:8]
shared_dir = os.environ.get("GHRUNNER_SHARED_DIR", os.getcwd())
env_path = os.path.join(shared_dir, "tmp", os.environ["GITHUB_RUN_ID"])
final_env = Path(shared_dir) / f"env_{conda_env_hash}.txt"
pkg_dir = Path(shared_dir) / "pkgs"
(Path(shared_dir) / f"env_{conda_env_hash}_content.txt").write_text(conda_env_key)
CONDA_INSTALL_CMD += " -p " + env_path
env_already_built = False
# If environment is already built
if final_env.is_file():
final_env_link = final_env.read_text().strip()
if (Path(final_env_link) / "bin" / "python").is_file():
print("Found valid env - skipping env setup")
CONDA_INSTALL_CMD = "true"
env_already_built = True
env_path = final_env_link
else:
print("Invalid env")
with open(os.environ['GITHUB_ENV'], "r+") as fp:
fp.write("CONDA_ENV_LINK=" + str(final_env) + "\n")
fp.write("CONDA_PREFIX=" + env_path + "\n")
fp.write("CONDA_PKGS_DIRS=" + str(pkg_dir) + "\n")
fp.write("CONDA_INSTALL_CMD=" + CONDA_INSTALL_CMD + "\n")
fp.write("CONDA_ENV_HASH=" + conda_env_hash + "\n")
fp.write("PY=" + os.path.join(env_path, "bin", "python") + "\n")
fp.write("PIP=" + os.path.join(env_path, "bin", "pip") + "\n")
with open(os.environ['GITHUB_OUTPUT'], "r+") as fp:
fp.write(f"ENV_CACHED={int(env_already_built)}\n")
- name: Print conda commands
shell: bash -l {0}
run: |
echo "CONDA_PREFIX=$CONDA_PREFIX"
echo "CONDA_INSTALL_CMD=$CONDA_INSTALL_CMD"
echo "CONDA_ENV_HASH=$CONDA_ENV_HASH"
echo "PY=$PY"
- name: Install micromamba
shell: bash -l {0}
run: |
set -ex
curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba
echo "eval \"\$($(pwd)/bin/micromamba shell hook --shell bash)\"" >> ~/.profile
- name: Conda/pip setup
shell: bash -l {0}
if: steps.prepare_conda_env_paths.outputs.ENV_CACHED == 0
run: |
set -ex
micromamba config set channel_priority strict
# Retry if failed after removing downloaded packages cache
$CONDA_INSTALL_CMD || (rm -rf $CONDA_PKGS_DIRS && rm -rf $CONDA_PREFIX && $CONDA_INSTALL_CMD)
$PY -m pip install cmake
$PY -m pip install -r requirements-benchmark.txt --progress-bar off
- name: Activate environment
shell: bash -l {0}
run: |
echo "micromamba activate $CONDA_PREFIX" >> ~/.profile
echo "==== .profile ====="
cat ~/.profile
- run: which python
shell: bash -l {0}
- name: Setup ccache nvcc
shell: bash -l {0}
if: steps.prepare_conda_env_paths.outputs.ENV_CACHED == 0
run: |
echo "#!/bin/bash" > $CONDA_PREFIX/bin/nvcc-ccache
echo "ccache ${CUDA_HOME}/bin/nvcc \"\$@\"" >> $CONDA_PREFIX/bin/nvcc-ccache
cat $CONDA_PREFIX/bin/nvcc-ccache
chmod +x $CONDA_PREFIX/bin/nvcc-ccache
which nvcc
ccache --version
- name: Setup ccache g++
shell: bash -l {0}
if: steps.prepare_conda_env_paths.outputs.ENV_CACHED == 0
run: |
echo "#!/bin/bash" > $CONDA_PREFIX/bin/g++-ccache
echo "ccache g++ \"\$@\"" >> $CONDA_PREFIX/bin/g++-ccache
cat $CONDA_PREFIX/bin/g++-ccache
chmod +x $CONDA_PREFIX/bin/g++-ccache
which g++-ccache
- name: Patch for https://github.com/pytorch/pytorch/issues/114962
shell: bash -l {0}
run: |
CPP_EXTENSIONS_PY=$(python -c "import torch.utils.cpp_extension; print(torch.utils.cpp_extension.__file__)")
echo "Patching $CPP_EXTENSIONS_PY"
sed -i "/generate-dependencies-with-compile/d" $CPP_EXTENSIONS_PY
- name: Check NVIDIA libs
shell: bash -l {0}
run: |
ldconfig -p | grep libcuda.so
ls /.singularity.d/libs/
- name: Mark env as ready
shell: bash -l {0}
if: steps.prepare_conda_env_paths.outputs.ENV_CACHED == 0
run: echo $CONDA_PREFIX > $CONDA_ENV_LINK
- name: Setup ccache
shell: bash -l {0}
run: |
export CCACHE_DIR=$GHRUNNER_SHARED_DIR/ccache
echo "CCACHE_DIR=$CCACHE_DIR" >> ${GITHUB_ENV}
mkdir -p $CCACHE_DIR
ccache -s
- name: Build
shell: bash -l {0}
run: |
PYTORCH_NVCC="$CONDA_PREFIX/bin/nvcc-ccache" CXX="g++-ccache" TORCH_CUDA_ARCH_LIST=${{ inputs.arch }} python -m pip install -v -e .
- name: Build info
run: |
printenv
python -m xformers.info
python xformers/_triton_version_fairinternal.py
ccache -s
shell: bash -l {0}
14 changes: 8 additions & 6 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ jobs:
JUST_TESTRUN: 1
steps:
- uses: actions/checkout@v4
- name: Setup & build
uses: ./.github/actions/setup-env-build
with:
arch: 7.5
- name: Build and run tests
run: |-
# set -e
# export JUST_TESTRUN=1
# VARS_TO_PASS="-e PYTHON_VERSION -e BUILD_VERSION -e PYTORCH_VERSION -e CU_VERSION -e JUST_TESTRUN"
# docker run --gpus all --ipc=host -v $(pwd):/remote -w /remote ${VARS_TO_PASS} ${TESTRUN_DOCKER_IMAGE} python3 ./packaging/build_conda.py
conda create --name env --yes --quiet conda-build
conda run --no-capture-output --name env python3 ./packaging/build_conda.py
python -m unittest discover -v -s tests -t .
#conda create --name env --yes --quiet conda-build
#conda run --no-capture-output --name env python3 ./packaging/build_conda.py

0 comments on commit 9a8c4c9

Please sign in to comment.