使用 Cerebrium 运行 Outlines
Cerebrium 是一个无服务器人工智能基础设施平台,可帮助公司更轻松地构建和部署基于人工智能的应用。他们提供无服务器 GPU,具有低冷启动时间,支持超过 12 种 GPU 芯片,可自动扩展,并且您只需按使用的计算资源付费。
本指南将向您展示如何使用 Cerebrium 在云端 GPU 上运行使用 Outlines 编写的程序。
设置 Cerebrium
首先,我们安装 Cerebrium 并登录进行认证。
然后让我们创建我们的第一个项目
设置环境和硬件
您可以在上面使用 init 函数创建的 cerebrium.toml 文件中设置您的环境和硬件。
[cerebrium.deployment]
docker_base_image_url = "nvidia/cuda:12.1.1-runtime-ubuntu22.04"
[cerebrium.hardware]
cpu = 2
memory = 14.0
gpu = "AMPERE A10"
gpu_count = 1
provider = "aws"
region = "us-east-1"
[cerebrium.dependencies.pip]
outline = "==0.0.37"
transformers = "==4.38.2"
datasets = "==2.18.0"
accelerate = "==0.27.2"
设置推理
在 Cerebrium 中运行代码就像编写普通 Python 代码一样,没有特殊语法。在 main.py
文件中指定以下内容:
import outlines
model = outlines.models.transformers("microsoft/Phi-3-mini-4k-instruct")
schema = """{
"title": "Character",
"type": "object",
"properties": {
"name": {
"title": "Name",
"maxLength": 10,
"type": "string"
},
"age": {
"title": "Age",
"type": "integer"
},
"armor": {"$ref": "#/definitions/Armor"},
"weapon": {"$ref": "#/definitions/Weapon"},
"strength": {
"title": "Strength",
"type": "integer"
}
},
"required": ["name", "age", "armor", "weapon", "strength"],
"definitions": {
"Armor": {
"title": "Armor",
"description": "An enumeration.",
"enum": ["leather", "chainmail", "plate"],
"type": "string"
},
"Weapon": {
"title": "Weapon",
"description": "An enumeration.",
"enum": ["sword", "axe", "mace", "spear", "bow", "crossbow"],
"type": "string"
}
}
}"""
generator = outlines.generate.json(model, schema)
首次部署时,它会下载模型并将其存储在磁盘上,因此后续调用将从磁盘加载模型。
Cerebrium 中的每个函数都可以通过 API 端点调用。最顶层(即不在函数中)的代码仅在容器首次启动时实例化,因此后续调用将简单地运行您调用的函数中定义的代码。
要部署一个在接收到提示时创建新角色的 API,可以将以下代码添加到 main.py
中:
def generate(
prompt: str = "Amiri, a 53 year old warrior woman with a sword and leather armor.",
):
character = generator(
f"<s>[INST]Give me a character description. Describe {prompt}.[/INST]"
)
return character
在云端运行
您将看到您的应用正在部署、安装 pip 包并下载模型。完成后,它将输出一个可用于调用端点的 CURL 请求。请记住在 URL 末尾加上您希望调用的函数 - 在此例中是 /generate。您应该会看到返回的响应!