3 Commits

Author SHA1 Message Date
Cosmin Ștefan Ciocan 5741c52254 Setup Kaggle environment on extension load (#31)
* Automatically setup kaggle environment https://github.com/andreinechaev/nvcc4jupyter/issues/29

* Update package lists before installing cuda toolkit
2024-04-03 17:23:33 +02:00
Cosmin Ștefan Ciocan 4664a4ef47 Update __init__.py
Bump version to 1.2.0
2024-03-20 12:13:23 +01:00
Cosmin Ștefan Ciocan 0bddf6a6e6 Add option to choose between NSYS and NCU profilers (#28)
* Add option to give nvcc extra arguments

* Add test for nvcc options that changes c++ dialect from c++17 to c++14

* Add make and the english language pack to devcontainer to be able to build the documentation

* Update documentation config to automatically import the current version of the package

* Document new --compiler-args argument

* Improve tests coverage by testing for bad arguments and the error output during a failed compilation

* Add IPython to docs requirements to allow the __version__ import for readthedocs env

* Change devcontainer base image to have the latest CUDA toolkit

* Mock the nsight compute tool with a bash script

* Add test to compile with opencv

* Add new page to documentation that contains a new notebook that explains compiling with external libraries

* Add autodocstring vscode extension to devcontainer

* Add function that modifies the default profiler/compiler arguments to allow reusing them in multiple magic command calls

* Update pylint exceptions

* Update contributing instructions

* Change version from 1.0.3 to 1.1.0 due to adding features in a backward-compatible manner

* Install latest CUDA toolkit on the test runner to pass the OpenCV compilation test

* Install opencv in test runner and update code coverage install

* Add CUDA bin to PATH in test and coverage runners

* Add cuda bin to path variable in .bashrc

* Update way to set environment variable PATH in github action

* Change devcontainer base image back to ubuntu:22.04 to match the environment from the test runner

* Add option to choose between NSYS and NCU profilers

* Add tests for choosing the profiler

* Add isort config to help it find local modules so they are not considered 3rd party libraries

* Replace experimental-string-processing black formatter config with enable-unstable-feature as it was removed in version 24.1.0

* Search for profiling tools executable paths when they are required

* Install dev dependencies in editable mode

* Add documentation for using Nsight Systems instead of the default Nsight Compute profiling tool

* Fix cuda typo

* Mention Nsight Systems in README.md
2024-03-20 11:42:27 +01:00
5 changed files with 79 additions and 4 deletions
-3
View File
@@ -28,9 +28,6 @@ pip-delete-this-directory.txt
nosetests.xml
coverage.xml
# Virtual Environment
*env*
# Misc
.pytest_cache/
.DS_Store
+1 -1
View File
@@ -5,4 +5,4 @@ nvcc4jupyter: CUDA C++ plugin for Jupyter Notebook
from .parsers import Profiler, set_defaults # noqa: F401
from .plugin import NVCCPlugin, load_ipython_extension # noqa: F401
__version__ = "1.1.0"
__version__ = "1.2.1"
+2
View File
@@ -23,6 +23,7 @@ from .parsers import (
get_parser_cuda_group_save,
)
from .path_utils import CUDA_SEARCH_PATHS, find_executable
from .setup_env import setup_environment
DEFAULT_EXEC_FNAME = "cuda_exec.out"
SHARED_GROUP_NAME = "shared"
@@ -364,5 +365,6 @@ def load_ipython_extension(shell: InteractiveShell):
"""
Method used by IPython to load the extension.
"""
setup_environment()
nvcc_plugin = NVCCPlugin(shell)
shell.register_magics(nvcc_plugin)
+72
View File
@@ -0,0 +1,72 @@
"""
Setup steps for platforms such as Kaggle, Colab, etc. to allow our extension
to work on them immediately after loading it.
"""
# pylint: disable=missing-function-docstring
import os
import traceback
from subprocess import DEVNULL, STDOUT, check_call
from typing import Optional
PATH_PRIORITY_DIR = "/usr/bin/priority"
KAGGLE_GCC_8_PATH = "/usr/bin/gcc-8"
def print_platform(platform: str) -> None:
print(f'Detected platform "{platform}". Running its setup...')
def kaggle_setup() -> None:
print("Updating the package lists...")
check_call(["/usr/bin/apt-get", "update"], stdout=DEVNULL, stderr=STDOUT)
print("Installing nvidia-cuda-toolkit, this may take a few minutes...")
check_call(
["/usr/bin/apt-get", "install", "-y", "nvidia-cuda-toolkit"],
stdout=DEVNULL,
stderr=STDOUT,
)
os.makedirs(PATH_PRIORITY_DIR, exist_ok=True)
gcc_symlink_path = os.path.join(PATH_PRIORITY_DIR, "gcc")
if not os.path.exists(gcc_symlink_path):
os.symlink(KAGGLE_GCC_8_PATH, gcc_symlink_path)
if PATH_PRIORITY_DIR not in os.environ["PATH"].split(":"):
os.environ["PATH"] = f"{PATH_PRIORITY_DIR}:" + os.environ["PATH"]
def colab_setup() -> None:
pass
def setup_environment() -> None:
"""
Detect the platform the extension was loaded on and run the necessary
steps (install dependencies, add executables to PATH, etc.) for the
extension to work.
"""
if "NVCC4JUPYTER_NO_SETUP" in os.environ:
return
platform: Optional[str] = None
try:
if "KAGGLE_URL_BASE" in os.environ:
platform = "Kaggle"
print_platform(platform)
kaggle_setup()
elif "COLAB_RELEASE_TAG" in os.environ:
platform = "Colab"
print_platform(platform)
colab_setup()
except Exception: # pylint: disable=broad-exception-caught
print(
f'Setup failed for detected platform "{platform}". Set the'
' "NVCC4JUPYTER_NO_SETUP" environment variable to disable running'
" the setup on load. Please report the following error to"
" https://github.com/andreinechaev/nvcc4jupyter/issues:"
f" following error message:\n{traceback.format_exc()}"
)
+4
View File
@@ -88,6 +88,10 @@ enable-unstable-feature = ["string_processing"]
[tool.coverage.run]
branch = true
omit = [
# cannot test installing dependencies on platforms such as kaggle
"nvcc4jupyter/setup_env.py",
]
[tool.pyright]
include = ["src"]