跳至主要内容

Groq LPU 推理引擎教程

通过代码示例了解 Groq API 及其功能。此外,学习如何使用 Groq API 和 LlamaIndex 构建具备上下文感知能力的 AI 应用。
· 11分钟 阅读

使用 AI 探索

如果您曾为等待 ChatGPT 回复而感到焦虑,那么您会对 Groq 语言处理单元(LPU)推理引擎感到惊喜。

借助 Groq,您可以快速获得查询的响应,将等待时间从 40 秒缩短到仅 2 秒。

在本教程中,我们将:

  1. 了解 Groq LPU 推理引擎。
  2. 比较 OpenAI 和 Groq API 的功能与结构。
  3. 学习在线与本地使用 Groq。
  4. 将 Groq API 集成进 VSCode。
  5. 学习使用 Groq Python API。
  6. 使用 Groq API 与 LlamaIndex 构建具备上下文感知能力的 AI 应用。

如果您是大型语言模型(LLM)新手,建议先学习开发大型语言模型技能路径,掌握微调 LLM 和从零搭建自有模型的基础。

什么是 Groq LPU 推理引擎?

Groq 的 LPU(语言处理单元)推理引擎是一种全新的处理系统,擅长处理包含序列组件的高计算量任务,尤其是在为大型语言模型生成响应方面。这项创新技术改变了我们处理与生成文本的方式,提供了无与伦比的性能与精度。

与传统的中央处理器(CPU)和图形处理器(GPU)相比,LPU 具有更强的计算能力。这意味着预测一个词所需的时间大幅缩短,从而显著加快文本序列的生成。此外,LPU 还能缓解内存瓶颈——这是在处理 LLM 时 GPU 常见的限制。

Groq 设计 LPU 旨在解决计算密度、内存带宽、低延迟和高吞吐等挑战。其性能提升可超越 GPU 和 TPU(张量处理单元)。例如,在 Llama-3 70B 上,LPU 每位用户每秒可生成超过 310 个 token。

您可以通过阅读官方研究论文 Groq ISCA 2022 Paper 进一步了解 LPU 架构。

OpenAI 与 Groq API 对比

目前,我们只能通过 groq.com、Groq Cloud API、Groq Playground 以及 Poe 等第三方平台访问 Groq LLM。

本节我们将了解 OpenAI 与 Groq Cloud 提供的功能和模型。此外,我们还将使用 CURL 测试 API 调用速度,并比较 API 设计。

OpenAI

OpenAI API 提供了广泛的功能和模型,包括:

  1. 嵌入模型。
  2. 如 GPT-4o 与 GPT-4 Turbo 等文本生成模型的访问。
  3. 代码解释器与文件搜索。
  4. 在自定义数据集上微调模型的能力。
  5. 图像生成模型的访问。
  6. 用于转录、翻译与文本转语音的音频模型。
  7. 理解图像的视觉模型。
  8. 函数调用。

OpenAI API 速度快,且成本随时间下降。

我们可以在终端中输入以下命令来访问最新的 OpenAI 模型。该 API 需要 OpenAI 的 API 密钥、模型名称以及包含系统提示与用户查询的 messages。

curl -X POST https://api.openai.com/v1/chat/completions \ 
  -H "Content-Type: application/json" \ 
  -H "Authorization: Bearer $OPENAI_API_KEY" \ 
  -d '{ 
    "model": "gpt-4o", 
    "messages": [ 
      {        "role": "system", 
        "content": "You are a helpful assistant." 
      }, 
      { 
        "role": "user", 
        "content": "How do I get better at programming?" 
      } 
    ] 
  }'

该请求耗时 13 秒完成。

OpenAI API curl 命令的输出

要进一步了解 OpenAI 的 API 与功能,请查看这篇OpenAI API 新手指南:实践教程与最佳实践。

Groq

Groq 在 AI 行业尚属新秀,目前提供的功能与模型相对有限。其提供:

  1. 如 LLaMA3 70b、Gemma 7b、Mixtral 8x7b 等文本生成模型。
  2. 使用 Whisper Large V3 模型的转录与翻译(未向公众开放)。
  3. 与 OpenAI API 的兼容性。
  4. 函数调用。

与 OpenAI API 相比,Groq Cloud API 提供更快的响应时间。为验证这一点,我们将在终端使用 CURL 命令,并向 Groq API 提供相同的信息。

Groq API 与 OpenAI API 十分相似,唯一的区别是 URL。

curl -X POST "https://api.groq.com/openai/v1/chat/completions" \ 
    -H "Authorization: Bearer $GROQ_API_KEY" \ 
    -H "Content-Type: application/json" \ 
    -d '{"messages": [ 
     { 
       "role": "system", 
       "content": "You are a helpful assistant." 
     }, 
     {        "role": "user", 
       "content": "How do I get better at programming?" 
     } 
   ], 
   "model": "llama3-70b-8192"}'

