跳转到主内容

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

查看所有标签

在 Podman AI Lab 中启用 OpenVINO 推理

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

Podman AI Lab 简介

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

什么是 OpenVINO?

OpenVINO™(Open Visual Inference and Neural Network Optimization)是 Intel 开发的一个开源工具包,用于加速各种硬件(包括 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

红帽为 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 的配方目录中看到一个新的配方“Search Podman-desktop.io”,并像运行其他配方一样运行它。当然,您可以与同事共享此文件,以分享您的最新实验成果。