[ANN] SCS-0.7.1 comes with GPU support

Dear all,

I’m pleased to announce the release of SCS.jl-0.7.1, which finally plumbed the optional support for the gpu indirect solver through jlls.

Since we didn’t want to depend on CUDA_jll (a huge dependancy), the gpu solver is enabled only if using SCS is done AFTER using CUDA_jll. The SCS_GPU_jll providing the support depends on CUDA_jll@9.0, so remember to pin the version appropriately :wink:

One way to make sure that the gpu solver is available is to check SCS.available_solvers:

julia> import Pkg

julia> Pkg.add(Pkg.PackageSpec(name = "CUDA_jll", version = "9.0"))

julia> using CUDA_jll  # This must be called before `using SCS`.

julia> using SCS

julia> SCS.available_solvers
3-element Array{DataType,1}:
 SCS.DirectSolver
 SCS.IndirectSolver
 SCS.GpuIndirectSolver

julia> solver = SCS.Optimizer(linear_solver = SCS.GpuIndirectSolver)
SCS.Optimizer

Of course the support is very young, so don’t forget to file issues/submit PRs is something goes awry :wink:

5 Likes

Thank you for providing GPU support for SCS!
However, I have trouble getting it to work. After following your instructions on SCS.jl-0.7.1, and CUDA_jll version 9.0, I get

julia> using CUDA_jll
[NVBLAS] NVBLAS_CONFIG_FILE environment variable is NOT set : relying on default config filename 'nvblas.conf'
[NVBLAS] Cannot open default config file 'nvblas.conf'
[NVBLAS] Config parsed
[NVBLAS] CPU Blas library need to be provided

after trying to run an SCS optimization using the GPUIndirectSolver, I get

ERROR: could not load library "/home/david/.julia/artifacts/8ae303d28090f987e71f6f5337ab4cf2d8a458bd/lib/libscsgpuindir.so"
libcudart.so.10.1: cannot open shared object file: No such file or directory

Did the state-of-the-art GPU integration change?
Do I have to recompile SCS from source?
Any help appreciated!

Did the state-of-the-art GPU integration change?

Try the latest instructions: GitHub - jump-dev/SCS.jl: Julia Wrapper for SCS (https://github.com/cvxgrp/scs). You need CUDA_jll@10.1