Skip to content

Commit 3da79cc

Browse files
author
Piotr Stankiewicz
committed
standalone: Allow specifying controller image variant via env
Signed-off-by: Piotr Stankiewicz <[email protected]>
1 parent 7dcf42e commit 3da79cc

File tree

3 files changed

+49
-44
lines changed

3 files changed

+49
-44
lines changed

cmd/cli/pkg/standalone/containers.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -219,14 +219,7 @@ func ensureContainerStarted(ctx context.Context, dockerClient client.ContainerAP
219219

220220
// CreateControllerContainer creates and starts a controller container.
221221
func CreateControllerContainer(ctx context.Context, dockerClient *client.Client, port uint16, environment string, doNotTrack bool, gpu gpupkg.GPUSupport, modelStorageVolume string, printer StatusPrinter, engineKind types.ModelRunnerEngineKind) error {
222-
// Determine the target image.
223-
var imageName string
224-
switch gpu {
225-
case gpupkg.GPUSupportCUDA:
226-
imageName = ControllerImage + ":" + controllerImageTagCUDA()
227-
default:
228-
imageName = ControllerImage + ":" + controllerImageTagCPU()
229-
}
222+
imageName := controllerImageName(gpu)
230223

231224
// Set up the container configuration.
232225
portStr := strconv.Itoa(int(port))
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package standalone
2+
3+
import (
4+
"os"
5+
6+
gpupkg "github.com/docker/model-runner/cmd/cli/pkg/gpu"
7+
)
8+
9+
const (
10+
// ControllerImage is the image used for the controller container.
11+
ControllerImage = "docker/model-runner"
12+
// defaultControllerImageVersion is the image version used for the controller container
13+
defaultControllerImageVersion = "latest"
14+
)
15+
16+
func controllerImageVersion() string {
17+
if version, ok := os.LookupEnv("MODEL_RUNNER_CONTROLLER_VERSION"); ok && version != "" {
18+
return version
19+
}
20+
return defaultControllerImageVersion
21+
}
22+
23+
func controllerImageVariant(detectedGPU gpupkg.GPUSupport) string {
24+
if variant, ok := os.LookupEnv("MODEL_RUNNER_CONTROLLER_VARIANT"); ok && variant != "" {
25+
return variant
26+
}
27+
switch detectedGPU {
28+
case gpupkg.GPUSupportCUDA:
29+
return "cuda"
30+
default:
31+
return ""
32+
}
33+
}
34+
35+
func fmtControllerImageName(repo, version, variant string) string {
36+
tag := repo + ":" + version
37+
if len(variant) > 0 {
38+
tag += "-" + variant
39+
}
40+
return tag
41+
}
42+
43+
func controllerImageName(detectedGPU gpupkg.GPUSupport) string {
44+
return fmtControllerImageName(ControllerImage, controllerImageVersion(), controllerImageVariant(detectedGPU))
45+
}

cmd/cli/pkg/standalone/images.go

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,49 +5,16 @@ import (
55
"encoding/json"
66
"fmt"
77
"io"
8-
"os"
98

109
"github.com/docker/docker/api/types/image"
1110
"github.com/docker/docker/client"
1211
"github.com/docker/docker/pkg/jsonmessage"
1312
gpupkg "github.com/docker/model-runner/cmd/cli/pkg/gpu"
1413
)
1514

16-
const (
17-
// ControllerImage is the image used for the controller container.
18-
ControllerImage = "docker/model-runner"
19-
// defaultControllerImageTagCPU is the image tag used for the controller container
20-
// when running with the CPU backend.
21-
defaultControllerImageTagCPU = "latest"
22-
// defaultControllerImageTagCUDA is the image tag used for the controller container
23-
// when running with the CUDA GPU backend.
24-
defaultControllerImageTagCUDA = "latest-cuda"
25-
)
26-
27-
func controllerImageTagCPU() string {
28-
if version, ok := os.LookupEnv("MODEL_RUNNER_CONTROLLER_VERSION"); ok && version != "" {
29-
return version
30-
}
31-
return defaultControllerImageTagCPU
32-
}
33-
34-
func controllerImageTagCUDA() string {
35-
if version, ok := os.LookupEnv("MODEL_RUNNER_CONTROLLER_VERSION"); ok && version != "" {
36-
return version + "-cuda"
37-
}
38-
return defaultControllerImageTagCUDA
39-
}
40-
4115
// EnsureControllerImage ensures that the controller container image is pulled.
4216
func EnsureControllerImage(ctx context.Context, dockerClient client.ImageAPIClient, gpu gpupkg.GPUSupport, printer StatusPrinter) error {
43-
// Determine the target image.
44-
var imageName string
45-
switch gpu {
46-
case gpupkg.GPUSupportCUDA:
47-
imageName = ControllerImage + ":" + controllerImageTagCUDA()
48-
default:
49-
imageName = ControllerImage + ":" + controllerImageTagCPU()
50-
}
17+
imageName := controllerImageName(gpu)
5118

5219
// Perform the pull.
5320
out, err := dockerClient.ImagePull(ctx, imageName, image.PullOptions{})
@@ -80,13 +47,13 @@ func EnsureControllerImage(ctx context.Context, dockerClient client.ImageAPIClie
8047
// PruneControllerImages removes any unused controller container images.
8148
func PruneControllerImages(ctx context.Context, dockerClient client.ImageAPIClient, printer StatusPrinter) error {
8249
// Remove the standard image, if present.
83-
imageNameCPU := ControllerImage + ":" + controllerImageTagCPU()
50+
imageNameCPU := fmtControllerImageName(ControllerImage, controllerImageVersion(), "")
8451
if _, err := dockerClient.ImageRemove(ctx, imageNameCPU, image.RemoveOptions{}); err == nil {
8552
printer.Println("Removed image", imageNameCPU)
8653
}
8754

8855
// Remove the CUDA GPU image, if present.
89-
imageNameCUDA := ControllerImage + ":" + controllerImageTagCUDA()
56+
imageNameCUDA := fmtControllerImageName(ControllerImage, controllerImageVersion(), "cuda")
9057
if _, err := dockerClient.ImageRemove(ctx, imageNameCUDA, image.RemoveOptions{}); err == nil {
9158
printer.Println("Removed image", imageNameCUDA)
9259
}

0 commit comments

Comments
 (0)