跳过内容

使用Cerebrium运行Outlines

Cerebrium 是一个无服务器的 AI 基础设施平台,使公司更容易构建和部署基于 AI 的应用程序。他们提供低冷启动时间的无服务器 GPU,并拥有超过 12 种自动扩展的 GPU 芯片,您只需为所使用的计算付费。

在本指南中,我们将向您展示如何使用Cerebrium在云端的GPU上运行使用Outlines编写的程序。

设置Cerebrium

首先,我们安装Cerebrium并登录以进行身份验证。

pip install cerebrium
cerebrium login

然后让我们创建我们的第一个项目

cerebrium init outlines-project

设置环境和硬件

您在上面使用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

在云上运行

cerebrium deploy

您将看到您的应用程序部署、安装pip包并下载模型。一旦完成,它将输出您可以用来调用您的端点的CURL请求。只需记住以您想要调用的函数结束URL——在本例中为/generate。您应该会看到返回的响应!