runner.executorStdout = stdout
runner.executorStderr = stderr
return runner.executor.Create(containerSpec{
- Image: imageID,
- VCPUs: runner.Container.RuntimeConstraints.VCPUs,
- RAM: ram,
- WorkingDir: workdir,
- Env: env,
- BindMounts: bindmounts,
- Command: runner.Container.Command,
- EnableNetwork: enableNetwork,
- NetworkMode: runner.networkMode,
- CgroupParent: runner.setCgroupParent,
- Stdin: stdin,
- Stdout: stdout,
- Stderr: stderr,
+ Image: imageID,
+ VCPUs: runner.Container.RuntimeConstraints.VCPUs,
+ RAM: ram,
+ WorkingDir: workdir,
+ Env: env,
+ BindMounts: bindmounts,
+ Command: runner.Container.Command,
+ EnableNetwork: enableNetwork,
+ CUDADeviceCount: runner.Container.RuntimeConstraints.CUDADeviceCount,
+ NetworkMode: runner.networkMode,
+ CgroupParent: runner.setCgroupParent,
+ Stdin: stdin,
+ Stdout: stdout,
+ Stderr: stderr,
})
}
KernelMemory: spec.RAM, // kernel portion
},
}
- if spec.EnableCUDA {
+ if spec.CUDADeviceCount != 0 {
hostCfg.Resources.DeviceRequests = append(hostCfg.Resources.DeviceRequests, dockercontainer.DeviceRequest{
Driver: "nvidia",
- Count: -1,
+ Count: spec.CUDADeviceCount,
Capabilities: [][]string{[]string{"gpu", "nvidia", "compute"}},
})
}
}
type containerSpec struct {
- Image string
- VCPUs int
- RAM int64
- WorkingDir string
- Env map[string]string
- BindMounts map[string]bindmount
- Command []string
- EnableNetwork bool
- EnableCUDA bool
- NetworkMode string // docker network mode, normally "default"
- CgroupParent string
- Stdin io.Reader
- Stdout io.Writer
- Stderr io.Writer
+ Image string
+ VCPUs int
+ RAM int64
+ WorkingDir string
+ Env map[string]string
+ BindMounts map[string]bindmount
+ Command []string
+ EnableNetwork bool
+ CUDADeviceCount int
+ NetworkMode string // docker network mode, normally "default"
+ CgroupParent string
+ Stdin io.Reader
+ Stdout io.Writer
+ Stderr io.Writer
}
// containerExecutor is an interface to a container runtime
args = append(args, "--net", "--network=none")
}
- if e.spec.EnableCUDA {
+ if e.spec.CUDADeviceCount != 0 {
args = append(args, "--nv")
}
RAM int64 `json:"ram"`
VCPUs int `json:"vcpus"`
KeepCacheRAM int64 `json:"keep_cache_ram"`
- CUDADriverVersion string `json:"cuda_driver_version"`
- CUDACubinHardwareCapability []string `json:"cuda_cubin_hardware_capability"`
- CUDAPTXHardwardCapability string `json:"cuda_ptx_hardware_capability"`
- CUDADeviceCount int `json:"cuda_device_count"`
+ CUDADriverVersion string `json:"cuda_driver_version,omitempty"`
+ CUDACubinHardwareCapability []string `json:"cuda_cubin_hardware_capability,omitempty"`
+ CUDAPTXHardwardCapability string `json:"cuda_ptx_hardware_capability,omitempty"`
+ CUDADeviceCount int `json:"cuda_device_count,omitempty"`
}
// SchedulingParameters specify a container's scheduling parameters