Example: Implement a container model adapter(示例:实现容器模型适配器(Container Model Adapter))¶
The following is an example model adapter defined for a container-backed model. It assumes the image used is a simple flask server listening at the /mirror endpoint to take in a request object with "text" as the only field. The model adapter will return that text verbatim in the field "returnedText" with a response object.
You can view the full definition of the container_context object in the API: ModelAdapter reference documentation.
import requests
import json
import pandas as pd
import palantir_models as pm
class ExampleIdentityFunctionModelAdapter(pm.ContainerModelAdapter):
"""
:display-name: Example Identity Function Model Adapter
:description: Reference example of a model adapter for container-backed model
"""
def __init__(self, shared_volume_path, model_host_and_port):
self.shared_volume_path = shared_volume_path
self.model_host_and_port = model_host_and_port
@classmethod
def init_container(cls, container_context):
shared_volume_path = container_context.shared_empty_dir_mount_path
# Note this adapter only expects one container name with one provided service URI.
model_host_and_port = list(container_context.services.values())[0][0]
return cls(shared_volume_path, model_host_and_port)
@classmethod
def api(cls):
inputs = {"input_df": pm.Pandas(columns=[("text", str)])}
outputs = {"output_df": pm.Pandas(columns=[("text", str), ("returnedText", str)])}
return inputs, outputs
def predict(self, input_df):
def run_inference_on_row(row):
request = {"text": row.text}
response = requests.post("http://" + self.model_host_and_port + "/mirror", json=request)
json_res = json.loads(response.content.decode("utf-8"))
return (row.text, json_res["returnedText"])
results = [run_inference_on_row(row) for row in input_df.itertuples()]
columns = ["text", "returnedText"]
return pd.DataFrame(results, columns=columns)
中文翻译¶
示例:实现容器模型适配器(Container Model Adapter)¶
以下是为容器化模型(Container-backed Model)定义的模型适配器示例。该示例假设使用的镜像是一个简单的Flask服务器,监听/mirror端点,接收一个仅包含"text"字段的请求对象。模型适配器将原样返回该文本,字段名为"returnedText",并附带一个响应对象。
您可以在API:ModelAdapter参考文档中查看container_context对象的完整定义。
import requests
import json
import pandas as pd
import palantir_models as pm
class ExampleIdentityFunctionModelAdapter(pm.ContainerModelAdapter):
"""
:display-name: 示例恒等函数模型适配器
:description: 容器化模型适配器的参考示例
"""
def __init__(self, shared_volume_path, model_host_and_port):
self.shared_volume_path = shared_volume_path
self.model_host_and_port = model_host_and_port
@classmethod
def init_container(cls, container_context):
shared_volume_path = container_context.shared_empty_dir_mount_path
# 注意:此适配器仅期望一个容器名称,并提供一个服务URI。
model_host_and_port = list(container_context.services.values())[0][0]
return cls(shared_volume_path, model_host_and_port)
@classmethod
def api(cls):
inputs = {"input_df": pm.Pandas(columns=[("text", str)])}
outputs = {"output_df": pm.Pandas(columns=[("text", str), ("returnedText", str)])}
return inputs, outputs
def predict(self, input_df):
def run_inference_on_row(row):
request = {"text": row.text}
response = requests.post("http://" + self.model_host_and_port + "/mirror", json=request)
json_res = json.loads(response.content.decode("utf-8"))
return (row.text, json_res["returnedText"])
results = [run_inference_on_row(row) for row in input_df.itertuples()]
columns = ["text", "returnedText"]
return pd.DataFrame(results, columns=columns)