跳至主要内容

结合 vLLM 的 Llama 4:含演示项目的指南

了解如何在 RunPod 上使用 vLLM 部署并使用 Meta 的 LLaMA 4 Scout,完成文本补全与多模态推理。
· 12分钟 阅读

使用 AI 探索

Meta 最新的 LLaMA 4 模型 Scout 与 Maverick,专为长上下文推理、多模态理解以及高效的大规模推理而打造。配合 vLLM 这一高吞吐量、兼容 OpenAI API 的推理引擎,这些模型即可用于实际生产场景。

在本文中,我将带您使用 vLLM 在多 GPU 的 RunPod 实例上部署 LLaMA 4 Scout,并通过本地或远程的 OpenAI 兼容 API 端点进行服务。我们将涵盖模型设置、部署,以及如何使用文本与图像输入与其交互的 API 示例。

完成本教程后,您还将获得两个完整的演示:

  1. 文本补全演示:使用兼容 OpenAI 的 Python 代码与 LLaMA 4 对话,并探索其长上下文能力的简单界面。
  2. 多模态视觉演示:基于 vLLM 多模态能力的界面,同时接收文本与图像输入,从 LLaMA 4 返回有据可依的视觉推理结果。

我们通过每周五免费通讯 The Median 为读者带来最新 AI 动态,精炼回顾本周重点事件。订阅即可每周用几分钟保持敏锐:

为何在 vLLM 上使用 LLaMA 4?

vLLM(virtual large language model)是 UC Berkeley Sky Computing Lab 最初开发的优化型 LLM 推理框架,引入了 PagedAttention 这一新型内存管理机制,最大限度减少 GPU 内存碎片,并为超长序列实现高效的键值缓存。想进一步了解,请查看这篇关于vLLM的教程。

vLLM 成为部署 LLaMA 4 的理想引擎,原因如下:

  1. 高吞吐、低延迟:vLLM 的分页 KV 缓存使得即使在长上下文下也能高效推理。
  2. 多模态与长上下文就绪:支持图像输入,并为 Scout 模型提供最高 1000 万 token 的上下文。
  3. 兼容 OpenAI:无需改动即可使用 OpenAI 的 SDK 与工具。
  4. 可扩展且高效利用 GPU:vLLM 充分利用多块 GPU——包括 H100、A100 与 MI300X——通过张量与内存并行实现高吞吐推理。

在 RunPod 上使用 vLLM 托管 LLaMA 4 Scout

本节将演示如何在 RunPod 上申请强大的多 GPU 实例,使用 vLLM 部署 Meta 的 LLaMA 4 Scout 模型,并为本地与远程推理开放 OpenAI 兼容 API。

步骤 1:设置您的 RunPod 环境 

在启动模型前,请确保已完成 RunPod 账户设置:

  • 登录 RunPod.io 并完成账单配置。
  • 充值至少 $25,以确保本项目期间可运行大型 GPU 实例。

步骤 2:部署配备 H100 NVL GPU 的 pod

现在,我们来申请一台可托管 170 亿参数 LLaMA 4 Scout 模型的 pod:

  1. 进入 Pods 页面,点击 “Deploy a Pod”。
  2. 按显存筛选 GPU,将最小值设为 80 GB,并选择 H100 NVL。注意:LLaMA 4 Scout 至少需要 24 GB 显存。为获得最佳性能,我们将使用 4× H100 NVL。

用于 Llama 4 的 RunPod H100 NVL GPU

  1. 向下滚动,为您的 pod 命名,例如 “LLAMA4_DEMO”。
  2. 在 Template 下点击 “Change Template”,选择 PyTorch 2.4.0。
  3. 点击 “Edit Template”,将 Container Disk 与 Volume Disk 都设置为 1000 GB,并应用覆盖。
  4. (可选)将您的 Hugging Face 访问令牌添加到环境变量,以便下载模型。

在 RunPod 中编辑模板以覆盖配置,运行 Llama 4

  1. 将 GPU Count 设为 4,然后点击 “Deploy On-Demand”。

RunPod PyTorch 2.4.0 的 GPU 数量设置

等待几分钟,直至 pod 供应完成。

已供应的 Pod

步骤 3:连接到您的 pod

当 “Connect” 按钮变为紫色时,点击它。您会看到多种连接方式——可以:

  • 打开 JupyterLab 终端执行 Shell 命令。
  • 或使用 SSH 或 HTTP 端口进行远程控制。

步骤 4:安装 vLLM 与所需库

在 pod 内的终端中安装 vLLM 及其依赖。在 pod 环境中安装 vLLM 与其他库。

pip install -U vllm
pip install transformers accelerate pillow #optional

步骤 5:在 vLLM 上运行 LLaMA 4 Scout

接下来,使用以下命令启动 LLaMA 4 Scout 模型服务:

VLLM_DISABLE_COMPILE_CACHE=1 vllm serve meta-llama/Llama-4-Scout-17B-16E-Instruct \
--tensor-parallel-size 4 \
--max-model-len 100000 --override-generation-config='{"attn_temperature_tuning": true}'

该命令将执行以下操作:

  • 禁用 vLLM 的编译缓存,以加快启动速度。
  • 通过张量并行在 4 块 GPU 上运行模型。
  • 由于内存限制,将最大上下文长度设为 100,000 个 token。注意——如需运行 1000 万上下文长度,至少需要 8× H100 GPU。
  • 启用注意力温度调优配置,以提升长上下文推理的准确性。

为 Llama 4 设置 vLLM

下载 Llama 4 的模型分片

此时 API 已在 8000 端口运行,请在同一 pod 环境中新建一个 Jupyter Notebook。

使用 Llama 4 Scout 进行文本补全

在本演示中,我们将通过一个简单的 Python 脚本,使用 vLLM 提供服务的本地 LLaMA 4 Scout 模型进行交互。模型通过 API 暴露,使我们可以构建支持多轮对话的会话助手。

步骤 1:先决条件

我们将使用官方的 OpenAI Python SDK 与 vLLM API 通讯,并使用 Colorama 库实现终端彩色输出。可通过以下命令安装:

pip install openai colorama

安装完成后,导入必要模块:

from openai import OpenAI
from colorama import Fore, Style, init

步骤 2:初始化客户端

将 OpenAI 客户端指向本地运行的 vLLM 服务器。如果您的部署不需要 API 密钥(本地运行默认如此),可将密钥设为 "EMPTY":

# Initialize colorama
init(autoreset=True)
# Set up client
openai_api_key = "EMPTY"  
openai_api_base = "http://localhost:8000/v1"
client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)

上述代码初始化了 Colorama,用于彩色终端输出并在每次打印后自动重置。随后通过 OpenAI 类配置了一个兼容 OpenAI 的客户端,指向本地托管的 vLLM API。

步骤 3:启动聊天循环

接下来实现一个简单循环,以便与模型持续交互。会话历史会在不同轮次间保留,从而实现多轮对话。

# Initialize message history
messages = [
    {"role": "system", "content": "You are a helpful assistant."}
]
print("Start chatting with the assistant! Type 'exit' or 'quit' to end.\n")
while True:
    user_input = input(f"{Fore.BLUE}User: {Style.RESET_ALL}")
    if user_input.strip().lower() in ["exit", "quit"]:
        print("Exiting chat. Goodbye!")
        break
    messages.append({"role": "user", "content": user_input})
    chat_response = client.chat.completions.create(
        model="meta-llama/Llama-4-Scout-17B-16E-Instruct",
        messages=messages,
    )
    assistant_message = chat_response.choices[0].message.content
    print(f"{Fore.GREEN}Assistant: {assistant_message}\n{Style.RESET_ALL}")
    messages.append({"role": "assistant", "content": assistant_message})

该基于终端的简易聊天界面通过系统提示与会话历史初始化,循环持续接收用户输入。每条用户消息都会追加至历史,并通过 client.chat.completions.create() API 调用发送至 Llama-4-Scout-17B-16E-Instruct 模型。

模型回复将通过 Colorama 以绿色打印,并加入会话历史,直至用户输入 "exit" 或 "quit" 结束对话。

在 vLLM 上运行的 Llama 4 Scout 文本补全演示

下一节我们将继续使用同一 API,演示如何通过图像 + 文本输入进行多模态推理。

使用 LLaMA 4 Scout 进行多模态图文推理

本演示将展示如何利用 vLLM 的原生多模态能力,向托管的 LLaMA 4 Scout 模型同时发送图像与文本输入。您可以通过同一个兼容 OpenAI 的 API 实现视觉推理、图像描述或多模态问答。

步骤 1:先决条件

本示例使用 OpenAI SDK 连接 vLLM 服务器。如尚未安装,可运行:

pip install openai

然后导入所需模块: 

from openai import OpenAI

步骤 2:设置 API 客户端

通过兼容 OpenAI 的接口连接本地 vLLM 服务器。如果您的服务器不需要认证,请将 API 密钥设置为 "EMPTY"。

openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)

以上代码片段初始化了一个用于本地推理的兼容 OpenAI 客户端,连接至 vLLM 服务器。api_key 设为 "EMPTY"(无需认证),base_url 指向本地 vLLM API 端点。

步骤 3:提交多模态提示

现在我们发送包含图像与文本指令的对话提示。LLaMA 4 Scout 将结合图像与查询进行处理,并返回描述性回答。

messages = [
    {
        "role": "user",
        "content": [
            {"type": "image_url", "image_url": {"url": image_url1}},
            {"type": "text", "text": "Can you describe what's in this image?"}
        ]
    }
]
chat_response = client.chat.completions.create(
    model="meta-llama/Llama-4-Scout-17B-16E-Instruct",  
    messages=messages,
)
print("Response:", chat_response.choices[0].message.content)

在使用 LLaMA 4 Scout 进行多模态推理时,我们构造包含图像 URL 与文本提示的聊天式输入,遵循 OpenAI 聊天模式的结构。通过 client.chat.completions.create() 将该多模态请求发送至模型,模型会联合分析图像与文本并生成具备语境的信息性回复。

多模态演示

多模态演示

结语

本教程中,我们在 RunPod 上使用 vLLM 托管了 Meta 的 LLaMA 4 Scout 模型,通过兼容 OpenAI 的端点实现了文本与多模态推理。凭借 vLLM 的高吞吐与 RunPod 的强大算力,我们构建了一个具备长上下文与视觉能力、同时具备成本效益的前沿 LLM 服务方案。

如需进一步了解 LLaMA 4 与 vLLM,请查看:

Aashi Dutt

作者

Aashi Dutt

我是一名 Google Developers 机器学习(生成式 AI)领域的专家、Kaggle 三项专家,以及 Women Techmakers 大使,拥有 3 年以上的技术从业经验。2020 年我共同创办了一家健康科技初创公司,目前在佐治亚理工学院攻读计算机科学硕士,专攻机器学习。

主题