mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2024-11-24 21:14:00 +00:00
Only init nvml as required when generating CDI specs
CDI generation modes such as management and wsl don't require NVML. This change removes the top-level instantiation of nvmllib and replaces it with an instanitation in the nvml CDI spec generation code. Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
parent
380eb8340a
commit
685802b1ce
@ -3,6 +3,7 @@
|
|||||||
## v1.13.0-rc.3
|
## v1.13.0-rc.3
|
||||||
|
|
||||||
* Prefer /run over /var/run when locating nvidia-persistenced and nvidia-fabricmanager sockets.
|
* Prefer /run over /var/run when locating nvidia-persistenced and nvidia-fabricmanager sockets.
|
||||||
|
* Only initialize NVML for modes that require it when runing `nvidia-ctk cdi generate`
|
||||||
|
|
||||||
## v1.13.0-rc.2
|
## v1.13.0-rc.2
|
||||||
|
|
||||||
|
@ -30,8 +30,6 @@ import (
|
|||||||
specs "github.com/container-orchestrated-devices/container-device-interface/specs-go"
|
specs "github.com/container-orchestrated-devices/container-device-interface/specs-go"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
"gitlab.com/nvidia/cloud-native/go-nvlib/pkg/nvlib/device"
|
|
||||||
"gitlab.com/nvidia/cloud-native/go-nvlib/pkg/nvml"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -190,21 +188,11 @@ func (m command) generateSpec(cfg *config) (spec.Interface, error) {
|
|||||||
return nil, fmt.Errorf("failed to create device namer: %v", err)
|
return nil, fmt.Errorf("failed to create device namer: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
nvmllib := nvml.New()
|
|
||||||
if r := nvmllib.Init(); r != nvml.SUCCESS {
|
|
||||||
return nil, r
|
|
||||||
}
|
|
||||||
defer nvmllib.Shutdown()
|
|
||||||
|
|
||||||
devicelib := device.New(device.WithNvml(nvmllib))
|
|
||||||
|
|
||||||
cdilib := nvcdi.New(
|
cdilib := nvcdi.New(
|
||||||
nvcdi.WithLogger(m.logger),
|
nvcdi.WithLogger(m.logger),
|
||||||
nvcdi.WithDriverRoot(cfg.driverRoot),
|
nvcdi.WithDriverRoot(cfg.driverRoot),
|
||||||
nvcdi.WithNVIDIACTKPath(cfg.nvidiaCTKPath),
|
nvcdi.WithNVIDIACTKPath(cfg.nvidiaCTKPath),
|
||||||
nvcdi.WithDeviceNamer(deviceNamer),
|
nvcdi.WithDeviceNamer(deviceNamer),
|
||||||
nvcdi.WithDeviceLib(devicelib),
|
|
||||||
nvcdi.WithNvmlLib(nvmllib),
|
|
||||||
nvcdi.WithMode(string(cfg.mode)),
|
nvcdi.WithMode(string(cfg.mode)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -31,6 +31,11 @@ import (
|
|||||||
// NewDriverDiscoverer creates a discoverer for the libraries and binaries associated with a driver installation.
|
// NewDriverDiscoverer creates a discoverer for the libraries and binaries associated with a driver installation.
|
||||||
// The supplied NVML Library is used to query the expected driver version.
|
// The supplied NVML Library is used to query the expected driver version.
|
||||||
func NewDriverDiscoverer(logger *logrus.Logger, driverRoot string, nvidiaCTKPath string, nvmllib nvml.Interface) (discover.Discover, error) {
|
func NewDriverDiscoverer(logger *logrus.Logger, driverRoot string, nvidiaCTKPath string, nvmllib nvml.Interface) (discover.Discover, error) {
|
||||||
|
if r := nvmllib.Init(); r != nvml.SUCCESS {
|
||||||
|
return nil, fmt.Errorf("failed to initalize NVML: %v", r)
|
||||||
|
}
|
||||||
|
defer nvmllib.Shutdown()
|
||||||
|
|
||||||
version, r := nvmllib.SystemGetDriverVersion()
|
version, r := nvmllib.SystemGetDriverVersion()
|
||||||
if r != nvml.SUCCESS {
|
if r != nvml.SUCCESS {
|
||||||
return nil, fmt.Errorf("failed to determine driver version: %v", r)
|
return nil, fmt.Errorf("failed to determine driver version: %v", r)
|
||||||
|
@ -24,6 +24,7 @@ import (
|
|||||||
"github.com/container-orchestrated-devices/container-device-interface/pkg/cdi"
|
"github.com/container-orchestrated-devices/container-device-interface/pkg/cdi"
|
||||||
"github.com/container-orchestrated-devices/container-device-interface/specs-go"
|
"github.com/container-orchestrated-devices/container-device-interface/specs-go"
|
||||||
"gitlab.com/nvidia/cloud-native/go-nvlib/pkg/nvlib/device"
|
"gitlab.com/nvidia/cloud-native/go-nvlib/pkg/nvlib/device"
|
||||||
|
"gitlab.com/nvidia/cloud-native/go-nvlib/pkg/nvml"
|
||||||
)
|
)
|
||||||
|
|
||||||
type nvmllib nvcdilib
|
type nvmllib nvcdilib
|
||||||
@ -39,6 +40,11 @@ func (l *nvmllib) GetSpec() (spec.Interface, error) {
|
|||||||
func (l *nvmllib) GetAllDeviceSpecs() ([]specs.Device, error) {
|
func (l *nvmllib) GetAllDeviceSpecs() ([]specs.Device, error) {
|
||||||
var deviceSpecs []specs.Device
|
var deviceSpecs []specs.Device
|
||||||
|
|
||||||
|
if r := l.nvmllib.Init(); r != nvml.SUCCESS {
|
||||||
|
return nil, fmt.Errorf("failed to initalize NVML: %v", r)
|
||||||
|
}
|
||||||
|
defer l.nvmllib.Shutdown()
|
||||||
|
|
||||||
gpuDeviceSpecs, err := l.getGPUDeviceSpecs()
|
gpuDeviceSpecs, err := l.getGPUDeviceSpecs()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
Loading…
Reference in New Issue
Block a user