跳转到主内容

2 篇带有“local”标签的帖子

查看所有标签

在 Podman AI Lab 中启用 OpenVINO 推理

·4 分钟阅读
Jeff Maury
工程经理

Podman AI Lab 简介

Podman AI Lab 是一个开源平台,旨在简化使用容器技术部署、管理和实验 AI 工作负载。它提供了一个用户友好的界面,用于在本地或云端运行、测试和扩展 AI 模型,利用了 Podman 容器的强大功能和灵活性。

什么是 OpenVINO?

OpenVINO™(Open Visual Inference and Neural Network Optimization)是英特尔开发的一个开源工具包,用于加速各种硬件(包括 CPU、GPU 和专用加速器)上的 AI 推理。它优化深度学习模型以实现快速、高效的推理,使其成为边缘和云 AI 应用的热门选择。

在 Podman AI Lab 中使用 OpenVINO

Podman AI Lab 现在支持 OpenVINO 作为推理提供程序。这意味着您可以:

  • 在启动推理服务器或 playground 时选择一个与 OpenVINO 兼容的模型。
  • 在支持的英特尔设备上享受硬件加速推理带来的好处。
  • 轻松地在不同的推理提供程序(例如,llama-cpp、OpenVINO)之间切换,以进行基准测试和兼容性测试。
警告

此功能仅在基于英特尔的系统上可用,因为 OpenVINO 是为英特尔硬件优化的。如果您使用的是非英特尔系统,您将无法使用 OpenVINO 作为推理提供程序。

如何使用

  1. 启动 Podman AI Lab 并导航到模型部署或 playground 部分。
  2. 在配置您的模型时,选择一个与 OpenVINO 兼容的模型。
  3. 启动推理服务器或 playground。

启动 OpenVINO 推理服务器

  1. 点击导航栏中的 Podman AI Lab 图标。
  2. 在 Podman AI Lab 导航栏中,点击 模型 > 服务 菜单项。
  3. 点击右上角的 新建模型服务 按钮。
  4. 模型 列表中选择一个与 OpenVINO 兼容的模型(例如 OpenVINO/mistral-7B-instruct-v0.2-int4-ov),然后点击 创建服务 按钮。
  5. 该模型的推理服务器正在启动,稍等片刻后,点击 打开服务详情 按钮。

OpenVINO inference server details

使用终端 shell,执行给定的 curl 命令并查看推理结果输出。

使用 OpenVINO 兼容模型启动实验环境

  1. 点击导航栏中的 Podman AI Lab 图标。
  2. 在 Podman AI Lab 导航栏中,点击 模型 > Playgrounds 菜单项。
  3. 点击右上角的 新建 Playground 按钮。
  4. 模型 列表中选择一个与 OpenVINO 兼容的模型(例如 OpenVINO/mistral-7B-instruct-v0.2-int4-ov),然后点击 创建 Playground 按钮。
  5. 该模型的 playground 正在启动,稍等片刻后,将显示一个聊天界面。

Initial playground on OpenVINO model

在提示符中输入“What is OpenVINO ?”,然后点击 发送 按钮。OpenVINO 模型将回复一个答案。

OpenVINO model response in the playground

与 OpenShift AI + OpenVINO 的一致性

在 Podman AI Lab 中使用 OpenVINO 的一个关键优势是,当将工作负载过渡到 OpenShift AI 时,它带来了一致性。这两个平台现在都支持 OpenVINO,确保:

  • 在 Podman AI Lab 中本地测试和优化的模型,在部署到 OpenShift AI 时将表现出相同的行为。
  • 您可以维持从开发到生产的统一工作流,减少意外情况和集成问题。
  • 性能优化和硬件加速在不同环境中得以保留。

结论

通过将 OpenVINO 启用为推理提供程序,Podman AI Lab 使用户能够在本地和云端利用高性能 AI 推理,并在 OpenShift AI 等平台上获得一致的体验。这种集成简化了 AI 开发生命周期,并为部署高效、可扩展的 AI 解决方案开辟了新的可能性。

Podman AI Lab - 供开发者在本地运行 LLM 来构建 AI 应用程序

·10 分钟阅读
Philippe Martin
首席软件工程师

banner

Red Hat 为 Podman Desktop 提供了一个扩展,即 Podman AI Lab,它让开发人员能够通过使用大型语言模型(LLM)发现应用程序示例,并为他们提供一个框架来创建自己的基于 AI 的应用程序并与团队共享。