它仅用两秒就完成响应,相比 OpenAI API 快了 6.5 倍。

Groq API curl 命令的输出

借助 Groq,您可以获得实时的响应生成,这对某些应用至关重要。

使用 Groq Cloud

Groq Cloud 自带 AI playground,您可以在此测试所有可用于构建 AI 产品与应用的模型和 API。

要访问 Groq Cloud,您需先通过此链接创建账户。

之后,点击左侧面板的 Playground 选项卡,选择 llama3-70b-8192 模型,然后开始在 USER 输入处编写提示。

生成完整响应耗时 2.94 秒,速度为每秒 305 个 token。这是我们在 ChatGPT 上难以达到的峰值表现。

Groq Cloud Playground

现在我们选择较小的模型 mitral-8x7b-32768 并编写后续提示。

更小的模型生成响应的速度更快,达到了每秒 577 个 token。

Groq Cloud Playground 统计信息

您可以阅读这篇教程LLM 分类:如何为您的应用选择最佳 LLM,了解可用的 LLM 选项及选型时需考虑的因素。

本地使用 Groq

要在本地访问 Groq LLM,我们需要前往 API Keys 选项卡,点击 Create API Key 按钮生成 API 密钥。

生成 Groq API 密钥

Jan AI 允许我们在本地使用 LLM——涵盖开源与专有模型。它支持 OpenAI、Anthropic、Cohere、MistralAI 和 Groq 等模型提供商。

我们将通过访问官方网站下载并安装 Jan AI。然后启动该应用。

Jan AI Windows 应用

进入设置,选择 Groq Inference Engine 选项卡,并粘贴我们刚创建的 API 密钥。

Jan AI 中 Groq 推理引擎的设置

退出设置菜单,进入 Thread,选择 Groq Llama 3 70b 模型。

在模型列表中选择 Groq llama 3 70b 模型

输入问题或提示,以实时生成响应:

使用 Groq API 的 Jan AI 响应生成

Groq Cloud 的免费订阅存在一定的速率限制。例如,llama3-70b-8192 计划允许每分钟 30 次请求、每天 14,400 次请求、每分钟 6,000 个 token。尽管这些限制相当宽松,但如果您打算使用 Groq API 构建正式的 AI 应用,可能需要考虑升级到 On Demand 或 Enterprise 套餐。

您可以阅读这篇关于本地运行 LLM的教程,探索在本地运行 AI 应用的七种简单方法。

在 VSCode 中集成 Groq

除了在聊天机器人应用中使用 Groq API,我们还可以通过 CodeGPT 扩展将其集成进 VSCode。它将成为我们超高速的 AI 编码助手。

要在 VSCode 中访问 Groq 模型,我们需要在扩展市场安装 CodeGPT 扩展。

VSCode 扩展市场中的 CodeGPT

安装完成后,我们将在左侧面板点击 CodeGPT 聊天图标,选择提供商与模型来设置 Groq API 密钥。我们选择 Groq 作为提供商、llama3-70b-8192 作为模型。

在 CodeGPT 扩展中选择提供商与模型

之后,我们即可在聊天框中编写提示并生成代码。仅用数秒便生成了合适的代码并搭建了邮件系统。

使用 Groq API 测试 CodeGPT

然后我们可以为代码撰写文档、重构,并使用内置命令创建单元测试。

测试 CodeGPT 的多种选项

您可以通过阅读这篇关于为 Python 配置 VSCode的教程进一步了解 VSCode。

Groq Python API 分步指南

本节我们将学习 Groq Python API 的基础知识及其关键功能,如流式与异步聊天补全。

本指南使用 DataCamp 的DataLab。DataLab 是一款 AI Cloud Jupyter Notebook,内置众多编写代码、数据分析与分享洞见的功能。

环境配置

首先,我们需要在 DataLab 中设置 Groq API 密钥。点击左侧面板的 Environment 按钮,点击加号 + 添加环境变量。

如图所示,填写变量名并粘贴 Groq API 密钥。

在 DataLab 中设置环境变量

随后,点击 Groq 环境变量旁的三点,选择 Connect 激活该环境变量。

在 DataLab 中连接环境变量

最后,我们使用 pip 命令安装 Groq Python 包。

%pip install groq -q

基础补全与聊天

如果您使用过 OpenAI 的 Python API,可能会发现代码结构相似。运行聊天补全需要:

  1. 提供 API 密钥创建 Groq 客户端。
  2. 使用聊天补全函数生成简单响应。
  3. 聊天补全函数需要模型名称与消息。
  4. 将输出转换为 Markdown。
import os
from groq import Groq
from IPython.display import display, Markdown

client = Groq(    
   api_key=os.environ.get("GROQ_API_KEY"),
)

