使用Cerebrium运行Outlines
Cerebrium 是一个无服务器的 AI 基础设施平台,使公司更容易构建和部署基于 AI 的应用程序。他们提供低冷启动时间的无服务器 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。您应该会看到返回的响应!