Skip to content

Commit dd0c049

Browse files
committed
nvidia GPU support for caps and multiple uuids
This improves nvidia support for multiple uuids per container and fixes the API to add individual capabilities. Signed-off-by: Michael Crosby <[email protected]>
1 parent 362405f commit dd0c049

1 file changed

Lines changed: 17 additions & 19 deletions

File tree

contrib/nvidia/nvidia.go

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,7 @@ func WithGPUs(opts ...Opts) oci.SpecOpts {
8686
}
8787

8888
type config struct {
89-
Devices []int
90-
DeviceUUID string
89+
Devices []string
9190
Capabilities []Capability
9291
LoadKmods bool
9392
LDCache string
@@ -108,10 +107,7 @@ func (c *config) args() []string {
108107
"configure",
109108
)
110109
if len(c.Devices) > 0 {
111-
args = append(args, fmt.Sprintf("--device=%s", strings.Join(toStrings(c.Devices), ",")))
112-
}
113-
if c.DeviceUUID != "" {
114-
args = append(args, fmt.Sprintf("--device=%s", c.DeviceUUID))
110+
args = append(args, fmt.Sprintf("--device=%s", strings.Join(c.Devices, ",")))
115111
}
116112
for _, c := range c.Capabilities {
117113
args = append(args, fmt.Sprintf("--%s", capFlags[c]))
@@ -135,36 +131,30 @@ var capFlags = map[Capability]string{
135131
Display: "display",
136132
}
137133

138-
func toStrings(ints []int) []string {
139-
var s []string
140-
for _, i := range ints {
141-
s = append(s, strconv.Itoa(i))
142-
}
143-
return s
144-
}
145-
146134
// Opts are options for configuring gpu support
147135
type Opts func(*config) error
148136

149137
// WithDevices adds the provided device indexes to the container
150138
func WithDevices(ids ...int) Opts {
151139
return func(c *config) error {
152-
c.Devices = ids
140+
for _, i := range ids {
141+
c.Devices = append(c.Devices, strconv.Itoa(i))
142+
}
153143
return nil
154144
}
155145
}
156146

157-
// WithDeviceUUID adds the specific device UUID to the container
158-
func WithDeviceUUID(guid string) Opts {
147+
// WithDeviceUUIDs adds the specific device UUID to the container
148+
func WithDeviceUUIDs(uuids ...string) Opts {
159149
return func(c *config) error {
160-
c.DeviceUUID = guid
150+
c.Devices = append(c.Devices, uuids...)
161151
return nil
162152
}
163153
}
164154

165155
// WithAllDevices adds all gpus to the container
166156
func WithAllDevices(c *config) error {
167-
c.DeviceUUID = "all"
157+
c.Devices = []string{"all"}
168158
return nil
169159
}
170160

@@ -176,6 +166,14 @@ func WithAllCapabilities(c *config) error {
176166
return nil
177167
}
178168

169+
// WithCapabilities adds the specified capabilities to the container for the gpus
170+
func WithCapabilities(caps ...Capability) Opts {
171+
return func(c *config) error {
172+
c.Capabilities = append(c.Capabilities, caps...)
173+
return nil
174+
}
175+
}
176+
179177
// WithRequiredCUDAVersion sets the required cuda version
180178
func WithRequiredCUDAVersion(major, minor int) Opts {
181179
return func(c *config) error {

0 commit comments

Comments
 (0)