chat_completion = client.chat.completions.create(    
   messages=[        
       {"role": "system", "content": "You are a professional Data Scientist."},        
       {"role": "user", "content": "Can you explain how the neural networks work?"},    
   ],    
   model="llama3-70b-8192",)

Markdown(chat_completion.choices[0].message.content)

结果是对神经网络的精心排版解释。

Groq 聊天补全的输出

流式聊天补全

LLM 的“流式”指逐个 token 地处理与生成文本,从而实现高效的内存使用并提升 AI 应用的感知速度。

在以下示例中,我们启用了流式输出,并通过调整 temperature、max_tokens 与 top_p 等超参数来自定义模型。

chat_streaming = client.chat.completions.create( 
    messages=[ 
       {"role": "system", "content": "You are a monk from Thailand."}, 
       {"role": "user", "content": "Can you explain the meaning of life?"}, 
    ], 
    model="llama3-70b-8192", 
    temperature=0.3, 
    max_tokens=360, 
    top_p=1, 
    stop=None, 
    stream=True,
)

for chunk in chat_streaming: 
    print(chunk.choices[0].delta.content, end="")

因此,代码一运行我们就开始收到响应。

Groq 流式聊天输出

异步聊天补全

异步 API 能够在不阻塞的情况下处理多个并发请求,使系统可以独立处理并响应每个请求。这种方式更高效且可扩展,能够处理更大量的请求并提供更快的响应时间。

要启用异步 API 调用,我们需要调整代码结构,步骤如下:

  1. 使用 API 密钥创建异步 Groq 客户端。
  2. 定义异步的 main 函数。
  3. 使用 await 关键字编写聊天补全函数。
  4. 使用 await 关键字运行 main 函数。

补充说明:以下代码可在 Jupyter Notebook 中运行;如果在 Python 文件中运行,您可能需要将最后一行改为 asyncio.run(main())。

import asyncio
from groq import AsyncGroq

client = AsyncGroq(

    api_key=os.environ.get("GROQ_API_KEY"),

)

async def main(): 

   chat_completion = await client.chat.completions.create( 
       messages=[            {"role": "system", "content": "You are a psychiatrist helping young minds"}, 
                  {                "role": "user",                "content": "I panicked during the test, even though I knew everything on the test paper.",            }, 
                ], 
                model="llama3-70b-8192", 
                temperature=0.3, 
                max_tokens=360, 
                top_p=1, 
                stop=None, 
                stream=False, 
       ) 

       print(chat_completion.choices[0].message.content)

await main()  # for Python file use asyncio.run(main())

Groq 异步聊天补全输出

异步聊天补全的流式输出

我们也可以对异步 API 启用流式输出,只需在聊天补全函数中开启 stream 参数,并调整打印结果的方式。我们将使用异步 for 循环逐块打印。

import asyncio

from groq import AsyncGroq


client = AsyncGroq()

async def main(): 

    chat_streaming = await client.chat.completions.create( 
        messages=[ 
           {"role": "system", "content": "You are a psychiatrist helping young minds"}, 
           {                "role": "user",                "content": "I panicked during the test, even though I knew everything on the test paper.",            }, 
        ], 
        model="llama3-70b-8192", 
        temperature=0.3, 
        max_tokens=360, 
        top_p=1, 
        stop=None, 
        stream=True, 
     ) 
     async for chunk in chat_streaming: 
            print(chunk.choices[0].delta.content, end="")

await main()  # for Python file use asyncio.run(main())

Groq 异步流式聊天输出

如果您运行代码时遇到问题,请参考此 DataLab 笔记本:Groq Cloud API。

使用 Groq API 与 LlamaIndex 构建 AI 应用

在本指南中,我们将更进一步,学习如何使用 Groq API 与 LlamaIndex(一个 LLM 框架)构建 AI 应用。我们将构建一个应用,它会从 PDF 文件中加载文本,将其转换为嵌入,并保存到向量存储。之后,我们会将向量存储转换为检索器,用于构建带有历史的 RAG 聊天引擎。

简而言之,我们正在构建一个具备上下文感知能力的 ChatPDF 应用,帮助您更快理解文档。

若想了解如何使用自然语言摄取、管理与检索私有与特定领域数据,请查看本教程:LlamaIndex:大型语言模型(LLM)的数据框架。

安装 Python 包

首先,我们将使用 pip 安装所有必要的 Python 包。我们使用 %%capture 魔法函数来抑制日志输出。

%%capture
%pip install llama-index
%pip install llama-index-llms-groq
%pip install llama-index-embeddings-huggingface

使用 Groq 配置 LLM

我们将通过 llama_index 函数创建 Groq LLM 客户端。LLM 客户端需要模型名称与 API 密钥。

from llama_index.llms.groq import Groq
import os

