Skip to content

Commit 2371953

Browse files
authored
config: update bento config for yatai server (#1782)
* update bento config for yatai server * format * add yatai client utils * update * update simple-di version
1 parent 826a51a commit 2371953

File tree

11 files changed

+121
-104
lines changed

11 files changed

+121
-104
lines changed

bentoml/__init__.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,24 @@
44
__version__ = get_versions()["version"] # type: ignore
55
del get_versions
66

7-
# from bentoml._internal.configuration import inject_dependencies
7+
from bentoml._internal.configuration import inject_dependencies
8+
89
# from bentoml._internal.utils.log import configure_logging
9-
#
10-
# # Inject dependencies and configurations
11-
# inject_dependencies()
10+
11+
# Inject dependencies and configurations
12+
inject_dependencies()
1213
#
1314
# # Configuring logging properly before loading other modules
1415
# configure_logging()
1516

16-
from ._internal.bundle import containerize, load
17-
from ._internal.environment import env
18-
from ._internal.inference_api import api, batch_api
19-
from ._internal.models import Model, PickleModel
20-
from ._internal.repository import delete, get, ls, pull, push
21-
from ._internal.server import serve
22-
from ._internal.service import Service
23-
from ._internal.yatai_client import YataiClient
17+
from bentoml._internal.bundle import containerize, load
18+
from bentoml._internal.environment import env
19+
from bentoml._internal.inference_api import api, batch_api
20+
from bentoml._internal.models import Model, PickleModel
21+
from bentoml._internal.repository import delete, get, ls, pull, push
22+
from bentoml._internal.server import serve
23+
from bentoml._internal.service import Service
24+
from bentoml._internal.yatai_client import YataiClient
2425

2526
__all__ = [
2627
"__version__",

bentoml/_internal/configuration/containers.py

Lines changed: 18 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@
88
from simple_di import Provide, Provider, container, providers
99

1010
from bentoml import __version__
11+
from bentoml._internal.configuration import expand_env_var, get_bentoml_deploy_version
12+
from bentoml._internal.utils import get_free_port
13+
from bentoml._internal.utils.ruamel_yaml import YAML
1114
from bentoml.exceptions import BentoMLConfigException
1215

13-
from ..configuration import expand_env_var, get_bentoml_deploy_version
14-
from ..utils import get_free_port
15-
from ..utils.ruamel_yaml import YAML
16-
1716
if TYPE_CHECKING:
1817
from ..marshal.marshal import MarshalApp
1918

@@ -79,36 +78,20 @@
7978
},
8079
"adapters": {"image_input": {"default_extensions": [str]}},
8180
"yatai": {
82-
"remote": {
83-
"url": Or(str, None),
84-
"access_token": Or(str, None),
85-
"access_token_header": Or(str, None),
86-
"tls": {
87-
"root_ca_cert": Or(str, None),
88-
"client_key": Or(str, None),
89-
"client_cert": Or(str, None),
90-
"client_certificate_file": Or(str, None),
91-
},
92-
},
93-
"repository": {
94-
"type": And(
95-
str,
96-
lambda _type: _type in YATAI_REPOSITORY_TYPES,
97-
error="yatai.repository.type must be one of %s"
98-
% YATAI_REPOSITORY_TYPES,
99-
),
100-
"file_system": {"directory": Or(str, None)},
101-
"s3": {
81+
"default_server": Or(str, None),
82+
"servers": {
83+
str: {
10284
"url": Or(str, None),
103-
"endpoint_url": Or(str, None),
104-
"signature_version": Or(str, None),
105-
"expiration": Or(int, None),
85+
"access_token": Or(str, None),
86+
"access_token_header": Or(str, None),
87+
"tls": {
88+
"root_ca_cert": Or(str, None),
89+
"client_key": Or(str, None),
90+
"client_cert": Or(str, None),
91+
"client_certificate_file": Or(str, None),
92+
},
10693
},
107-
"gcs": {"url": Or(str, None), "expiration": Or(int, None)},
10894
},
109-
"database": {"url": Or(str, None)},
110-
"namespace": str,
111-
"logging": {"path": Or(str, None)},
11295
},
11396
}
11497
)
@@ -313,13 +296,6 @@ def metrics_client(
313296
namespace=namespace,
314297
)
315298

316-
@providers.SingletonFactory
317-
@staticmethod
318-
def yatai_metrics_client():
319-
from ..metrics.prometheus import PrometheusClient
320-
321-
return PrometheusClient(multiproc=False, namespace="YATAI")
322-
323299
bento_bundle_deployment_version = providers.Factory(
324300
get_bentoml_deploy_version,
325301
providers.Factory(
@@ -328,26 +304,12 @@ def yatai_metrics_client():
328304
config.bento_bundle.deployment_version,
329305
),
330306
)
307+
default_yatai_server = config.yatai.servers[config.yatai.default_server]
331308

332-
yatai_database_url = providers.Factory(
333-
lambda default, customized: customized or default,
334-
providers.Factory(
335-
"sqlite:///{}".format,
336-
providers.Factory(os.path.join, bentoml_home, "storage.db"),
337-
),
338-
config.yatai.database.url,
339-
)
340-
341-
yatai_file_system_directory = providers.Factory(
342-
lambda default, customized: customized or default,
343-
providers.Factory(os.path.join, bentoml_home, "repository"),
344-
config.yatai.repository.file_system.directory,
345-
)
346-
347-
yatai_tls_root_ca_cert = providers.Factory(
309+
default_yatai_server_tls_root_ca_cert = providers.Factory(
348310
lambda current, deprecated: current or deprecated,
349-
config.yatai.remote.tls.root_ca_cert,
350-
config.yatai.remote.tls.client_certificate_file,
311+
config.yatai.servers[config.yatai.default_server].tls.root_ca_cert,
312+
config.yatai.servers[config.yatai.default_server].tls.client_certificate_file,
351313
)
352314

353315
logging_file_directory = providers.Factory(
@@ -356,11 +318,5 @@ def yatai_metrics_client():
356318
config.logging.file.directory,
357319
)
358320

359-
yatai_logging_path = providers.Factory(
360-
lambda default, customized: customized or default,
361-
providers.Factory(os.path.join, logging_file_directory, "yatai_web_server.log"),
362-
config.yatai.logging.path,
363-
)
364-
365321

366322
BentoMLContainer = BentoMLContainerClass()

bentoml/_internal/configuration/default_configuration.yml

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -61,29 +61,14 @@ adapters:
6161
- .bmp
6262

6363
yatai:
64-
remote:
65-
url: Null
66-
access_token: Null
67-
access_token_header: access_token
68-
tls:
69-
root_ca_cert: Null
70-
client_certificate_file: Null
71-
client_key: Null
72-
client_cert: Null
73-
repository:
74-
type: file_system
75-
file_system:
76-
directory: Null
77-
s3:
78-
url: Null
79-
endpoint_url: Null
80-
signature_version: s3v4
81-
expiration: 3000
82-
gcs:
64+
default_server: default
65+
servers:
66+
default:
8367
url: Null
84-
expiration: 3000
85-
database:
86-
url: Null
87-
namespace: dev
88-
logging:
89-
path: Null
68+
access_token: Null
69+
access_token_header: access_token
70+
tls:
71+
root_ca_cert: Null
72+
client_certificate_file: Null
73+
client_key: Null
74+
client_cert: Null

bentoml/_internal/yatai_client/__init__.py

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,36 @@
1010
# logger = logging.getLogger(__name__)
1111

1212

13-
# TODO:
13+
import logging
14+
15+
from simple_di import inject
16+
17+
from bentoml._internal.utils import cached_property
18+
from bentoml._internal.yatai_client.bento_repository_api import BentoRepositoryAPIClient
19+
from bentoml._internal.yatai_client.deployment_api import DeploymentAPIClient
20+
from bentoml._internal.yatai_client.utils import parse_grpc_url
21+
22+
logger = logging.getLogger(__name__)
23+
24+
1425
class YataiClient:
1526
"""
1627
Python Client for interacting with YataiService
1728
"""
1829

30+
def __init__(self, yatai_server_name: str):
31+
self._yatai_service = get_yatai_service()
32+
self.bundle_api_client = None
33+
self.deploy_api_client = None
34+
35+
@cached_property
36+
def bundles(self):
37+
return BentoRepositoryAPIClient(self._yatai_service)
38+
39+
@cached_property
40+
def deployment(self):
41+
return DeploymentAPIClient(self._yatai_service)
42+
1943
# def __init__(self, yatai_service: Optional["YataiStub"] = None):
2044
# self.yatai_service = yatai_service if yatai_service else get_yatai_service()
2145
# self.bento_repository_api_client = None
@@ -46,3 +70,45 @@ def get_yatai_client(yatai_url: str = None) -> "YataiClient":
4670

4771
# yatai_service = get_yatai_service(channel_address=yatai_url)
4872
# return YataiClient(yatai_service=yatai_service)
73+
74+
75+
@inject
76+
def get_yatai_service(
77+
channel_address: str,
78+
access_token: str,
79+
access_token_header: str,
80+
tls_root_ca_cert: str,
81+
tls_client_key: str,
82+
tls_client_cert: str,
83+
):
84+
import certifi
85+
import grpc
86+
87+
from bentoml._internal.yatai_client.interceptor import header_client_interceptor
88+
from bentoml._internal.yatai_client.proto.yatai_service_pb2_grpc import YataiStub
89+
90+
channel_address = channel_address.strip()
91+
schema, addr = parse_grpc_url(channel_address)
92+
header_adder_interceptor = header_client_interceptor.header_adder_interceptor(
93+
access_token_header, access_token
94+
)
95+
if schema in ("grpc", "https"):
96+
tls_root_ca_cert = tls_root_ca_cert or certifi.where()
97+
with open(tls_client_cert, "rb") as fb:
98+
ca_cert = fb.read()
99+
if tls_client_key:
100+
with open(tls_client_key, "rb") as fb:
101+
tls_client_key = fb.read()
102+
if tls_client_cert:
103+
with open(tls_client_cert, "rb") as fb:
104+
tls_client_cert = fb.read()
105+
credentials = grpc.ssl_channel_credentials(
106+
root_certificates=ca_cert,
107+
private_key=tls_client_key,
108+
certificate_chain=tls_client_cert,
109+
)
110+
channel = grpc.secure_channel(addr, credentials)
111+
else:
112+
channel = grpc.insecure_channel(addr)
113+
114+
return YataiStub(grpc.intercept_channel(channel, header_adder_interceptor))

bentoml/_internal/yatai_client/interceptor/__init__.py

Whitespace-only changes.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
def parse_grpc_url(url):
2+
"""
3+
>>> parse_grpc_url("grpcs://yatai.com:43/query")
4+
('grpcs', 'yatai.com:43/query')
5+
>>> parse_grpc_url("yatai.com:43/query")
6+
(None, 'yatai.com:43/query')
7+
"""
8+
from urllib3.util import parse_url
9+
10+
parts = parse_url(url)
11+
return parts.scheme, url.replace(f"{parts.scheme}://", "", 1)

bentoml/transformers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,4 +155,4 @@ def save(self, path: PathType) -> None:
155155
tokenizer_type = self._model.get("tokenizer").__class__.__name__
156156
self._model.get("model").save_pretrained(path)
157157
self._model.get("tokenizer").save_pretrained(path)
158-
self.__save_model_type(path, tokenizer_type)
158+
self.__save_model_type(path, tokenizer_type)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
'contextvars;python_version < "3.7"',
4040
'dataclasses;python_version < "3.7"',
4141
"chardet",
42-
"simple-di==0.1.0",
42+
"simple-di==0.1.1",
4343
"cloudpickle",
4444
]
4545

yatai/yatai/interceptor/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
from .grpc_server_interceptor import PromServerInterceptor, ServiceLatencyInterceptor
2-
from .header_client_interceptor import header_adder_interceptor
32

43
__all__ = [
54
"ServiceLatencyInterceptor",
65
"PromServerInterceptor",
7-
"header_adder_interceptor",
86
]

0 commit comments

Comments
 (0)