Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions cmd/up.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,9 @@ func (cmd *UpCmd) registerDevContainerFlags(upCmd *cobra.Command) {
upCmd.Flags().
StringVar(&cmd.DefaultUserEnvProbe, "default-user-env-probe", "",
"Override userEnvProbe from devcontainer.json (loginInteractiveShell, loginShell, interactiveShell, none)")
upCmd.Flags().
StringVar(&cmd.GPUAvailability, "gpu-availability", "",
"Override GPU availability detection (detect, true, false)")
}

func (cmd *UpCmd) registerIDEFlags(upCmd *cobra.Command) {
Expand Down
14 changes: 13 additions & 1 deletion pkg/devcontainer/compose.go
Original file line number Diff line number Diff line change
Expand Up @@ -1135,7 +1135,7 @@ exec "$$@"
overrideService.Privileged = *mergedConfig.Privileged
}

gpuSupportEnabled, _ := composeHelper.Docker.GPUSupportEnabled()
gpuSupportEnabled := r.resolveComposeGPUAvailability(composeHelper)
r.configureGPUResources(parsedConfig, gpuSupportEnabled, overrideService)

for _, mount := range mergedConfig.Mounts {
Expand Down Expand Up @@ -1172,6 +1172,18 @@ exec "$$@"
return project
}

func (r *runner) resolveComposeGPUAvailability(composeHelper *compose.ComposeHelper) bool {
switch r.WorkspaceConfig.CLIOptions.GPUAvailability {
case stringTrue:
return true
case stringFalse:
return false
default:
available, _ := composeHelper.Docker.GPUSupportEnabled()
return available
}
}

func (r *runner) configureGPUResources(
parsedConfig *config.SubstitutedConfig,
gpuSupportEnabled bool,
Expand Down
1 change: 1 addition & 0 deletions pkg/devcontainer/single.go
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ func (r *runner) runContainer(
IDE: r.WorkspaceConfig.Workspace.IDE.Name,
IDEOptions: r.WorkspaceConfig.Workspace.IDE.Options,
LocalWorkspaceFolder: r.LocalWorkspaceFolder,
GPUAvailability: r.WorkspaceConfig.CLIOptions.GPUAvailability,
})
}

Expand Down
1 change: 1 addition & 0 deletions pkg/driver/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ type RunDockerDevContainerParams struct {
IDE string
IDEOptions map[string]config2.OptionValue
LocalWorkspaceFolder string
GPUAvailability string
}

type BuildRequest struct {
Expand Down
17 changes: 15 additions & 2 deletions pkg/driver/docker/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -576,7 +576,7 @@ func (b *runArgsBuilder) addLabels() *runArgsBuilder {
}

func (b *runArgsBuilder) addGPU() *runArgsBuilder {
b.args = appendGPUOptions(b.params.ParsedConfig, b.driver, b.args)
b.args = appendGPUOptions(b.params.ParsedConfig, b.driver, b.args, b.params.GPUAvailability)
return b
}

Expand Down Expand Up @@ -788,13 +788,26 @@ func (d *dockerDriver) startContainer(
return nil
}

func resolveGPUAvailability(override string, d *dockerDriver) bool {
switch override {
case "true":
return true
case "false":
return false
default:
available, _ := d.Docker.GPUSupportEnabled()
return available
}
}

func appendGPUOptions(
parsedConfig *config.DevContainerConfig,
d *dockerDriver,
args []string,
gpuAvailabilityOverride string,
) []string {
if parsedConfig.HostRequirements != nil {
gpuAvailable, _ := d.Docker.GPUSupportEnabled()
gpuAvailable := resolveGPUAvailability(gpuAvailabilityOverride, d)
enableGPU, warnIfMissing := parsedConfig.HostRequirements.ShouldEnableGPU(gpuAvailable)
if enableGPU {
args = append(args, "--gpus", "all")
Expand Down
1 change: 1 addition & 0 deletions pkg/provider/workspace.go
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ type CLIOptions struct {
UidMap []string `json:"uidMap,omitempty"`
GidMap []string `json:"gidMap,omitempty"`
IDLabels []string `json:"idLabels,omitempty"`
GPUAvailability string `json:"gpuAvailability,omitempty"`

// dotfiles options
DotfilesRepo string `json:"dotfilesRepo,omitempty"`
Expand Down
Loading