-
Notifications
You must be signed in to change notification settings - Fork 659
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optimize Cmake build slightly #1011
Changes from all commits
c4079bd
f718770
c62d831
1cbe9fd
6ec2520
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,6 +6,10 @@ on: | |
pull_request: | ||
branches: [ "main" ] | ||
|
||
concurrency: | ||
group: cmake-${{ github.ref }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
build: | ||
runs-on: ${{ matrix.os }} | ||
|
@@ -16,29 +20,11 @@ jobs: | |
|
||
matrix: | ||
os: [ubuntu-latest, windows-latest] | ||
python-version: ['3.10', '3.11'] | ||
cuda-version: ['11.8', '12.1'] | ||
build_type: [Release] | ||
c_compiler: [gcc, cl] | ||
include: | ||
- os: windows-latest | ||
c_compiler: cl | ||
cpp_compiler: cl | ||
- os: ubuntu-latest | ||
c_compiler: gcc | ||
cpp_compiler: g++ | ||
exclude: | ||
- os: ubuntu-latest | ||
c_compiler: cl | ||
- os: windows-latest | ||
c_compiler: gcc | ||
|
||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Set up Python ${{ matrix.python-version }} | ||
uses: actions/setup-python@v5 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
|
||
- name: Set up MSVC | ||
if: matrix.os == 'windows-latest' | ||
|
@@ -61,7 +47,7 @@ jobs: | |
environment-file: environment-bnb.yml | ||
use-only-tar-bz2: false | ||
auto-activate-base: true | ||
python-version: ${{ matrix.python-version }} | ||
python-version: "3.10" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm thinking about it, ideally I think we should add also another "old enough" python version such as 3.8 just to be sure There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I just saw #1010 I think what you said makes sense, we could do the python=3.8 build in another PR - what do you think? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We would add a follow-up step that tests the built libraries on all supported versions, but building the binaries (and wheel) only needs to occur on one version. |
||
mamba-version: "*" | ||
|
||
- name: Set reusable strings | ||
|
@@ -97,8 +83,13 @@ jobs: | |
echo CUDA_PATH=$CUDA_HOME >> "$GITHUB_ENV" | ||
|
||
if [ "${{ matrix.os }}" = "windows-latest" ]; then | ||
echo CXX_COMPILER=cl >> "$GITHUB_ENV" | ||
echo C_COMPILER=cl >> "$GITHUB_ENV" | ||
# without -DCMAKE_CUDA_COMPILER=nvcc, cmake config always fail for cuda-11.8 | ||
echo DCMAKE_CUDA_COMPILER=-DCMAKE_CUDA_COMPILER=nvcc >> "$GITHUB_ENV" | ||
else | ||
echo CXX_COMPILER=g++ >> "$GITHUB_ENV" | ||
echo C_COMPILER=gcc >> "$GITHUB_ENV" | ||
fi | ||
|
||
nvcc --version | ||
|
@@ -109,26 +100,27 @@ jobs: | |
- name: Prep build | ||
run: python -m pip install cmake==3.27.9 ninja setuptools wheel | ||
|
||
- name: Configure CMake | ||
# TODO: the following steps (CUDA, NOBLASLT, CPU) could be moved to the matrix, so they're built in parallel | ||
|
||
- name: Configure CUDA | ||
run: > | ||
cmake -B ${{ steps.strings.outputs.build-output-dir }} | ||
-G Ninja ${{ env.DCMAKE_CUDA_COMPILER }} | ||
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} | ||
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }} | ||
-DCMAKE_CXX_COMPILER=${{ env.CXX_COMPILER }} | ||
-DCMAKE_C_COMPILER=${{ env.C_COMPILER }} | ||
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | ||
-DCOMPUTE_CAPABILITY="50;52;60;61;62;70;72;75;80;86;87;89;90" | ||
-S ${{ github.workspace }} | ||
|
||
- name: Build | ||
# Build your program with the given configuration. Note that --config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). | ||
- name: Build CUDA | ||
run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} | ||
|
||
- name: Configure NOBLASLT | ||
run: > | ||
cmake -B ${{ steps.strings.outputs.build-output-dir }} | ||
-G Ninja ${{ env.DCMAKE_CUDA_COMPILER }} | ||
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} | ||
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }} | ||
-DCMAKE_CXX_COMPILER=${{ env.CXX_COMPILER }} | ||
-DCMAKE_C_COMPILER=${{ env.C_COMPILER }} | ||
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | ||
-DCOMPUTE_CAPABILITY="50;52;60;61;62;70;72;75;80;86;87;89;90" | ||
-DNO_CUBLASLT=ON | ||
|
@@ -141,8 +133,8 @@ jobs: | |
run: > | ||
cmake -B ${{ steps.strings.outputs.build-output-dir }} | ||
-G Ninja ${{ env.DCMAKE_CUDA_COMPILER }} | ||
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} | ||
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }} | ||
-DCMAKE_CXX_COMPILER=${{ env.CXX_COMPILER }} | ||
-DCMAKE_C_COMPILER=${{ env.C_COMPILER }} | ||
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | ||
-DNO_CUBLASLT=ON | ||
-DBUILD_CUDA=OFF | ||
|
@@ -151,12 +143,6 @@ jobs: | |
- name: Build CPU | ||
run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} | ||
|
||
- name: Test | ||
working-directory: ${{ steps.strings.outputs.build-output-dir }} | ||
# Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). | ||
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail | ||
run: ctest --build-config ${{ matrix.build_type }} | ||
|
||
- name: Build dist | ||
shell: bash -el {0} | ||
run: | | ||
|
@@ -168,6 +154,6 @@ jobs: | |
- name: Upload Build Artifacts | ||
uses: actions/[email protected] | ||
with: | ||
name: bitsandbytes-${{ matrix.os }}-${{ matrix.python-version }}-${{ matrix.cuda-version }} | ||
name: bitsandbytes-${{ matrix.os }}-${{ matrix.cuda-version }} | ||
path: | | ||
${{ github.workspace }}/dist/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you elaborate on this change? Would this affect PRs from forks?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes. I was running exploratory versions of this PR in my own fork, and the docs workflow wouldn't be necessary there.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok makes sense