Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
7a2b227
feat: rebase kubernetes overwrites
atchernych Jun 5, 2025
0dad025
Changes per Julien
atchernych Jun 6, 2025
f4eb61e
remove claim related stuff for now
atchernych Jun 6, 2025
82838a5
cleanup
atchernych Jun 6, 2025
a36b593
Dead-end changes
atchernych Jun 10, 2025
ecd64c5
Refactored the python part after rebase
atchernych Jun 11, 2025
ea1271d
Move overrides into the extraPodSpecMainContainer
atchernych Jun 11, 2025
16fe788
Cleanup after moving the overrides.
atchernych Jun 11, 2025
8d4d91f
rerun make manifests
atchernych Jun 11, 2025
2ad84af
correct the manifest generation
atchernych Jun 11, 2025
457db96
fixed a bug with args
atchernych Jun 12, 2025
a806050
bring back licenses
atchernych Jun 12, 2025
6542ad3
Copy crds to deploy/cloud/helm/crds/template
atchernych Jun 12, 2025
4266372
Brign back helm.sh/resource-policy: keep
atchernych Jun 12, 2025
4d8520c
add comments
atchernych Jun 12, 2025
f576948
add DynamoGraphDeploymentController changes
atchernych Jun 13, 2025
3194e3b
Fix the parsing of the ExtraPodSpec
atchernych Jun 13, 2025
ec45e87
fix up the overrides
atchernych Jun 13, 2025
40b13cd
Move the ExtraPodSpec Overrides
atchernych Jun 13, 2025
0a227b1
proper naming for sharedSpec
atchernych Jun 13, 2025
1905078
move the override
atchernych Jun 13, 2025
f0f2861
revert default args
atchernych Jun 13, 2025
731269a
change the parsing library for yaml case
atchernych Jun 13, 2025
8e0e249
replace parsing lib and remove comments
atchernych Jun 13, 2025
a664e2e
Cleanup.
atchernych Jun 13, 2025
6fb1cbe
remove logger
atchernych Jun 14, 2025
81a841a
Use BaseModel for KubernetesOverrides.
atchernych Jun 14, 2025
d25c54e
Add a go test for overrides.
atchernych Jun 14, 2025
45b0b5f
refactor GenerateDynamoComponentsDeployments
atchernych Jun 14, 2025
89c6a14
fix the help func
atchernych Jun 14, 2025
dbb901a
Streamline the ExtraPodEverrides
atchernych Jun 14, 2025
bbe4d0a
validations on KubernetesOverrides
atchernych Jun 14, 2025
438916b
Simplify GenerateDynamoComponentsDeployments
atchernych Jun 14, 2025
b1e6c35
Merge branch 'main' into dep-157-extend-decor
atchernych Jun 14, 2025
7b0e22c
Update run.sh
atchernych Jun 16, 2025
0688b97
Merge branch 'main' into dep-157-extend-decor
atchernych Jun 16, 2025
4c30222
Merge branch 'main' into dep-157-extend-decor
atchernych Jun 16, 2025
6fa26a2
Merge branch 'main' into dep-157-extend-decor
atchernych Jun 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Dead-end changes
  • Loading branch information
