@aws/ml-container-creator 0.3.0 → 0.5.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.
Files changed (52) hide show
  1. package/bin/cli.js +5 -2
  2. package/config/bootstrap-stack.json +86 -7
  3. package/config/defaults.json +1 -1
  4. package/infra/ci-harness/buildspec.yml +60 -0
  5. package/package.json +3 -1
  6. package/servers/README.md +41 -1
  7. package/servers/instance-sizer/index.js +42 -2
  8. package/servers/instance-sizer/lib/instance-ranker.js +114 -10
  9. package/servers/instance-sizer/lib/quota-resolver.js +368 -0
  10. package/servers/instance-sizer/package.json +2 -0
  11. package/servers/lib/catalogs/instances.json +527 -12
  12. package/servers/lib/catalogs/model-servers.json +15 -15
  13. package/servers/lib/catalogs/model-sizes.json +27 -0
  14. package/servers/lib/catalogs/models.json +71 -0
  15. package/servers/lib/schemas/image-catalog.schema.json +9 -1
  16. package/src/app.js +109 -3
  17. package/src/lib/bootstrap-command-handler.js +96 -3
  18. package/src/lib/cli-handler.js +2 -2
  19. package/src/lib/config-manager.js +117 -1
  20. package/src/lib/deployment-entry-schema.js +16 -0
  21. package/src/lib/prompt-runner.js +270 -12
  22. package/src/lib/prompts.js +288 -6
  23. package/src/lib/registry-command-handler.js +12 -0
  24. package/src/lib/schema-sync.js +31 -0
  25. package/src/lib/template-manager.js +49 -1
  26. package/src/lib/validate-runner.js +125 -2
  27. package/templates/Dockerfile +22 -2
  28. package/templates/code/cuda_compat.sh +22 -0
  29. package/templates/code/serve +3 -0
  30. package/templates/code/serving.properties +14 -0
  31. package/templates/code/start_server.sh +3 -0
  32. package/templates/diffusors/Dockerfile +2 -1
  33. package/templates/diffusors/serve +3 -0
  34. package/templates/do/README.md +33 -0
  35. package/templates/do/adapter +1214 -0
  36. package/templates/do/adapters/.gitkeep +2 -0
  37. package/templates/do/add-ic +130 -0
  38. package/templates/do/benchmark +718 -0
  39. package/templates/do/clean +593 -17
  40. package/templates/do/config +49 -4
  41. package/templates/do/deploy +513 -362
  42. package/templates/do/ic/default.conf +32 -0
  43. package/templates/do/lib/endpoint-config.sh +216 -0
  44. package/templates/do/lib/inference-component.sh +167 -0
  45. package/templates/do/lib/secrets.sh +44 -0
  46. package/templates/do/lib/wait.sh +131 -0
  47. package/templates/do/logs +107 -27
  48. package/templates/do/optimize +528 -0
  49. package/templates/do/register +119 -2
  50. package/templates/do/status +337 -0
  51. package/templates/do/test +80 -28
  52. package/templates/triton/Dockerfile +5 -0
package/templates/do/logs CHANGED
@@ -15,33 +15,111 @@ source "${SCRIPT_DIR}/config"
15
15
  # SageMaker Real-Time Inference Logs (CloudWatch)
16
16
  # ============================================================
17
17
 
18
- # Allow inference component name as argument or from config
19
- IC_NAME="${1:-${INFERENCE_COMPONENT_NAME:-}}"
18
+ # Parse arguments: ./do/logs [--ic <name>] [--adapter <name>]
19
+ IC_ARG=""
20
+ ADAPTER_ARG=""
21
+ while [ $# -gt 0 ]; do
22
+ case "$1" in
23
+ --ic) shift; IC_ARG="${1:-}"; shift ;;
24
+ --adapter) shift; ADAPTER_ARG="${1:-}"; shift ;;
25
+ --help|-h)
26
+ echo "Usage: ./do/logs [--ic <name>] [--adapter <name>]"
27
+ echo ""
28
+ echo "Tail CloudWatch logs for the deployed inference component."
29
+ echo ""
30
+ echo "Options:"
31
+ echo " --ic <name> Show logs for a specific inference component"
32
+ echo " --adapter <name> Show logs for a specific LoRA adapter IC"
33
+ echo ""
34
+ echo "IC resolution:"
35
+ echo " --adapter <name> Use ADAPTER_IC_NAME from do/adapters/<name>.conf"
36
+ echo " --ic <name> Use IC_DEPLOYED_NAME from do/ic/<name>.conf"
37
+ echo " (no flag) Show all logs for the endpoint (current behavior)"
38
+ exit 0
39
+ ;;
40
+ *) shift ;;
41
+ esac
42
+ done
43
+
20
44
  ENDPOINT="${ENDPOINT_NAME:-}"
