Skip to content

Commit 62da988

Browse files
committed
Address comments on sidecar, store updates in memory, rename base field
Signed-off-by: Kunjan Patel <[email protected]>
1 parent cb45fe2 commit 62da988

File tree

3 files changed

+15
-27
lines changed

3 files changed

+15
-27
lines changed

examples/dynamic-lora-sidecar/sidecar/configmap.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
deployment:
1+
vLLMLoRAConfig:
22
host: localhost
33
models:
44
- base-model: meta-llama/Llama-2-7b-hf

examples/dynamic-lora-sidecar/sidecar/sidecar.py

+10-8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import os
99

1010
CONFIG_MAP_FILE = os.environ.get('DYNAMIC_LORA_ROLLOUT_CONFIG',"configmap.yaml")
11+
BASE_FIELD = "vLLMLoRAConfig"
1112
logging.basicConfig(level=logging.INFO,
1213
format='%(asctime)s - %(levelname)s - %(message)s')
1314

@@ -48,7 +49,7 @@ def __init__(self):
4849

4950
def load_configmap(self):
5051
with open(CONFIG_MAP_FILE, "r") as f:
51-
deployment = yaml.safe_load(f)["deployment"]
52+
deployment = yaml.safe_load(f)[BASE_FIELD]
5253
self.deployment_name = deployment.get("name", "")
5354
lora_adapters = deployment["models"]
5455
self.host, self.port = (
@@ -88,25 +89,26 @@ def reconcile(self):
8889
"operation": "load",
8990
"errors": [e],
9091
}
91-
self.update_status_config()
92+
self.log_status_config()
9293

93-
def update_status_config(self):
94+
def log_status_config(self):
9495
models = list(self.config_map_adapters.values())
9596
deployment = {
9697
"name": self.deployment_name,
9798
"host": self.host,
9899
"port": self.port,
99100
"models": models,
100101
}
101-
config = {"deployment":deployment}
102-
with open(CONFIG_MAP_FILE, "w") as f:
103-
yaml.dump(config, f, indent=2)
102+
config = {BASE_FIELD:deployment}
103+
yaml_string = yaml.dump(config,indent=2)
104+
logging.info(f"current status of lora adapters on model server at {self.host}:{self.port} \n {yaml_string}")
105+
104106

105107
def load_adapter(self, adapter):
106108
"""Sends a request to load the specified model."""
107109
adapter_id = adapter["id"]
108110
if adapter_id in self.registered_adapters or adapter.get("toRemove"):
109-
return "already loaded"
111+
return
110112
url = f"http://{self.host}:{self.port}/v1/load_lora_adapter"
111113
payload = {
112114
"lora_name": adapter_id,
@@ -127,7 +129,7 @@ def unload_adapter(self, adapter):
127129
"""Sends a request to unload the specified model."""
128130
adapter_id = adapter["id"]
129131
if adapter_id not in self.registered_adapters:
130-
return "already unloaded"
132+
return
131133
url = f"http://{self.host}:{self.port}/v1/unload_lora_adapter"
132134
payload = {"lora_name": adapter_id}
133135
try:

examples/dynamic-lora-sidecar/sidecar/test_sidecar.py

+4-18
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import unittest
22
from unittest.mock import patch, Mock, mock_open
33
import yaml
4-
from sidecar import LoraReconciler, CONFIG_MAP_FILE
4+
from sidecar import LoraReconciler, CONFIG_MAP_FILE, BASE_FIELD
55

66
TEST_CONFIG_DATA = {
7-
"deployment": {
7+
"vLLMLoRAConfig": {
88
"name": "test-deployment",
99
"host": "localhost",
1010
"port": "8000",
@@ -101,16 +101,10 @@ def test_load_adapter(self, mock_post):
101101

102102
# loading a new adapter
103103
result = self.reconciler.load_adapter(
104-
TEST_CONFIG_DATA["deployment"]["models"][0]
104+
TEST_CONFIG_DATA[BASE_FIELD]["models"][0]
105105
)
106106
self.assertEqual(result, "")
107107

108-
# loading an already loaded adapter
109-
self.reconciler.registered_adapters["lora1"] = {"id": "lora1"}
110-
result = self.reconciler.load_adapter(
111-
TEST_CONFIG_DATA["deployment"]["models"][0]
112-
)
113-
self.assertEqual(result, "already loaded")
114108

115109
@patch("sidecar.requests.post")
116110
def test_unload_adapter(self, mock_post):
@@ -119,15 +113,9 @@ def test_unload_adapter(self, mock_post):
119113
# unloading an existing adapter
120114
self.reconciler.registered_adapters["lora2"] = {"id": "lora2"}
121115
result = self.reconciler.unload_adapter(
122-
TEST_CONFIG_DATA["deployment"]["models"][1]
116+
TEST_CONFIG_DATA[BASE_FIELD]["models"][1]
123117
)
124118
self.assertEqual(result, None)
125-
126-
# unloading an already unloaded adapter
127-
result = self.reconciler.unload_adapter(
128-
TEST_CONFIG_DATA["deployment"]["models"][1]
129-
)
130-
self.assertEqual(result, "already unloaded")
131119

132120
@patch("builtins.open", new_callable=mock_open, read_data=yaml.dump(TEST_CONFIG_DATA))
133121
@patch("sidecar.requests.get")
@@ -154,8 +142,6 @@ def test_reconcile(self, mock_post, mock_get, mock_file):
154142
)
155143
updated_config = self.reconciler.config_map_adapters
156144
mock_file.return_value.write.side_effect = lambda data: data
157-
self.reconciler.update_status_config()
158-
mock_file.return_value.write.assert_called()
159145
self.assertTrue("timestamp" in updated_config["lora1"]["status"])
160146
self.assertTrue("status" in updated_config["lora2"])
161147

0 commit comments

Comments
 (0)