跳到内容

使用 Cerebrium 运行 Outlines

Cerebrium 是一个无服务器人工智能基础设施平台,可帮助公司更轻松地构建和部署基于人工智能的应用。他们提供无服务器 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。您应该会看到返回的响应!