Skip to content

Issue with DeviceResource (cudaMallocAsync) on vGPU without memory pool support #2255

Description

@swahtz

When attempting to use the AWS EC2 g6f instance type for CI in fvdb-core (working prototype on this branch), we receive an error at the first call to cudaMallocAsync at nanovdb/cuda/DeviceResource.h:22: CUDA error 801: operation not supported

Through some investigation, it appears that the stream-ordered memory pools capability is not exposed by the vGPU (g6f is a fractional L4 GPU instance). Confirmed when running:

> #include <cuda_runtime.h>
> #include <stdio.h>
>
> int main() {
>   int supported = 0, driver = 0;
>   cudaDriverGetVersion(&driver);
>   cudaError_t e = cudaDeviceGetAttribute(
>       &supported, cudaDevAttrMemoryPoolsSupported, 0);
>   printf("driver=%d, query=%s, memoryPoolsSupported=%d\n",
>          driver, cudaGetErrorString(e), supported);
>   return e != cudaSuccess || !supported;
> }

driver=13000, query=no error, memoryPoolsSupported=0

These instances are running the latest AWS-supplied GRID driver (version 19.5/580.159.03) and can confirm the GPU device is available:

>nvidia-smi
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.159.03             Driver Version: 580.159.03     CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA L4-3Q                   On  |   00000000:31:00.0 Off |                    0 |
| N/A   N/A    P0            N/A  /  N/A  |       0MiB /   3072MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

From reading, it appears that memory pools can be enabled/disabled via hypervisor settings on the vGPU's setup. This seems likely to be disabled due to security concerns; I have opened up an AWS support ticket to confirm if this behaviour is intentional.

Regardless, support for this operating scenario (driver/hardware/CUDA support for cudaMallocAsync but unavailable capability) would require utilizing cudaMalloc (or a custom allocator) instead. This is a related issue in the work for #2232 and allowing NanoVDB to use an alternative allocator to enable successful execution on a vGPU configured in this way could be acceptance criteria for that work.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions