Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här notebook-filen konfigurerar open-source textinbäddningsmodell e5-small-v2 i en modellserverslutpunkt som kan användas för vektorsökning.
- Ladda ned modellen från Hugging Face Hub.
- Registrera den i MLflow Model Registry.
- Starta en modellserverslutpunkt för att hantera modellen.
Modellen e5-small-v2 är tillgänglig på https://huggingface.co/intfloat/e5-small-v2.
- MIT-licens
- Varianter:
En lista över biblioteksversioner som ingår i Databricks Runtime finns i viktig information för din Databricks Runtime-version.
Installera Databricks Python SDK
Den här anteckningsboken använder sin Python-klient för att arbeta med serveringsslutpunkter.
%pip install -U databricks-sdk python-snappy
%pip install sentence-transformers
dbutils.library.restartPython()
Ladda ned modell
# Download model using the sentence_transformers library.
from sentence_transformers import SentenceTransformer
source_model_name = 'intfloat/e5-small-v2' # model name on Hugging Face Hub
model = SentenceTransformer(source_model_name)
# Test the model, just to show it works.
sentences = ["This is an example sentence", "Each sentence is converted"]
embeddings = model.encode(sentences)
print(embeddings)
Registrera modell till MLflow
import mlflow
mlflow.set_registry_uri("databricks-uc")
# Specify the catalog and schema to use. You must have USE_CATALOG privilege on the catalog and USE_SCHEMA and CREATE_TABLE privileges on the schema.
# Change the catalog and schema here if necessary.
catalog = "main"
schema = "default"
model_name = "e5-small-v2"
# MLflow model name. The Model Registry uses this name for the model.
registered_model_name = f"{catalog}.{schema}.{model_name}"
# Compute input and output schema.
signature = mlflow.models.signature.infer_signature(sentences, embeddings)
print(signature)
model_info = mlflow.sentence_transformers.log_model(
model,
artifact_path="model",
signature=signature,
input_example=sentences,
registered_model_name=registered_model_name)
inference_test = ["I enjoy pies of both apple and cherry.", "I prefer cookies."]
# Load the custom model by providing the URI for where the model was logged.
loaded_model_pyfunc = mlflow.pyfunc.load_model(model_info.model_uri)
# Perform a quick test to ensure that the loaded model generates the correct output.
embeddings_test = loaded_model_pyfunc.predict(inference_test)
embeddings_test
# Extract the version of the model you just registered.
mlflow_client = mlflow.MlflowClient()
def get_latest_model_version(model_name):
client = mlflow_client
model_version_infos = client.search_model_versions("name = '%s'" % model_name)
return max([int(model_version_info.version) for model_version_info in model_version_infos])
model_version = get_latest_model_version(registered_model_name)
model_version
Skapa modell som betjänar slutpunkt
Mer information finns i Skapa grundläggande modell som betjänar slutpunkter.
Obs! Det här exemplet skapar en liten CPU-slutpunkt som skalar ned till 0. Detta är för snabba, små tester. För mer realistiska användningsfall kan du överväga att använda GPU-slutpunkter för snabbare inbäddningsberäkning och inte skala ned till 0 om du förväntar dig frekventa frågor, eftersom modellserverslutpunkter har lite kalla startkostnader.
endpoint_name = "e5-small-v2" # Name of endpoint to create
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import EndpointCoreConfigInput
w = WorkspaceClient()
endpoint_config_dict = {
"served_entities": [
{
"name": f'{registered_model_name.replace(".", "_")}_{1}',
"entity_name": registered_model_name,
"entity_version": model_version,
"workload_type": "CPU",
"workload_size": "Small",
"scale_to_zero_enabled": True,
}
]
}
endpoint_config = EndpointCoreConfigInput.from_dict(endpoint_config_dict)
# The endpoint may take several minutes to get ready.
w.serving_endpoints.create_and_wait(name=endpoint_name, config=endpoint_config)
Frågeslutpunkt
Kommandot ovan create_and_wait väntar tills slutpunkten är klar. Du kan också kontrollera statusen för serveringsslutpunkten i Databricks-användargränssnittet.
Mer information finns i Frågegrundsmodeller.
# Only run this command after the Model Serving endpoint is in the Ready state.
import time
start = time.time()
# If the endpoint is not yet ready, you might get a timeout error. If so, wait and then rerun the command.
endpoint_response = w.serving_endpoints.query(name=endpoint_name, dataframe_records=['Hello world', 'Good morning'])
end = time.time()
print(endpoint_response)
print(f'Time taken for querying endpoint in seconds: {end-start}')