-
Notifications
You must be signed in to change notification settings - Fork 145
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ENH: Use ITKRemoteModuleBuildTestPackageAction and separate CUDA actions
- Loading branch information
Simon Rit
committed
Jan 13, 2023
1 parent
23cb559
commit 696b0ea
Showing
5 changed files
with
319 additions
and
441 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
name: 'Build, Test RTK with CUDA' | ||
|
||
on: [push,pull_request] | ||
|
||
env: | ||
itk-git-tag: "v5.3.0" | ||
|
||
jobs: | ||
build-test-cxx: | ||
runs-on: ${{ matrix.os }} | ||
strategy: | ||
max-parallel: 3 | ||
matrix: | ||
os: [self-hosted-linux, self-hosted-windows] | ||
include: | ||
- os: self-hosted-linux | ||
c-compiler: "gcc" | ||
cxx-compiler: "g++" | ||
cmake-build-type: "MinSizeRel" | ||
- os: self-hosted-windows | ||
c-compiler: "cl.exe" | ||
cxx-compiler: "cl.exe" | ||
cmake-build-type: "Release" | ||
|
||
steps: | ||
- uses: actions/checkout@v3 | ||
|
||
- name: Install build dependencies | ||
run: | | ||
python -m pip install --upgrade pip | ||
python -m pip install ninja | ||
- name: Get specific version of CMake, Ninja | ||
uses: lukka/get-cmake@v3.24.2 | ||
|
||
- name: self-hosted cleanup | ||
shell: bash | ||
run: | | ||
rm -fr ../ITK | ||
rm -fr ../ITK-build | ||
rm -fr ../build | ||
- name: Download ITK | ||
run: | | ||
cd .. | ||
git clone https://github.com/InsightSoftwareConsortium/ITK.git | ||
cd ITK | ||
git checkout ${{ env.itk-git-tag }} | ||
- name: Build ITK | ||
if: matrix.os != 'self-hosted-windows' | ||
shell: bash | ||
run: | | ||
cd .. | ||
mkdir ITK-build | ||
cd ITK-build | ||
MODULE_ARGS="" | ||
MODULE_DEPS=${{ env.itk-module-deps }} | ||
for MODULE_INFO in ${MODULE_DEPS//:/ }; do | ||
MODULE_NAME=`(echo ${MODULE_INFO} | cut -d'@' -f 1)` | ||
MODULE_ARGS="${MODULE_ARGS} -DModule_${MODULE_NAME}:BOOL=ON" | ||
MODULE_TAG=`(echo ${MODULE_INFO} | cut -d'@' -f 2)` | ||
if [[ -n ${MODULE_TAG} ]]; then | ||
MODULE_ARGS+=" -DModule_${MODULE_NAME}_GIT_TAG:STRING=${MODULE_TAG}" | ||
fi | ||
done | ||
if [[ -n $MODULE_ARGS ]]; then | ||
echo "Building with modules: $MODULE_ARGS" | ||
fi | ||
cmake -DCMAKE_C_COMPILER:FILEPATH="${{ matrix.c-compiler }}" -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_CXX_COMPILER="${{ matrix.cxx-compiler }}" -DCMAKE_BUILD_TYPE:STRING=${{ matrix.cmake-build-type }} -DBUILD_TESTING:BOOL=OFF ${{ env.itk-cmake-options }} ${MODULE_ARGS} -GNinja ../ITK | ||
ninja | ||
- name: Build ITK | ||
if: matrix.os == 'self-hosted-windows' | ||
shell: pwsh | ||
run: | | ||
Set-PSDebug -Trace 1 | ||
cd .. | ||
& "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\Launch-VsDevShell.ps1" -Arch amd64 -SkipAutomaticLocation | ||
mkdir ITK-build | ||
cd ITK-build | ||
$MODULE_ARGS="" | ||
$MODULE_DEPS="${{ env.itk-module-deps }}" | ||
$MODULES_LIST = $MODULE_DEPS.split(":") | ||
foreach($MODULE_INFO in $MODULES_LIST) { | ||
if($MODULE_ARGS) { $MODULE_ARGS += " " } | ||
$MODULE_NAME = $MODULE_INFO.split("@")[0] | ||
$MODULE_ARGS += "-DModule_$MODULE_NAME`:BOOL=ON" | ||
$MODULE_TAG = $MODULE_INFO.split("@")[1] | ||
if($MODULE_TAG) { | ||
$MODULE_ARGS += " -DModule_$MODULE_NAME`_GIT_TAG:STRING=$MODULE_TAG" | ||
} | ||
} | ||
if($MODULE_ARGS) { | ||
echo "Building with parameters: ${{ env.itk-cmake-options }} $MODULE_ARGS" | ||
} | ||
cmake -DCMAKE_C_COMPILER:FILEPATH="${{ matrix.c-compiler }}" -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_CXX_COMPILER="${{ matrix.cxx-compiler }}" -DCMAKE_BUILD_TYPE:STRING=${{ matrix.cmake-build-type }} -DBUILD_TESTING:BOOL=OFF ${{ env.itk-cmake-options }} $MODULE_ARGS.split(" ") -GNinja ../ITK | ||
ninja | ||
- name: Fetch CTest driver script | ||
run: | | ||
curl -L https://raw.githubusercontent.com/InsightSoftwareConsortium/ITK/dashboard/itk_common.cmake -O | ||
- name: Configure CTest script | ||
shell: bash | ||
run: | | ||
operating_system="${{ matrix.os }}" | ||
cat > dashboard.cmake << EOF | ||
set(CTEST_SITE "GitHubActions") | ||
file(TO_CMAKE_PATH "\$ENV{GITHUB_WORKSPACE}/.." CTEST_DASHBOARD_ROOT) | ||
file(TO_CMAKE_PATH "\$ENV{GITHUB_WORKSPACE}/" CTEST_SOURCE_DIRECTORY) | ||
file(TO_CMAKE_PATH "\$ENV{GITHUB_WORKSPACE}/../build" CTEST_BINARY_DIRECTORY) | ||
set(dashboard_source_name "${GITHUB_REPOSITORY}") | ||
if((ENV{GITHUB_REF_NAME} MATCHES "master" OR ENV{GITHUB_REF_NAME} MATCHES "main")) | ||
set(branch "-master") | ||
set(dashboard_model "Continuous") | ||
else() | ||
set(branch "-${GITHUB_REF}") | ||
set(dashboard_model "Experimental") | ||
endif() | ||
set(CTEST_BUILD_NAME "${GITHUB_REPOSITORY}-${operating_system}-\${branch}") | ||
set(CTEST_UPDATE_VERSION_ONLY 1) | ||
set(CTEST_TEST_ARGS \${CTEST_TEST_ARGS} PARALLEL_LEVEL \${PARALLEL_LEVEL}) | ||
set(CTEST_BUILD_CONFIGURATION "Release") | ||
set(CTEST_CMAKE_GENERATOR "Ninja") | ||
set(CTEST_CUSTOM_WARNING_EXCEPTION | ||
\${CTEST_CUSTOM_WARNING_EXCEPTION} | ||
# macOS Azure VM Warning | ||
"ld: warning: text-based stub file" | ||
${{ env.warnings-to-ignore }} | ||
) | ||
set(dashboard_no_clean 1) | ||
set(ENV{CC} ${{ matrix.c-compiler }}) | ||
set(ENV{CXX} ${{ matrix.cxx-compiler }}) | ||
if(WIN32) | ||
set(ENV{PATH} "\${CTEST_DASHBOARD_ROOT}/ITK-build/bin;\$ENV{PATH}") | ||
endif() | ||
set(dashboard_cache " | ||
ITK_DIR:PATH=\${CTEST_DASHBOARD_ROOT}/ITK-build | ||
BUILD_TESTING:BOOL=ON | ||
${{ env.cmake-options }} | ||
") | ||
string(TIMESTAMP build_date "%Y-%m-%d") | ||
message("CDash Build Identifier: \${build_date} \${CTEST_BUILD_NAME}") | ||
message("CTEST_SITE = \${CTEST_SITE}") | ||
include(\${CTEST_SCRIPT_DIRECTORY}/itk_common.cmake) | ||
EOF | ||
cat dashboard.cmake | ||
- name: Build and test | ||
if: matrix.os != 'self-hosted-windows' | ||
run: | | ||
ctest --output-on-failure -j 2 -V -S dashboard.cmake ${{ env.ctest-options }} | ||
- name: Build and test | ||
if: matrix.os == 'self-hosted-windows' | ||
shell: pwsh | ||
run: | | ||
& "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\Launch-VsDevShell.ps1" -Arch amd64 -SkipAutomaticLocation | ||
ctest --output-on-failure -j 2 -V -S dashboard.cmake ${{ env.ctest-options }} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
name: 'Build, Test, Package RTK with CUDA' | ||
|
||
on: [push,pull_request] | ||
|
||
env: | ||
itk-wheel-tag: 'v5.3.0' | ||
itk-python-package-tag: "6a7296422d15a7196f0711faa4ce562d21ba1bf3" | ||
itk-python-package-org: "InsightSoftwareConsortium" | ||
|
||
jobs: | ||
build-linux-cuda-python-packages: | ||
runs-on: self-hosted-linux | ||
strategy: | ||
max-parallel: 2 | ||
matrix: | ||
python-version: ["37", "38", "39", "310", "311"] | ||
manylinux-platform: ["_2_28-x64","2014-x64","_2_28-aarch64"] | ||
|
||
steps: | ||
- uses: actions/checkout@v3 | ||
|
||
- name: 'Fetch build script' | ||
run: | | ||
IPP_DOWNLOAD_GIT_TAG=${{ env.itk-python-package-tag }} | ||
IPP_DOWNLOAD_ORG=${{ env.itk-python-package-org }} | ||
curl -L https://raw.githubusercontent.com/${IPP_DOWNLOAD_ORG:=InsightSoftwareConsortium}/ITKPythonPackage/${IPP_DOWNLOAD_GIT_TAG:=master}/scripts/dockcross-manylinux-download-cache-and-build-module-wheels.sh -O | ||
export ITK_MODULE_NO_CLEANUP=TRUE | ||
chmod u+x dockcross-manylinux-download-cache-and-build-module-wheels.sh | ||
- name: 'Build 🐍 Python 📦 package' | ||
shell: bash | ||
run: | | ||
rm -rf dist | ||
export ITK_PACKAGE_VERSION=${{ env.itk-wheel-tag }} | ||
export ITKPYTHONPACKAGE_TAG=${{ env.itk-python-package-tag }} | ||
export ITKPYTHONPACKAGE_ORG=${{ env.itk-python-package-org }} | ||
export ITK_MODULE_PREQ=${{ env.itk-module-deps }} | ||
if [ -z ${{ env.cmake-options }}]; then | ||
CMAKE_OPTIONS="" | ||
else | ||
CMAKE_OPTIONS="--cmake_options ${{ env.cmake-options }}" | ||
fi | ||
export LD_LIBRARY_PATH="/home/srit/Downloads/cuda116:/home/srit/Downloads/cuda116/targets/x86_64-linux/lib:/home/srit/Downloads/cuda116/lib64/stubs" | ||
if test -e ../../ITKPythonBuilds-linux-manylinux2014.tar.zst ; then | ||
mv ../../*zst . | ||
fi | ||
MANYLINUX_PLATFORM=${{ matrix.manylinux-platform }} | ||
echo "Manylinux platform ${MANYLINUX_PLATFORM}" | ||
rm -rf ITKPythonPackage | ||
export MANYLINUX_VERSION=`(echo ${MANYLINUX_PLATFORM} | cut -d '-' -f 1)` | ||
export TARGET_ARCH=`(echo ${MANYLINUX_PLATFORM} | cut -d '-' -f 2)` | ||
echo "Building for manylinux specialization ${MANYLINUX_VERSION} and target architecture ${TARGET_ARCH}" | ||
./dockcross-manylinux-download-cache-and-build-module-wheels.sh $CMAKE_OPTIONS -c "-DCUDAToolkit_ROOT=/usr/lib64/cuda116 -DCMAKE_CUDA_COMPILER=/usr/lib64/cuda116/bin/nvcc -DRTK_CUDA_VERSION=11.6" -x "libcuda.so;libcuda.so.1;libcudart.so;libcudart.so.11.0;libcublas.so;libcublas.so.11;libcublasLt.so;libcublasLt.so.11;libcufft.so;libcufft.so.10" cp${{ matrix.python-version }} | ||
mv *zst ../.. | ||
- name: Publish Python package as GitHub Artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: LinuxWheel${{ matrix.python-version }}-cuda116 | ||
path: dist/*.whl | ||
|
||
build-windows-cuda-python-packages: | ||
runs-on: self-hosted-windows | ||
strategy: | ||
max-parallel: 2 | ||
matrix: | ||
python-version-minor: ["7", "8", "9", "10", "11"] | ||
|
||
steps: | ||
- uses: actions/checkout@v3 | ||
with: | ||
path: "im" | ||
|
||
- name: 'Reduce source path length' | ||
shell: bash | ||
run: | | ||
# Move ITKPythonBuilds archive to the checked-out source | ||
if test -f ../../im/ITKPythonBuilds-windows.zip; then | ||
mv ../../im/*.zip im | ||
fi | ||
rm -fr ../../im | ||
# Move checked-out source to a shorter path to avoid Windows path length issues | ||
mv im ../../ | ||
- name: 'Fetch build script' | ||
shell: pwsh | ||
run: | | ||
cd ../../im | ||
$ITKPYTHONPACKAGE_TAG = "${{ env.itk-python-package-tag }}" | ||
$ITKPYTHONPACKAGE_ORG = "${{ env.itk-python-package-org }}" | ||
$SCRIPT_UPSTREAM = "https://raw.githubusercontent.com/$ITKPYTHONPACKAGE_ORG/ITKPythonPackage/$ITKPYTHONPACKAGE_TAG/scripts/windows-download-cache-and-build-module-wheels.ps1" | ||
echo "Fetching $SCRIPT_UPSTREAM" | ||
(new-object net.webclient).DownloadString($SCRIPT_UPSTREAM) > windows-download-cache-and-build-module-wheels.ps1 | ||
- name: 'Build 🐍 Python 📦 package' | ||
shell: pwsh | ||
run: | | ||
if (Test-Path dist) { rm dist -r -fo } | ||
cd ../../im | ||
& "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\Launch-VsDevShell.ps1" -Arch amd64 -SkipAutomaticLocation | ||
$env:CC="cl.exe" | ||
$env:CXX="cl.exe" | ||
$env:ITK_PACKAGE_VERSION = "${{ env.itk-wheel-tag }}" | ||
$env:ITKPYTHONPACKAGE_TAG = "${{ env.itk-python-package-tag }}" | ||
$env:ITKPYTHONPACKAGE_ORG = "${{ env.itk-python-package-org }}" | ||
$env:ITK_MODULE_PREQ = "${{ env.itk-module-deps }}" | ||
./windows-download-cache-and-build-module-wheels.ps1 "${{ matrix.python-version-minor }}" --lib-paths "C:/Program\ Files/NVIDIA\ GPU\ Computing\ Toolkit/CUDA/v11.6/bin" --exclude-libs "nvcuda.dll;concrt140.dll;cublas64_11.dll;cublasLt64_11.dll;cudart64_110.dll;cufft64_10.dll" "--" "-DRTK_CUDA_VERSION=11.6" | ||
mkdir -p '${{ github.workspace }}\dist' | ||
cp 'dist\*.whl' '${{ github.workspace }}\dist' | ||
- name: Publish Python package as GitHub Artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: WindowsWheel3.${{ matrix.python-version-minor }}-cuda116 | ||
path: dist/*.whl | ||
|
||
publish-python-packages-to-pypi: | ||
needs: | ||
- build-linux-cuda-python-packages | ||
- build-windows-cuda-python-packages | ||
runs-on: ubuntu-22.04 | ||
|
||
steps: | ||
- name: Download Python Packages | ||
uses: actions/download-artifact@v3 | ||
|
||
- name: Prepare packages for upload | ||
run: | | ||
ls -R | ||
for d in */; do | ||
mv ${d}/*.whl . | ||
done | ||
mkdir dist | ||
mv *.whl dist/ | ||
ls dist | ||
- name: Publish 🐍 Python 📦 package to PyPI | ||
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') | ||
uses: pypa/gh-action-pypi-publish@v1.5.1 | ||
with: | ||
skip_existing: true | ||
user: __token__ | ||
password: ${{ secrets.pypi_password }} |
Oops, something went wrong.