Skip to content

Commit f15964f

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 d596509 commit f15964f

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

internal/discover/compat_libs.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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+
// NewCUDACompatHookDiscoverer creates a discoverer for a cuda-compat hook.
11+
// This hook is responsible for setting up CUDA compatibility in the container and depends on the host driver version.
12+
func NewCUDACompatHookDiscoverer(logger logger.Interface, nvidiaCDIHookPath string, driver *root.Driver) Discover {
13+
_, cudaVersionPattern := getCUDALibRootAndVersionPattern(logger, driver)
14+
var args []string
15+
if !strings.Contains(cudaVersionPattern, "*") {
16+
args = append(args, "--host-driver-version="+cudaVersionPattern)
17+
}
18+
19+
return CreateNvidiaCDIHook(
20+
nvidiaCDIHookPath,
21+
"cuda-compat",
22+
args...,
23+
)
24+
}

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.NewCUDACompatHookDiscoverer(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)