Modal
本页面介绍如何使用 Modal 生态系统运行 LangChain 自定义大语言模型。 它分为两个部分:
- 模型安装与 Web 端点部署
- 使用已部署的 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 参考:模态框