Skip to content

Commit 33923b9

Browse files
committed
[0828]fix vit embed
1 parent 676215e commit 33923b9

File tree

4 files changed

+37
-18
lines changed

4 files changed

+37
-18
lines changed

lightllm/server/embed_cache/impl/naive_memory_cache.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def alloc(self, md5sum_list: list[str], token_num_list: list[int]) -> Optional[l
103103
rec.visittime = now
104104
rec.ref += 1
105105
else:
106-
uid_int = int(md5sum, 16)
106+
uid_int = md5sum
107107
self._check_and_set_new_id_range(token_num)
108108
rec = Record(
109109
id=uid_int,

lightllm/server/embed_cache/utils.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,11 @@ def insert(self, md5: str) -> Tuple[bool, List[str]]:
183183
self._release_lock()
184184
raise e
185185

186+
def query(self, md5: str) -> bool:
187+
"""Quert if md5 exists."""
188+
self._wait_if_eviction()
189+
return bool(self.r.exists(self.ref_prefix + md5))
190+
186191
def query_and_incre(self, md5: str) -> bool:
187192
"""Query if md5 exists and increment ref_count if found."""
188193
self._wait_if_eviction()

lightllm/server/httpserver/manager.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,16 @@ def __init__(
117117
self.latest_success_infer_time_mark.set_value(int(time.time()))
118118
return
119119

120-
async def _alloc_resource(self, items, md5sums, token_nums, datas):
120+
async def _alloc_resource(self, items, uuids, token_nums, datas):
121121

122122
while True:
123-
records = obtain(self.cache_client.root.alloc(md5sums, token_nums))
123+
# 检查这个图片在redis总是否已经存在
124+
# embed_exists = obtain(self.cache_client.root.get_items_embed(uuids))
125+
# for exist in embed_exists:
126+
# if exist:
127+
# continue
128+
# else:
129+
records = obtain(self.cache_client.root.alloc(uuids, token_nums))
124130

125131
if records is None:
126132
await asyncio.sleep(0.1)
@@ -156,14 +162,15 @@ async def _alloc_multimodal_resources(self, multimodal_params: MultimodalParams,
156162
# 如果不加任何锁,假如请求1和请求2都有6张图片,而cache_capacity为10,
157163
# 那么如果某一时刻shm中存在请求1的5张图和请求2的5张图,将会资源竞争产生死锁。
158164
async with self._resource_lock:
159-
items, md5sums, tokens_nums, datas = [], [], [], []
165+
items, uuids, tokens_nums, datas = [], [], [], []
160166
for img in multimodal_params.images:
161167
self.tokenizer.init_imageitem_extral_params(img, multimodal_params, sampling_params)
162168
data = img.read()
163169
# must after init_imageitem_extral_params
164170
token_num = self.tokenizer.get_image_token_length(img)
165171
md5sum = "{}_{}".format(hashlib.md5(data).hexdigest(), img.patch_num)
166-
md5sums.append(md5sum)
172+
uuid = int(md5sum, 16)
173+
uuids.append(uuid)
167174
tokens_nums.append(token_num)
168175
datas.append(data)
169176
items.append(img)
@@ -175,12 +182,13 @@ async def _alloc_multimodal_resources(self, multimodal_params: MultimodalParams,
175182
hashlib.md5(data).hexdigest(),
176183
hashlib.md5(pickle.dumps(audio.extra_params, protocol=4)).hexdigest(),
177184
)
178-
md5sums.append(md5sum)
185+
uuid = int(md5sum, 16)
186+
uuids.append(uuid)
179187
tokens_nums.append(token_num)
180188
datas.append(data)
181189
items.append(audio)
182190

183-
await self._alloc_resource(items, md5sums, tokens_nums, datas)
191+
await self._alloc_resource(items, uuids, tokens_nums, datas)
184192
return
185193

186194
async def _release_multimodal_resources(self, multimodal_params: MultimodalParams):

lightllm/server/visualserver/manager.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,16 +153,22 @@ async def loop_for_fwd(self):
153153
processing_group_reqs = []
154154
images_need_infer = []
155155

156-
# def _recv_reqs(self):
157-
# if self.remote_vit:
158-
# recv_req: GroupReqIndexes = self.recv_from_httpserver.recv_pyobj(zmq.NOBLOCK)
159-
# recv_req.multimodal_params.images[:]= [
160-
# img for img in recv_req.multimodal_params.images
161-
# if not self.cache_client.root.get_item_embed(img.uuid) # embed已存在的被丢弃 , ref +1
162-
# ]
163-
# return recv_req
164-
# else:
165-
# return self.recv_from_httpserver.recv_pyobj(zmq.NOBLOCK)
156+
def _recv_reqs(self):
157+
if self.remote_vit:
158+
recv_req: GroupReqIndexes = self.vit_receiver.recv_pyobj(zmq.NOBLOCK)
159+
# recv_req.multimodal_params.images[:]= [
160+
# img for img in recv_req.multimodal_params.images
161+
# if not self.cache_client.root.get_item_embed(img.uuid) # embed已存在的被丢弃 , ref +1
162+
# ]
163+
uuids = []
164+
token_nums = []
165+
for img in recv_req.multimodal_params.images:
166+
uuids.append(img.uuid)
167+
token_nums.append(img.token_num)
168+
self.cache_client.root.alloc(uuids, token_nums)
169+
return recv_req
170+
else:
171+
return self.vit_receiver.recv_pyobj(zmq.NOBLOCK)
166172

167173
async def loop_for_netio_req(self):
168174
if not hasattr(self, "visual_recv_max_count"):
@@ -171,7 +177,7 @@ async def loop_for_netio_req(self):
171177
while True:
172178
try:
173179
for _ in range(self.visual_recv_max_count):
174-
recv_req: GroupReqIndexes = self.vit_receiver.recv_pyobj(zmq.NOBLOCK)
180+
recv_req: GroupReqIndexes = self._recv_reqs()
175181
if isinstance(recv_req, GroupReqIndexes):
176182
print(recv_req, flush=True)
177183
self.waiting_reqs.append(recv_req)

0 commit comments

Comments
 (0)