llm = 
Groq(model="llama3-70b-8192",api_key=os.environ.get("GROQ_API_KEY"))

配置嵌入模型

现在我们将通过 LlamaIndex 的 embeddings API 下载并加载 Hugging Face 的嵌入模型。

在这里,我们加载的是 Hugging Face 上最受欢迎的嵌入模型之一:mxbai-embed-large-v1。

from llama_index.embeddings.huggingface import HuggingFaceEmbedding

embed_model = 
HuggingFaceEmbedding(model_name="mixedbread-ai/mxbai-embed-large-v1")

全局设置配置

LlamaIndex 允许我们设置全局配置,从而无需在各处传递 LLM 或嵌入模型对象。

from llama_index.core import Settings

Settings.llm = llm
Settings.embed_model = embed_model

加载数据

数据方面,我们使用了博文2024 年 14 款必备数据工程工具,并通过打印命令将其转换为 PDF。

借助 SimpleDirectoryReader 函数,您可以从文件夹中加载各种文档。只需提供文件夹路径与所需的文件扩展名。

from llama_index.core import SimpleDirectoryReader

de_tools_blog = SimpleDirectoryReader("./",required_exts=[".pdf", ".docx"]).load_data()

向量检索

VectorStoreIndex 提供了最快的方式来创建向量存储:加载文档并构建索引。该索引可用于查询引擎、检索器和查询流水线。

在我们的案例中,我们通过向向量存储提供文档来创建索引,系统会将文本转换为嵌入,然后保存到向量存储。

之后,我们将把索引转换为查询引擎,以执行基础的 RAG(检索增强生成),即结合检索与 AI 模型生成具备上下文的答案。

from llama_index.core import VectorStoreIndex

index = VectorStoreIndex.from_documents(de_tools_blog)
query_engine = index.as_query_engine(similarity_top_k=3)

response = query_engine.query("How many tools are there?")
print(response)

使用 LamaIndex 的向量检索输出

带历史的 RAG 聊天引擎

现在我们将创建带历史的 RAG 聊天引擎。加入历史后,聊天引擎可以记住用户消息与生成的回复,进而提供具备上下文的答案。

要构建该应用,我们需要创建一个 3900 token 的 ChatMemoryBuffer,并与检索器和 LLM 对象一同提供给聊天引擎。

当您提出问题时,聊天引擎会将 PDF 文档与之前的消息作为上下文,并据此作答。

from llama_index.core.memory import ChatMemoryBuffer
from llama_index.core.chat_engine import CondensePlusContextChatEngine

memory = ChatMemoryBuffer.from_defaults(token_limit=3900)

chat_engine = CondensePlusContextChatEngine.from_defaults(    
   index.as_retriever(),    
   memory=memory,    
   llm=llm
)

response = chat_engine.chat(    
   "What tools are suitable for data processing?"
)
print(str(response))

我们提出了一个泛化的问题,系统在文档中搜索了数据处理工具,并给出了列表。所有工具均在该博文中提及。

让我们再问一个跟进问题,测试聊天引擎的记忆功能。

response = chat_engine.chat(
    "Can you create a diagram of a data pipeline using these tools?"
)
print(str(response))

聊天引擎记住了先前的对话,并据此作出回应。

我们使用的全部代码可在此 DataLab 笔记本中获取:Groq Cloud API — DataLab。

结语

Groq LPU 推理引擎在 AI 领域具有颠覆性意义。当 OpenAI 与 Google 等巨头专注于开发高质量 LLM 时,Groq 让这些模型运行得更快。尽管在 AI 领域尚属新面孔,Groq 已在社区中掀起不小的波澜。

在本文中,我们了解了 Groq LPU 推理引擎,探索了 Groq Cloud,并将 Groq API 集成至 VSCode 与 Jan AI 应用。此外,我们还通过代码示例深入了解了 Groq Python 包,并学习了如何构建能够从聊天历史与 PDF 文档中学习的上下文感知型 AI 应用。

您学习之旅的下一步可以是:在自定义数据集上微调 LLM。请参考本教程了解如何操作:微调 Google Gemma:用定制化指令增强 LLM。

Abid Ali Awan

作者

Abid Ali Awan

作为一名持证的数据科学家,我热衷于利用前沿技术打造创新的机器学习应用。凭借在语音识别、数据分析与报告、MLOps、对话式人工智能以及自然语言处理方面的扎实背景,我不断打磨构建智能系统的能力,力求带来切实影响。除技术专长外,我也擅长沟通,能够将复杂概念提炼为清晰、简明的表述。因此,我成为数据科学领域备受关注的博主,与不断壮大的数据专业人士社区分享洞见与实践经验。目前,我专注于内容创作与编辑,借助大语言模型打造有力且吸引人的内容,帮助企业与个人更好地发挥数据价值。

主题