Skip to content

Commit 8c773f1

Browse files
use GPU's when requested in singleContainer flow
1 parent 08ba4fc commit 8c773f1

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

src/spec-node/singleContainer.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66

77
import { createContainerProperties, startEventSeen, ResolverResult, getTunnelInformation, getDockerfilePath, getDockerContextPath, DockerResolverParameters, isDockerFileConfig, uriToWSLFsPath, WorkspaceConfiguration, getFolderImageName, inspectDockerImage, logUMask, SubstitutedConfig } from './utils';
8-
import { ContainerProperties, setupInContainer, ResolverProgress } from '../spec-common/injectHeadless';
8+
import { ContainerProperties, setupInContainer, ResolverProgress, ResolverParameters } from '../spec-common/injectHeadless';
99
import { ContainerError, toErrorText } from '../spec-common/errors';
1010
import { ContainerDetails, listContainers, DockerCLIParameters, inspectContainers, dockerCLI, dockerPtyCLI, toPtyExecParameters, ImageDetails, toExecParameters } from '../spec-shutdown/dockerUtils';
1111
import { DevContainerConfig, DevContainerFromDockerfileConfig, DevContainerFromImageConfig } from '../spec-configuration/configuration';
@@ -305,6 +305,22 @@ export async function findDevContainer(params: DockerCLIParameters | DockerResol
305305
return details.filter(container => container.State.Status !== 'removing')[0];
306306
}
307307

308+
export async function extraRunArgs(common: ResolverParameters, params: DockerCLIParameters | DockerResolverParameters, config: DevContainerFromDockerfileConfig | DevContainerFromImageConfig) {
309+
const extraArguments: string[] = [];
310+
if (config.hostRequirements?.gpu) {
311+
const result = await dockerCLI(params, 'info', '-f', '{{.Runtimes.nvidia}}');
312+
const runtimeFound = result.stdout.includes('nvidia-container-runtime');
313+
if (runtimeFound) {
314+
common.output.write(`GPU support found, add GPU flags to docker call.`);
315+
extraArguments.push('--gpus', 'all');
316+
} else {
317+
if (config.hostRequirements?.gpu !== 'optional') {
318+
common.output.write('No GPU support found yet a GPU was required - consider marking it as "optional"', LogLevel.Warning);
319+
}
320+
}
321+
}
322+
return extraArguments;
323+
}
308324

309325
export async function spawnDevContainer(params: DockerResolverParameters, config: DevContainerFromDockerfileConfig | DevContainerFromImageConfig, mergedConfig: MergedDevContainerConfig, imageName: string, labels: string[], workspaceMount: string | undefined, imageDetails: (() => Promise<ImageDetails>) | undefined, containerUser: string | undefined) {
310326
const { common } = params;
@@ -372,6 +388,7 @@ while sleep 1 & wait $!; do :; done`, '-']; // `wait $!` allows for the `trap` t
372388
...containerEnv,
373389
...containerUserArgs,
374390
...(config.runArgs || []),
391+
...(await extraRunArgs(common, params, config) || []),
375392
...featureArgs,
376393
...entrypoint,
377394
imageName,

0 commit comments

Comments
 (0)