
A tiled raster workflow can combine Rasterio I/O with GPU array processing. Validate band meaning, masks, georeferencing and numerical results before comparing performance. This guide describes those checks; it does not certify a universal GeoTIFF or GPU-decoding recipe.
Start with CPU reading, optional GPU computation and CPU writing. Include transfers and I/O in the benchmark: a GPU does not guarantee a speedup. Evaluate cuCIM decoding separately for the exact format, plugin and version.
Two environment options to validate:
A) Existing tested image
Record its registry tag, digest, driver requirements and package versions. Do not use an unresolved RAPIDS 24.xx image placeholder.
B) Reproducible environment
Choose compatible Rasterio/GDAL and CuPy versions; add cuCIM only for the separately validated decoding path.
Keep a dependency lock and verify a small input/output fixture before processing real files. A successful import does not establish codec support, GPU execution or correct geospatial output.
Check the runtime’s GPU assignment and driver capabilities. These NVIDIA settings depend on the host configuration and do not allocate a GPU:
NVIDIA_VISIBLE_DEVICES=allNVIDIA_DRIVER_CAPABILITIES=compute,utilitySanity check inside the container:
nvidia-smi
COGs use internal tiles and overview levels for windowed access. Choose a block layout and compression supported by your reader, then measure I/O on representative files. Preserve the originals until the converted data, masks and georeferencing are validated.
Check the available configuration and software compatibility before launching. Measure results against a reference and keep an independent backup of your inputs and outputs.
This pattern applies to inputs your Rasterio/GDAL build can read. Preserve georeferencing explicitly and validate the output; copying a profile alone does not preserve all band semantics or masks.
NDVI workflow checks for red and near-infrared bands
Identify the red and near-infrared bands from the dataset specification, not fixed band numbers. Apply required scale/offset calibration and read each band's validity mask. Compute (NIR − red) / (NIR + red) only where both inputs are valid and the denominator is nonzero. Keep invalid pixels invalid. Write to a new output, then compare valid values, masks, CRS, transform and dimensions against a CPU reference.
Output validation
src.read() reads and decompresses the requested data.Check cuCIM’s format and plugin documentation. Support for tiled RGB TIFF does not establish support for every multispectral GeoTIFF. Plugin behavior is version-dependent.
Before adopting a cuCIM path, test a known file and inspect its dimensions, channels, dtype and output device using the API for the installed version. Do not assume the fourth array channel is NIR or that a default region read returns GPU memory. Compare decoded values and masks with Rasterio before using the result in NDVI.
Caveats
Choose a target CRS, grid and resampling method appropriate to the data. A virtual warp performs reprojection when read; it does not materialize a completed warp just by creating the view.
Use WarpedVRT with explicit source/destination nodata behavior and a deliberate resampling method. Validate the target grid and masks on a small region, close all datasets, and only then add GPU calculations. Do not use bilinear interpolation indiscriminately for categorical data.
Why this approach
Record input format, bands and calibration, masks, grid, codecs, software lock, GPU/plugin choices and output checks. Time reading, transfer, computation and writing separately; report end-to-end time and peak memory.
Cost per 100 GB processed
For a nonzero processed volume, normalized cost per 100 GB = total measured cost × 100 / processed GB. State whether GB refers to compressed input or decoded data, and include failed attempts when comparing workflows.
GPU memory exhausted
Use smaller windows or fewer concurrent windows. Release arrays no longer needed; CuPy’s public memory-pool API can release unused cached blocks, not live arrays. Do not change precision without checking accuracy.
Weird results
Mismatched bands or nodata handling. Check band order; propagate nodata to the output.
Slow reads
Check storage, compression and block layout. Benchmark a representative COG conversion before applying it to the dataset; conversion alone does not guarantee faster reads.
cuCIM errors
Fall back to Pattern A and log the file’s creation info for later conversion.
Preserve the exact environment, input checksums, band mapping, calibration, masks, target grid, resampling, output profile and comparison results. Record measured device placement and plugin version if cuCIM is used. This is a checklist, not executable YAML.
Use custom templates to reuse a tested container configuration. Check software compatibility and available capacity separately. Back up data outside the instance and check the current restart and retention conditions before stopping it.
Pick one AI, compute, or storage workload and see the difference for yourself. Spin it up in minutes, or let our team map your fastest path to production.