21
45
 
22
- if [ -z "${IC_NAME}" ] && [ -z "${ENDPOINT}" ]; then
23
- echo "❌ No inference component or endpoint name provided"
46
+ if [ -z "${ENDPOINT}" ]; then
47
+ echo "❌ ENDPOINT_NAME not set in config"
24
48
  echo ""
25
49
  echo "Usage:"
26
- echo " ./do/logs <inference-component-name>"
27
- echo " ./do/logs # uses INFERENCE_COMPONENT_NAME from do/config"
50
+ echo " ./do/logs --ic <name> # logs for a specific IC"
51
+ echo " ./do/logs # all endpoint logs"
28
52
  echo ""
29
- echo "Run ./do/deploy first to set INFERENCE_COMPONENT_NAME automatically."
53
+ echo "Run ./do/deploy first to set ENDPOINT_NAME automatically."
30
54
  exit 1
31
55
  fi
32
56
 
33
- # Inference component logs live under the endpoint log group
34
- # but in log streams named after the inference component
35
- if [ -z "${ENDPOINT}" ]; then
36
- echo "⚠️ ENDPOINT_NAME not set in config — cannot determine log group"
37
- echo " Run ./do/deploy first, or set ENDPOINT_NAME in do/config"
38
- exit 1
57
+ # Resolve inference component name for filtering
58
+ # Precedence: --adapter <name>, --ic <name>, first in do/ic/, or legacy config
59
+ IC_NAME=""
60
+ if [ -n "${ADAPTER_ARG}" ]; then
61
+ # Adapter name provided via --adapter flag look up adapter IC
62
+ ADAPTER_CONF="${SCRIPT_DIR}/adapters/${ADAPTER_ARG}.conf"
63
+ if [ ! -f "${ADAPTER_CONF}" ]; then
64
+ echo "❌ Adapter config not found: do/adapters/${ADAPTER_ARG}.conf"
65
+ echo " Available adapters:"
66
+ if [ -d "${SCRIPT_DIR}/adapters" ]; then
67
+ for conf in "${SCRIPT_DIR}"/adapters/*.conf; do
68
+ [ -f "${conf}" ] || continue
69
+ echo " • $(basename "${conf}" .conf)"
70
+ done
71
+ else
72
+ echo " (none)"
73
+ fi
74
+ exit 1
75
+ fi
76
+ ADAPTER_IC_NAME=""
77
+ source "${ADAPTER_CONF}"
78
+ if [ -z "${ADAPTER_IC_NAME}" ]; then
79
+ echo "❌ Adapter '${ADAPTER_ARG}' conf is missing ADAPTER_IC_NAME."
80
+ exit 1
81
+ fi
82
+ IC_NAME="${ADAPTER_IC_NAME}"
83
+ elif [ -n "${IC_ARG}" ]; then
84
+ # Explicit IC name provided via --ic flag
85
+ IC_CONF="${SCRIPT_DIR}/ic/${IC_ARG}.conf"
86
+ if [ ! -f "${IC_CONF}" ]; then
87
+ echo "❌ IC config not found: do/ic/${IC_ARG}.conf"
88
+ exit 1
89
+ fi
90
+ IC_DEPLOYED_NAME=""
91
+ source "${IC_CONF}"
92
+ if [ -z "${IC_DEPLOYED_NAME}" ]; then
93
+ echo "❌ IC '${IC_ARG}' has not been deployed yet. Run ./do/deploy --ic ${IC_ARG} first."
94
+ exit 1
95
+ fi
96
+ IC_NAME="${IC_DEPLOYED_NAME}"
97
+ elif [ -d "${SCRIPT_DIR}/ic" ]; then
98
+ # No --ic argument, but do/ic/ exists — use first IC alphabetically
99
+ for conf in "${SCRIPT_DIR}"/ic/*.conf; do
100
+ [ -f "${conf}" ] || continue
101
+ IC_DEPLOYED_NAME=""
102
+ source "${conf}"
103
+ if [ -n "${IC_DEPLOYED_NAME}" ]; then
104
+ IC_NAME="${IC_DEPLOYED_NAME}"
105
+ break
106
+ fi
107
+ done
108
+ # If no ICs deployed, fall through to show all endpoint logs
109
+ else
110
+ # Legacy: no do/ic/ directory, use INFERENCE_COMPONENT_NAME from do/config
111
+ IC_NAME="${INFERENCE_COMPONENT_NAME:-}"
39
112
  fi
40
113
 
41
- LOG_GROUP="/aws/sagemaker/InferenceComponents/${IC_NAME}"
42
-
43
- echo "📋 Tailing logs for inference component: ${IC_NAME}"
44
- echo " Endpoint: ${ENDPOINT}"
114
+ # Determine log group based on whether we have an IC name
115
+ if [ -n "${IC_NAME}" ]; then
116
+ LOG_GROUP="/aws/sagemaker/InferenceComponents/${IC_NAME}"
117
+ echo "📋 Tailing logs for inference component: ${IC_NAME}"
118
+ echo " Endpoint: ${ENDPOINT}"
119
+ else
120
+ LOG_GROUP="/aws/sagemaker/Endpoints/${ENDPOINT}"
121
+ echo "📋 Tailing logs for endpoint: ${ENDPOINT}"
122
+ fi
45
123
  echo " Log group: ${LOG_GROUP}"
46
124
  echo " Region: ${AWS_REGION}"
47
125
  echo ""
@@ -59,7 +137,7 @@ ELAPSED=0
59
137
  FALLBACK_LOG_GROUP="/aws/sagemaker/Endpoints/${ENDPOINT}"
60
138
 
61
139
  while true; do
62
- # Check IC-specific log group
140
+ # Check primary log group
63
141
  if aws logs describe-log-groups \
64
142
  --log-group-name-prefix "${LOG_GROUP}" \
65
143
  --region "${AWS_REGION}" \
@@ -68,15 +146,17 @@ while true; do
68
146
  break
69
147
  fi
70
148
 
71
- # Check endpoint-level log group as fallback
72
- if aws logs describe-log-groups \
73
- --log-group-name-prefix "${FALLBACK_LOG_GROUP}" \
74
- --region "${AWS_REGION}" \
75
- --query "logGroups[?logGroupName=='${FALLBACK_LOG_GROUP}'].logGroupName" \
76
- --output text 2>/dev/null | grep -q "${FALLBACK_LOG_GROUP}"; then
77
- LOG_GROUP="${FALLBACK_LOG_GROUP}"
78
- echo " ℹ️ Using endpoint log group: ${LOG_GROUP}"
79
- break
149
+ # Check endpoint-level log group as fallback (only when targeting a specific IC)
150
+ if [ -n "${IC_NAME}" ]; then
151
+ if aws logs describe-log-groups \
152
+ --log-group-name-prefix "${FALLBACK_LOG_GROUP}" \
153
+ --region "${AWS_REGION}" \
154
+ --query "logGroups[?logGroupName=='${FALLBACK_LOG_GROUP}'].logGroupName" \
155
+ --output text 2>/dev/null | grep -q "${FALLBACK_LOG_GROUP}"; then
156
+ LOG_GROUP="${FALLBACK_LOG_GROUP}"
157
+ echo " ℹ️ Using endpoint log group: ${LOG_GROUP}"
158
+ break
159
+ fi
80
160
  fi
81
161
 
82
162
  if [ "${ELAPSED}" -ge "${MAX_WAIT}" ]; then