通过本文,我们将探索创建我们的第一个 AI 应用程序,并将其添加到 Podman AI Lab 的配方目录中的不同步骤。

对于我们的第一个实验,我们将为 podman-desktop.io 网站开发一个微服务。该微服务将从网站接收搜索词,并要求模型找到最匹配的页面,然后将结果返回给网站。

my first app

准备 Podman Desktop 和 Podman AI Lab

如果您还没有安装,请先安装 Podman Desktop 及其扩展 Podman AI Lab

为了获得更好的体验,建议使用 GPU 加速来提供模型。如果您的机器上拥有这样的 GPU,您将需要使用 LibKrun 提供程序(在 MacOS 上)创建一个 Podman 机器。有关 Podman AI Lab 的 GPU 支持的更多详细信息。

在撰写本文时,Podman AI Lab 的 GPU 支持仍处于实验阶段。您需要在首选项中启用该选项才能使用。

a podman machine running using libkrun

GPU support for inference servers preference is enabled

使用模型测试提示

Podman AI Lab 提供了一个可本地使用的开源模型目录。您可以前往 `Models > Catalog` 页面下载您选择的模型。在本文中,我们将使用 `Mistral-7B-instruct` 模型。

Mistral model is downloaded

一旦模型下载完成,我们可以测试并与该模型交互,以尝试找到最适合我们应用程序的提示。对于聊天模型,Podman AI Lab 提供了一个 `Playground`,这样我们可以测试不同的提示并验证模型的响应是否足够。

让我们开始一个新的 playground(从 `Models > Playgrounds` 菜单),并发送我们的第一个提示

Give me a list of pages in the website podman-desktop.io related to "build an image"

模型应该会以人类可读的形式回复一些页面列表(参见下面的截图,我们收到的响应)。

a first prompt with human-readable output

问题是响应是人类可读的形式,但我们不希望 API 原样返回此响应。我们希望获得页面的名称和 URL,并将其发送到网站,以便网站可以用其首选格式显示这些页面。

为此,我们可以尝试要求模型以结构化响应回复,使用以下提示

Give me a list of pages in the website podman-desktop.io related to "build an image" as JSON output as an array of objects with 2 fields name and url

这一次,我们收到了一个 JSON 格式的响应,这更适合我们的需求。

a prompt with structured output

我们不期望用户提出如此精确的问题,我们更希望将用户的确切问题发送给模型,而不是实时修改它。为了实现这一点,聊天模型提供了系统提示功能。系统提示可以在聊天会话开始时定义。

Podman AI Lab 支持此功能,让我们用以下系统提示重新启动一个 Playground 会话

Give me a list of pages in the website podman-desktop.io related to the request as JSON output as an array of objects with 2 fields name and url

然后,发送提示 `build an image`,以模拟一个真实的用户搜索输入。

我们可以在下面的截图中看到,模型仍然返回一个适合我们用例的响应。

a session with a system prompt

请注意,本节并非关于编写最佳提示的课程,我相信您会为此目的找到更有效的提示。本节的目的是演示如何使用 Podman AI Lab 迭代以优化您想用于应用程序的提示。

测试配方

现在我们有了适合我们应用程序的提示,是时候启动我们的应用程序本身了。

许多开发者更喜欢从一个可用的应用程序示例开始,而 Podman AI Lab 通过一个配方目录提供了这样的示例,可以在 `AI Apps > Recipe Catalog` 页面看到。

让我们选择 Chatbot 配方(在 Chatbot 卡片上点击 `More details` 链接),并使用 Mistral 模型启动它(通过按 `Start` 按钮并填写表单)。

应用程序启动后,我们可以在 `AI Apps > Running` 页面访问正在运行的应用程序列表,并通过点击 `Open AI App` 链接访问应用程序的 UI。

我们可以再次通过输入我们的提示(不是带有系统提示的那个,因为该配方不支持提供系统提示)进行测试,并看到响应与从 playground 收到的非常相似。

a session on the Chatbot recipe

返回配方的详情页面,我们可以通过点击 在 VSCode 中打开 按钮、存储库链接或 本地克隆 链接来访问配方的源代码。

配方的结构

配方的入口点是其存储库中的 ai-lab.yaml 文件。

让我们检查一下聊天机器人示例中此文件的内容(文件语法在 此文档中指定)。

