Skip to main content
Open on GitHub

Modal

本页面介绍如何使用 Modal 生态系统来运行 LangChain 自定义 LLM。 它分为两部分:

  1. Modal 安装和 Web 端点部署
  2. 将已部署的 Web 端点与 LLM 包装类结合使用。

安装和设置

  • 使用 pip install modal 进行安装
  • 运行 modal token new

定义您的 Modal 函数和 Webhook

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

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)

# 为下面的 LLM 函数定义一个容器镜像,
# 该函数下载并存储 GPT-2 模型。
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。

围绕 Modal Web 端点的 LLM 包装器

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

from langchain_community.llms import Modal

endpoint_url = "https://ecorp--custom-llm-endpoint.modal.run" # 将此替换为您的已部署的 Modal Web 端点的 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 Reference:Modal