From 9610a27cd537efcbb3d8d82aa85f7dbf80c78b9c Mon Sep 17 00:00:00 2001 From: technillogue Date: Wed, 12 Jul 2023 16:50:31 -0400 Subject: [PATCH 1/9] initial draft Signed-off-by: technillogue --- pkg/config/config.go | 4 +++- pkg/dockerfile/generator.go | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pkg/config/config.go b/pkg/config/config.go index 95bf7e4656..9fa1365230 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -31,7 +31,9 @@ type RunItem struct { } type Build struct { - GPU bool `json:"gpu,omitempty" yaml:"gpu"` + GPU bool `json:"gpu,omitempty" yaml:"gpu"` + // UseSystemCuda? something about jax? + UseCudaBaseImage bool `json:"use_cuda_base_image,omitempty" yaml:"use_cuda_base_image"` PythonVersion string `json:"python_version,omitempty" yaml:"python_version"` PythonRequirements string `json:"python_requirements,omitempty" yaml:"python_requirements"` PythonPackages []string `json:"python_packages,omitempty" yaml:"python_packages"` // Deprecated, but included for backwards compatibility diff --git a/pkg/dockerfile/generator.go b/pkg/dockerfile/generator.go index 99b1f93eb5..c603cf04ba 100644 --- a/pkg/dockerfile/generator.go +++ b/pkg/dockerfile/generator.go @@ -158,7 +158,7 @@ func (g *Generator) Generate(imageName string) (weightsBase string, dockerfile s return "", "", "", err } installPython := "" - if g.Config.Build.GPU { + if g.Config.Build.GPU && g.Config.Build.UseCudaBaseImage { installPython, err = g.installPythonCUDA() if err != nil { return "", "", "", err @@ -245,10 +245,10 @@ func (g *Generator) Cleanup() error { } func (g *Generator) baseImage() (string, error) { - if g.Config.Build.GPU { + if g.Config.Build.GPU && g.Config.Build.UseCudaBaseImage { return g.Config.CUDABaseImageTag() } - return "python:" + g.Config.Build.PythonVersion, nil + return "python:" + g.Config.Build.PythonVersion + "-slim", nil } func (g *Generator) preamble() string { From 244fe560a8ef9c99fafba6f5dd236004981cffa3 Mon Sep 17 00:00:00 2001 From: technillogue Date: Wed, 12 Jul 2023 16:51:38 -0400 Subject: [PATCH 2/9] fix some tests Signed-off-by: technillogue --- pkg/dockerfile/generator_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/dockerfile/generator_test.go b/pkg/dockerfile/generator_test.go index 350b132028..693b6a1211 100644 --- a/pkg/dockerfile/generator_test.go +++ b/pkg/dockerfile/generator_test.go @@ -81,7 +81,7 @@ predict: predict.py:Predictor expected := `#syntax=docker/dockerfile:1.4 FROM r8.im/replicate/cog-test-weights AS weights ` + testTiniStage() + - `FROM python:3.8 + `FROM python:3.8-slim ENV DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu:/usr/local/nvidia/lib64:/usr/local/nvidia/bin @@ -152,7 +152,7 @@ predict: predict.py:Predictor expected := `#syntax=docker/dockerfile:1.4 FROM r8.im/replicate/cog-test-weights AS weights ` + testTiniStage() + - `FROM python:3.8 + `FROM python:3.8-slim ENV DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu:/usr/local/nvidia/lib64:/usr/local/nvidia/bin @@ -248,7 +248,7 @@ build: expected := `#syntax=docker/dockerfile:1.4 FROM r8.im/replicate/cog-test-weights AS weights ` + testTiniStage() + - `FROM python:3.8 + `FROM python:3.8-slim ENV DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu:/usr/local/nvidia/lib64:/usr/local/nvidia/bin @@ -428,7 +428,7 @@ predict: predict.py:Predictor expected := `#syntax=docker/dockerfile:1.4 ` + testTiniStage() + - `FROM python:3.8 + `FROM python:3.8-slim ENV DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu:/usr/local/nvidia/lib64:/usr/local/nvidia/bin From 49448ad67d378ec4d7543bc541a6ae04d6bf5d4f Mon Sep 17 00:00:00 2001 From: technillogue Date: Wed, 12 Jul 2023 17:23:59 -0400 Subject: [PATCH 3/9] set flag to be true by default and add it to the config schema Signed-off-by: technillogue --- pkg/config/config.go | 5 +++-- pkg/config/data/config_schema_v1.0.json | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pkg/config/config.go b/pkg/config/config.go index 9fa1365230..b971a03ab5 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -61,8 +61,9 @@ type Config struct { func DefaultConfig() *Config { return &Config{ Build: &Build{ - GPU: false, - PythonVersion: "3.8", + GPU: false, + PythonVersion: "3.8", + UseCudaBaseImage: true, }, } } diff --git a/pkg/config/data/config_schema_v1.0.json b/pkg/config/data/config_schema_v1.0.json index 7c7a48468f..1e2bc7d499 100644 --- a/pkg/config/data/config_schema_v1.0.json +++ b/pkg/config/data/config_schema_v1.0.json @@ -24,6 +24,11 @@ "type": "boolean", "description": "Enable GPUs for this model. When enabled, the [nvidia-docker](https://github.com/NVIDIA/nvidia-docker) base image will be used, and Cog will automatically figure out what versions of CUDA and cuDNN to use based on the version of Python, PyTorch, and Tensorflow that you are using." }, + "use_cuda_base_image": { + "$id": "#/properties/build/properties/use_cuda_base_image", + "type": "boolean", + "description": "When enabled, the [nvidia-docker](https://github.com/NVIDIA/nvidia-docker) base image will be used. This is not normally necessary for torch, but may be necessary for other frameworks." + }, "python_version": { "$id": "#/properties/build/properties/python_version", "type": ["string", "number"], From 6c15b1f047ce3c7abe12e96eeda97174e5290a49 Mon Sep 17 00:00:00 2001 From: Mattt Zmuda Date: Thu, 13 Jul 2023 09:47:33 -0700 Subject: [PATCH 4/9] Sketch out --use-cuda-base-image as CLI flag Signed-off-by: Mattt Zmuda --- pkg/cli/build.go | 8 +++++++- pkg/cli/debug.go | 5 +++++ pkg/cli/predict.go | 5 ++++- pkg/cli/push.go | 5 +++-- pkg/cli/run.go | 3 ++- pkg/cli/train.go | 5 ++++- pkg/config/config.go | 9 +++------ pkg/config/data/config_schema_v1.0.json | 5 ----- pkg/dockerfile/generator.go | 10 ++++++++-- pkg/image/build.go | 13 +++++++++++-- 10 files changed, 47 insertions(+), 21 deletions(-) diff --git a/pkg/cli/build.go b/pkg/cli/build.go index 7b8a22343e..f0b1e04fa2 100644 --- a/pkg/cli/build.go +++ b/pkg/cli/build.go @@ -14,6 +14,7 @@ var buildSeparateWeights bool var buildSecrets []string var buildNoCache bool var buildProgressOutput string +var buildUseCudaBaseImage bool func newBuildCommand() *cobra.Command { cmd := &cobra.Command{ @@ -26,6 +27,7 @@ func newBuildCommand() *cobra.Command { addSecretsFlag(cmd) addNoCacheFlag(cmd) addSeparateWeightsFlag(cmd) + addUseCudaBaseImageFlag(cmd) cmd.Flags().StringVarP(&buildTag, "tag", "t", "", "A name for the built image in the form 'repository:tag'") return cmd } @@ -44,7 +46,7 @@ func buildCommand(cmd *cobra.Command, args []string) error { imageName = config.DockerImageName(projectDir) } - if err := image.Build(cfg, projectDir, imageName, buildSecrets, buildNoCache, buildSeparateWeights, buildProgressOutput); err != nil { + if err := image.Build(cfg, projectDir, imageName, buildSecrets, buildNoCache, buildSeparateWeights, buildUseCudaBaseImage, buildProgressOutput); err != nil { return err } @@ -72,3 +74,7 @@ func addNoCacheFlag(cmd *cobra.Command) { func addSeparateWeightsFlag(cmd *cobra.Command) { cmd.Flags().BoolVar(&buildSeparateWeights, "separate-weights", false, "Separate model weights from code in image layers") } + +func addUseCudaBaseImageFlag(cmd *cobra.Command) { + cmd.Flags().BoolVar(&buildUseCudaBaseImage, "cuda", true, "Use Nvidia CUDA base image") +} diff --git a/pkg/cli/debug.go b/pkg/cli/debug.go index d7674def05..8420da0510 100644 --- a/pkg/cli/debug.go +++ b/pkg/cli/debug.go @@ -22,6 +22,7 @@ func newDebugCommand() *cobra.Command { } addSeparateWeightsFlag(cmd) + addUseCudaBaseImageFlag(cmd) cmd.Flags().StringVarP(&imageName, "image-name", "", "", "The image name to use for the generated Dockerfile") return cmd @@ -43,6 +44,10 @@ func cmdDockerfile(cmd *cobra.Command, args []string) error { } }() + if buildUseCudaBaseImage { + generator.SetUseCudaBaseImage(true) + } + if buildSeparateWeights { if imageName == "" { imageName = config.DockerImageName(projectDir) diff --git a/pkg/cli/predict.go b/pkg/cli/predict.go index 01a0ba1793..d4e8dec674 100644 --- a/pkg/cli/predict.go +++ b/pkg/cli/predict.go @@ -43,7 +43,10 @@ the prediction on that.`, Args: cobra.MaximumNArgs(1), SuggestFor: []string{"infer"}, } + + addUseCudaBaseImageFlag(cmd) addBuildProgressOutputFlag(cmd) + cmd.Flags().StringArrayVarP(&inputFlags, "input", "i", []string{}, "Inputs, in the form name=value. if value is prefixed with @, then it is read from a file on disk. E.g. -i path=@image.jpg") cmd.Flags().StringVarP(&outPath, "output", "o", "", "Output path") @@ -63,7 +66,7 @@ func cmdPredict(cmd *cobra.Command, args []string) error { return err } - if imageName, err = image.BuildBase(cfg, projectDir, buildProgressOutput); err != nil { + if imageName, err = image.BuildBase(cfg, projectDir, buildUseCudaBaseImage, buildProgressOutput); err != nil { return err } diff --git a/pkg/cli/push.go b/pkg/cli/push.go index cccbeccd9b..13a018acac 100644 --- a/pkg/cli/push.go +++ b/pkg/cli/push.go @@ -22,10 +22,11 @@ func newPushCommand() *cobra.Command { RunE: push, Args: cobra.MaximumNArgs(1), } - addBuildProgressOutputFlag(cmd) addSecretsFlag(cmd) addNoCacheFlag(cmd) addSeparateWeightsFlag(cmd) + addUseCudaBaseImageFlag(cmd) + addBuildProgressOutputFlag(cmd) return cmd } @@ -45,7 +46,7 @@ func push(cmd *cobra.Command, args []string) error { return fmt.Errorf("To push images, you must either set the 'image' option in cog.yaml or pass an image name as an argument. For example, 'cog push registry.hooli.corp/hotdog-detector'") } - if err := image.Build(cfg, projectDir, imageName, buildSecrets, buildNoCache, buildSeparateWeights, buildProgressOutput); err != nil { + if err := image.Build(cfg, projectDir, imageName, buildSecrets, buildNoCache, buildSeparateWeights, buildUseCudaBaseImage, buildProgressOutput); err != nil { return err } diff --git a/pkg/cli/run.go b/pkg/cli/run.go index abbb40b906..7146572514 100644 --- a/pkg/cli/run.go +++ b/pkg/cli/run.go @@ -23,6 +23,7 @@ func newRunCommand() *cobra.Command { Args: cobra.MinimumNArgs(1), } addBuildProgressOutputFlag(cmd) + addUseCudaBaseImageFlag(cmd) flags := cmd.Flags() // Flags after first argment are considered args and passed to command @@ -41,7 +42,7 @@ func run(cmd *cobra.Command, args []string) error { return err } - imageName, err := image.BuildBase(cfg, projectDir, buildProgressOutput) + imageName, err := image.BuildBase(cfg, projectDir, buildUseCudaBaseImage, buildProgressOutput) if err != nil { return err } diff --git a/pkg/cli/train.go b/pkg/cli/train.go index 765a3195b4..6df7641320 100644 --- a/pkg/cli/train.go +++ b/pkg/cli/train.go @@ -28,7 +28,10 @@ It will build the model in the current directory and train it.`, Args: cobra.MaximumNArgs(1), Hidden: true, } + addBuildProgressOutputFlag(cmd) + addUseCudaBaseImageFlag(cmd) + cmd.Flags().StringArrayVarP(&trainInputFlags, "input", "i", []string{}, "Inputs, in the form name=value. if value is prefixed with @, then it is read from a file on disk. E.g. -i path=@image.jpg") return cmd @@ -47,7 +50,7 @@ func cmdTrain(cmd *cobra.Command, args []string) error { return err } - if imageName, err = image.BuildBase(cfg, projectDir, buildProgressOutput); err != nil { + if imageName, err = image.BuildBase(cfg, projectDir, buildUseCudaBaseImage, buildProgressOutput); err != nil { return err } diff --git a/pkg/config/config.go b/pkg/config/config.go index b971a03ab5..95bf7e4656 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -31,9 +31,7 @@ type RunItem struct { } type Build struct { - GPU bool `json:"gpu,omitempty" yaml:"gpu"` - // UseSystemCuda? something about jax? - UseCudaBaseImage bool `json:"use_cuda_base_image,omitempty" yaml:"use_cuda_base_image"` + GPU bool `json:"gpu,omitempty" yaml:"gpu"` PythonVersion string `json:"python_version,omitempty" yaml:"python_version"` PythonRequirements string `json:"python_requirements,omitempty" yaml:"python_requirements"` PythonPackages []string `json:"python_packages,omitempty" yaml:"python_packages"` // Deprecated, but included for backwards compatibility @@ -61,9 +59,8 @@ type Config struct { func DefaultConfig() *Config { return &Config{ Build: &Build{ - GPU: false, - PythonVersion: "3.8", - UseCudaBaseImage: true, + GPU: false, + PythonVersion: "3.8", }, } } diff --git a/pkg/config/data/config_schema_v1.0.json b/pkg/config/data/config_schema_v1.0.json index 1e2bc7d499..7c7a48468f 100644 --- a/pkg/config/data/config_schema_v1.0.json +++ b/pkg/config/data/config_schema_v1.0.json @@ -24,11 +24,6 @@ "type": "boolean", "description": "Enable GPUs for this model. When enabled, the [nvidia-docker](https://github.com/NVIDIA/nvidia-docker) base image will be used, and Cog will automatically figure out what versions of CUDA and cuDNN to use based on the version of Python, PyTorch, and Tensorflow that you are using." }, - "use_cuda_base_image": { - "$id": "#/properties/build/properties/use_cuda_base_image", - "type": "boolean", - "description": "When enabled, the [nvidia-docker](https://github.com/NVIDIA/nvidia-docker) base image will be used. This is not normally necessary for torch, but may be necessary for other frameworks." - }, "python_version": { "$id": "#/properties/build/properties/python_version", "type": ["string", "number"], diff --git a/pkg/dockerfile/generator.go b/pkg/dockerfile/generator.go index c603cf04ba..c61236b8e8 100644 --- a/pkg/dockerfile/generator.go +++ b/pkg/dockerfile/generator.go @@ -48,6 +48,8 @@ type Generator struct { GOOS string GOARCH string + useCudaBaseImage bool + // absolute path to tmpDir, a directory that will be cleaned up tmpDir string // tmpDir relative to Dir @@ -83,6 +85,10 @@ func NewGenerator(config *config.Config, dir string) (*Generator, error) { }, nil } +func (g *Generator) SetUseCudaBaseImage(useCudaBaseImage bool) { + g.useCudaBaseImage = useCudaBaseImage +} + func (g *Generator) GenerateBase() (string, error) { baseImage, err := g.baseImage() if err != nil { @@ -158,7 +164,7 @@ func (g *Generator) Generate(imageName string) (weightsBase string, dockerfile s return "", "", "", err } installPython := "" - if g.Config.Build.GPU && g.Config.Build.UseCudaBaseImage { + if g.Config.Build.GPU && g.useCudaBaseImage { installPython, err = g.installPythonCUDA() if err != nil { return "", "", "", err @@ -245,7 +251,7 @@ func (g *Generator) Cleanup() error { } func (g *Generator) baseImage() (string, error) { - if g.Config.Build.GPU && g.Config.Build.UseCudaBaseImage { + if g.Config.Build.GPU && g.useCudaBaseImage { return g.Config.CUDABaseImageTag() } return "python:" + g.Config.Build.PythonVersion + "-slim", nil diff --git a/pkg/image/build.go b/pkg/image/build.go index 5d45e06249..c4683804d8 100644 --- a/pkg/image/build.go +++ b/pkg/image/build.go @@ -20,7 +20,7 @@ const dockerignoreBackupPath = ".dockerignore.cog.bak" // Build a Cog model from a config // // This is separated out from docker.Build(), so that can be as close as possible to the behavior of 'docker build'. -func Build(cfg *config.Config, dir, imageName string, secrets []string, noCache, separateWeights bool, progressOutput string) error { +func Build(cfg *config.Config, dir, imageName string, secrets []string, noCache, separateWeights bool, useCudaBaseImage bool, progressOutput string) error { console.Infof("Building Docker image from environment in cog.yaml as %s...", imageName) generator, err := dockerfile.NewGenerator(cfg, dir) @@ -33,6 +33,10 @@ func Build(cfg *config.Config, dir, imageName string, secrets []string, noCache, } }() + if useCudaBaseImage { + generator.SetUseCudaBaseImage(true) + } + if separateWeights { weightsDockerfile, runnerDockerfile, dockerignore, err := generator.Generate(imageName) if err != nil { @@ -110,7 +114,7 @@ func Build(cfg *config.Config, dir, imageName string, secrets []string, noCache, return nil } -func BuildBase(cfg *config.Config, dir string, progressOutput string) (string, error) { +func BuildBase(cfg *config.Config, dir string, useCudaBaseImage bool, progressOutput string) (string, error) { // TODO: better image management so we don't eat up disk space // https://github.com/replicate/cog/issues/80 imageName := config.BaseDockerImageName(dir) @@ -125,6 +129,11 @@ func BuildBase(cfg *config.Config, dir string, progressOutput string) (string, e console.Warnf("Error cleaning up Dockerfile generator: %s", err) } }() + + if useCudaBaseImage { + generator.SetUseCudaBaseImage(true) + } + dockerfileContents, err := generator.GenerateBase() if err != nil { return "", fmt.Errorf("Failed to generate Dockerfile: %w", err) From fa3a1c6715bb973e902a081ebb07186496e60a80 Mon Sep 17 00:00:00 2001 From: technillogue Date: Tue, 18 Jul 2023 20:15:53 -0400 Subject: [PATCH 5/9] Make --use-cuda-base-image a string flag with true/false Signed-off-by: technillogue --- pkg/cli/build.go | 4 ++-- pkg/cli/debug.go | 4 +--- pkg/dockerfile/generator.go | 20 +++++++++++--------- pkg/image/build.go | 13 ++++--------- 4 files changed, 18 insertions(+), 23 deletions(-) diff --git a/pkg/cli/build.go b/pkg/cli/build.go index 9227845eb3..d9cd93be9a 100644 --- a/pkg/cli/build.go +++ b/pkg/cli/build.go @@ -15,7 +15,7 @@ var buildSeparateWeights bool var buildSecrets []string var buildNoCache bool var buildProgressOutput string -var buildUseCudaBaseImage bool +var buildUseCudaBaseImage string func newBuildCommand() *cobra.Command { cmd := &cobra.Command{ @@ -77,5 +77,5 @@ func addSeparateWeightsFlag(cmd *cobra.Command) { } func addUseCudaBaseImageFlag(cmd *cobra.Command) { - cmd.Flags().BoolVar(&buildUseCudaBaseImage, "cuda", true, "Use Nvidia CUDA base image") + cmd.Flags().StringVar(&buildUseCudaBaseImage, "use-cuda-base-image", "auto", "Use Nvidia CUDA base image, 'true' (default) or 'false' (use python base image). False results in a smaller image but may cause problems for non-torch projects") } diff --git a/pkg/cli/debug.go b/pkg/cli/debug.go index 8420da0510..ac3a8e9555 100644 --- a/pkg/cli/debug.go +++ b/pkg/cli/debug.go @@ -44,9 +44,7 @@ func cmdDockerfile(cmd *cobra.Command, args []string) error { } }() - if buildUseCudaBaseImage { - generator.SetUseCudaBaseImage(true) - } + generator.SetUseCudaBaseImage(buildUseCudaBaseImage) if buildSeparateWeights { if imageName == "" { diff --git a/pkg/dockerfile/generator.go b/pkg/dockerfile/generator.go index c61236b8e8..7c5d3adedc 100644 --- a/pkg/dockerfile/generator.go +++ b/pkg/dockerfile/generator.go @@ -75,18 +75,20 @@ func NewGenerator(config *config.Config, dir string) (*Generator, error) { } return &Generator{ - Config: config, - Dir: dir, - GOOS: runtime.GOOS, - GOARCH: runtime.GOOS, - tmpDir: tmpDir, - relativeTmpDir: relativeTmpDir, - fileWalker: filepath.Walk, + Config: config, + Dir: dir, + GOOS: runtime.GOOS, + GOARCH: runtime.GOOS, + tmpDir: tmpDir, + relativeTmpDir: relativeTmpDir, + fileWalker: filepath.Walk, + useCudaBaseImage: true, }, nil } -func (g *Generator) SetUseCudaBaseImage(useCudaBaseImage bool) { - g.useCudaBaseImage = useCudaBaseImage +func (g *Generator) SetUseCudaBaseImage(argumentValue string) { + // "false" -> false, "true" -> true, "auto" -> true, "asdf" -> true + g.useCudaBaseImage = argumentValue != "false" } func (g *Generator) GenerateBase() (string, error) { diff --git a/pkg/image/build.go b/pkg/image/build.go index 3277135046..b6d6408691 100644 --- a/pkg/image/build.go +++ b/pkg/image/build.go @@ -20,7 +20,7 @@ const dockerignoreBackupPath = ".dockerignore.cog.bak" // Build a Cog model from a config // // This is separated out from docker.Build(), so that can be as close as possible to the behavior of 'docker build'. -func Build(cfg *config.Config, dir, imageName string, secrets []string, noCache, separateWeights bool, useCudaBaseImage bool, progressOutput string) error { +func Build(cfg *config.Config, dir, imageName string, secrets []string, noCache, separateWeights bool, useCudaBaseImage string, progressOutput string) error { console.Infof("Building Docker image from environment in cog.yaml as %s...", imageName) generator, err := dockerfile.NewGenerator(cfg, dir) @@ -32,10 +32,7 @@ func Build(cfg *config.Config, dir, imageName string, secrets []string, noCache, console.Warnf("Error cleaning up Dockerfile generator: %s", err) } }() - - if useCudaBaseImage { - generator.SetUseCudaBaseImage(true) - } + generator.SetUseCudaBaseImage(useCudaBaseImage) if separateWeights { weightsDockerfile, runnerDockerfile, dockerignore, err := generator.Generate(imageName) @@ -114,7 +111,7 @@ func Build(cfg *config.Config, dir, imageName string, secrets []string, noCache, return nil } -func BuildBase(cfg *config.Config, dir string, useCudaBaseImage bool, progressOutput string) (string, error) { +func BuildBase(cfg *config.Config, dir string, useCudaBaseImage string, progressOutput string) (string, error) { // TODO: better image management so we don't eat up disk space // https://github.com/replicate/cog/issues/80 imageName := config.BaseDockerImageName(dir) @@ -130,9 +127,7 @@ func BuildBase(cfg *config.Config, dir string, useCudaBaseImage bool, progressOu } }() - if useCudaBaseImage { - generator.SetUseCudaBaseImage(true) - } + generator.SetUseCudaBaseImage(useCudaBaseImage) dockerfileContents, err := generator.GenerateBase() if err != nil { From c9c2f57f9ad7588233cfad8e54d1757d87b7e192 Mon Sep 17 00:00:00 2001 From: technillogue Date: Wed, 19 Jul 2023 01:15:36 -0400 Subject: [PATCH 6/9] fix strange failing test with incorrect default output filename Signed-off-by: technillogue --- test-integration/test_integration/test_predict.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test-integration/test_integration/test_predict.py b/test-integration/test_integration/test_predict.py index bb638b328b..37d789740f 100644 --- a/test-integration/test_integration/test_predict.py +++ b/test-integration/test_integration/test_predict.py @@ -58,7 +58,9 @@ def test_predict_writes_files_to_files(tmpdir_factory): capture_output=True, ) assert result.stdout == b"" - with open(out_dir / "output.bmp", "rb") as f: + # something about this PR makes the default output be "output" instead of "output.bmp" + with open(out_dir / "output", "rb") as f: + # with open(out_dir / "output.bmp", "rb") as f: assert len(f.read()) == 195894 From 7cc41b781b62ae3453a06e84dd4f0ea9c7368f24 Mon Sep 17 00:00:00 2001 From: technillogue Date: Fri, 21 Jul 2023 11:45:50 -0400 Subject: [PATCH 7/9] Try revertting "fix strange failing test with incorrect default output filename" This reverts commit c9c2f57f9ad7588233cfad8e54d1757d87b7e192. Signed-off-by: technillogue --- test-integration/test_integration/test_predict.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test-integration/test_integration/test_predict.py b/test-integration/test_integration/test_predict.py index 37d789740f..bb638b328b 100644 --- a/test-integration/test_integration/test_predict.py +++ b/test-integration/test_integration/test_predict.py @@ -58,9 +58,7 @@ def test_predict_writes_files_to_files(tmpdir_factory): capture_output=True, ) assert result.stdout == b"" - # something about this PR makes the default output be "output" instead of "output.bmp" - with open(out_dir / "output", "rb") as f: - # with open(out_dir / "output.bmp", "rb") as f: + with open(out_dir / "output.bmp", "rb") as f: assert len(f.read()) == 195894 From 36263fc455bf5ca4b63c939a25cdd9ca73a7c8d9 Mon Sep 17 00:00:00 2001 From: technillogue Date: Fri, 21 Jul 2023 12:07:17 -0400 Subject: [PATCH 8/9] in python:3.8-slim, but not python:3.8, mimetypes.guess_type reports .bmp as image/x-ms-bmp instead of image/bmp Signed-off-by: technillogue --- pkg/util/mime/mime.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/util/mime/mime.go b/pkg/util/mime/mime.go index bc91e6fb7c..0c476a33f1 100644 --- a/pkg/util/mime/mime.go +++ b/pkg/util/mime/mime.go @@ -59,6 +59,7 @@ var typeToExtension = map[string]string{ "font/woff2": ".woff2", "image/bmp": ".bmp", + "image/x-ms-bmp": ".bmp", "image/gif": ".gif", "image/jpeg": ".jpg", "image/png": ".png", From 0c1c631d93ed7c1a2151acec84f2375f4d0fbdf9 Mon Sep 17 00:00:00 2001 From: technillogue Date: Fri, 21 Jul 2023 12:14:00 -0400 Subject: [PATCH 9/9] fmt Signed-off-by: technillogue --- pkg/util/mime/mime.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/util/mime/mime.go b/pkg/util/mime/mime.go index 0c476a33f1..924f402d72 100644 --- a/pkg/util/mime/mime.go +++ b/pkg/util/mime/mime.go @@ -59,7 +59,7 @@ var typeToExtension = map[string]string{ "font/woff2": ".woff2", "image/bmp": ".bmp", - "image/x-ms-bmp": ".bmp", + "image/x-ms-bmp": ".bmp", "image/gif": ".gif", "image/jpeg": ".jpg", "image/png": ".png",