aws / aws/sagemaker-python-sdk

JumpStartModel corrupts environment variables (incorrect snake_case conversion) when using a private hub

未关闭 适合新手
#6,191 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
component: jumpstart type: bug
主要语言
Python
星标
2.3k
派生
1.3k
平均合并
1 天 22 小时
30 天内合并 PR
35

描述

**PySDK Version**

* [x] PySDK V2 (2.x)
* [x] PySDK V3 (3.x)

**Describe the bug**
When using the `JumpStartModel` class to deploy a model reference hosted on a private hub (by passing the `hub_name` parameter), a subset of the container environment variable names arrive corrupted. The variable names from the instance-specific overrides are recursively converted from UpperCamelCase to snake_case. The SDK uses a regular expression that inserts an underscore before every capital letter and then lowercases the result.

As a result, a variable like `SM_VLLM_MAX_MODEL_LEN` becomes `s_m__v_l_l_m__m_a_x__m_o_d_e_l__l_e_n`. This causes the instance-specific override to silently fail and not merge over the base defaults, as the spelling collision is broken. The defect is located in the hub deserialization path (`JumpStartInstanceTypeVariants.from_describe_hub_content_response`), which applies a `walk_and_apply_json(response, camel_to_snake)` function across the entire document structure.

**To reproduce**

```python
from sagemaker.jumpstart.model import JumpStartModel

# Note: Requires a private hub setup with a ModelReference to a JumpStart model
model = JumpStartModel(
model_id="huggingface-vlm-gemma-4-e4b-it",
model_version="*",
config_name="generate_lowest_cost",
hub_name="mi-hub-jumpstart-2", # Replace with your private hub name
region="eu-south-2",
)

# Inspect the container definition before creating the model
container_def = model.prepare_container_def(
accept_eula=True
)

# Check the environment variables
print(container_def["Environment"])

```

The environment variables will already show up as corrupted when executing this method.

**Expected behavior**
The environment variables from instance-specific overrides (located under `HostingInstanceTypeVariants`) should retain their original names (e.g., `SM_VLLM_MAX_MODEL_LEN`). The values from these instance-specific overrides should properly override the base defaults without having their keys modified into snake_case with underscores during JSON parsing.

**Screenshots or logs**
Example of the corrupted environment block showing duplicated values:

```text
SM_VLLM_MAX_MODEL_LEN = 4096
s_m__v_l_l_m__m_a_x__m_o_d_e_l__l_e_n = 131072
h_f__h_u_b__o_f_f_l_i_n_e = 1

```

**System information**

* **SageMaker Python SDK version**: 2.245.0 (Defect confirmed by AWS Support to also be present in recent versions 2.257.6 and 3.20.0)

* **Framework name (eg. PyTorch) or algorithm (eg. KMeans)**: JumpStart

* **Framework version**: N/A
* **Python version**: Python 3

* **CPU or GPU**: Any

* **Custom Docker image (Y/N)**: N

**Additional context**
AWS Premium Support investigated this under Case ID 178704468000307. They confirmed that the equivalent public-hub function, `from_json`, performs no key conversion at all, which is why the exact same model deploys correctly when taken from the public catalog. The issue occurs specifically because the names in `HostingInstanceTypeVariants` are defined as keys in a map, and are thus incorrectly caught by the `camel_to_snake` recursive rewrite during hub deserialization.

贡献指南

打开贡献指南

调研方向

从 JumpStartInstanceTypeVariants.from_describe_hub_content_response 开始,跟踪其对 walk_and_apply_json(response, camel_to_snake) 的调用。将此 hub 路径与 public-hub 的 from_json 行为进行比较,然后使用私有 hub 通过 JumpStartModel.prepare_container_def 重现该行为。当 SM_VLLM_MAX_MODEL_LEN 等键保持不变,且实例特定值覆盖基础默认值时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
aws, python
领域
cloud, machine-learning
Issue 类型
缺陷
难度
2/5
预计耗时
1-3 小时
活跃度
活跃
描述清晰度
描述清楚
新手友好度
82/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。