@aws/ml-container-creator 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/LICENSE-THIRD-PARTY +68620 -0
- package/NOTICE +2 -0
- package/README.md +106 -0
- package/bin/cli.js +365 -0
- package/config/defaults.json +32 -0
- package/config/presets/transformers-djl.json +26 -0
- package/config/presets/transformers-gpu.json +24 -0
- package/config/presets/transformers-lmi.json +27 -0
- package/package.json +129 -0
- package/servers/README.md +419 -0
- package/servers/base-image-picker/catalogs/model-servers.json +1191 -0
- package/servers/base-image-picker/catalogs/python-slim.json +38 -0
- package/servers/base-image-picker/catalogs/triton-backends.json +51 -0
- package/servers/base-image-picker/catalogs/triton.json +38 -0
- package/servers/base-image-picker/index.js +495 -0
- package/servers/base-image-picker/manifest.json +17 -0
- package/servers/base-image-picker/package.json +15 -0
- package/servers/hyperpod-cluster-picker/LICENSE +202 -0
- package/servers/hyperpod-cluster-picker/index.js +424 -0
- package/servers/hyperpod-cluster-picker/manifest.json +14 -0
- package/servers/hyperpod-cluster-picker/package.json +17 -0
- package/servers/instance-recommender/LICENSE +202 -0
- package/servers/instance-recommender/catalogs/instances.json +852 -0
- package/servers/instance-recommender/index.js +284 -0
- package/servers/instance-recommender/manifest.json +16 -0
- package/servers/instance-recommender/package.json +15 -0
- package/servers/lib/LICENSE +202 -0
- package/servers/lib/bedrock-client.js +160 -0
- package/servers/lib/custom-validators.js +46 -0
- package/servers/lib/dynamic-resolver.js +36 -0
- package/servers/lib/package.json +11 -0
- package/servers/lib/schemas/image-catalog.schema.json +185 -0
- package/servers/lib/schemas/instances.schema.json +124 -0
- package/servers/lib/schemas/manifest.schema.json +64 -0
- package/servers/lib/schemas/model-catalog.schema.json +91 -0
- package/servers/lib/schemas/regions.schema.json +26 -0
- package/servers/lib/schemas/triton-backends.schema.json +51 -0
- package/servers/model-picker/catalogs/jumpstart-public.json +66 -0
- package/servers/model-picker/catalogs/popular-diffusors.json +88 -0
- package/servers/model-picker/catalogs/popular-transformers.json +226 -0
- package/servers/model-picker/index.js +1693 -0
- package/servers/model-picker/manifest.json +18 -0
- package/servers/model-picker/package.json +20 -0
- package/servers/region-picker/LICENSE +202 -0
- package/servers/region-picker/catalogs/regions.json +263 -0
- package/servers/region-picker/index.js +230 -0
- package/servers/region-picker/manifest.json +16 -0
- package/servers/region-picker/package.json +15 -0
- package/src/app.js +1007 -0
- package/src/copy-tpl.js +77 -0
- package/src/lib/accelerator-validator.js +39 -0
- package/src/lib/asset-manager.js +385 -0
- package/src/lib/aws-profile-parser.js +181 -0
- package/src/lib/bootstrap-command-handler.js +1647 -0
- package/src/lib/bootstrap-config.js +238 -0
- package/src/lib/ci-register-helpers.js +124 -0
- package/src/lib/ci-report-helpers.js +158 -0
- package/src/lib/ci-stage-helpers.js +268 -0
- package/src/lib/cli-handler.js +529 -0
- package/src/lib/comment-generator.js +544 -0
- package/src/lib/community-reports-validator.js +91 -0
- package/src/lib/config-manager.js +2106 -0
- package/src/lib/configuration-exporter.js +204 -0
- package/src/lib/configuration-manager.js +695 -0
- package/src/lib/configuration-matcher.js +221 -0
- package/src/lib/cpu-validator.js +36 -0
- package/src/lib/cuda-validator.js +57 -0
- package/src/lib/deployment-config-resolver.js +103 -0
- package/src/lib/deployment-entry-schema.js +125 -0
- package/src/lib/deployment-registry.js +598 -0
- package/src/lib/docker-introspection-validator.js +51 -0
- package/src/lib/engine-prefix-resolver.js +60 -0
- package/src/lib/huggingface-client.js +172 -0
- package/src/lib/key-value-parser.js +37 -0
- package/src/lib/known-flags-validator.js +200 -0
- package/src/lib/manifest-cli.js +280 -0
- package/src/lib/mcp-client.js +303 -0
- package/src/lib/mcp-command-handler.js +532 -0
- package/src/lib/neuron-validator.js +80 -0
- package/src/lib/parameter-schema-validator.js +284 -0
- package/src/lib/prompt-runner.js +1349 -0
- package/src/lib/prompts.js +1138 -0
- package/src/lib/registry-command-handler.js +519 -0
- package/src/lib/registry-loader.js +198 -0
- package/src/lib/rocm-validator.js +80 -0
- package/src/lib/schema-validator.js +157 -0
- package/src/lib/sensitive-redactor.js +59 -0
- package/src/lib/template-engine.js +156 -0
- package/src/lib/template-manager.js +341 -0
- package/src/lib/validation-engine.js +314 -0
- package/src/prompt-adapter.js +63 -0
- package/templates/Dockerfile +300 -0
- package/templates/IAM_PERMISSIONS.md +84 -0
- package/templates/MIGRATION.md +488 -0
- package/templates/PROJECT_README.md +439 -0
- package/templates/TEMPLATE_SYSTEM.md +243 -0
- package/templates/buildspec.yml +64 -0
- package/templates/code/chat_template.jinja +1 -0
- package/templates/code/flask/gunicorn_config.py +35 -0
- package/templates/code/flask/wsgi.py +10 -0
- package/templates/code/model_handler.py +387 -0
- package/templates/code/serve +300 -0
- package/templates/code/serve.py +175 -0
- package/templates/code/serving.properties +105 -0
- package/templates/code/start_server.py +39 -0
- package/templates/code/start_server.sh +39 -0
- package/templates/diffusors/Dockerfile +72 -0
- package/templates/diffusors/patch_image_api.py +35 -0
- package/templates/diffusors/serve +115 -0
- package/templates/diffusors/start_server.sh +114 -0
- package/templates/do/.gitkeep +1 -0
- package/templates/do/README.md +541 -0
- package/templates/do/build +83 -0
- package/templates/do/ci +681 -0
- package/templates/do/clean +811 -0
- package/templates/do/config +260 -0
- package/templates/do/deploy +1560 -0
- package/templates/do/export +306 -0
- package/templates/do/logs +319 -0
- package/templates/do/manifest +12 -0
- package/templates/do/push +119 -0
- package/templates/do/register +580 -0
- package/templates/do/run +113 -0
- package/templates/do/submit +417 -0
- package/templates/do/test +1147 -0
- package/templates/hyperpod/configmap.yaml +24 -0
- package/templates/hyperpod/deployment.yaml +71 -0
- package/templates/hyperpod/pvc.yaml +42 -0
- package/templates/hyperpod/service.yaml +17 -0
- package/templates/nginx-diffusors.conf +74 -0
- package/templates/nginx-predictors.conf +47 -0
- package/templates/nginx-tensorrt.conf +74 -0
- package/templates/requirements.txt +61 -0
- package/templates/sample_model/test_inference.py +123 -0
- package/templates/sample_model/train_abalone.py +252 -0
- package/templates/test/test_endpoint.sh +79 -0
- package/templates/test/test_local_image.sh +80 -0
- package/templates/test/test_model_handler.py +180 -0
- package/templates/triton/Dockerfile +128 -0
- package/templates/triton/config.pbtxt +163 -0
- package/templates/triton/model.py +130 -0
- package/templates/triton/requirements.txt +11 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
set -u
|
|
7
|
+
set -o pipefail
|
|
8
|
+
|
|
9
|
+
# Source configuration
|
|
10
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
|
+
source "${SCRIPT_DIR}/config"
|
|
12
|
+
|
|
13
|
+
echo "🚀 Pushing Docker image to Amazon ECR"
|
|
14
|
+
echo " Project: ${PROJECT_NAME}"
|
|
15
|
+
echo " Region: ${AWS_REGION}"
|
|
16
|
+
echo " Repository: ${ECR_REPOSITORY_NAME}"
|
|
17
|
+
|
|
18
|
+
# Validate AWS credentials
|
|
19
|
+
echo "🔍 Validating AWS credentials..."
|
|
20
|
+
if ! aws sts get-caller-identity &> /dev/null; then
|
|
21
|
+
echo "❌ AWS credentials not configured"
|
|
22
|
+
echo ""
|
|
23
|
+
echo "Please configure AWS credentials:"
|
|
24
|
+
echo " • Run: aws configure"
|
|
25
|
+
echo " • Or set environment variables: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY"
|
|
26
|
+
echo " • Or use IAM role (recommended for EC2/ECS)"
|
|
27
|
+
exit 4
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# Get AWS account ID
|
|
31
|
+
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
|
|
32
|
+
echo "✅ AWS credentials validated (Account: ${AWS_ACCOUNT_ID})"
|
|
33
|
+
|
|
34
|
+
# Construct ECR repository URI
|
|
35
|
+
ECR_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY_NAME}"
|
|
36
|
+
|
|
37
|
+
# Authenticate with ECR
|
|
38
|
+
echo "🔐 Authenticating with Amazon ECR..."
|
|
39
|
+
if ! aws ecr get-login-password --region "${AWS_REGION}" | \
|
|
40
|
+
docker login --username AWS --password-stdin "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"; then
|
|
41
|
+
echo "❌ Failed to authenticate with ECR"
|
|
42
|
+
echo ""
|
|
43
|
+
echo "Possible causes:"
|
|
44
|
+
echo " • IAM permissions missing for ecr:GetAuthorizationToken"
|
|
45
|
+
echo " • Docker daemon not running"
|
|
46
|
+
echo " • Network connectivity issues"
|
|
47
|
+
exit 4
|
|
48
|
+
fi
|
|
49
|
+
echo "✅ ECR authentication successful"
|
|
50
|
+
|
|
51
|
+
# Check ECR repository exists (must be bootstrapped first)
|
|
52
|
+
echo "🔍 Checking ECR repository..."
|
|
53
|
+
if ! aws ecr describe-repositories \
|
|
54
|
+
--repository-names "${ECR_REPOSITORY_NAME}" \
|
|
55
|
+
--region "${AWS_REGION}" &> /dev/null; then
|
|
56
|
+
echo "❌ ECR repository '${ECR_REPOSITORY_NAME}' not found."
|
|
57
|
+
echo ""
|
|
58
|
+
echo "Run 'ml-container-creator bootstrap' to create it."
|
|
59
|
+
exit 4
|
|
60
|
+
fi
|
|
61
|
+
echo "✅ ECR repository exists"
|
|
62
|
+
|
|
63
|
+
# Tag images for ECR
|
|
64
|
+
echo "🏷️ Tagging images for ECR..."
|
|
65
|
+
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
|
66
|
+
|
|
67
|
+
# Tag latest
|
|
68
|
+
if ! docker tag "${PROJECT_NAME}:latest" "${ECR_REPOSITORY}:latest"; then
|
|
69
|
+
echo "❌ Failed to tag image"
|
|
70
|
+
echo ""
|
|
71
|
+
echo "Possible causes:"
|
|
72
|
+
echo " • Image ${PROJECT_NAME}:latest not found"
|
|
73
|
+
echo " • Run ./do/build first to build the image"
|
|
74
|
+
exit 5
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
# Tag with project name and latest
|
|
78
|
+
docker tag "${PROJECT_NAME}:latest" "${ECR_REPOSITORY}:${PROJECT_NAME}-latest"
|
|
79
|
+
|
|
80
|
+
# Tag with timestamp
|
|
81
|
+
docker tag "${PROJECT_NAME}:latest" "${ECR_REPOSITORY}:${PROJECT_NAME}-${TIMESTAMP}"
|
|
82
|
+
|
|
83
|
+
echo "✅ Images tagged for ECR"
|
|
84
|
+
|
|
85
|
+
# Push images to ECR
|
|
86
|
+
echo "📤 Pushing images to ECR..."
|
|
87
|
+
echo " This may take several minutes depending on image size..."
|
|
88
|
+
|
|
89
|
+
if ! docker push "${ECR_REPOSITORY}:latest"; then
|
|
90
|
+
echo "❌ Failed to push image to ECR"
|
|
91
|
+
echo ""
|
|
92
|
+
echo "Possible causes:"
|
|
93
|
+
echo " • IAM permissions missing for ecr:PutImage"
|
|
94
|
+
echo " • Network connectivity issues"
|
|
95
|
+
echo " • ECR repository not accessible"
|
|
96
|
+
exit 4
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
docker push "${ECR_REPOSITORY}:${PROJECT_NAME}-latest"
|
|
100
|
+
docker push "${ECR_REPOSITORY}:${PROJECT_NAME}-${TIMESTAMP}"
|
|
101
|
+
|
|
102
|
+
# Record ECR image in manifest (non-blocking)
|
|
103
|
+
./do/manifest add \
|
|
104
|
+
--type ecr-image \
|
|
105
|
+
--id "${ECR_REPOSITORY}:${PROJECT_NAME}-${TIMESTAMP}" \
|
|
106
|
+
--project "${PROJECT_NAME}" \
|
|
107
|
+
--meta "{\"repositoryName\":\"${ECR_REPOSITORY_NAME}\",\"imageTag\":\"${PROJECT_NAME}-${TIMESTAMP}\",\"region\":\"${AWS_REGION}\"}" \
|
|
108
|
+
2>/dev/null || true
|
|
109
|
+
|
|
110
|
+
echo "✅ Push complete!"
|
|
111
|
+
echo ""
|
|
112
|
+
echo "📦 Pushed image URIs:"
|
|
113
|
+
echo " ${ECR_REPOSITORY}:latest"
|
|
114
|
+
echo " ${ECR_REPOSITORY}:${PROJECT_NAME}-latest"
|
|
115
|
+
echo " ${ECR_REPOSITORY}:${PROJECT_NAME}-${TIMESTAMP}"
|
|
116
|
+
echo ""
|
|
117
|
+
echo "Next steps:"
|
|
118
|
+
echo " • Deploy to SageMaker: ./do/deploy"
|
|
119
|
+
echo " • View in ECR console: https://console.aws.amazon.com/ecr/repositories/${ECR_REPOSITORY_NAME}?region=${AWS_REGION}"
|