Skip to content

Commit

Permalink
Merge branch 'main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
diegofiori committed Apr 30, 2022
2 parents cee55ea + 20e66b9 commit bf3f6f1
Show file tree
Hide file tree
Showing 9 changed files with 93 additions and 30 deletions.
52 changes: 52 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@












Expand Down Expand Up @@ -627,3 +633,49 @@

- [[```9bcbb1f9```](https://github.com/jina-ai/clip-as-service/commit/9bcbb1f9147aa3dda857a5a130b531e88f27baf2)] __-__ __version__: the next version will be 0.3.3 (*Jina Dev Bot*)

<a name=release-note-0-3-4></a>
## Release Note (`0.3.4`)

> Release time: 2022-04-30 15:17:02


馃檱 We'd like to thank all contributors for this new release! In particular,
Han Xiao, Jina Dev Bot, 馃檱


### 馃啎 New Features

- [[```076d6537```](https://github.com/jina-ai/clip-as-service/commit/076d65378b3653dc9f1213f398d1d70824e67513)] __-__ __helper__: add version check for client and server (*Han Xiao*)

### 馃悶 Bug fixes

- [[```8ac2e9bb```](https://github.com/jina-ai/clip-as-service/commit/8ac2e9bb68b96d1421f7e2ae6b01cec95aad3183)] __-__ __torch__: fix oom in rerank endpoint (#699) (*Han Xiao*)

### 馃嵐 Other Improvements

- [[```dd508167```](https://github.com/jina-ai/clip-as-service/commit/dd5081672718a12e7aeede0400432e8f6a01a744)] __-__ __version__: the next version will be 0.3.4 (*Jina Dev Bot*)

<a name=release-note-0-3-5></a>
## Release Note (`0.3.5`)

> Release time: 2022-04-30 18:55:10


馃檱 We'd like to thank all contributors for this new release! In particular,
Han Xiao, Jina Dev Bot, 馃檱


### 馃悶 Bug fixes

- [[```8ac2e9bb```](https://github.com/jina-ai/clip-as-service/commit/8ac2e9bb68b96d1421f7e2ae6b01cec95aad3183)] __-__ __torch__: fix oom in rerank endpoint (#699) (*Han Xiao*)

### 馃Ъ Code Refactoring

- [[```050c34e0```](https://github.com/jina-ai/clip-as-service/commit/050c34e0906f9593aee054ac37a0a830478a3a3b)] __-__ use packaging instead of distutil (#700) (*Han Xiao*)

### 馃嵐 Other Improvements

- [[```d2c2c872```](https://github.com/jina-ai/clip-as-service/commit/d2c2c8729e0872b0c5e299916ae8cf58be7ec516)] __-__ __version__: the next version will be 0.3.5 (*Jina Dev Bot*)

2 changes: 1 addition & 1 deletion client/clip_client/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
__version__ = '0.3.4'
__version__ = '0.3.6'

import os

Expand Down
10 changes: 5 additions & 5 deletions client/clip_client/helper.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import json
import sys
import threading
from distutils.version import LooseVersion
from packaging.version import Version
from urllib.request import Request, urlopen

import pkg_resources
Expand All @@ -17,7 +17,7 @@ def _version_check(package: str = None, github_repo: str = None):
if not github_repo:
github_repo = package

cur_ver = LooseVersion(pkg_resources.get_distribution(package).version)
cur_ver = Version(pkg_resources.get_distribution(package).version)
req = Request(
f'https://pypi.python.org/pypi/{package}/json',
headers={'User-Agent': 'Mozilla/5.0'},
Expand All @@ -27,9 +27,9 @@ def _version_check(package: str = None, github_repo: str = None):
) as resp: # 'with' is important to close the resource after use
j = json.load(resp)
releases = j.get('releases', {})
latest_release_ver = list(
sorted(LooseVersion(v) for v in releases.keys() if '.dev' not in v)
)[-1]
latest_release_ver = max(
Version(v) for v in releases.keys() if '.dev' not in v
)
if cur_ver < latest_release_ver:
print(
Panel(
Expand Down
2 changes: 1 addition & 1 deletion client/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
long_description_content_type='text/markdown',
zip_safe=False,
setup_requires=['setuptools>=18.0', 'wheel'],
install_requires=['jina>=3.2.10', 'docarray[common]>=0.10.3'],
install_requires=['jina>=3.3.21', 'docarray[common]>=0.10.3', 'packaging'],
extras_require={
'test': [
'pytest',
Expand Down
2 changes: 1 addition & 1 deletion server/clip_server/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '0.3.4'
__version__ = '0.3.6'
2 changes: 1 addition & 1 deletion server/clip_server/executors/clip_onnx.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def __init__(
name: str = 'ViT-B/32',
device: Optional[str] = None,
num_worker_preprocess: int = 4,
minibatch_size: int = 64,
minibatch_size: int = 16,
**kwargs,
):
super().__init__(**kwargs)
Expand Down
40 changes: 25 additions & 15 deletions server/clip_server/executors/clip_torch.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
from typing import Optional, List, Tuple, Dict

import numpy as np
from jina import Executor, requests, DocumentArray, Document

import torch
from clip_server.model import clip
from jina import Executor, requests, DocumentArray


class CLIPEncoder(Executor):
Expand All @@ -16,13 +16,11 @@ def __init__(
device: Optional[str] = None,
jit: bool = False,
num_worker_preprocess: int = 4,
minibatch_size: int = 64,
minibatch_size: int = 16,
**kwargs,
):
super().__init__(**kwargs)

import torch

if not device:
self._device = 'cuda' if torch.cuda.is_available() else 'cpu'
else:
Expand Down Expand Up @@ -83,6 +81,8 @@ def _split_img_txt_da(d, _img_da, _txt_da):

@requests(on='/rerank')
async def rerank(self, docs: 'DocumentArray', parameters: Dict, **kwargs):
import torch

_source = parameters.get('source', 'matches')
_get = lambda d: getattr(d, _source)

Expand All @@ -107,12 +107,24 @@ async def rerank(self, docs: 'DocumentArray', parameters: Dict, **kwargs):
f'`d.{_source}` must have more than one Documents to do ranking'
)
else:
_img_da = self._preproc_image(_img_da)
_txt_da, texts = self._preproc_text(_txt_da)

logits_per_image, logits_per_text = self._model(
_img_da.tensors, _txt_da.tensors
_img_da = await self.encode(_img_da)
_txt_da = await self.encode(_txt_da)
_img_da.embeddings = torch.from_numpy(_img_da.embeddings)
_txt_da.embeddings = torch.from_numpy(_txt_da.embeddings)

# normalized features
image_features = _img_da.embeddings / _img_da.embeddings.norm(
dim=-1, keepdim=True
)
text_features = _txt_da.embeddings / _txt_da.embeddings.norm(
dim=-1, keepdim=True
)

# cosine similarity as logits
logit_scale = self._model.logit_scale.exp()
logits_per_image = logit_scale * image_features @ text_features.t()
logits_per_text = logits_per_image.t()

probs_image = (
logits_per_image.softmax(dim=-1).cpu().detach().numpy().squeeze()
)
Expand All @@ -124,9 +136,8 @@ async def rerank(self, docs: 'DocumentArray', parameters: Dict, **kwargs):
elif len(_txt_da) == 1:
probs = probs_text

_txt_da.texts = texts
_img_da.tensors = None
_txt_da.tensors = None
_img_da.embeddings = None
_txt_da.embeddings = None

for c, v in zip(_get(d), probs):
c.scores['clip_score'].value = v
Expand All @@ -147,8 +158,6 @@ async def encode(self, docs: 'DocumentArray', **kwargs):
for d in docs:
self._split_img_txt_da(d, _img_da, _txt_da)

import torch

with torch.inference_mode():
# for image
if _img_da:
Expand Down Expand Up @@ -181,3 +190,4 @@ async def encode(self, docs: 'DocumentArray', **kwargs):

# drop tensors
docs.tensors = None
return docs
10 changes: 5 additions & 5 deletions server/clip_server/helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import os
import sys
import threading
from distutils.version import LooseVersion
from packaging.version import Version
from urllib.request import Request, urlopen

import pkg_resources
Expand All @@ -27,7 +27,7 @@ def _version_check(package: str = None, github_repo: str = None):
if not github_repo:
github_repo = package

cur_ver = LooseVersion(pkg_resources.get_distribution(package).version)
cur_ver = Version(pkg_resources.get_distribution(package).version)
req = Request(
f'https://pypi.python.org/pypi/{package}/json',
headers={'User-Agent': 'Mozilla/5.0'},
Expand All @@ -37,9 +37,9 @@ def _version_check(package: str = None, github_repo: str = None):
) as resp: # 'with' is important to close the resource after use
j = json.load(resp)
releases = j.get('releases', {})
latest_release_ver = list(
sorted(LooseVersion(v) for v in releases.keys() if '.dev' not in v)
)[-1]
latest_release_ver = max(
Version(v) for v in releases.keys() if '.dev' not in v
)
if cur_ver < latest_release_ver:
print(
Panel(
Expand Down
3 changes: 2 additions & 1 deletion server/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,9 @@
'torch',
'regex',
'torchvision',
'jina>=3.2.10',
'jina>=3.3.21',
'docarray>=0.11.0',
'packaging',
],
extras_require={
'onnx': [
Expand Down

0 comments on commit bf3f6f1

Please sign in to comment.