def test_load(yatai_server_container, example_bento_service_class): example_bento_service_class = bentoml.ver( major=2, minor=5)(example_bento_service_class) yc = get_yatai_client(yatai_server_container) test_model = TestModel() svc = example_bento_service_class() svc.pack('model', test_model) svc.save(yatai_url=yatai_server_container) loaded_svc = yc.repository.load(f'{svc.name}:{svc.version}') assert loaded_svc.name == svc.name
def test_list(yatai_server_container, example_bento_service_class): example_bento_service_class = bentoml.ver( major=2, minor=5)(example_bento_service_class) yc = get_yatai_client(yatai_server_container) test_model = TestModel() svc = example_bento_service_class() svc.pack('model', test_model) svc.save(yatai_url=yatai_server_container) bentos = yc.repository.list(bento_name=svc.name) assert len(bentos) == 5
def test_load_from_dir(example_bento_service_class): example_bento_service_class = bentoml.ver(major=2, minor=6)( example_bento_service_class ) yc = get_yatai_client() test_model = TestModel() svc = example_bento_service_class() svc.pack('model', test_model) saved_path = svc.save() loaded_svc = yc.repository.load(saved_path) assert loaded_svc.name == svc.name
def test_get(yatai_server_container, example_bento_service_class): example_bento_service_class = bentoml.ver( major=2, minor=4)(example_bento_service_class) yc = get_yatai_client(yatai_server_container) test_model = TestModel() svc = example_bento_service_class() svc.pack('model', test_model) svc.save(yatai_url=yatai_server_container) svc_pb = yc.repository.get(f'{svc.name}:{svc.version}') assert svc_pb.bento_service_metadata.name == svc.name assert svc_pb.bento_service_metadata.version == svc.version
def test_pull(yatai_server_container, example_bento_service_class): example_bento_service_class = bentoml.ver( major=2, minor=3)(example_bento_service_class) yc = get_yatai_client(yatai_server_container) test_model = TestModel() svc = example_bento_service_class() svc.pack('model', test_model) saved_path = svc.save(yatai_url=yatai_server_container) pulled_local_path = yc.repository.pull(f'{svc.name}:{svc.version}') assert pulled_local_path != saved_path
def test_pack_metadata_invalid(example_bento_service_class): example_bento_service_class = bentoml.ver( major=2, minor=10)(example_bento_service_class) test_model = TestModel() svc = example_bento_service_class() # assert empty metadata before packing assert svc.artifacts.get('model').metadata == {} # try packing invalid model_metadata = "non-dictionary metadata" with pytest.raises(TypeError): svc.pack("model", test_model, metadata=model_metadata)
def test_save_load(yatai_server_container, example_bento_service_class): example_bento_service_class = bentoml.ver( major=2, minor=1)(example_bento_service_class) yc = get_yatai_client(yatai_server_container) test_model = TestModel() svc = example_bento_service_class() svc.pack('model', test_model) saved_path = svc.save(yatai_url=yatai_server_container) assert saved_path bento_pb = yc.repository.get(f'{svc.name}:{svc.version}') bento_service = load_from_dir(bento_pb.uri.uri) assert bento_service.predict(1) == 2
def test_open_api_spec_json(tmpdir, example_bento_service_class): example_bento_service_class = bentoml.ver(major=2, minor=10)( example_bento_service_class ) test_model = TestModel() svc = example_bento_service_class() svc.pack("model", test_model) before_json_d = get_open_api_spec_json(svc) svc.save_to_dir(str(tmpdir)) with open(os.path.join(str(tmpdir), 'docs.json')) as f: after_json_d = json.load(f) # check loaded json dictionary is the same as before saving assert before_json_d == after_json_d
def test_push_with_labels(yatai_server_container, example_bento_service_class): example_bento_service_class = bentoml.ver( major=2, minor=2)(example_bento_service_class) yc = get_yatai_client(yatai_server_container) test_model = TestModel() svc = example_bento_service_class() svc.pack('model', test_model) saved_path = svc.save(labels={'foo': 'bar', 'abc': '123'}) pushed_path = yc.repository.push(f'{svc.name}:{svc.version}') assert pushed_path != saved_path remote_bento_pb = yc.repository.get(f'{svc.name}:{svc.version}') assert remote_bento_pb.bento_service_metadata.labels labels = dict(remote_bento_pb.bento_service_metadata.labels) assert labels['foo'] == 'bar' assert labels['abc'] == '123'
def test_pack_metadata(tmpdir, example_bento_service_class): example_bento_service_class = bentoml.ver( major=2, minor=10)(example_bento_service_class) test_model = TestModel() svc = example_bento_service_class() model_metadata = { 'k1': 'v1', 'job_id': 'ABC', 'score': 0.84, 'datasets': ['A', 'B'], } svc.pack("model", test_model, metadata=model_metadata) # check saved metadata is correct assert svc.artifacts.get('model').metadata == model_metadata svc.save_to_dir(str(tmpdir)) model_service = bentoml.load(str(tmpdir)) # check loaded metadata is correct assert model_service.artifacts.get('model').metadata == model_metadata
def test_save_and_load_model(tmpdir, example_bento_service_class): example_bento_service_class = bentoml.ver( major=2, minor=10)(example_bento_service_class) test_model = TestModel() svc = example_bento_service_class.pack(model=test_model) assert svc.predict(1000) == 2000 version = "test_" + uuid.uuid4().hex svc.save_to_dir(str(tmpdir), version=version) model_service = bentoml.load(str(tmpdir)) expected_version = "2.10.{}".format(version) assert model_service.version == expected_version api = model_service.get_service_api('predict') assert api.name == "predict" assert isinstance(api.handler, DataframeHandler) assert api.func(1) == 2 # Check api methods are available assert model_service.predict(1) == 2
def test_pack_on_bento_service_instance(tmpdir, example_bento_service_class): example_bento_service_class = bentoml.ver( major=2, minor=10)(example_bento_service_class) test_model = TestModel() svc = example_bento_service_class() svc.pack("model", test_model) assert svc.predict(1000) == 2000 version = "test_" + uuid.uuid4().hex svc.set_version(version) svc.save_to_dir(str(tmpdir)) model_service = bentoml.load(str(tmpdir)) expected_version = "2.10.{}".format(version) assert model_service.version == expected_version api = model_service.get_inference_api('predict') assert api.name == "predict" assert isinstance(api.input_adapter, DataframeInput) assert api.user_func(1) == 2 # Check api methods are available assert model_service.predict(1) == 2