atchernych committed Jun 12, 2025
commit a36b5939a862122592d6dc74682bd66d26066de6
2 changes: 2 additions & 0 deletions container/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,8 @@ get_options() {
VOLUME_MOUNTS+=" -v ${SOURCE_DIR}/..:/workspace "
VOLUME_MOUNTS+=" -v /tmp:/tmp "
VOLUME_MOUNTS+=" -v /mnt/:/mnt "
VOLUME_MOUNTS+=" -v /var/run/docker.sock:/var/run/docker.sock "


if [ -z "$HF_CACHE" ]; then
HF_CACHE=$DEFAULT_HF_CACHE
Expand Down
2 changes: 1 addition & 1 deletion deploy/cloud/helm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ kubectl get storageclass

1. Set the required environment variables:
```bash
export PROJECT_ROOT=($pwd)
export PROJECT_ROOT=$(pwd)
export DOCKER_USERNAME=<your-docker-username>
export DOCKER_PASSWORD=<your-docker-password>
export DOCKER_SERVER=<your-docker-server>
Expand Down
36 changes: 24 additions & 12 deletions deploy/sdk/src/dynamo/sdk/cli/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ class ServiceConfig(BaseModel):
dynamo: t.Dict[str, t.Any] = Field(default_factory=dict)
http_exposed: bool = False
api_endpoints: t.List[str] = Field(default_factory=list)
kubernetes_overrides: t.Optional[t.Dict[str, t.Any]] = None


class ServiceInfo(BaseModel):
Expand All @@ -116,7 +117,6 @@ class ServiceInfo(BaseModel):
module_path: str
class_name: str
config: ServiceConfig
kubernetes_overrides: t.Optional[t.Dict[str, t.Any]] = None

@classmethod
def from_service(cls, service: ServiceInterface[T]) -> ServiceInfo:
Expand All @@ -135,6 +135,20 @@ def from_service(cls, service: ServiceInterface[T]) -> ServiceInfo:
image is not None
), "Please set DYNAMO_IMAGE environment variable or image field in service config"

print(
f"!!! Creating ServiceConfig for {name}: hasattr(service.config, kubernetes_overrides) = {hasattr(service.config, 'kubernetes_overrides')}"
)
print(f"!!! service.config.model_dump() = {service.config.model_dump()}")
kubernetes_overrides = None
if (
hasattr(service, "kubernetes_overrides")
and service.kubernetes_overrides is not None
):
print("!kubernetes_overrides exist")
kubernetes_overrides = service.kubernetes_overrides.model_dump()
else:
print("!kubernetes_overrides DOES NOT exist")

# Create config
config = ServiceConfig(
name=name,
Expand All @@ -145,17 +159,15 @@ def from_service(cls, service: ServiceInterface[T]) -> ServiceInfo:
dynamo=service.config.dynamo.model_dump(),
http_exposed=len(api_endpoints) > 0,
api_endpoints=api_endpoints,
kubernetes_overrides=kubernetes_overrides,
# service.config.model_dump().get("kubernetes_overrides")
)
kubernetes_overrides = None
if hasattr(service, "kubernetes_overrides") and service.kubernetes_overrides:
kubernetes_overrides = service.kubernetes_overrides.model_dump()

return cls(
name=name,
module_path=service.__module__,
class_name=service_class.__name__,
config=config,
kubernetes_overrides=kubernetes_overrides,
)


Expand Down Expand Up @@ -221,6 +233,9 @@ def to_dict(self) -> t.Dict[str, t.Any]:
"workers": service["config"]["workers"],
"image": service["config"]["image"],
"dynamo": service["config"]["dynamo"],
"kubernetes_overrides": service["config"].get(
"kubernetes_overrides"
), # Add kubernetes_overrides.
},
}

Expand All @@ -231,12 +246,6 @@ def to_dict(self) -> t.Dict[str, t.Any]:
"api_endpoints"
]

# Add kubernetes overwrites if available
if service.get("kubernetes_overrides"):
service_dict["config"]["kubernetes_overrides"] = service[
"kubernetes_overrides"
]

services_dict.append(service_dict)
result["services"] = services_dict
return result
Expand Down Expand Up @@ -306,6 +315,9 @@ def dynamo_service(
from dynamo.sdk.lib.loader import find_and_load_service

dyn_svc = find_and_load_service(build_config.service, working_dir=build_ctx)
print(f"!!! dyn_svc type = {type(dyn_svc)}")
print(f"!!! dyn_svc.inner type = {type(dyn_svc.inner)}")

# Clean up unused edges
LinkedServices.remove_unused_edges()
dyn_svc.inject_config()
Expand All @@ -318,6 +330,7 @@ def create(
build_ctx: str,
version: t.Optional[str] = None,
) -> Package:
"""Create a package from a build config."""
dyn_svc = cls.dynamo_service(build_config, build_ctx)

# Get service name for package
Expand All @@ -332,7 +345,6 @@ def create(
tag = Tag(name=package_name, version=version)
if version is None:
tag = tag.make_new_version()

logger.debug(
f'Building Dynamo package "{tag}" from build context "{build_ctx}".'
)
Expand Down
12 changes: 12 additions & 0 deletions deploy/sdk/src/dynamo/sdk/core/runner/dynamo.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,18 @@ def create_service(
)
self._watchers.append(watcher)

# Inject kubernetes_overrides into config if present on service_cls
kubernetes_overrides = getattr(service_cls, "_kubernetes_overrides", None)
if kubernetes_overrides is not None:
logger.debug(
f"Injecting kubernetes_overrides into ServiceConfig for {service_cls.__name__}: {kubernetes_overrides}"
)
config.kubernetes_overrides = (
kubernetes_overrides.model_dump()
if hasattr(kubernetes_overrides, "model_dump")
else kubernetes_overrides
)

# Create and return the service interface
return LocalService(
inner_cls=service_cls,
Expand Down
3 changes: 2 additions & 1 deletion deploy/sdk/src/dynamo/sdk/lib/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ def find_and_load_service(
sys_path_modified = True

try:
return _do_import(import_str, working_dir)
service_instance = _do_import(import_str, working_dir)
return service_instance
finally:
if sys_path_modified and working_dir:
logger.debug(f"Removing {working_dir} from sys.path")
Expand Down
3 changes: 2 additions & 1 deletion examples/hello_world/hello_world.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class ResponseType(BaseModel):
resources={"cpu": 1, "memory": "500Mi"},
workers=2,
image=DYNAMO_IMAGE,
kubernetes_overrides={"entrypoint": "sh -c 'echo hello from anna'"},
kubernetes_overrides={"entrypoint": "sh -c 'echo hello from Backend!'"},
)
class Backend:
def __init__(self) -> None:
Expand Down Expand Up @@ -126,6 +126,7 @@ def shutdown(self):
@service(
dynamo={"namespace": "inference"},
image=DYNAMO_IMAGE,
kubernetes_overrides={"entrypoint": "sh -c 'echo hello from FrontEnd!'"},
)
class Frontend:
"""A simple frontend HTTP API that forwards requests to the dynamo graph."""
Expand Down