Skip to content

Commit a07e0e7

Browse files
authored
Support importing local project files (#398)
1 parent e151929 commit a07e0e7

File tree

41 files changed

+277
-904
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+277
-904
lines changed

Makefile

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,6 @@ ci-build-images:
146146
@./build/build-image.sh images/onnx-serve-gpu onnx-serve-gpu
147147
@./build/build-image.sh images/operator operator
148148
@./build/build-image.sh images/fluentd fluentd
149-
@./build/build-image.sh images/python-packager python-packager
150149
@./build/build-image.sh images/cluster-autoscaler cluster-autoscaler
151150
@./build/build-image.sh images/nvidia nvidia
152151
@./build/build-image.sh images/metrics-server metrics-server
@@ -165,7 +164,6 @@ ci-push-images:
165164
@./build/push-image.sh onnx-serve-gpu
166165
@./build/push-image.sh operator
167166
@./build/push-image.sh fluentd
168-
@./build/push-image.sh python-packager
169167
@./build/push-image.sh cluster-autoscaler
170168
@./build/push-image.sh nvidia
171169
@./build/push-image.sh metrics-server

cli/cmd/deploy.go

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,18 @@ package cmd
1818

1919
import (
2020
"fmt"
21+
"io/ioutil"
2122

2223
"github.com/spf13/cobra"
2324

2425
"github.com/cortexlabs/cortex/pkg/lib/console"
2526
"github.com/cortexlabs/cortex/pkg/lib/errors"
27+
"github.com/cortexlabs/cortex/pkg/lib/files"
2628
"github.com/cortexlabs/cortex/pkg/lib/json"
2729
s "github.com/cortexlabs/cortex/pkg/lib/strings"
2830
"github.com/cortexlabs/cortex/pkg/lib/zip"
2931
"github.com/cortexlabs/cortex/pkg/operator/api/schema"
32+
"github.com/cortexlabs/cortex/pkg/operator/api/userconfig"
3033
)
3134

3235
var flagDeployForce bool
@@ -53,21 +56,47 @@ func deploy(force bool, ignoreCache bool) {
5356
errors.Exit(err)
5457
}
5558

56-
zipInput := &zip.Input{
59+
params := map[string]string{
60+
"force": s.Bool(force),
61+
"ignoreCache": s.Bool(ignoreCache),
62+
}
63+
64+
configBytes, err := ioutil.ReadFile("cortex.yaml")
65+
if err != nil {
66+
errors.Exit(errors.Wrap(err, "cortex.yaml", userconfig.ErrorReadConfig().Error()))
67+
}
68+
69+
projectPaths, err := files.ListDirRecursive(root, false,
70+
files.IgnoreCortexYAML,
71+
files.IgnoreHiddenFiles,
72+
files.IgnoreHiddenFolders,
73+
files.IgnorePythonGeneratedFiles,
74+
)
75+
if err != nil {
76+
errors.Exit(err)
77+
}
78+
79+
projectZipBytes, err := zip.ToMem(&zip.Input{
5780
FileLists: []zip.FileListInput{
5881
{
59-
Sources: allConfigPaths(root),
82+
Sources: projectPaths,
6083
RemovePrefix: root,
6184
},
6285
},
86+
})
87+
88+
if err != nil {
89+
errors.Exit(errors.Wrap(err, "failed to zip project folder"))
6390
}
6491

65-
params := map[string]string{
66-
"force": s.Bool(force),
67-
"ignoreCache": s.Bool(ignoreCache),
92+
uploadInput := &HTTPUploadInput{
93+
Bytes: map[string][]byte{
94+
"cortex.yaml": configBytes,
95+
"project.zip": projectZipBytes,
96+
},
6897
}
6998

70-
response, err := HTTPUploadZip("/deploy", zipInput, "config.zip", params)
99+
response, err := HTTPUpload("/deploy", uploadInput, params)
71100
if err != nil {
72101
errors.Exit(err)
73102
}

cli/cmd/get.go

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,6 @@ func resourceByNameStr(resourceName string, resourcesRes *schema.GetResourcesRes
174174
return "", err
175175
}
176176
switch resourceType := rs.GetResourceType(); resourceType {
177-
case resource.PythonPackageType:
178-
return describePythonPackage(resourceName, resourcesRes)
179177
case resource.APIType:
180178
return describeAPI(resourceName, resourcesRes, flagVerbose)
181179
default:
@@ -185,8 +183,6 @@ func resourceByNameStr(resourceName string, resourcesRes *schema.GetResourcesRes
185183

186184
func resourcesByTypeStr(resourceType resource.Type, resourcesRes *schema.GetResourcesResponse) (string, error) {
187185
switch resourceType {
188-
case resource.PythonPackageType:
189-
return pythonPackagesStr(resourcesRes.DataStatuses, resourcesRes.Context), nil
190186
case resource.APIType:
191187
return apisStr(resourcesRes.APIGroupStatuses), nil
192188
default:
@@ -196,8 +192,6 @@ func resourcesByTypeStr(resourceType resource.Type, resourcesRes *schema.GetReso
196192

197193
func resourceByNameAndTypeStr(resourceName string, resourceType resource.Type, resourcesRes *schema.GetResourcesResponse, flagVerbose bool) (string, error) {
198194
switch resourceType {
199-
case resource.PythonPackageType:
200-
return describePythonPackage(resourceName, resourcesRes)
201195
case resource.APIType:
202196
return describeAPI(resourceName, resourcesRes, flagVerbose)
203197
default:
@@ -206,27 +200,11 @@ func resourceByNameAndTypeStr(resourceName string, resourceType resource.Type, r
206200
}
207201

208202
func allResourcesStr(resourcesRes *schema.GetResourcesResponse) string {
209-
ctx := resourcesRes.Context
210-
211203
out := ""
212-
out += pythonPackagesStr(resourcesRes.DataStatuses, ctx)
213204
out += apisStr(resourcesRes.APIGroupStatuses)
214205
return out
215206
}
216207

217-
func pythonPackagesStr(dataStatuses map[string]*resource.DataStatus, ctx *context.Context) string {
218-
if len(ctx.PythonPackages) == 0 {
219-
return ""
220-
}
221-
222-
resources := make([]context.Resource, 0, len(ctx.PythonPackages))
223-
for _, pythonPackage := range ctx.PythonPackages {
224-
resources = append(resources, pythonPackage)
225-
}
226-
227-
return "\n" + dataResourceTable(resources, dataStatuses, resource.PythonPackageType) + "\n"
228-
}
229-
230208
func apisStr(apiGroupStatuses map[string]*resource.APIGroupStatus) string {
231209
if len(apiGroupStatuses) == 0 {
232210
return ""
@@ -235,15 +213,6 @@ func apisStr(apiGroupStatuses map[string]*resource.APIGroupStatus) string {
235213
return "\n" + apiResourceTable(apiGroupStatuses)
236214
}
237215

238-
func describePythonPackage(name string, resourcesRes *schema.GetResourcesResponse) (string, error) {
239-
pythonPackage := resourcesRes.Context.PythonPackages[name]
240-
if pythonPackage == nil {
241-
return "", userconfig.ErrorUndefinedResource(name, resource.PythonPackageType)
242-
}
243-
dataStatus := resourcesRes.DataStatuses[pythonPackage.GetID()]
244-
return dataStatusSummary(dataStatus), nil
245-
}
246-
247216
func describeAPI(name string, resourcesRes *schema.GetResourcesResponse, flagVerbose bool) (string, error) {
248217
groupStatus := resourcesRes.APIGroupStatuses[name]
249218
if groupStatus == nil {
@@ -553,10 +522,6 @@ func dataResourceTable(resources []context.Resource, dataStatuses map[string]*re
553522
}
554523

555524
title := resourceType.UserFacing()
556-
if resourceType == resource.PythonPackageType {
557-
title = resourceType.UserFacingPlural()
558-
}
559-
560525
t := table.Table{
561526
Headers: []table.Header{
562527
{Title: title, MaxWidth: 32},
@@ -615,14 +580,8 @@ func titleStr(title string) string {
615580
}
616581

617582
func resourceStatusesStr(resourcesRes *schema.GetResourcesResponse) string {
618-
ctx := resourcesRes.Context
619583
var titles, values []string
620584

621-
if len(ctx.PythonPackages) != 0 {
622-
titles = append(titles, resource.PythonPackageType.UserFacingPlural())
623-
values = append(values, pythonPackageStatusesStr(resourcesRes.DataStatuses, resourcesRes.Context))
624-
}
625-
626585
if len(resourcesRes.APIGroupStatuses) != 0 {
627586
titles = append(titles, resource.APIType.UserFacingPlural())
628587
values = append(values, apiStatusesStr(resourcesRes.APIGroupStatuses))
@@ -643,16 +602,6 @@ func resourceStatusesStr(resourcesRes *schema.GetResourcesResponse) string {
643602
return out
644603
}
645604

646-
func pythonPackageStatusesStr(dataStatuses map[string]*resource.DataStatus, ctx *context.Context) string {
647-
var statuses = make([]resource.Status, len(ctx.PythonPackages))
648-
i := 0
649-
for _, pythonPackage := range ctx.PythonPackages {
650-
statuses[i] = dataStatuses[pythonPackage.GetID()]
651-
i++
652-
}
653-
return StatusStr(statuses)
654-
}
655-
656605
func apiStatusesStr(apiGroupStatuses map[string]*resource.APIGroupStatus) string {
657606
var statuses = make([]resource.Status, len(apiGroupStatuses))
658607
i := 0

cli/cmd/lib_config_reader.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,8 @@ import (
2020
"os"
2121
"path/filepath"
2222

23-
"github.com/cortexlabs/cortex/pkg/consts"
2423
"github.com/cortexlabs/cortex/pkg/lib/errors"
2524
"github.com/cortexlabs/cortex/pkg/lib/files"
26-
"github.com/cortexlabs/cortex/pkg/lib/sets/strset"
2725
"github.com/cortexlabs/cortex/pkg/operator/api/userconfig"
2826
)
2927

@@ -68,27 +66,6 @@ func pythonPaths(dir string) []string {
6866
return pyPaths
6967
}
7068

71-
func allConfigPaths(root string) []string {
72-
exportPaths := strset.New()
73-
requirementsPath := filepath.Join(root, consts.RequirementsTxt)
74-
if err := files.CheckFile(requirementsPath); err == nil {
75-
exportPaths.Add(requirementsPath)
76-
}
77-
78-
customPackagesRoot := filepath.Join(root, consts.PackageDir)
79-
if err := files.CheckDir(customPackagesRoot); err == nil {
80-
customPackagesPaths, err := files.ListDirRecursive(customPackagesRoot, false, files.IgnoreHiddenFiles, files.IgnoreHiddenFolders, files.IgnorePythonGeneratedFiles)
81-
if err != nil {
82-
errors.Exit(err)
83-
}
84-
exportPaths.Add(customPackagesPaths...)
85-
}
86-
exportPaths.Add(yamlPaths(root)...)
87-
exportPaths.Add(pythonPaths(root)...)
88-
89-
return exportPaths.Slice()
90-
}
91-
9269
func appNameFromConfig() (string, error) {
9370
appRoot := mustAppRoot()
9471
return userconfig.ReadAppName(filepath.Join(appRoot, "cortex.yaml"), "cortex.yaml")

cortex.sh

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,6 @@ export CORTEX_IMAGE_FLUENTD="${CORTEX_IMAGE_FLUENTD:-cortexlabs/fluentd:$CORTEX_
171171
export CORTEX_IMAGE_OPERATOR="${CORTEX_IMAGE_OPERATOR:-cortexlabs/operator:$CORTEX_VERSION_STABLE}"
172172
export CORTEX_IMAGE_TF_SERVE="${CORTEX_IMAGE_TF_SERVE:-cortexlabs/tf-serve:$CORTEX_VERSION_STABLE}"
173173
export CORTEX_IMAGE_TF_API="${CORTEX_IMAGE_TF_API:-cortexlabs/tf-api:$CORTEX_VERSION_STABLE}"
174-
export CORTEX_IMAGE_PYTHON_PACKAGER="${CORTEX_IMAGE_PYTHON_PACKAGER:-cortexlabs/python-packager:$CORTEX_VERSION_STABLE}"
175174
export CORTEX_IMAGE_TF_SERVE_GPU="${CORTEX_IMAGE_TF_SERVE_GPU:-cortexlabs/tf-serve-gpu:$CORTEX_VERSION_STABLE}"
176175
export CORTEX_IMAGE_ONNX_SERVE="${CORTEX_IMAGE_ONNX_SERVE:-cortexlabs/onnx-serve:$CORTEX_VERSION_STABLE}"
177176
export CORTEX_IMAGE_ONNX_SERVE_GPU="${CORTEX_IMAGE_ONNX_SERVE_GPU:-cortexlabs/onnx-serve-gpu:$CORTEX_VERSION_STABLE}"
@@ -231,7 +230,6 @@ function install_cortex() {
231230
-e CORTEX_IMAGE_OPERATOR=$CORTEX_IMAGE_OPERATOR \
232231
-e CORTEX_IMAGE_TF_SERVE=$CORTEX_IMAGE_TF_SERVE \
233232
-e CORTEX_IMAGE_TF_API=$CORTEX_IMAGE_TF_API \
234-
-e CORTEX_IMAGE_PYTHON_PACKAGER=$CORTEX_IMAGE_PYTHON_PACKAGER \
235233
-e CORTEX_IMAGE_TF_SERVE_GPU=$CORTEX_IMAGE_TF_SERVE_GPU \
236234
-e CORTEX_IMAGE_ONNX_SERVE=$CORTEX_IMAGE_ONNX_SERVE \
237235
-e CORTEX_IMAGE_ONNX_SERVE_GPU=$CORTEX_IMAGE_ONNX_SERVE_GPU \

dev/registry.sh

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ function create_registry() {
4444
aws ecr create-repository --repository-name=cortexlabs/operator --region=$REGISTRY_REGION || true
4545
aws ecr create-repository --repository-name=cortexlabs/tf-serve --region=$REGISTRY_REGION || true
4646
aws ecr create-repository --repository-name=cortexlabs/tf-api --region=$REGISTRY_REGION || true
47-
aws ecr create-repository --repository-name=cortexlabs/python-packager --region=$REGISTRY_REGION || true
4847
aws ecr create-repository --repository-name=cortexlabs/tf-serve-gpu --region=$REGISTRY_REGION || true
4948
aws ecr create-repository --repository-name=cortexlabs/onnx-serve --region=$REGISTRY_REGION || true
5049
aws ecr create-repository --repository-name=cortexlabs/onnx-serve-gpu --region=$REGISTRY_REGION || true
@@ -129,7 +128,6 @@ elif [ "$cmd" = "update" ]; then
129128
build_and_push $ROOT/images/tf-serve tf-serve latest
130129
build_and_push $ROOT/images/tf-serve-gpu tf-serve-gpu latest
131130
build_and_push $ROOT/images/onnx-serve-gpu onnx-serve-gpu latest
132-
build_and_push $ROOT/images/python-packager python-packager latest
133131
build_and_push $ROOT/images/cluster-autoscaler cluster-autoscaler latest
134132
build_and_push $ROOT/images/nvidia nvidia latest
135133
build_and_push $ROOT/images/metrics-server metrics-server latest

docs/cluster/config.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ export CORTEX_IMAGE_TF_API="cortexlabs/tf-api:master"
5151
export CORTEX_IMAGE_TF_SERVE_GPU="cortexlabs/tf-serve-gpu:master"
5252
export CORTEX_IMAGE_ONNX_SERVE="cortexlabs/onnx-serve:master"
5353
export CORTEX_IMAGE_ONNX_SERVE_GPU="cortexlabs/onnx-serve-gpu:master"
54-
export CORTEX_IMAGE_PYTHON_PACKAGER="cortexlabs/python-packager:master"
5554
export CORTEX_IMAGE_CLUSTER_AUTOSCALER="cortexlabs/cluster-autoscaler:master"
5655
export CORTEX_IMAGE_NVIDIA="cortexlabs/nvidia:master"
5756
export CORTEX_IMAGE_METRICS_SERVER="cortexlabs/metrics-server:master"

docs/cluster/development.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ export CORTEX_IMAGE_OPERATOR="XXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/cortexlab
6969
export CORTEX_IMAGE_TF_SERVE="XXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/cortexlabs/tf-serve:latest"
7070
export CORTEX_IMAGE_TF_SERVE_GPU="XXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/cortexlabs/tf-serve-gpu:latest"
7171
export CORTEX_IMAGE_TF_API="XXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/cortexlabs/tf-api:latest"
72-
export CORTEX_IMAGE_PYTHON_PACKAGER="XXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/cortexlabs/python-packager:latest"
7372
export CORTEX_IMAGE_CLUSTER_AUTOSCALER="XXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/cortexlabs/cluster-autoscaler:latest"
7473
export CORTEX_IMAGE_NVIDIA="XXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/cortexlabs/nvidia:latest"
7574
export CORTEX_IMAGE_METRICS_SERVER="XXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/cortexlabs/metrics-server:latest"

docs/deployments/python-packages.md

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12,35 +12,3 @@ Cortex looks for a `requirements.txt` file in the top level cortex directory (in
1212
├── ...
1313
└── requirements.txt
1414
```
15-
16-
## Custom Packages
17-
18-
Cortex looks for your Python packages in the directory `./packages/<package name>`. The package must have a `setup.py` in the root of the package directory with the name set to your package name. Cortex will run `pip3 wheel -w wheelhouse ./packages/<package name>` to construct wheels for the Python Project.
19-
20-
```text
21-
./iris/
22-
├── cortex.yaml
23-
├── ...
24-
└── packages
25-
└── acme-util
26-
├── acme-util/
27-
| ├── util_a.py
28-
| └── util_b.py
29-
└── setup.py
30-
```
31-
32-
Sample `setup.py`
33-
34-
```python
35-
from distutils.core import setup
36-
37-
setup(
38-
name="acme-util",
39-
version="0.0.1",
40-
description="",
41-
author="ACME C. M. Exists",
42-
author_email="acme@acme.com",
43-
packages=["acme-util"],
44-
install_requires=["pyyaml==3.13"],
45-
)
46-
```

examples/text-generator/cortex.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
- kind: api
55
name: generator
66
model: s3://cortex-examples/gpt-2/774
7-
request_handler: encoder.py
7+
request_handler: handler.py
88
compute:
99
gpu: 1

examples/text-generator/encoder.py

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -115,16 +115,3 @@ def get_encoder():
115115
)
116116
bpe_merges = [tuple(merge_str.split()) for merge_str in bpe_data.split("\n")[1:-1]]
117117
return Encoder(encoder=encoder, bpe_merges=bpe_merges)
118-
119-
120-
encoder = get_encoder()
121-
122-
123-
def pre_inference(sample, metadata):
124-
context = encoder.encode(sample["text"])
125-
return {"context": [context]}
126-
127-
128-
def post_inference(prediction, metadata):
129-
response = prediction["response"]["sample"]
130-
return {encoder.decode(response)}

examples/text-generator/handler.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from encoder import get_encoder
2+
3+
encoder = get_encoder()
4+
5+
6+
def pre_inference(sample, metadata):
7+
context = encoder.encode(sample["text"])
8+
return {"context": [context]}
9+
10+
11+
def post_inference(prediction, metadata):
12+
response = prediction["response"]["sample"]
13+
return {encoder.decode(response)}

images/onnx-serve-gpu/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ RUN apt-get update -qq && apt-get install -y -q \
2626
&& apt-get clean -qq && rm -rf /var/lib/apt/lists/*
2727

2828

29-
ENV PYTHONPATH="/src:${PYTHONPATH}"
29+
ENV PYTHONPATH "${PYTHONPATH}:/src:/mnt/project"
3030

3131
COPY pkg/workloads/cortex/lib/requirements.txt /src/cortex/lib/requirements.txt
3232
COPY pkg/workloads/cortex/onnx_serve/requirements.txt /src/cortex/onnx_serve/requirements.txt
@@ -39,4 +39,4 @@ COPY pkg/workloads/cortex/consts.py /src/cortex
3939
COPY pkg/workloads/cortex/lib /src/cortex/lib
4040
COPY pkg/workloads/cortex/onnx_serve /src/cortex/onnx_serve
4141

42-
ENTRYPOINT ["/usr/bin/python3", "/src/cortex/onnx_serve/api.py"]
42+
ENTRYPOINT ["/src/cortex/onnx_serve/run.sh"]

images/onnx-serve/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ RUN apt-get update -qq && apt-get install -y -q \
2626
&& apt-get clean -qq && rm -rf /var/lib/apt/lists/*
2727

2828

29-
ENV PYTHONPATH="/src:${PYTHONPATH}"
29+
ENV PYTHONPATH "${PYTHONPATH}:/src:/mnt/project"
3030

3131
COPY pkg/workloads/cortex/lib/requirements.txt /src/cortex/lib/requirements.txt
3232
COPY pkg/workloads/cortex/onnx_serve/requirements.txt /src/cortex/onnx_serve/requirements.txt
@@ -39,4 +39,4 @@ COPY pkg/workloads/cortex/consts.py /src/cortex
3939
COPY pkg/workloads/cortex/lib /src/cortex/lib
4040
COPY pkg/workloads/cortex/onnx_serve /src/cortex/onnx_serve
4141

42-
ENTRYPOINT ["/usr/bin/python3", "/src/cortex/onnx_serve/api.py"]
42+
ENTRYPOINT ["/src/cortex/onnx_serve/run.sh"]

0 commit comments

Comments
 (0)