ray-embedding 0.13.15__py3-none-any.whl → 0.14.0__py3-none-any.whl
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.
- ray_embedding/deploy.py +14 -6
- ray_embedding/node_reaper.py +1 -5
- ray_embedding/utils.py +3 -14
- {ray_embedding-0.13.15.dist-info → ray_embedding-0.14.0.dist-info}/METADATA +1 -1
- ray_embedding-0.14.0.dist-info/RECORD +11 -0
- ray_embedding-0.13.15.dist-info/RECORD +0 -11
- {ray_embedding-0.13.15.dist-info → ray_embedding-0.14.0.dist-info}/WHEEL +0 -0
- {ray_embedding-0.13.15.dist-info → ray_embedding-0.14.0.dist-info}/top_level.txt +0 -0
ray_embedding/deploy.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import os
|
|
2
|
+
from typing import Any, Dict
|
|
2
3
|
|
|
3
4
|
import torch
|
|
4
5
|
from ray.serve import Application
|
|
@@ -6,7 +7,7 @@ from ray.serve import Application
|
|
|
6
7
|
from ray_embedding.dto import AppConfig, ModelDeploymentConfig, DeployedModel, NodeReaperConfig
|
|
7
8
|
from ray_embedding.embedding_model import EmbeddingModel
|
|
8
9
|
from ray_embedding.node_reaper import NodeReaper, NODE_REAPER_DEPLOYMENT_NAME
|
|
9
|
-
from ray_embedding.utils import
|
|
10
|
+
from ray_embedding.utils import get_head_node_id
|
|
10
11
|
from ray_embedding.model_router import ModelRouter
|
|
11
12
|
|
|
12
13
|
|
|
@@ -56,7 +57,7 @@ def build_app(args: AppConfig) -> Application:
|
|
|
56
57
|
|
|
57
58
|
node_reaper_config = args.node_reaper or NodeReaperConfig()
|
|
58
59
|
|
|
59
|
-
node_reaper_kwargs = {
|
|
60
|
+
node_reaper_kwargs: Dict[str, Any] = {
|
|
60
61
|
"ssh_user": node_reaper_config.ssh_user,
|
|
61
62
|
"ssh_private_key": node_reaper_config.ssh_private_key,
|
|
62
63
|
}
|
|
@@ -65,15 +66,22 @@ def build_app(args: AppConfig) -> Application:
|
|
|
65
66
|
if node_reaper_config.reap_interval_seconds is not None:
|
|
66
67
|
node_reaper_kwargs["reap_interval_seconds"] = node_reaper_config.reap_interval_seconds
|
|
67
68
|
|
|
68
|
-
node_reaper = NodeReaper.options(
|
|
69
|
+
node_reaper = NodeReaper.options(
|
|
69
70
|
name=NODE_REAPER_DEPLOYMENT_NAME,
|
|
70
|
-
|
|
71
|
+
ray_actor_options={"num_cpus": 0.25, "resources": {"node_type:head": 1}},
|
|
72
|
+
autoscaling_config={"initial_replicas": 1, "min_replicas": 1, "max_replicas": 1}
|
|
71
73
|
).bind(**node_reaper_kwargs)
|
|
72
74
|
|
|
73
75
|
deployed_models = {model_config.served_model_name: build_model(model_config, node_reaper) for model_config in models}
|
|
76
|
+
model_router_kwargs = {
|
|
77
|
+
"deployed_models": deployed_models,
|
|
78
|
+
"path_prefix": model_router.path_prefix,
|
|
79
|
+
"max_concurrency": model_router.max_concurrency,
|
|
80
|
+
"node_reaper": node_reaper
|
|
81
|
+
}
|
|
74
82
|
router = ModelRouter.options(
|
|
75
83
|
name=model_router.deployment,
|
|
76
|
-
|
|
77
|
-
).bind(
|
|
84
|
+
ray_actor_options={"num_cpus": 0.25, "resources": {"node_type:worker": 1}}
|
|
85
|
+
).bind(**model_router_kwargs)
|
|
78
86
|
|
|
79
87
|
return router
|
ray_embedding/node_reaper.py
CHANGED
|
@@ -10,11 +10,7 @@ from ray import serve
|
|
|
10
10
|
NODE_REAPER_DEPLOYMENT_NAME = "NodeReaper"
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
@serve.deployment
|
|
14
|
-
name=NODE_REAPER_DEPLOYMENT_NAME,
|
|
15
|
-
ray_actor_options={"num_cpus": 0.25},
|
|
16
|
-
autoscaling_config={"initial_replicas": 1, "min_replicas": 1, "max_replicas": 1},
|
|
17
|
-
)
|
|
13
|
+
@serve.deployment
|
|
18
14
|
class NodeReaper:
|
|
19
15
|
def __init__(
|
|
20
16
|
self,
|
ray_embedding/utils.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Optional
|
|
1
|
+
from typing import Optional, Tuple
|
|
2
2
|
|
|
3
3
|
import ray
|
|
4
4
|
from ray import serve
|
|
@@ -10,28 +10,17 @@ from ray_embedding.node_reaper import NODE_REAPER_DEPLOYMENT_NAME
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
def get_head_node_id() -> str:
|
|
13
|
+
def get_head_node_id() -> Tuple[str, str]:
|
|
14
14
|
try:
|
|
15
15
|
nodes = state.list_nodes(filters=[("is_head_node", "=", True)])
|
|
16
16
|
if not nodes:
|
|
17
17
|
raise RuntimeError("Unable to locate head node for NodeReaper deployment.")
|
|
18
18
|
head_node = nodes[0]
|
|
19
|
-
return head_node["node_id"]
|
|
19
|
+
return head_node["node_id"], head_node["node_ip"]
|
|
20
20
|
except Exception as exc:
|
|
21
21
|
raise RuntimeError("Unable to locate the head node ID for NodeReaper deployment.") from exc
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
HEAD_NODE_ID = get_head_node_id()
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def node_affinity_for_head() -> NodeAffinitySchedulingStrategy:
|
|
28
|
-
return NodeAffinitySchedulingStrategy(node_id=HEAD_NODE_ID, soft=False)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def node_affinity_for_worker() -> NodeAffinitySchedulingStrategy:
|
|
32
|
-
return NodeAffinitySchedulingStrategy(node_id=NotIn(HEAD_NODE_ID), soft=False)
|
|
33
|
-
|
|
34
|
-
|
|
35
24
|
def get_node_reaper_handle() -> DeploymentHandle:
|
|
36
25
|
try:
|
|
37
26
|
return serve.context.get_deployment_handle(NODE_REAPER_DEPLOYMENT_NAME)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
ray_embedding/__init__.py,sha256=YS5LAZfRIwwVvE3C9g7hsauvjgIkqKtHyxkwMFFfAGY,46
|
|
2
|
+
ray_embedding/deploy.py,sha256=NYpGDGF8y1rh3Thts-NC4nb8anXQJDC0dFZC18_R2f8,4170
|
|
3
|
+
ray_embedding/dto.py,sha256=6JuAcD6pLfzUL48HfyPnZI7Hb-o66KFM5UtYZOOgwc8,1739
|
|
4
|
+
ray_embedding/embedding_model.py,sha256=Zr5lxVuy60y8-JgsOmKDD44FZlbTL1tiiY-3_72sTR4,4905
|
|
5
|
+
ray_embedding/model_router.py,sha256=W2c0hvqwDe1iCfNx4ee2UT7wKduywMP8dY0Ggb8xBvU,6658
|
|
6
|
+
ray_embedding/node_reaper.py,sha256=ISwSHnQs22B_f3PihND3KYTLkJSDbg1JWIAaKS-qCm0,4800
|
|
7
|
+
ray_embedding/utils.py,sha256=cbdI7q6xSvbl31ZthdM8mz55VrN8pubkoD6RqKGYLUc,1898
|
|
8
|
+
ray_embedding-0.14.0.dist-info/METADATA,sha256=uJlMttPN4bYVZbvLi5g37dCQRyzEzHrj7eqK1fYiv_w,1094
|
|
9
|
+
ray_embedding-0.14.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
10
|
+
ray_embedding-0.14.0.dist-info/top_level.txt,sha256=ziCblpJq1YsrryshFqxTRuRMgNuO1_tgvAAkGShATNA,14
|
|
11
|
+
ray_embedding-0.14.0.dist-info/RECORD,,
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
ray_embedding/__init__.py,sha256=YS5LAZfRIwwVvE3C9g7hsauvjgIkqKtHyxkwMFFfAGY,46
|
|
2
|
-
ray_embedding/deploy.py,sha256=QWbDjApgVWaMy_uWOC67zSuwrpj44vZx1ws1ersq-lw,3824
|
|
3
|
-
ray_embedding/dto.py,sha256=6JuAcD6pLfzUL48HfyPnZI7Hb-o66KFM5UtYZOOgwc8,1739
|
|
4
|
-
ray_embedding/embedding_model.py,sha256=Zr5lxVuy60y8-JgsOmKDD44FZlbTL1tiiY-3_72sTR4,4905
|
|
5
|
-
ray_embedding/model_router.py,sha256=W2c0hvqwDe1iCfNx4ee2UT7wKduywMP8dY0Ggb8xBvU,6658
|
|
6
|
-
ray_embedding/node_reaper.py,sha256=0lQvq94pdqZE21JeahIyc3LXA4xKtSEv8oELJ1y25QI,4969
|
|
7
|
-
ray_embedding/utils.py,sha256=IE0uyBRIW9HVQjO1I46qvtxGQfdorPwU4FsAlYHjI9g,2186
|
|
8
|
-
ray_embedding-0.13.15.dist-info/METADATA,sha256=je1cLWUJfUQ8skQDOTzktBgFpvot7nz8Dsy01gDo2mM,1095
|
|
9
|
-
ray_embedding-0.13.15.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
10
|
-
ray_embedding-0.13.15.dist-info/top_level.txt,sha256=ziCblpJq1YsrryshFqxTRuRMgNuO1_tgvAAkGShATNA,14
|
|
11
|
-
ray_embedding-0.13.15.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|