利用NVIDIA Jetson Orin的强大能力执行本地LLM模型

2023-11-02 09:01:37 浏览数 (2)

今天小编要介绍一个项目:在Jetson AGX Orin上跑通 LLama 2模型:

这个项目来自:

不要担心,我们已经在Jetson AGX Xavier 32G上复现了这个项目,所以是可行的。

背景

由于大型语言模型(LLM)如ChatGPT和Llama 2具有改变数据处理和人机界面工作方式的潜力,它们因其接近实现通用人工智能(AGI)的未来而变得越来越受欢迎。尽管这些技术无疑带来了一个更接近AGI实现的未来的兴奋,但它们通常设计用于运行在具有丰富内存和计算资源的强大服务器上。

由于嵌入式GPU硬件设备的创新,可以在几乎与汉堡包大小相当的嵌入式设备上实现这种计算能力水平。这意味着LLM可以在这些设备上产生本地结果,实现需要实时处理、隐私和降低延迟的场景。

在本文中,我们将演示如何在NVIDIA Jetson硬件上运行Meta AI最近发布的Llama 2 LLM的变种。令人惊奇的是,启动和运行变得非常简单。要重现此内容,所需的一切几乎就像启动一个包含所有所需软件先决条件的Docker容器那样容易。通过本文,您将掌握相关知识,以探索在自己的设备上运行其他模型,为自定义的基于LLM的应用程序和服务提供支持。

入门指南

对于这个项目,建议使用Jetson Orin 32GB或64GB开发套件,因为本教程中使用的模型的内存要求为18-64GB(取决于使用的13B或70B Llama 2模型变种)。我们假设您从已刷写了NVIDIA最新JetPack镜像(撰写时为r35.4.1)的NVIDIA Jetson Orin设备开始。

要开始,请确保在Jetson设备上将Docker运行时设置为默认为“nvidia”。打开您喜欢的文本编辑器,编辑/etc/docker/daemon.json文件的内容如下所示:

代码语言:javascript复制
{
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
         } 
    },
    "default-runtime": "nvidia" 
}

保存这个修改后,使用以下命令重新启动Docker服务:

代码语言:javascript复制
sudo systemctl restart docker

我们需要创建一个目录来存储 Llama 的模型文件,通过在终端中运行以下命令来完成此操作:

代码语言:javascript复制
mkdir ~/models

接下来执行以下命令启动 Docker 中的 text- Generation-webui 实例:

代码语言:javascript复制
docker run --rm --it --name textgeneration-web-ui --net=host --gpus all -v ~/models:/app/models toolboc/text-generation-webui:v1.5_r35.4.1

注意:在此示例中,命名方案指的是包含适用于 NVIDIA JetPack r35.4.1 的 text- Generation-webui v1.5 的 docker 镜像用于生成此镜像的 Dockerfile 可以在oobabooga/text-generation-web-ui repo @ text-generation-webui/docker/Dockerfile.jetson at main · oobabooga/text-generation-webui (github.com) 里找到

如果您希望自己构建图像或更新到不同版本的文本生成网络用户界面,修改这个文件应该很简单。

成功启动Docker容器后,您应该能够通过访问http://<Jetson设备的IP>:7860来访问文本生成网络用户界面应用程序。

运行第一个模型

在与您的Jetson设备连接到同一网络的Web浏览器中,导航至http://<Jetson设备的IP>:7860,您应该会看到类似以下界面的用户界面:

在这里,选择“模型”选项卡,然后选择右下角的“下载自定义模型或LoRA”字段,并粘贴上"TheBloke/Llama-2-13B-chat-GPTQ"。

这将开始从TheBloke/Llama-2-13B-chat-GPTQ · Hugging Face下载Llama 2 chat GPTQ模型变种。(https://huggingface.co/TheBloke/Llama-2-13B-chat-GPTQ)。

接下来的步骤将适用于技术上任何基于GPTQ的Llama变种,因此如果您有兴趣尝试其他模型,现在您知道如何操作。一旦模型下载完成,从屏幕左上角的“模型”下拉菜单中选择它。

使用这种方法需要手动配置wbits、groupsize和model_type,如图所示。

注意:这些参数可以通过查看TheBloke/Llama-2-13B-chat-GPTQ · Hugging Face的Hugging Face模型卡片信息来推断(https://huggingface.co/TheBloke/Llama-2-13B-chat-GPTQ)。

虽然这个模型加载器可以正常工作,但我们可以通过选择使用ExLlama_HF模型加载器来提高模型性能约25%(约5.2个标记/秒,而不是4.2个标记/秒)。因此,让我们选择这个选项。使用这个模型加载器,您可以保留默认选项如图所示。

注意:按照上述说明,而选择使用https://huggingface.co/TheBloke/Llama-2-70B-chat-G 中的TheBloke/Llama-2-70B-chat-GPTQ变种,您可以获得更智能的回复,尽管性能将达到大约0.9个标记/秒。

我们几乎可以开始使用模型了。

要开始使用实时提示进行测试,请在“模型”选项卡中选择“加载”功能,然后选择“文本生成”选项卡。从这里,在提示下拉菜单中选择“Instruct-Llama-v2”(如果您使用不同的模型,可能需要选择不同的提示选项更合适)。

接下来,您需要将“max_new_tokens”增加到2048,因为这将生成更长的响应(请注意,值高于2048将导致错误,阻止输出,因为Llama 2模型的训练最多为2048)。

现在,我们已经准备好从我们的模型获取结果。要做到这一点,修改屏幕左侧"Instruct-Llama-v2"提示模板中标有"Input"的区域,将其替换为一个新的提示。例如:“嵌入式硬件是否支持大型语言模型像LLaMa?”,然后点击“生成”按钮,观察模型开始在屏幕右侧生成输出。

更多选项

text-generation-webui应用程序具有许多选项,可以允许您修改其外观、样式和行为。这些选项包括但不限于更友好的聊天界面、明亮/黑暗模式以及文本转语音功能。要查看可用选项,您可以探索"会话"选项卡,以了解这些功能以及更多内容。要获取深入和最新的信息,请查看官方文档,地址在text-generation-webui/docs at main · oobabooga/text-generation-webui (github.com)(https://github.com/oobabooga/text-generation-webui/tree/main/docs)。

特别感兴趣的是api选项,它可以允许您生成可以在自定义应用程序中使用的程序化提示和响应(https://github.com/oobabooga/text-generation-webui/tree/main/api-examples)(考虑一下使用麦克风/扬声器进行交互以使用人类语音与您的模型交谈的HomeAssistant扩展的用例)。

以下是这些功能的一些示例(聊天模式、明亮模式,以及要求模型生成嵌入式硬件上LLM的用例)的演示。

高级选项

如果您有兴趣从头开始构建一个更强大的textgeneration-web-ui容器,并想尝试其他加载器,请查看jetson-containers/packages/llm/text-generation-webui at master · dusty-nv/jetson-containers (github.com)。这种方法支持额外的加载器,包括llama.cpp(使用基于4位量化的GGML的Llama 2 13B模型可以达到每秒13个标记的性能)。

结论

大型语言模型可以在嵌入式硬件上运行,尽管今天获取一台性能强大的设备可能有点昂贵,但我们可以期望未来会出现更多的创新,以降低成本从而实现更智能的交互。这将为许多不同的应用程序打开大门.

0 人点赞