Skip to main content
Open on GitHub

Modal

本页面介绍如何使用 Modal 生态系统运行 LangChain 自定义大语言模型。 它分为两个部分:

  1. 模型安装与 Web 端点部署
  2. 使用已部署的 Web 端点,带有 LLM 包装类。

安装与设置

  • Install with pip install modal
  • 运行 modal token new

定义您的 Modal 函数和 Webhooks

您必须包含一个提示。响应结构是固定的:

class Item(BaseModel):
prompt: str

@stub.function()
@modal.web_endpoint(method="POST")
def get_text(item: Item):
return {"prompt": run_gpt2.call(item.prompt)}

以下是使用 GPT2 模型的一个示例:

from pydantic import BaseModel

import modal

CACHE_PATH = "/root/model_cache"

class Item(BaseModel):
prompt: str

stub = modal.Stub(name="example-get-started-with-langchain")

def download_model():
from transformers import GPT2Tokenizer, GPT2LMHeadModel
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')
tokenizer.save_pretrained(CACHE_PATH)
model.save_pretrained(CACHE_PATH)

# Define a container image for the LLM function below, which
# downloads and stores the GPT-2 model.
image = modal.Image.debian_slim().pip_install(
"tokenizers", "transformers", "torch", "accelerate"
).run_function(download_model)

@stub.function(
gpu="any",
image=image,
retries=3,
)
def run_gpt2(text: str):
from transformers import GPT2Tokenizer, GPT2LMHeadModel
tokenizer = GPT2Tokenizer.from_pretrained(CACHE_PATH)
model = GPT2LMHeadModel.from_pretrained(CACHE_PATH)
encoded_input = tokenizer(text, return_tensors='pt').input_ids
output = model.generate(encoded_input, max_length=50, do_sample=True)
return tokenizer.decode(output[0], skip_special_tokens=True)

@stub.function()
@modal.web_endpoint(method="POST")
def get_text(item: Item):
return {"prompt": run_gpt2.call(item.prompt)}

部署 Web 端点

使用 modal deploy CLI 命令将 Web 端点部署到 Modal 云。 您的 Web 端点将在 modal.run 域名下获得一个持久化 URL。

LLM 包装器,用于 Modal Web 端点

The Modal LLM 包装器类,它将接受您部署的 Web 端点的 URL。

from langchain_community.llms import Modal

endpoint_url = "https://ecorp--custom-llm-endpoint.modal.run" # REPLACE ME with your deployed Modal web endpoint's URL

llm = Modal(endpoint_url=endpoint_url)
llm_chain = LLMChain(prompt=prompt, llm=llm)

question = "What NFL team won the Super Bowl in the year Justin Beiber was born?"

llm_chain.run(question)
API 参考:模态框