Skip to content

release_notes_v21.12.00

Gigon Bae edited this page Dec 9, 2021 · 5 revisions

Version 21.12.00 (Dec 08, 2021)

This version would be available through both Conda (https://anaconda.org/rapidsai/cucim) and PyPI package (https://pypi.org/project/cucim/21.12.0/).

🚀 New Features

  1. Support Aperio SVS with CPU LZW and jpeg2k decoder (#141) @gigony
  2. Add NVTX support for performance analysis (#144) @gigony
  3. Normalize operation (#150) @shekhardw

1. Support Aperio SVS (.svs)

cuCIM now supports Aperio SVS format with help of OpenJpeg for decoding jpeg2k-compressed data.

Please check this notebook to see how to use the feature.

Unaligned Case (per_process, JPEG-compressed SVS file)

image

Unaligned Case (per_process, JPEG2000 RGB-compressed SVS file)

image

Unaligned Case (per_process, JPEG2000 YCbCr-compressed SVS file)

image

The detailed data is available here.

2. Add NVTX support for performance analysis

Important methods in cuCIM are instrumented with NVTX so can see performance bottlenecks easily with NSight systems.

Tracing can be enabled through config file or environment variable or through API and less than 1% performance overheads in normal execution.

Enabling Tracing

Through .cucim.json file
{
        "profiler" : { "trace": true }
}
Through Environment variable
CUCIM_TRACE=1 python
Through API
from cucim import CuImage

CuImage.profiler(trace=True)
#or
CuImage.profiler().trace(True)

CuImage.profiler().config
# {'trace': True}
CuImage.profiler().trace()
# True
CuImage.is_trace_enabled # this is simpler method.
# True

Profiling with NVIDIA Nsight Systems

nsys profile -f true -t cuda,nvtx,osrt -s cpu -x true --trace-fork-before-exec true -o my_profile `which python` benchmark.py
# can add `--stats true`

Then, execute nsight-sys to open the profile results (my_profile.qdrep).

image

With this feature, a bug in cuCIM v21.10.01 (thread contention in Cache) was found and fixed (#145).

3. Normalize operation

CUDA-based normalization operation is added. Normalization supports the following types.

  1. Simple range based normalization
  2. Arctangent based normalization

Arctangent-based normalization helps to stretch lower intensity pixels in the image slightly better than range-based normalization. If you look at its graph, there is a huge variation at certain lower intensities, but as intensities become higher, the curve becomes flatter. This helps in isolating regions like lungs (and regions within lungs) more efficiently. There can be separate use cases depending on the modality and the application.

Please check the test cases to see how you can use the operation.

🐛 Bug Fixes

  • Load libcufile.so with RTLD_NODELETE flag (#177) @gigony
  • Remove rmm/nvcc dependencies to fix cudaErrorUnsupportedPtxVersion error (#175) @gigony
  • Do not compile code with nvcc if no CUDA kernel exists (#171) @gigony
  • Fix a segmentation fault due to unloaded libcufile (#158) @gigony
  • Fix thread contention in Cache (#145) @gigony
  • Build with NumPy 1.17 (#148) @jakirkham

📖 Documentation

🛠️ Improvements