version: v1.0
application:
type: language
name: ChatBot_Streamlit
description: Chat with a model service in a web frontend.
containers:
- name: llamacpp-server
contextdir: ../../../model_servers/llamacpp_python
containerfile: ./base/Containerfile
model-service: true
backend:
- llama-cpp
arch:
- arm64
- amd64
ports:
- 8001
image: quay.io/ai-lab/llamacpp_python:latest
- name: streamlit-chat-app
contextdir: app
containerfile: Containerfile
arch:
- arm64
- amd64
ports:
- 8501
image: quay.io/ai-lab/chatbot:latest

该文件定义了两个容器,一个用于推理服务器,另一个用于应用程序本身。

第一个容器用于推理服务器,是通用的,可以被任何使用聊天模型的应用重用。

第二个是我们特别感兴趣的。它定义了如何构建应用程序的容器镜像。它指向用于构建镜像的 Containerfile,我们可以在其中找到应用程序的源代码:在 `app/chatbot_ui.py` 文件中。

查看 Python 源代码文件,我们可以看到应用程序使用了 streamlit 框架来处理 UI 部分,并使用 langchain 框架与模型进行对话。

我们可以调整此源代码,将 UI 部分替换为能将应用变为 REST 服务的框架,并保留 langchain 部分。

源代码中一个有趣的部分是,该配方没有向用户暴露系统提示,而是在内部定义了一个(You are world class technical advisor)。

prompt = ChatPromptTemplate.from_messages([
("system", "You are world class technical advisor."),
MessagesPlaceholder(variable_name="history"),
("user", "{input}")
])

这正是我们希望在应用程序中实现的功能,我们将能够在此处指定我们之前找到的系统提示。

创建我们自己的应用

根据我们应用程序的目的调整源代码超出了本文的范围,让我们在 我们的应用程序仓库中查看结果。

正如上一节所讨论的,我们已经用 `flask` 框架替换了 `streamlit` 部分,以创建一个具有两个端点的 REST API:一个用于 Podman AI Lab 所需的 `/` 上的健康检查,另一个用于 `/query`,这将是微服务用户发送请求的端点。

我们还指明了我们自己的系统提示。

prompt = ChatPromptTemplate.from_messages([
("system", """
reply in JSON format with an array of objects with 2 fields name and url
(and with no more text than the JSON output),
with a list of pages in the website https://www.podman-desktop.io related to my query
"""),
MessagesPlaceholder(variable_name="history"),
("user", "{input}")
])

在本地测试我自己的应用

为了在开发我们的应用程序期间进行迭代,我们可以在本地主机系统上测试我们的应用程序,同时使用 Podman AI Lab 提供的模型。为此,我们需要从“模型 > 服务”页面启动一个新的模型服务,方法是点击“新建模型服务”,然后选择适当的模型(在我们的例子中是 `Mistral-7B-instruct`),并指定一个端口号(比如 56625)。

a running inference server with Mistral model

然后,我们可以运行我们的应用程序,通过 MODEL_ENDPOINT 环境变量指定如何访问模型服务。

my app running locally

最后,我们可以向这个在本地运行并监听 5000 端口的应用发送请求,我们可以在下面的截图中检查到响应如预期一样,是一个 JSON 格式的页面列表(名称和 URL)。

a request to the micro-service

创建配方

最后一步是将此应用程序添加到 Podman AI Lab 配方目录中。

Podman AI Lab 允许用户通过自己的配方扩展提供的目录。这可以通过在特定目录中添加文件来完成,如 此文档 所述。

{
"version": "1.0",
"recipes": [
{
"id": "search-podman-desktop-io",
"description": "Search on Podman-desktop.io website",
"name": "Search Podman-desktop.io",
"repository": "https://github.com/redhat-developer/podman-desktop-demo",
"ref": "main",
"icon": "natural-language-processing",
"categories": ["natural-language-processing"],
"basedir": "ai-lab-demo/recipe",
"readme": "",
"recommended": ["hf.TheBloke.mistral-7b-instruct-v0.2.Q4_K_M"],
"backend": "llama-cpp"
}
]
}

通过创建文件 `$HOME/.local/share/containers/podman-desktop/extensions-storage/redhat.ai-lab/user-catalog.json` 并包含上述内容,您现在应该能够在 Podman AI Lab 的配方目录中看到一个新的配方“搜索 Podman-desktop.io”,并像运行任何其他配方一样运行它。当然,您可以与您的同事分享此文件,以便他们也能分享您最新的实验。