Skip to content

Commit c1577a4

Browse files
committed
Add cuda-compat hook if required
This change adds the cuda-compat hook to the incomming OCI runtime spec if the allow-cuda-compat-libs-from-container feature flag is not enabled. Signed-off-by: Evan Lezar <[email protected]>
1 parent a988339 commit c1577a4

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

internal/discover/compat_libs.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package discover
2+
3+
import (
4+
"strings"
5+
6+
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
7+
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/root"
8+
)
9+
10+
func NewCUDACompatLibsDiscoverer(logger logger.Interface, nvidiaCDIHookPath string, driver *root.Driver) Discover {
11+
_, cudaVersionPattern := getCUDALibRootAndVersionPattern(logger, driver)
12+
var args []string
13+
if !strings.Contains(cudaVersionPattern, "*") {
14+
args = append(args, "--driver-version", cudaVersionPattern)
15+
}
16+
17+
return CreateNvidiaCDIHook(
18+
nvidiaCDIHookPath,
19+
"cuda-compat",
20+
args...,
21+
)
22+
}

internal/modifier/gated.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/NVIDIA/nvidia-container-toolkit/internal/config/image"
2424
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover"
2525
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
26+
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/root"
2627
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
2728
)
2829

@@ -35,7 +36,7 @@ import (
3536
// NVIDIA_GDRCOPY=enabled
3637
//
3738
// If not devices are selected, no changes are made.
38-
func NewFeatureGatedModifier(logger logger.Interface, cfg *config.Config, image image.CUDA) (oci.SpecModifier, error) {
39+
func NewFeatureGatedModifier(logger logger.Interface, cfg *config.Config, image image.CUDA, driver *root.Driver) (oci.SpecModifier, error) {
3940
if devices := image.VisibleDevicesFromEnvVar(); len(devices) == 0 {
4041
logger.Infof("No modification required; no devices requested")
4142
return nil, nil
@@ -78,5 +79,10 @@ func NewFeatureGatedModifier(logger logger.Interface, cfg *config.Config, image
7879
discoverers = append(discoverers, d)
7980
}
8081

82+
if !cfg.Features.AllowCUDACompatLibsFromContainer.IsEnabled() {
83+
compatLibHookDiscoverer := discover.NewCUDACompatLibsDiscoverer(logger, cfg.NVIDIACTKConfig.Path, driver)
84+
discoverers = append(discoverers, compatLibHookDiscoverer)
85+
}
86+
8187
return NewModifierFromDiscoverer(logger, discover.Merge(discoverers...))
8288
}

internal/runtime/runtime_factory.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func newSpecModifier(logger logger.Interface, cfg *config.Config, ociSpec oci.Sp
9292
}
9393
modifiers = append(modifiers, graphicsModifier)
9494
case "feature-gated":
95-
featureGatedModifier, err := modifier.NewFeatureGatedModifier(logger, cfg, image)
95+
featureGatedModifier, err := modifier.NewFeatureGatedModifier(logger, cfg, image, driver)
9696
if err != nil {
9797
return nil, err
9898
}

0 commit comments

Comments
 (0)