Hi again,
I’d like to report more on these issues,
I’d like to start from the MGMN mode. I’ve found a version (1.3.4) of NCCL from a GitHub page and it had Visual Studio project files in it and I compiled it using CUDA 12.3. When I reexamined the documentation for Multi-Gpu support, I realized I needed the libcudss_commlayer_nccl library too. I’ve found cudss_commlayer_nccl.cu file in the Linux version of cuDSS however when I tried to compile it, it required the ncclSend and ncclRecv functions which weren’t available in NCCL1.x version. So this is a dead-end I believe. However, MGMN mode is not so important for me. On the other side, there seems to be very little information for the NCCL1.x on the web
Let me continue with the hybrid mode, I have a system with 128GB of main memory and multiple RTX 3090s (24GB of VRAM). I’m also watching the VRAM and main memory usage through various software in real time. So I’ll give you the results of two experiments and some numbers. (I’m working with complex, 64-bit numbers, matrices, and vectors)
I started with a smaller matrix. I put a limit on VRAM allocation limit of 3GB. CUDSS_DATA_LU_NNZ option said to me there would be 596.213.531 non-zero entries in the factors. When this number is multiplied by 16 bytes (because it should double-complex entries), I would obtain 9GB of RAM usage. (I don’t know if cuDSS uses CSR or COO format for the factors, L and U) .VRAM usage increased by 3 GB and main memory usage increased by 9GB. I was able to solve the system correctly. However, I also set CUDSS_LOG_LEVEL=5 and I received this info written to a file.
[CUDSS][7344][Info][cudssExecute] With a user-defined hybrid device memory limit 3221225472 hybrid device nnz computed as 167444758 (83722379 = 0.07797254156321287 GB for L and 83722379 = 0.07797254156321287 GB for U)
This info entry seems to be wrong. “device nnz computed as 167444758” should mean the number of nnz entries on the device. I figured this out while increasing the allowed VRAM memory. However. 83722379 number of entries shouldn’t be equal to 0.07797254156321287 GBs.
When I increased the allowed VRAM memory (to 24GB) it still allocated 9GB of data on the host side. When I turned off the hybrid mode, the factorization timing reduced from 35secs to 25 secs. So I think it still tries to use the host side when it is unnecessary.
As for the second experiment, I used a larger matrix that would be using 15-16GB of VRAM (for the factors) and it is perfectly solvable with the hybrid mode being off. When I switched to hybrid mode and set the VRAM allocation limit to 24GB, I received this info:
[Info][cudssExecute] With a user-defined hybrid device memory limit 25769803776 hybrid device nnz computed as 1561967081 (479363720 = 0.44644225388765335 GB for L and 475169509 = 0.4425360905006528 GB for U)
CUDSS_DATA_LU_NNZ reports that there would be 954533229 entries and it is consistent with “L_nnz=479363720+U_nnz=475169509”. Like the previous experiment, the GB values didn’t make sense and it tried to allocate 15-16 GB on the host side again. However, unlike the previous experimentation this time the factorization phase exits with CUDSS_STATUS_EXECUTION_FAILED error.
These suggest there should be a bug in the hybrid mode.
Cheers
Deniz