diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 68194d0f9..974aea1ee 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,18 +1,20 @@ # syntax=docker/dockerfile:1.5 -ARG CUDA=12.0 -ARG LLVM=16 -ARG RAPIDS=23.08 -ARG DISTRO=ubuntu22.04 -ARG REPO=rapidsai/devcontainers - +ARG BASE ARG PYTHON_PACKAGE_MANAGER=conda -FROM ${REPO}:${RAPIDS}-cpp-llvm${LLVM}-cuda${CUDA}-${DISTRO} as pip-base +FROM ${BASE} as pip-base + +ENV DEFAULT_VIRTUAL_ENV=rapids + +RUN apt update -y \ + && DEBIAN_FRONTEND=noninteractive apt install -y \ + sqlite3 libsqlite3-dev libtiff-dev libcurl4-openssl-dev \ + && rm -rf /tmp/* /var/tmp/* /var/cache/apt/* /var/lib/apt/lists/*; -FROM ${REPO}:${RAPIDS}-cpp-mambaforge-${DISTRO} as conda-base +FROM ${BASE} as conda-base -COPY --from=pip-base /etc/skel/.config/clangd/config.yaml /etc/skel/.config/clangd/config.yaml +ENV DEFAULT_CONDA_ENV=rapids FROM ${PYTHON_PACKAGE_MANAGER}-base diff --git a/.devcontainer/README.md b/.devcontainer/README.md index c2f5fe9bc..18243943c 100644 --- a/.devcontainer/README.md +++ b/.devcontainer/README.md @@ -9,11 +9,6 @@ This container is a turnkey development environment for building and testing the * [Prerequisites](#prerequisites) * [Host bind mounts](#host-bind-mounts) * [Launch a Dev Container](#launch-a-dev-container) - * [via VSCode](#via-vscode) - * [via `launch.sh`](#via-launchsh) - * [Single mode](#single-mode) - * [Unified mode](#unified-mode) - * [Isolated mode](#isolated-mode) ## Prerequisites @@ -35,76 +30,6 @@ This ensures caches, configurations, dependencies, and your commits are persiste ## Launch a Dev Container -A devcontainer can be launched directly by VSCode, or via a custom `launch.sh` shell script. - -### via VSCode - To launch a devcontainer from VSCode, open the cuSpatial repo and select the "Reopen in Container" button in the bottom right:
Alternatively, open the VSCode command palette (typically `cmd/ctrl + shift + P`) and run the "Rebuild and Reopen in Container" command. - -### via `launch.sh` - -Use the `.devcontainer/launch.sh` script to start a new instance of the development container and launch a fresh VSCode window connected to it. - -VSCode extends its [single-window-per-folder](https://github.com/microsoft/vscode/issues/2686) process model to devcontainers. Opening the same devcontainer in separate windows doesn't create two separate containers -- instead you have two VSCode windows each connected to the same running container. - -`launch.sh` takes two arguments, a `mode` and a `package manager`. - -* The `mode` argument determines how the devcontainer interacts with the files on the host. -* The `package manager` argument can be either `conda`, or `pip`. This determines whether the devcontainer uses `conda` or `pip` to install the dependencies (the default is `conda`). `pip` is experimental/not working for normal dev, and is currently meant to aid in pip packaging work. - -#### Single mode - -`.devcontainer/launch.sh single` launches the devcontainer with the [default bind mounts](#host-bind-mounts). RMM and cuDF are installed via the package manager. - -Example: -```bash -# Launch a devcontainer that only mounts cuspatial and installs dependencies via conda -$ .devcontainer/launch.sh single conda - -# or installs dependencies via pip -$ .devcontainer/launch.sh single pip -``` - -#### Unified mode - -`.devcontainer/launch.sh unified` launches the devcontainer with the [default bind mounts](#host-bind-mounts), as well as additional `rmm` and `cudf` bind mounts (assumes RMM and cuDF are siblings to the cuspatial repository): - -* `${repo}/../.rmm:/home/coder/rmm` -* `${repo}/../.cudf:/home/coder/cudf` - -In this mode, RMM and cuDF will not be installed, but the devcontainer will install the dependencies necessary to build all three. - -Example: -```bash -# Launch a devcontainer that mounts rmm, cudf, and cuspatial from the host and installs dependencies via conda -$ .devcontainer/launch.sh unified conda - -# or installs dependencies via pip -$ .devcontainer/launch.sh unified pip -``` - -#### Isolated mode - -`.devcontainer/launch.sh isolated` launches the devcontainer without the deps/repo bind mounts, and instead contains a unique copy of the `cuspatial` source in a Docker [volume](https://docs.docker.com/storage/volumes/). - -Use this mode to launch multiple isolated development containers that can be checked out to separate branches of `cuspatial`. - -The Docker volume persists after the devcontainer is removed, ensuring you don't pending lose work by accidentally removing the devcontainer. - -However, you will need to manually remove the volume once you've committed and pushed your changes: - -* Use the [`docker volume ls`](https://docs.docker.com/engine/reference/commandline/volume_ls/) command to list all volumes -* Use [`docker volume rm`](https://docs.docker.com/engine/reference/commandline/volume_rm/) or [`docker volume prune`](https://docs.docker.com/engine/reference/commandline/volume_prune/) to clean up unused volumes - -Alternatively, use the "Dev Volumes" tab of the VSCode Dev Containers extension to view and remove unused volumes. - -Examples: -```bash -# Launch a devcontainer that is isolated from changes on the host and installs dependencies via conda -$ .devcontainer/launch.sh isolated conda - -# or installs dependencies via pip -$ .devcontainer/launch.sh isolated pip -``` diff --git a/.devcontainer/conda/isolated/.devcontainer/devcontainer.json b/.devcontainer/conda/isolated/.devcontainer/devcontainer.json deleted file mode 100644 index e55b955e4..000000000 --- a/.devcontainer/conda/isolated/.devcontainer/devcontainer.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "shutdownAction": "stopContainer", - - "build": { - "context": "${localWorkspaceFolder}/.devcontainer", - "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", - "args": { - "CUDA": "12.0", - "LLVM": "16", - "PYTHON_PACKAGE_MANAGER": "conda" - } - }, - "hostRequirements": { - "gpu": true - }, - - "features": { - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:23.8": {} - }, - - "overrideFeatureInstallOrder": [ - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" - ], - - "initializeCommand": [ - "/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config,conda/pkgs}" - ], - - "updateContentCommand": [ - "/bin/bash", "-c", "sudo chown -R $(id -u):$(id -g) /home/coder/${localWorkspaceFolderBasename} && mkdir -m 0755 -p ~/.config/clangd && cp -n /etc/skel/.config/clangd/config.yaml ~/.config/clangd/config.yaml && cp -ar /workspaces/${localWorkspaceFolderBasename} /home/coder/ && rapids-make-vscode-workspace --update" - ], - - "containerEnv": { - "DEFAULT_CONDA_ENV": "rapids" - }, - - "workspaceFolder": "/home/coder", - "workspaceMount": "source=${localWorkspaceFolder},target=/workspaces/${localWorkspaceFolderBasename},type=bind,consistency=consistent", - "mounts": [ - "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.conda/pkgs,target=/home/coder/.conda/pkgs,type=bind,consistency=consistent", - "source=${localWorkspaceFolderBasename}-conda-isolated-${devcontainerId},target=/home/coder/${localWorkspaceFolderBasename},type=volume" - ], - - "customizations": { - "vscode": { - "extensions": [ - "llvm-vs-code-extensions.vscode-clangd", - "mutantdino.resourcemonitor", - "ms-vscode.cpptools", - "nvidia.nsight-vscode-edition", - "seaube.clangformat", - "tamasfe.even-better-toml" - ], - "settings": { - "C_Cpp.vcpkg.enabled": false, - "C_Cpp.formatting": "disabled", - "C_Cpp.autocomplete": "disabled", - "C_Cpp.errorSquiggles": "disabled", - "C_Cpp.intelliSenseEngine": "disabled", - "C_Cpp.configurationWarnings": "disabled", - "C_Cpp.autoAddFileAssociations": false, - "clang-format.fallbackStyle": "none", - "files.trimFinalNewlines": true, - "files.insertFinalNewline": true, - "files.trimTrailingWhitespace": true, - "files.associations": { - "*.cu": "cuda-cpp", - "*.cuh": "cuda-cpp", - "**/libcudacxx/include/**/*": "cpp", - "**/libcudacxx-src/include/**/*": "cpp" - }, - "files.watcherExclude": { - "**/build/**": true, - "**/_skbuild/**": true, - "**/target/**": true - }, - "python.linting.flake8Enabled": true, - "[c]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cuda-cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - } - } - } - } -} diff --git a/.devcontainer/conda/single/.devcontainer/devcontainer.json b/.devcontainer/conda/single/.devcontainer/devcontainer.json deleted file mode 100644 index 7b0865cf1..000000000 --- a/.devcontainer/conda/single/.devcontainer/devcontainer.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "shutdownAction": "stopContainer", - - "build": { - "context": "${localWorkspaceFolder}/.devcontainer", - "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", - "args": { - "CUDA": "12.0", - "LLVM": "16", - "PYTHON_PACKAGE_MANAGER": "conda" - } - }, - "hostRequirements": { - "gpu": true - }, - - "features": { - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:23.8": {} - }, - - "overrideFeatureInstallOrder": [ - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" - ], - - "initializeCommand": [ - "/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config,conda/pkgs,conda/${localWorkspaceFolderBasename}/single}" - ], - - "updateContentCommand": [ - "/bin/bash", - "-c", - "mkdir -m 0755 -p ~/.config/clangd && cp -n /etc/skel/.config/clangd/config.yaml ~/.config/clangd/config.yaml" - ], - - "containerEnv": { - "DEFAULT_CONDA_ENV": "rapids" - }, - - "workspaceFolder": "/home/coder", - "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/${localWorkspaceFolderBasename},type=bind,consistency=consistent", - "mounts": [ - "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.conda/pkgs,target=/home/coder/.conda/pkgs,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.conda/${localWorkspaceFolderBasename}/single,target=/home/coder/.conda/envs,type=bind,consistency=consistent" - ], - - "customizations": { - "vscode": { - "extensions": [ - "llvm-vs-code-extensions.vscode-clangd", - "mutantdino.resourcemonitor", - "ms-vscode.cpptools", - "nvidia.nsight-vscode-edition", - "seaube.clangformat", - "tamasfe.even-better-toml" - ], - "settings": { - "C_Cpp.vcpkg.enabled": false, - "C_Cpp.formatting": "disabled", - "C_Cpp.autocomplete": "disabled", - "C_Cpp.errorSquiggles": "disabled", - "C_Cpp.intelliSenseEngine": "disabled", - "C_Cpp.configurationWarnings": "disabled", - "C_Cpp.autoAddFileAssociations": false, - "clang-format.fallbackStyle": "none", - "files.trimFinalNewlines": true, - "files.insertFinalNewline": true, - "files.trimTrailingWhitespace": true, - "files.associations": { - "*.cu": "cuda-cpp", - "*.cuh": "cuda-cpp", - "**/libcudacxx/include/**/*": "cpp", - "**/libcudacxx-src/include/**/*": "cpp" - }, - "files.watcherExclude": { - "**/build/**": true, - "**/_skbuild/**": true, - "**/target/**": true - }, - "python.linting.flake8Enabled": true, - "[c]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cuda-cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - } - } - } - } -} diff --git a/.devcontainer/conda/unified/.devcontainer/devcontainer.json b/.devcontainer/conda/unified/.devcontainer/devcontainer.json deleted file mode 100644 index da741fc06..000000000 --- a/.devcontainer/conda/unified/.devcontainer/devcontainer.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "shutdownAction": "stopContainer", - - "build": { - "context": "${localWorkspaceFolder}/.devcontainer", - "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", - "args": { - "CUDA": "12.0", - "LLVM": "16", - "PYTHON_PACKAGE_MANAGER": "conda" - } - }, - "hostRequirements": { - "gpu": true - }, - - "features": { - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:23.8": {} - }, - - "overrideFeatureInstallOrder": [ - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" - ], - - "initializeCommand": [ - "/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config,conda/pkgs,conda/unified} ${localWorkspaceFolder}/../{rmm,kvikio,cudf,raft,cumlprims_mg,cuml,cugraph-ops,cugraph,cuspatial}" - ], - - "updateContentCommand": [ - "/bin/bash", - "-c", - "mkdir -m 0755 -p ~/.config/clangd && cp -n /etc/skel/.config/clangd/config.yaml ~/.config/clangd/config.yaml" - ], - - "containerEnv": { - "DEFAULT_CONDA_ENV": "rapids" - }, - - "workspaceFolder": "/home/coder", - "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/${localWorkspaceFolderBasename},type=bind,consistency=consistent", - "mounts": [ - "source=${localWorkspaceFolder}/../rmm,target=/home/coder/rmm,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../kvikio,target=/home/coder/kvikio,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../cudf,target=/home/coder/cudf,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../raft,target=/home/coder/raft,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../cumlprims_mg,target=/home/coder/cumlprims_mg,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../cuml,target=/home/coder/cuml,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../cugraph-ops,target=/home/coder/cugraph-ops,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../cugraph,target=/home/coder/cugraph,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.conda/pkgs,target=/home/coder/.conda/pkgs,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.conda/unified,target=/home/coder/.conda/envs,type=bind,consistency=consistent" - ], - - "customizations": { - "vscode": { - "extensions": [ - "llvm-vs-code-extensions.vscode-clangd", - "mutantdino.resourcemonitor", - "ms-vscode.cpptools", - "nvidia.nsight-vscode-edition", - "seaube.clangformat", - "tamasfe.even-better-toml" - ], - "settings": { - "C_Cpp.vcpkg.enabled": false, - "C_Cpp.formatting": "disabled", - "C_Cpp.autocomplete": "disabled", - "C_Cpp.errorSquiggles": "disabled", - "C_Cpp.intelliSenseEngine": "disabled", - "C_Cpp.configurationWarnings": "disabled", - "C_Cpp.autoAddFileAssociations": false, - "clang-format.fallbackStyle": "none", - "files.trimFinalNewlines": true, - "files.insertFinalNewline": true, - "files.trimTrailingWhitespace": true, - "files.associations": { - "*.cu": "cuda-cpp", - "*.cuh": "cuda-cpp", - "**/libcudacxx/include/**/*": "cpp", - "**/libcudacxx-src/include/**/*": "cpp" - }, - "files.watcherExclude": { - "**/build/**": true, - "**/_skbuild/**": true, - "**/target/**": true - }, - "python.linting.flake8Enabled": true, - "[c]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cuda-cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - } - } - } - } -} diff --git a/.devcontainer/cuda11.8-conda/devcontainer.json b/.devcontainer/cuda11.8-conda/devcontainer.json new file mode 100644 index 000000000..a39cea813 --- /dev/null +++ b/.devcontainer/cuda11.8-conda/devcontainer.json @@ -0,0 +1,37 @@ +{ + "build": { + "context": "${localWorkspaceFolder}/.devcontainer", + "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", + "args": { + "CUDA": "11.8", + "PYTHON_PACKAGE_MANAGER": "conda", + "BASE": "rapidsai/devcontainers:23.10-cpp-llvm16-cuda11.8-mambaforge-ubuntu22.04" + } + }, + "hostRequirements": {"gpu": "optional"}, + "features": { + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:23.10": {} + }, + "overrideFeatureInstallOrder": [ + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" + ], + "initializeCommand": ["/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config,conda/pkgs,conda/${localWorkspaceFolderBasename}-cuda11.8-envs}"], + "postAttachCommand": ["/bin/bash", "-c", "if [ ${CODESPACES:-false} = 'true' ]; then . devcontainer-utils-post-attach-command; . rapids-post-attach-command; fi"], + "workspaceFolder": "/home/coder", + "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/cuspatial,type=bind,consistency=consistent", + "mounts": [ + "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.conda/pkgs,target=/home/coder/.conda/pkgs,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.conda/${localWorkspaceFolderBasename}-cuda11.8-envs,target=/home/coder/.conda/envs,type=bind,consistency=consistent" + ], + "customizations": { + "vscode": { + "extensions": [ + "ms-python.flake8", + "nvidia.nsight-vscode-edition" + ] + } + } +} diff --git a/.devcontainer/cuda11.8-pip/devcontainer.json b/.devcontainer/cuda11.8-pip/devcontainer.json new file mode 100644 index 000000000..15c5136c5 --- /dev/null +++ b/.devcontainer/cuda11.8-pip/devcontainer.json @@ -0,0 +1,36 @@ +{ + "build": { + "context": "${localWorkspaceFolder}/.devcontainer", + "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", + "args": { + "CUDA": "11.8", + "PYTHON_PACKAGE_MANAGER": "pip", + "BASE": "rapidsai/devcontainers:23.10-cpp-llvm16-cuda11.8-ubuntu22.04" + } + }, + "hostRequirements": {"gpu": "optional"}, + "features": { + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:23.10": {} + }, + "overrideFeatureInstallOrder": [ + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" + ], + "initializeCommand": ["/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config/pip,local/share/${localWorkspaceFolderBasename}-cuda11.8-venvs}"], + "postAttachCommand": ["/bin/bash", "-c", "if [ ${CODESPACES:-false} = 'true' ]; then . devcontainer-utils-post-attach-command; . rapids-post-attach-command; fi"], + "workspaceFolder": "/home/coder", + "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/cuspatial,type=bind,consistency=consistent", + "mounts": [ + "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.local/share/${localWorkspaceFolderBasename}-cuda11.8-venvs,target=/home/coder/.local/share/venvs,type=bind,consistency=consistent" + ], + "customizations": { + "vscode": { + "extensions": [ + "ms-python.flake8", + "nvidia.nsight-vscode-edition" + ] + } + } +} diff --git a/.devcontainer/cuda12.0-conda/devcontainer.json b/.devcontainer/cuda12.0-conda/devcontainer.json new file mode 100644 index 000000000..949e4d2f8 --- /dev/null +++ b/.devcontainer/cuda12.0-conda/devcontainer.json @@ -0,0 +1,37 @@ +{ + "build": { + "context": "${localWorkspaceFolder}/.devcontainer", + "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", + "args": { + "CUDA": "12.0", + "PYTHON_PACKAGE_MANAGER": "conda", + "BASE": "rapidsai/devcontainers:23.10-cpp-mambaforge-ubuntu22.04" + } + }, + "hostRequirements": {"gpu": "optional"}, + "features": { + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:23.10": {} + }, + "overrideFeatureInstallOrder": [ + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" + ], + "initializeCommand": ["/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config,conda/pkgs,conda/${localWorkspaceFolderBasename}-cuda12.0-envs}"], + "postAttachCommand": ["/bin/bash", "-c", "if [ ${CODESPACES:-false} = 'true' ]; then . devcontainer-utils-post-attach-command; . rapids-post-attach-command; fi"], + "workspaceFolder": "/home/coder", + "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/cuspatial,type=bind,consistency=consistent", + "mounts": [ + "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.conda/pkgs,target=/home/coder/.conda/pkgs,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.conda/${localWorkspaceFolderBasename}-cuda12.0-envs,target=/home/coder/.conda/envs,type=bind,consistency=consistent" + ], + "customizations": { + "vscode": { + "extensions": [ + "ms-python.flake8", + "nvidia.nsight-vscode-edition" + ] + } + } +} diff --git a/.devcontainer/cuda12.0-pip/devcontainer.json b/.devcontainer/cuda12.0-pip/devcontainer.json new file mode 100644 index 000000000..113e80533 --- /dev/null +++ b/.devcontainer/cuda12.0-pip/devcontainer.json @@ -0,0 +1,36 @@ +{ + "build": { + "context": "${localWorkspaceFolder}/.devcontainer", + "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", + "args": { + "CUDA": "12.0", + "PYTHON_PACKAGE_MANAGER": "pip", + "BASE": "rapidsai/devcontainers:23.10-cpp-llvm16-cuda12.0-ubuntu22.04" + } + }, + "hostRequirements": {"gpu": "optional"}, + "features": { + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:23.10": {} + }, + "overrideFeatureInstallOrder": [ + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" + ], + "initializeCommand": ["/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config/pip,local/share/${localWorkspaceFolderBasename}-cuda12.0-venvs}"], + "postAttachCommand": ["/bin/bash", "-c", "if [ ${CODESPACES:-false} = 'true' ]; then . devcontainer-utils-post-attach-command; . rapids-post-attach-command; fi"], + "workspaceFolder": "/home/coder", + "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/cuspatial,type=bind,consistency=consistent", + "mounts": [ + "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.local/share/${localWorkspaceFolderBasename}-cuda12.0-venvs,target=/home/coder/.local/share/venvs,type=bind,consistency=consistent" + ], + "customizations": { + "vscode": { + "extensions": [ + "ms-python.flake8", + "nvidia.nsight-vscode-edition" + ] + } + } +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 841df8838..000000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "shutdownAction": "stopContainer", - - "build": { - "context": "${localWorkspaceFolder}/.devcontainer", - "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", - "args": { - "CUDA": "12.0", - "LLVM": "16", - "PYTHON_PACKAGE_MANAGER": "conda" - } - }, - "hostRequirements": { - "gpu": true - }, - - "features": { - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:23.8": {} - }, - - "overrideFeatureInstallOrder": [ - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" - ], - - "initializeCommand": [ - "/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config,conda/pkgs,conda/${localWorkspaceFolderBasename}/single}" - ], - - "containerEnv": { - "DEFAULT_CONDA_ENV": "rapids" - }, - - "workspaceFolder": "/home/coder", - "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/${localWorkspaceFolderBasename},type=bind,consistency=consistent", - "mounts": [ - "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.conda/pkgs,target=/home/coder/.conda/pkgs,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.conda/${localWorkspaceFolderBasename}/single,target=/home/coder/.conda/envs,type=bind,consistency=consistent" - ], - - "customizations": { - "vscode": { - "extensions": [ - "llvm-vs-code-extensions.vscode-clangd", - "mutantdino.resourcemonitor", - "ms-vscode.cpptools", - "nvidia.nsight-vscode-edition", - "seaube.clangformat", - "tamasfe.even-better-toml" - ], - "settings": { - "C_Cpp.vcpkg.enabled": false, - "C_Cpp.formatting": "disabled", - "C_Cpp.autocomplete": "disabled", - "C_Cpp.errorSquiggles": "disabled", - "C_Cpp.intelliSenseEngine": "disabled", - "C_Cpp.configurationWarnings": "disabled", - "C_Cpp.autoAddFileAssociations": false, - "clang-format.fallbackStyle": "none", - "files.trimFinalNewlines": true, - "files.insertFinalNewline": true, - "files.trimTrailingWhitespace": true, - "files.associations": { - "*.cu": "cuda-cpp", - "*.cuh": "cuda-cpp", - "**/libcudacxx/include/**/*": "cpp", - "**/libcudacxx-src/include/**/*": "cpp" - }, - "files.watcherExclude": { - "**/build/**": true, - "**/_skbuild/**": true, - "**/target/**": true - }, - "python.linting.flake8Enabled": true, - "[c]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cuda-cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - } - } - } - } -} diff --git a/.devcontainer/launch.sh b/.devcontainer/launch.sh deleted file mode 100755 index 60bc3e38a..000000000 --- a/.devcontainer/launch.sh +++ /dev/null @@ -1,52 +0,0 @@ -#! /usr/bin/env bash - -launch_devcontainer() { - - # Ensure we're in the repo root - cd "$( cd "$( dirname "$(realpath -m "${BASH_SOURCE[0]}")" )" && pwd )/.."; - - local mode="${1:-single}"; - local pkgs="${2:-conda}"; - - case "${pkgs}" in - pip ) ;; - conda ) ;; - * ) pkgs="conda";; - esac - - case "${mode}" in - single ) ;; - unified ) ;; - isolated) ;; - * ) mode="single";; - esac - - local flavor="${pkgs}/${mode}"; - local workspace="$(basename "$(pwd)")"; - local tmpdir="$(mktemp -d)/${workspace}"; - local path="$(pwd)/.devcontainer/${flavor}"; - - mkdir -p "${tmpdir}"; - cp -arL "$path/.devcontainer" "${tmpdir}/"; - sed -i "s@\${localWorkspaceFolder}@$(pwd)@g" "${tmpdir}/.devcontainer/devcontainer.json"; - path="${tmpdir}"; - - local hash="$(echo -n "${path}" | xxd -pu - | tr -d '[:space:]')"; - local url="vscode://vscode-remote/dev-container+${hash}/home/coder"; - - echo "devcontainer URL: ${url}"; - - local launch=""; - if type open >/dev/null 2>&1; then - launch="open"; - elif type xdg-open >/dev/null 2>&1; then - launch="xdg-open"; - fi - - if [ -n "${launch}" ]; then - code --new-window "${tmpdir}"; - exec "${launch}" "${url}" >/dev/null 2>&1; - fi -} - -launch_devcontainer "$@"; diff --git a/.devcontainer/pip/isolated/.devcontainer/devcontainer.json b/.devcontainer/pip/isolated/.devcontainer/devcontainer.json deleted file mode 100644 index f1b0e9d6a..000000000 --- a/.devcontainer/pip/isolated/.devcontainer/devcontainer.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "shutdownAction": "stopContainer", - - "build": { - "context": "${localWorkspaceFolder}/.devcontainer", - "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", - "args": { - "CUDA": "12.0", - "LLVM": "16", - "PYTHON_PACKAGE_MANAGER": "pip" - } - }, - "hostRequirements": { - "gpu": true - }, - - "features": { - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:23.8": {} - }, - - "overrideFeatureInstallOrder": [ - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" - ], - - "initializeCommand": [ - "/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config/pip}" - ], - - "updateContentCommand": [ - "/bin/bash", "-c", "sudo chown -R $(id -u):$(id -g) /home/coder/${localWorkspaceFolderBasename} && mkdir -m 0755 -p ~/.config/clangd && cp -n /etc/skel/.config/clangd/config.yaml ~/.config/clangd/config.yaml && cp -ar /workspaces/${localWorkspaceFolderBasename} /home/coder/ && rapids-make-vscode-workspace --update" - ], - - "containerEnv": { - "DEFAULT_VIRTUAL_ENV": "rapids" - }, - - "workspaceFolder": "/home/coder", - "workspaceMount": "source=${localWorkspaceFolder},target=/workspaces/${localWorkspaceFolderBasename},type=bind,consistency=consistent", - "mounts": [ - "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", - "source=${localWorkspaceFolderBasename}-pip-isolated-${devcontainerId},target=/home/coder/${localWorkspaceFolderBasename},type=volume" - ], - - "customizations": { - "vscode": { - "extensions": [ - "llvm-vs-code-extensions.vscode-clangd", - "mutantdino.resourcemonitor", - "ms-vscode.cpptools", - "nvidia.nsight-vscode-edition", - "seaube.clangformat", - "tamasfe.even-better-toml" - ], - "settings": { - "C_Cpp.vcpkg.enabled": false, - "C_Cpp.formatting": "disabled", - "C_Cpp.autocomplete": "disabled", - "C_Cpp.errorSquiggles": "disabled", - "C_Cpp.intelliSenseEngine": "disabled", - "C_Cpp.configurationWarnings": "disabled", - "C_Cpp.autoAddFileAssociations": false, - "clang-format.fallbackStyle": "none", - "files.trimFinalNewlines": true, - "files.insertFinalNewline": true, - "files.trimTrailingWhitespace": true, - "files.associations": { - "*.cu": "cuda-cpp", - "*.cuh": "cuda-cpp", - "**/libcudacxx/include/**/*": "cpp", - "**/libcudacxx-src/include/**/*": "cpp" - }, - "files.watcherExclude": { - "**/build/**": true, - "**/_skbuild/**": true, - "**/target/**": true - }, - "python.linting.flake8Enabled": true, - "[c]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cuda-cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - } - } - } - } -} diff --git a/.devcontainer/pip/single/.devcontainer/devcontainer.json b/.devcontainer/pip/single/.devcontainer/devcontainer.json deleted file mode 100644 index a93626950..000000000 --- a/.devcontainer/pip/single/.devcontainer/devcontainer.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "shutdownAction": "stopContainer", - - "build": { - "context": "${localWorkspaceFolder}/.devcontainer", - "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", - "args": { - "CUDA": "12.0", - "LLVM": "16", - "PYTHON_PACKAGE_MANAGER": "pip" - } - }, - "hostRequirements": { - "gpu": true - }, - - "features": { - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:23.8": {} - }, - - "overrideFeatureInstallOrder": [ - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" - ], - - "initializeCommand": [ - "/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config/pip,local/${localWorkspaceFolderBasename}/single}" - ], - - "updateContentCommand": [ - "/bin/bash", - "-c", - "mkdir -m 0755 -p ~/.config/clangd && cp -n /etc/skel/.config/clangd/config.yaml ~/.config/clangd/config.yaml" - ], - - "containerEnv": { - "PYTHONSAFEPATH": "true", - "PYTHONUNBUFFERED": "true", - "DEFAULT_VIRTUAL_ENV": "rapids" - }, - - "workspaceFolder": "/home/coder", - "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/${localWorkspaceFolderBasename},type=bind,consistency=consistent", - "mounts": [ - "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.local/${localWorkspaceFolderBasename}/single,target=/home/coder/.local,type=bind,consistency=consistent" - ], - - "customizations": { - "vscode": { - "extensions": [ - "llvm-vs-code-extensions.vscode-clangd", - "mutantdino.resourcemonitor", - "ms-vscode.cpptools", - "nvidia.nsight-vscode-edition", - "seaube.clangformat", - "tamasfe.even-better-toml" - ], - "settings": { - "C_Cpp.vcpkg.enabled": false, - "C_Cpp.formatting": "disabled", - "C_Cpp.autocomplete": "disabled", - "C_Cpp.errorSquiggles": "disabled", - "C_Cpp.intelliSenseEngine": "disabled", - "C_Cpp.configurationWarnings": "disabled", - "C_Cpp.autoAddFileAssociations": false, - "clang-format.fallbackStyle": "none", - "files.trimFinalNewlines": true, - "files.insertFinalNewline": true, - "files.trimTrailingWhitespace": true, - "files.associations": { - "*.cu": "cuda-cpp", - "*.cuh": "cuda-cpp", - "**/libcudacxx/include/**/*": "cpp", - "**/libcudacxx-src/include/**/*": "cpp" - }, - "files.watcherExclude": { - "**/build/**": true, - "**/_skbuild/**": true, - "**/target/**": true - }, - "python.linting.flake8Enabled": true, - "[c]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cuda-cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - } - } - } - } -} diff --git a/.devcontainer/pip/unified/.devcontainer/devcontainer.json b/.devcontainer/pip/unified/.devcontainer/devcontainer.json deleted file mode 100644 index dff5e2d7c..000000000 --- a/.devcontainer/pip/unified/.devcontainer/devcontainer.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "shutdownAction": "stopContainer", - - "build": { - "context": "${localWorkspaceFolder}/.devcontainer", - "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", - "args": { - "CUDA": "12.0", - "LLVM": "16", - "PYTHON_PACKAGE_MANAGER": "pip" - } - }, - "hostRequirements": { - "gpu": true - }, - - "features": { - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:23.8": {} - }, - - "overrideFeatureInstallOrder": [ - "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" - ], - - "initializeCommand": [ - "/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config/pip,local/unified} ${localWorkspaceFolder}/../{rmm,kvikio,cudf,raft,cumlprims_mg,cuml,cugraph-ops,cugraph,cuspatial}" - ], - - "updateContentCommand": [ - "/bin/bash", - "-c", - "mkdir -m 0755 -p ~/.config/clangd && cp -n /etc/skel/.config/clangd/config.yaml ~/.config/clangd/config.yaml" - ], - - "containerEnv": { - "DEFAULT_VIRTUAL_ENV": "rapids" - }, - - "workspaceFolder": "/home/coder", - "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/${localWorkspaceFolderBasename},type=bind,consistency=consistent", - "mounts": [ - "source=${localWorkspaceFolder}/../rmm,target=/home/coder/rmm,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../kvikio,target=/home/coder/kvikio,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../cudf,target=/home/coder/cudf,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../raft,target=/home/coder/raft,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../cumlprims_mg,target=/home/coder/cumlprims_mg,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../cuml,target=/home/coder/cuml,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../cugraph-ops,target=/home/coder/cugraph-ops,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../cugraph,target=/home/coder/cugraph,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/../.local/unified,target=/home/coder/.local,type=bind,consistency=consistent" - ], - - "customizations": { - "vscode": { - "extensions": [ - "llvm-vs-code-extensions.vscode-clangd", - "mutantdino.resourcemonitor", - "ms-vscode.cpptools", - "nvidia.nsight-vscode-edition", - "seaube.clangformat", - "tamasfe.even-better-toml" - ], - "settings": { - "C_Cpp.vcpkg.enabled": false, - "C_Cpp.formatting": "disabled", - "C_Cpp.autocomplete": "disabled", - "C_Cpp.errorSquiggles": "disabled", - "C_Cpp.intelliSenseEngine": "disabled", - "C_Cpp.configurationWarnings": "disabled", - "C_Cpp.autoAddFileAssociations": false, - "clang-format.fallbackStyle": "none", - "files.trimFinalNewlines": true, - "files.insertFinalNewline": true, - "files.trimTrailingWhitespace": true, - "files.associations": { - "*.cu": "cuda-cpp", - "*.cuh": "cuda-cpp", - "**/libcudacxx/include/**/*": "cpp", - "**/libcudacxx-src/include/**/*": "cpp" - }, - "files.watcherExclude": { - "**/build/**": true, - "**/_skbuild/**": true, - "**/target/**": true - }, - "python.linting.flake8Enabled": true, - "[c]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - }, - "[cuda-cpp]": { - "editor.defaultFormatter": "seaube.clangformat" - } - } - } - } -} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 213950723..7dbcbda29 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -23,6 +23,7 @@ jobs: - wheel-tests-cuspatial - wheel-build-cuproj - wheel-tests-cuproj + - devcontainer secrets: inherit uses: rapidsai/shared-action-workflows/.github/workflows/pr-builder.yaml@branch-23.10 checks: @@ -102,3 +103,11 @@ jobs: with: build_type: pull-request script: ci/test_wheel_cuproj.sh + devcontainer: + secrets: inherit + uses: rapidsai/shared-action-workflows/.github/workflows/build-in-devcontainer.yaml@branch-23.10 + with: + build_command: | + sccache -z; + build-all -DBUILD_TESTS=ON -DBUILD_BENCHMARKS=ON --verbose; + sccache -s; diff --git a/.gitignore b/.gitignore index f080d2c06..a6627d3e7 100644 --- a/.gitignore +++ b/.gitignore @@ -155,3 +155,4 @@ notebooks/cu_taxi.zones.* # clang tooling compile_commands.json +.clangd/ diff --git a/ci/release/update-version.sh b/ci/release/update-version.sh index 2637a503e..5c17f032a 100755 --- a/ci/release/update-version.sh +++ b/ci/release/update-version.sh @@ -65,7 +65,6 @@ sed_runner "s/RAPIDS_VERSION_NUMBER=\".*/RAPIDS_VERSION_NUMBER=\"${NEXT_SHORT_TA # Need to distutils-normalize the original version NEXT_SHORT_TAG_PEP440=$(python -c "from setuptools.extern import packaging; print(packaging.version.Version('${NEXT_SHORT_TAG}'))") -NEXT_FULL_TAG_PEP440=$(python -c "from setuptools.extern import packaging; print(packaging.version.Version('${NEXT_FULL_TAG}'))") DEPENDENCIES=( cudf @@ -86,8 +85,8 @@ for DEP in "${DEPENDENCIES[@]}"; do done # Version in pyproject.toml -sed_runner "s/^version = .*/version = \"${NEXT_FULL_TAG_PEP440}\"/g" python/cuspatial/pyproject.toml -sed_runner "s/^version = .*/version = \"${NEXT_FULL_TAG_PEP440}\"/g" python/cuproj/pyproject.toml +sed_runner "s/^version = .*/version = \"${NEXT_FULL_TAG}\"/g" python/cuspatial/pyproject.toml +sed_runner "s/^version = .*/version = \"${NEXT_FULL_TAG}\"/g" python/cuproj/pyproject.toml # Dependency versions in dependencies.yaml sed_runner "/-cu[0-9]\{2\}==/ s/==.*/==${NEXT_SHORT_TAG_PEP440}.*/g" dependencies.yaml @@ -106,3 +105,8 @@ sed_runner "s/cuspatial:[0-9]\+.[0-9]/cuspatial:${NEXT_SHORT_TAG}/g" README.md sed_runner "s/cuspatial=[0-9]\+.[0-9]/cuspatial=${NEXT_SHORT_TAG}/g" README.md sed_runner "s/notebooks:[0-9]\+.[0-9]/notebooks:${NEXT_SHORT_TAG}/g" README.md +# .devcontainer files +find .devcontainer/ -type f -name devcontainer.json -print0 | while IFS= read -r -d '' filename; do + sed_runner "s@rapidsai/devcontainers:[0-9.]*@rapidsai/devcontainers:${NEXT_FULL_TAG}@g" "${filename}" + sed_runner "s@rapidsai/devcontainers/features/rapids-build-utils:[0-9.]*@rapidsai/devcontainers/features/rapids-build-utils:${NEXT_SHORT_TAG_PEP440}@" +done diff --git a/conda/environments/all_cuda-118_arch-x86_64.yaml b/conda/environments/all_cuda-118_arch-x86_64.yaml index 88b40d1cd..83ac445cb 100644 --- a/conda/environments/all_cuda-118_arch-x86_64.yaml +++ b/conda/environments/all_cuda-118_arch-x86_64.yaml @@ -7,6 +7,7 @@ channels: - nvidia dependencies: - c-compiler +- clang-tools=16.0.6 - cmake>=3.26.4 - cuda-version=11.8 - cudatoolkit diff --git a/conda/environments/all_cuda-120_arch-x86_64.yaml b/conda/environments/all_cuda-120_arch-x86_64.yaml index 312191cf9..f628e67b4 100644 --- a/conda/environments/all_cuda-120_arch-x86_64.yaml +++ b/conda/environments/all_cuda-120_arch-x86_64.yaml @@ -7,6 +7,7 @@ channels: - nvidia dependencies: - c-compiler +- clang-tools=16.0.6 - cmake>=3.26.4 - cuda-cudart-dev - cuda-cupti-dev diff --git a/cpp/.clangd b/cpp/.clangd index b066cf511..7c4fe036d 100644 --- a/cpp/.clangd +++ b/cpp/.clangd @@ -1,24 +1,32 @@ -# Apply this config conditionally to all C files +# https://clangd.llvm.org/config + +# Apply a config conditionally to all C files If: PathMatch: .*\.(c|h)$ -CompileFlags: - Compiler: /nvme/0/vyasr/rapids/compose/etc/conda/cuda_11.8/envs/rapids/bin/gcc --- -# Apply this config conditionally to all C++ headers +# Apply a config conditionally to all C++ files If: - PathMatch: .*\.(c|h)pp$ -CompileFlags: - Compiler: /nvme/0/vyasr/rapids/compose/etc/conda/cuda_11.8/envs/rapids/bin/g++ + PathMatch: .*\.(c|h)pp --- -# Apply this config conditionally to all CUDA headers +# Apply a config conditionally to all CUDA files If: - PathMatch: .*\.cuh?$ + PathMatch: .*\.cuh? CompileFlags: - Compiler: /usr/local/cuda/bin/nvcc + Add: + - "-x" + - "cuda" + # No error on unknown CUDA versions + - "-Wno-unknown-cuda-version" + # Allow variadic CUDA functions + - "-Xclang=-fcuda-allow-variadic-functions" +Diagnostics: + Suppress: + - "variadic_device_fn" + - "attributes_not_allowed" --- @@ -27,24 +35,31 @@ CompileFlags: Add: # report all errors - "-ferror-limit=0" + - "-fmacro-backtrace-limit=0" + - "-ftemplate-backtrace-limit=0" + # Skip the CUDA version check + - "--no-cuda-version-check" Remove: - # strip CUDA fatbin args - - "-Xfatbin*" - # strip CUDA arch flags + # remove gcc's -fcoroutines + - -fcoroutines + # remove nvc++ flags unknown to clang + - "-gpu=*" + - "-stdpar*" + # remove nvcc flags unknown to clang - "-arch*" - "-gencode*" - "--generate-code*" - # strip CUDA flags unknown to clang + - "-ccbin*" + - "-t=*" + - "--threads*" + - "-Xptxas*" + - "-Xcudafe*" + - "-Xfatbin*" + - "-Xcompiler*" + - "--diag-suppress*" + - "--diag_suppress*" + - "--compiler-options*" - "--expt-extended-lambda" - "--expt-relaxed-constexpr" - "-forward-unknown-to-host-compiler" - "-Werror=cross-execution-space-call" -Hover: - ShowAKA: No -InlayHints: - Enabled: No -Diagnostics: - Suppress: - - "variadic_device_fn" - - "attributes_not_allowed" - - "-Wdeprecated-declarations" diff --git a/cpp/cuproj/CMakeLists.txt b/cpp/cuproj/CMakeLists.txt index 2f4dadf8a..6d6df5d33 100644 --- a/cpp/cuproj/CMakeLists.txt +++ b/cpp/cuproj/CMakeLists.txt @@ -91,6 +91,8 @@ include(cmake/modules/ConfigureCUDA.cmake) # add third party dependencies using CPM rapids_cpm_init() +include(cmake/thirdparty/get_rmm.cmake) + # find or install GoogleTest and Proj if (CUPROJ_BUILD_TESTS) include(cmake/thirdparty/get_gtest.cmake) @@ -103,6 +105,8 @@ endif() add_library(cuproj INTERFACE) add_library(cuproj::cuproj ALIAS cuproj) +target_link_libraries(cuproj INTERFACE rmm::rmm) + set_target_properties(cuproj PROPERTIES BUILD_RPATH "\$ORIGIN" INSTALL_RPATH "\$ORIGIN" diff --git a/dependencies.yaml b/dependencies.yaml index b57f3c2e3..eb564f809 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -12,8 +12,11 @@ files: - develop - docs - py_version + - depends_on_rmm + - depends_on_cudf + - depends_on_cuml + - depends_on_cupy - run_python_cuspatial - - run_python_cuproj - test_python_cuspatial - test_python_cuproj - notebooks @@ -32,6 +35,7 @@ files: output: none includes: - cudatoolkit + - depends_on_cuml - notebooks - py_version checks: @@ -51,6 +55,8 @@ files: extras: table: build-system includes: + - depends_on_rmm + - depends_on_cudf - build_cpp - build_python - build_wheels @@ -60,6 +66,8 @@ files: extras: table: project includes: + - depends_on_rmm + - depends_on_cudf - run_python_cuspatial py_test_cuspatial: output: [pyproject] @@ -75,6 +83,7 @@ files: extras: table: build-system includes: + - depends_on_rmm - build_cpp_cuproj - build_python_cuproj - build_wheels @@ -84,7 +93,8 @@ files: extras: table: project includes: - - run_python_cuproj + - depends_on_rmm + - depends_on_cupy py_test_cuproj: output: [pyproject] pyproject_dir: python/cuproj @@ -198,15 +208,6 @@ dependencies: - cython>=3.0.0 - scikit-build>=0.13.1 - setuptools - - output_types: conda - packages: &build_python_packages_conda - - &cudf_conda cudf==23.10.* - - &rmm_conda rmm==23.10.* - - output_types: requirements - packages: - # pip recognizes the index as a global option for the requirements.txt file - # This index is needed for cudf and rmm. - - --extra-index-url=https://pypi.nvidia.com specific: - output_types: conda matrices: @@ -220,35 +221,13 @@ dependencies: packages: - *gcc_aarch64 - *sysroot_aarch64 - - output_types: [requirements, pyproject] - matrices: - - matrix: {cuda: "12.0"} - packages: - - cudf-cu12==23.10.* - - rmm-cu12==23.10.* - - matrix: {cuda: "11.8"} - packages: &build_python_packages_cu11 - - &cudf_cu11 cudf-cu11==23.10.* - - &rmm_cu11 rmm-cu11==23.10.* - - {matrix: {cuda: "11.5"}, packages: *build_python_packages_cu11} - - {matrix: {cuda: "11.4"}, packages: *build_python_packages_cu11} - - {matrix: {cuda: "11.2"}, packages: *build_python_packages_cu11} - - {matrix: null, packages: [*cudf_conda, *rmm_conda] } build_python_cuproj: common: - output_types: [conda, requirements, pyproject] packages: - - cython>=0.29,<0.30 + - cython>=3.0.0 - scikit-build>=0.13.1 - setuptools - - output_types: conda - packages: - - *rmm_conda - - output_types: requirements - packages: - # pip recognizes the index as a global option for the requirements.txt file - # This index is needed for cudf and rmm. - - --extra-index-url=https://pypi.nvidia.com specific: - output_types: conda matrices: @@ -262,18 +241,6 @@ dependencies: packages: - *gcc_aarch64 - *sysroot_aarch64 - - output_types: [requirements, pyproject] - matrices: - - matrix: {cuda: "12.0"} - packages: - - rmm-cu12==23.10.* - - matrix: {cuda: "11.8"} - packages: - - *rmm_cu11 - - {matrix: {cuda: "11.5"}, packages: *build_python_packages_cu11} - - {matrix: {cuda: "11.4"}, packages: *build_python_packages_cu11} - - {matrix: {cuda: "11.2"}, packages: *build_python_packages_cu11} - - {matrix: null, packages: [*rmm_conda] } build_wheels: common: - output_types: [requirements, pyproject] @@ -316,6 +283,9 @@ dependencies: - output_types: [conda, requirements] packages: - pre-commit + - output_types: conda + packages: + - clang-tools=16.0.6 docs: common: - output_types: [conda] @@ -339,22 +309,9 @@ dependencies: - pydeck - shapely - scikit-image - - output_types: conda - packages: - - &cuml_conda cuml==23.10.* - specific: - output_types: [requirements, pyproject] - matrices: - - {matrix: null, packages: [*cuml_conda]} - - matrix: {cuda: "12.0"} - packages: - - cuml-cu12==23.10.* - - matrix: {cuda: "11.8"} - packages: ¬ebooks_packages_cu11 - - &cuml_cu11 cuml-cu11==23.10.* - - {matrix: {cuda: "11.5"}, packages: *notebooks_packages_cu11} - - {matrix: {cuda: "11.4"}, packages: *notebooks_packages_cu11} - - {matrix: {cuda: "11.2"}, packages: *notebooks_packages_cu11} + packages: + - pyproj py_version: specific: - output_types: conda @@ -375,70 +332,135 @@ dependencies: - output_types: [conda, requirements, pyproject] packages: - geopandas>=0.11.0 + test_python_cuspatial: + common: + - output_types: [conda, requirements, pyproject] + packages: + - pytest + - pytest-cov + - pytest-xdist + test_python_cuproj: + common: + - output_types: [conda, requirements, pyproject] + packages: + - pytest + - pytest-cov + - pytest-xdist + - geopandas>=0.11.0 + - output_types: [requirements, pyproject] + packages: + - pyproj + + depends_on_rmm: + common: - output_types: conda packages: - - *cudf_conda - - *rmm_conda + - &rmm_conda rmm==23.10.* - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file - # This index is needed for cudf and rmm. - --extra-index-url=https://pypi.nvidia.com specific: - output_types: [requirements, pyproject] matrices: - - matrix: {cuda: "12.0"} - packages: - - cudf-cu12==23.10.* + - matrix: {cuda: "12.2"} + packages: &rmm_packages_pip_cu12 - rmm-cu12==23.10.* + - {matrix: {cuda: "12.1"}, packages: *rmm_packages_pip_cu12} + - {matrix: {cuda: "12.0"}, packages: *rmm_packages_pip_cu12} - matrix: {cuda: "11.8"} - packages: &run_python_cuspatial_packages_cu11 - - cudf-cu11==23.10.* + packages: &rmm_packages_pip_cu11 - rmm-cu11==23.10.* - - {matrix: {cuda: "11.5"}, packages: *run_python_cuspatial_packages_cu11} - - {matrix: {cuda: "11.4"}, packages: *run_python_cuspatial_packages_cu11} - - {matrix: {cuda: "11.2"}, packages: *run_python_cuspatial_packages_cu11} - - {matrix: null, packages: [*cudf_conda, *rmm_conda]} - run_python_cuproj: + - {matrix: {cuda: "11.5"}, packages: *rmm_packages_pip_cu11} + - {matrix: {cuda: "11.4"}, packages: *rmm_packages_pip_cu11} + - {matrix: {cuda: "11.2"}, packages: *rmm_packages_pip_cu11} + - {matrix: null, packages: [*rmm_conda]} + + depends_on_cudf: common: - output_types: conda packages: - - *rmm_conda - - cupy>=12.0.0 + - &cudf_conda cudf==23.10.* - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file - # This index is needed for rmm - - --extra-index-url=https://pypi.ngc.nvidia.com - - &cupy_pip cupy-cuda11x>=12.0.0 - - output_types: pyproject - packages: - - *cupy_pip + - --extra-index-url=https://pypi.nvidia.com specific: - output_types: [requirements, pyproject] matrices: - - matrix: {cuda: "12.0"} - packages: - - rmm-cu12==23.10.* + - matrix: {cuda: "12.2"} + packages: &cudf_packages_pip_cu12 + - cudf-cu12==23.10.* + - {matrix: {cuda: "12.1"}, packages: *cudf_packages_pip_cu12} + - {matrix: {cuda: "12.0"}, packages: *cudf_packages_pip_cu12} - matrix: {cuda: "11.8"} - packages: &run_python_cuproj_packages_cu11 - - rmm-cu11==23.10.* - - {matrix: {cuda: "11.5"}, packages: *run_python_cuproj_packages_cu11} - - {matrix: {cuda: "11.4"}, packages: *run_python_cuproj_packages_cu11} - - {matrix: {cuda: "11.2"}, packages: *run_python_cuproj_packages_cu11} - - {matrix: null, packages: [*rmm_conda]} - test_python_cuspatial: + packages: &cudf_packages_pip_cu11 + - cudf-cu11==23.10.* + - {matrix: {cuda: "11.5"}, packages: *cudf_packages_pip_cu11} + - {matrix: {cuda: "11.4"}, packages: *cudf_packages_pip_cu11} + - {matrix: {cuda: "11.2"}, packages: *cudf_packages_pip_cu11} + - {matrix: null, packages: [*cudf_conda]} + + depends_on_cuml: common: - - output_types: [conda, requirements, pyproject] + - output_types: conda packages: - - pytest - - pytest-cov - - pytest-xdist - test_python_cuproj: + - &cuml_conda cuml==23.10.* + - output_types: requirements + packages: + # pip recognizes the index as a global option for the requirements.txt file + - --extra-index-url=https://pypi.nvidia.com + specific: + - output_types: [requirements, pyproject] + matrices: + - matrix: {cuda: "12.2"} + packages: &cuml_packages_pip_cu12 + - cuml-cu12==23.10.* + - {matrix: {cuda: "12.1"}, packages: *cuml_packages_pip_cu12} + - {matrix: {cuda: "12.0"}, packages: *cuml_packages_pip_cu12} + - matrix: {cuda: "11.8"} + packages: &cuml_packages_pip_cu11 + - cuml-cu11==23.10.* + - {matrix: {cuda: "11.5"}, packages: *cuml_packages_pip_cu11} + - {matrix: {cuda: "11.4"}, packages: *cuml_packages_pip_cu11} + - {matrix: {cuda: "11.2"}, packages: *cuml_packages_pip_cu11} + - {matrix: null, packages: [*cuml_conda]} + + depends_on_cupy: common: - - output_types: [conda, requirements, pyproject] + - output_types: conda packages: - - pytest - - pytest-cov - - pytest-xdist - - geopandas>=0.11.0 + - cupy>=12.0.0 + specific: + - output_types: [requirements, pyproject] + matrices: + # All CUDA 12 + x86_64 versions + - matrix: {cuda: "12.2", arch: x86_64} + packages: &cupy_packages_cu12_x86_64 + - cupy-cuda12x>=12.0.0 + - {matrix: {cuda: "12.1", arch: x86_64}, packages: *cupy_packages_cu12_x86_64} + - {matrix: {cuda: "12.0", arch: x86_64}, packages: *cupy_packages_cu12_x86_64} + + # All CUDA 12 + aarch64 versions + - matrix: {cuda: "12.2", arch: aarch64} + packages: &cupy_packages_cu12_aarch64 + - cupy-cuda12x -f https://pip.cupy.dev/aarch64 # TODO: Verify that this works. + - {matrix: {cuda: "12.1", arch: aarch64}, packages: *cupy_packages_cu12_aarch64} + - {matrix: {cuda: "12.0", arch: aarch64}, packages: *cupy_packages_cu12_aarch64} + + # All CUDA 11 + x86_64 versions + - matrix: {cuda: "11.8", arch: x86_64} + packages: &cupy_packages_cu11_x86_64 + - cupy-cuda11x>=12.0.0 + - {matrix: {cuda: "11.5", arch: x86_64}, packages: *cupy_packages_cu11_x86_64} + - {matrix: {cuda: "11.4", arch: x86_64}, packages: *cupy_packages_cu11_x86_64} + - {matrix: {cuda: "11.2", arch: x86_64}, packages: *cupy_packages_cu11_x86_64} + + # All CUDA 11 + aarch64 versions + - matrix: {cuda: "11.8", arch: aarch64} + packages: &cupy_packages_cu11_aarch64 + - cupy-cuda11x -f https://pip.cupy.dev/aarch64 # TODO: Verify that this works. + - {matrix: {cuda: "11.5", arch: aarch64}, packages: *cupy_packages_cu11_aarch64} + - {matrix: {cuda: "11.4", arch: aarch64}, packages: *cupy_packages_cu11_aarch64} + - {matrix: {cuda: "11.2", arch: aarch64}, packages: *cupy_packages_cu11_aarch64} + - {matrix: null, packages: [cupy-cuda11x>=12.0.0]} diff --git a/python/cuproj/pyproject.toml b/python/cuproj/pyproject.toml index 7a25d921a..525c9fda6 100644 --- a/python/cuproj/pyproject.toml +++ b/python/cuproj/pyproject.toml @@ -16,7 +16,7 @@ build-backend = "setuptools.build_meta" requires = [ "cmake>=3.26.4", - "cython>=0.29,<0.30", + "cython>=3.0.0", "ninja", "rmm==23.10.*", "scikit-build>=0.13.1", @@ -49,6 +49,7 @@ classifiers = [ [project.optional-dependencies] test = [ "geopandas>=0.11.0", + "pyproj", "pytest", "pytest-cov", "pytest-xdist",