杜克大学本地大模型-Llama-笔记-全-

杜克大学本地大模型 Llama 笔记(全)

1:0_与您的导师 Alfredo Deza 会面

概述

在本节课中,我们将初步了解开源大型语言模型,并认识本课程的导师。我们将概述课程的核心内容,包括如何与模型交互、如何寻找模型,以及通过不同技术栈进行实践。

大家好,我是 Alfredo Deza。在本课程中,我们将深入探讨开源模型。

我们将学习如何与它们交互,以及如何寻找它们。

我们会介绍您可能希望与之交互的各种开源模型类型。我们将探讨多种使用场景,例如在浏览器中使用模型。

我们将使用 JavaScript,我认为这非常不可思议。同时,我们也会使用 Python 库。

Python 库的使用也非常普遍。此外,我们还会涉及 Rust。我们将看到 Python 和 Rust 之间的一些差异,以及您为何会选择其中之一。但课程的重点是让一切变得易于访问、简单明了。在某些情况下,我们会使用开箱即用、可直接运行的本地模型。

我们将构建有趣的项目。您将能够通过动手实验和非常实用的示例来应用这些概念。

这样,您就可以实际动手尝试我们在整个课程中将探讨的概念。我拥有多年教授机器学习和 Python 的经验。过去,我曾是一名软件工程师和系统管理员。我认为,我在演示这些示例、介绍代码仓库以及所有课程内容时采用的方法,能让您在整个学习过程中,通过非常实用、直接的例子,获得一些类似的经验。

希望您能很好地理解如何与开源模型协作,并将其应用到您自己的项目和想法中。

总结

本节课中,我们一起认识了课程导师 Alfredo Deza,并了解了本课程将涵盖的核心主题:探索开源大型语言模型、学习通过不同工具(如浏览器、Python 和 Rust)与模型交互,并通过实践项目巩固所学知识。课程旨在提供简单易懂、动手实践的体验。

2:1_Llamafile 概述

在本节课中,我们将学习由 Mozilla 推出的 Llamafile 项目。这是一个旨在让普通用户无需深厚技术背景,就能轻松在个人电脑上运行开源大型语言模型的工具。我们将了解其设计初衷、核心技术原理以及它能带来的便利。

项目背景与目标

我是 Stephen Hood,在 Mozilla 负责监督开源人工智能项目。Llamafile 是我负责的项目之一。

我们创建 Llamafile 的灵感,源于对开源 AI 技术现状的研究。我们发现,当前开源 AI 领域活动非常活跃,但许多技术对用户而言仍然过于复杂。

首先,用户面临海量的模型选择。选定模型后,这些模型又有不同的格式,且格式随着技术发展不断变化。接着,用户需要决定使用何种运行时环境来加载和运行模型,以进行推理。

根据所选模型、运行平台和运行时方案的不同,用户可能需要完成许多复杂步骤。例如,可能需要编译 C 或 C++ 代码并确保安装了正确的工具链,可能需要安装和管理 Python 依赖项,有时还需要安装原生软件。

这些步骤组合在一起,会变得非常复杂。我们担心的是,使用开源 AI 的难度越大,开发者采用它的可能性就越低,或者采用速度就越慢。这可能会阻碍其发展。

我们认为,让公众掌握具有竞争力、先进的开源 AI 技术,对于确保 AI 不会最终被少数商业利益所主导至关重要。作为 Firefox 的制造商 Mozilla,我们关心网络,因此也必须关心 AI,因为它已经在改变我们所有人使用网络和计算机的方式。

核心技术构成

基于上述目标,我们创建了 Llamafile。我们的做法是,以独特的方式将两个不同的项目结合起来。

第一个项目是 llama.cpp。这是一个非常流行的开源项目,它使得在普通的消费级硬件上运行量化后的开源模型成为可能。量化是一种压缩技术,能减少模型运行所需的内存。该软件本身是一个基于 C++ 的高效推理引擎,可以在日常硬件(无论是 MacBook、Windows 电脑还是 Linux 机器)上执行这些模型。

我们将其与另一个名为 Cosmopolitan 的项目相结合。

Cosmopolitan 是由 Justine Tunney 创建的项目。它的功能是,能够以一种特殊方式编译 C 和 C++ 程序,使得编译出的同一个文件几乎可以在任何计算机上运行。这并非指为 Windows、Linux、Mac 等不同平台分别编译不同的可执行文件,而是指同一个编译后的文件无需修改,就能在所有不同平台上运行,甚至可以在树莓派上运行。这是她创造的一项相当了不起的技术。

Llamafile 的工作原理

我们与 Justine 合作,将这两个项目结合在一起。这使得我们能够实现以下功能:获取任何采用 GGUF 格式(当前一种流行的开源模型格式)的开放权重模型文件(你可以在 Hugging Face 等地方找到它们),然后将其封装进 Llamafile 的可执行代码中。

这个封装过程仅给原本数 GB 大小的模型文件增加了大约 40 到 50 MB,这基本可以忽略不计。现在,这个合并后的文件可以被分发,无论用户使用何种类型的电脑,他们都可以下载它。当用户运行这个文件时,它会自动启动一个基于网页的、本地托管的聊天机器人界面。

此时,AI 完全在用户的本地机器上运行。即使断开网络连接,它也能继续工作。因此,它是 100% 本地化100% 私有化 的,用户可以放心使用,无需担心数据被他人监听或利用。

兼容性与优势

正如我所说,这几乎可以在任何电脑上运行。如果你的电脑有 GPU(图形处理单元),它可以加速大语言模型的推理过程,那么 Llamafile 会自动检测并利用它,无论是 NVIDIA 还是 AMD 的 GPU。这一点很重要,因为在 AI 和机器学习领域,AMD 通常不像 NVIDIA 那样获得广泛支持,而我们已经能够解决这个问题。

在我们的网站和 GitHub 仓库中,我们提供了一些示例 Llamafile 文件供大家下载和使用。在未来的视频中,我可以更多地介绍如何创建你自己的 Llamafile、如何使用它,以及作为开发者如何将其用作 OpenAI API 的替代方案。

希望你喜欢使用 Llamafile,非常感谢。


本节课总结

在本节课中,我们一起学习了 Mozilla Llamafile 项目的核心内容。我们了解到,Llamafile 通过巧妙结合 llama.cpp 推理引擎和 Cosmopolitan 跨平台编译技术,将复杂的开源模型部署流程简化为 “下载一个文件并运行”。它支持 GGUF 格式的模型,实现了真正的本地化、私有化运行,并具有良好的硬件兼容性。这大大降低了使用开源大语言模型的门槛,有助于推动开源 AI 技术的普及和发展。

3:使用Llamafile API 🚀

在本节课中,我们将学习Llamafile的服务器模式及其提供的OpenAI兼容API。你将了解如何利用此功能,将原本为OpenAI编写的代码无缝切换到本地运行的Llamafile模型上。

服务器模式概述

当你启动任何一个Llamafile时,默认情况下它也会在后台启动一个服务器。这个服务器提供了一个与OpenAI兼容的API端点。这意味着,它模仿了OpenAI API的签名,用于文本补全和其他功能,但背后调用的并非OpenAI的服务,而是运行在你本地机器上的Llamafile模型。

API兼容性的意义

这种设计的核心意义在于,你可以直接使用那些为OpenAI编写的代码,只需稍作修改,就能让它与Llamafile协同工作。这使你能够从一个商业化的集中式服务(如OpenAI)轻松切换到一个由你掌控的开源、免费可用的系统。

你可以选择在本地机器上运行,也可以将Llamafile容器化并在服务器上部署。这两种方式都很常见。

实践示例:Python调用

上一节我们介绍了Llamafile API的基本概念,本节中我们来看看具体的代码实现。

以下是一个非常简单的Python代码示例,它使用了openai这个Python库。

import openai

# 关键步骤:将API的基础URL指向本地运行的Llamafile服务器
openai.api_base = "http://localhost:8080/v1"
openai.api_key = "not-needed"  # 本地运行通常不需要API密钥

# 构建请求
completion = openai.ChatCompletion.create(
    model="local-model",  # 模型名称可任意指定,Llamafile会忽略
    messages=[
        {"role": "system", "content": "你是一个有帮助的助手。"},
        {"role": "user", "content": "请给我讲一个关于大语言模型(LLM)的短故事。"}
    ]
)

# 输出结果
print(completion.choices[0].message.content)

在这段代码中,我们仅仅修改了openai.api_base,将其指向本地主机(localhost)上运行的Llamafile服务器实例(例如运行着Mistral 7B模型)。当执行这段代码时,它会调用本地的API端点,并返回模型生成的关于大语言模型的短故事。

实践示例:JavaScript调用

除了Python,你也可以使用JavaScript通过HTTP请求直接与这个API交互。

以下是一个简单的HTML/JavaScript示例,它不依赖任何外部库,直接使用fetch API。

<!DOCTYPE html>
<html>
<body>
    <script>
        async function askLlamafile() {
            const response = await fetch('http://localhost:8080/v1/chat/completions', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                },
                body: JSON.stringify({
                    model: 'local-model',
                    messages: [
                        {role: 'user', content: '请给我讲一个关于大语言模型(LLM)的短故事。'}
                    ]
                })
            });

            const data = await response.json();
            // 将原始响应内容输出到控制台
            console.log(data.choices[0].message.content);
        }
        // 调用函数
        askLlamafile();
    </script>
</body>
</html>

这段代码会在浏览器中运行,通过JavaScript向本地的Llamafile服务器发送请求,并将返回的原始故事内容打印到浏览器的开发者控制台中。

纯服务器模式

目前,Llamafile已经支持此功能。当你创建自己的Llamafile时,可以将其配置为仅运行在服务器模式。这意味着它不会启动任何Web用户界面,纯粹作为一个API服务器运行。如果你的使用场景只需要API接口,这可以进一步优化资源占用。

我们非常希望开发者能享受使用这个过程。我们的目标是让人们能更容易地从集中式的商业服务转向开源方案,因为我们相信这将加速开源领域所有我们希望看到的进步。

总结

本节课中我们一起学习了Llamafile的OpenAI兼容API功能。我们了解了其服务器模式的工作原理,并通过Python和JavaScript的实例,掌握了如何修改现有代码或编写新代码来调用本地运行的Llamafile模型。利用此功能,你可以灵活、安全地在本地部署和控制大语言模型的应用。

4:3_创建Llamafile

在本节课中,我们将学习如何获取、运行以及创建自己的Llamafile,体验在本地计算机上运行大型语言模型的过程。我们将从下载预构建的Llamafile开始,演示其运行效果,并最终学习如何将模型权重文件转换为可执行的Llamafile。

获取与运行预构建的Llamafile 🚀

要开始使用Llamafile,最简单的方法是获取我们预先创建好的示例文件。

访问Llamafile的官方网站或在搜索引擎中查找“Llamafile”,即可找到其GitHub仓库。该仓库的README文件中提供了许多我们已创建好的Llamafile示例链接。这些文件托管在Hugging Face平台上,您也可以在那里找到更多其他模型。

以下是获取和运行Llamafile的基本步骤:

  1. 下载文件:从提供的链接下载所需的Llamafile可执行文件。
  2. 直接运行:在终端或命令行中,像运行普通程序一样执行该文件。

例如,我们下载了一个名为Mistral-7B的模型文件。这是一个近期发布的小型模型,性能出色且采用开源许可。在命令行中直接输入文件名并执行,即可启动。

./mistral-7b-model.llamafile

程序启动后,会自动将模型加载到内存中,并弹出一个聊天交互界面。此时,您可以与这个完全在本地运行的AI模型进行对话。它不会连接任何互联网服务,保证了100%的开源性、隐私性和用户控制权。

体验CPU与GPU加速模式 ⚡

上一节我们成功运行了模型,本节我们来对比一下不同硬件下的运行速度。

初始运行时,模型仅使用计算机的CPU进行计算。虽然速度可能不及云端服务,但完全可用。例如,在演示中,CPU模式下的生成速度约为11.34 tokens/秒

然而,Llamafile的强大之处在于它能轻松利用GPU进行加速。通过在启动命令后添加特定的命令行参数,可以指示程序尽可能多地将模型层加载到GPU的显存中,从而利用GPU进行加速计算。

./mistral-7b-model.llamafile --n-gpu-layers 999

再次运行并询问相同问题后,推理性能会有显著提升。在演示中,GPU加速后的速度达到了近120 tokens/秒。这充分展示了GPU加速的威力。

值得一提的是,Llamafile开箱即用地支持NVIDIA和AMD显卡。在AI领域,AMD显卡通常更难配置,但Llamafile使其能够轻松工作。

探索多模态与轻量级模型 🌟

除了标准的文本模型,Llamafile还能运行功能更丰富的模型。

例如,LlaVA是一个多模态模型。这意味着它不仅能接受文本输入,还能理解图像内容。运行相应的Llamafile后,您可以上传一张图片并向模型提问,例如“这张图片里有什么?”。模型会分析图像并给出描述,展示了开源社区在多功能AI模型上的进展。

此外,对于资源受限的环境,Llamafile也能胜任。Phi-3B这类非常小的模型就是为此设计的。虽然它的能力不如大型模型强大,但其运行速度极快,且答案质量尚可。

最令人惊叹的是,借助Llamafile,您甚至可以在树莓派(一款约35美元的信用卡大小的计算机)上运行此类模型。这充分说明了开源AI在普及性和可及性方面取得的巨大进步。

创建自定义的Llamafile 🛠️

前面我们使用了现成的Llamafile,本节我们将学习如何创建自己的Llamafile。

Llamafile可以与任何GGUF格式的模型权重文件配合使用,这是当前开源模型权重的一种流行格式。您可以在Hugging Face上找到成千上万个不同量化级别的GGUF文件。

创建自定义Llamafile的过程非常简单,只需一条命令。假设您已经下载了一个GGUF文件(例如一个经过微调并以4位量化的Mistral模型变体),您可以通过以下命令将其转换为可执行的Llamafile:

llamafile-convert your-model-file.gguf

几秒钟后,它会生成一个后缀为.llamafile的新文件。现在,这个新文件就变成了一个可执行程序,您可以像运行之前演示的其他Llamafile一样运行它。

./your-model-file.llamafile

执行后,它会加载模型并打开交互界面,功能与之前使用的所有模型完全一致。这使得根据个人需求定制和运行模型变得非常容易。

总结 📚

本节课我们一起学习了Llamafile的完整使用流程。

我们首先介绍了如何获取和运行预构建的Llamafile,体验了在本地隐私环境下运行AI模型。接着,我们对比了CPU与GPU加速模式下的性能差异,看到了GPU带来的巨大提升。然后,我们探索了多模态模型和轻量级模型,了解了Llamafile应用场景的多样性。最后,我们掌握了将通用的GGUF模型权重文件转换为专属可执行Llamafile的方法。

总而言之,Llamafile以其简单易用、兼容性强和功能全面的特点,极大地降低了在本地设备上运行大型语言模型的门槛,是探索和实践本地AI的强大工具。

5:使用Cosmopolitan构建便携式二进制文件

概述

在本节课中,我们将要学习Cosmopolitan库的核心概念。这个库是Llamafile项目的基础,它使得大型语言模型能够被打包成单一、可移植的二进制文件,实现“一次构建,随处运行”。我们将通过编写和编译简单的C语言程序来理解其工作原理。

Cosmopolitan库简介

Cosmopolitan是一个C语言库,它使得用C编写的程序能够像Java一样,实现“一次构建,随处运行”。这是Llamafile能够成为便携式大型语言模型的核心技术。

准备工作

要开始使用Cosmopolitan,首先需要下载并解压其发布版本。解压后,你会找到一个名为cosmocc的编译器,我们将使用它来编译我们的程序。

第一个示例:Hello World

让我们从一个简单的“Hello World”程序开始,了解基本的编译和运行流程。

以下是创建一个“Hello World”程序的步骤:

  1. 创建一个名为hello.c的C语言源文件。
  2. 在文件中写入以下代码:
    #include <stdio.h>
    
    int main() {
        printf("Hello World\n");
        return 0;
    }
    
  3. 使用Cosmopolitan编译器进行编译。命令格式为:
    ./bin/cosmocc -o hello hello.c
    
    这条命令会生成一个名为hello的便携式二进制文件。
  4. 运行生成的二进制文件:
    ./hello
    
    你将在终端看到输出:“Hello World”。

通过这个简单的例子,我们看到了使用Cosmopolitan构建和运行一个基础程序是多么直接。

进阶示例:Marco Polo程序

上一节我们介绍了如何编译一个基础程序,本节中我们来看看一个稍微复杂一点的例子,它包含一些简单的逻辑判断。

我们将创建一个名为marco_polo.c的程序,它根据输入参数做出不同响应。

以下是创建“Marco Polo”程序的步骤:

  1. 创建一个名为marco_polo.c的C语言源文件。
  2. 在文件中写入以下代码:
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[]) {
        if (argc == 2 && strcmp(argv[1], "Marco") == 0) {
            printf("Polo\n");
        } else {
            printf("Usage: %s Marco\n", argv[0]);
        }
        return 0;
    }
    
    这段代码检查用户是否输入了参数“Marco”。如果是,则回复“Polo”;否则,显示用法说明。
  3. 使用Cosmopolitan编译器编译该程序:
    ./bin/cosmocc -o marco_polo marco_polo.c
    
  4. 运行程序并测试不同情况:
    • 输入正确参数:
      ./marco_polo Marco
      
      输出应为:“Polo”。
    • 输入错误或没有参数:
      ./marco_polo
      
      输出应为用法提示,例如:“Usage: ./marco_polo Marco”。

这个例子展示了如何构建一个包含条件逻辑的便携式程序。

Cosmopolitan与Llamafile的关系

我们之所以要深入了解Cosmopolitan,是因为它是Llamafile项目的核心与灵魂。

Llamafile是一个让你能够运行和分发大型语言模型的工具。Cosmopolitan库是其实现跨平台便携性的关键组件。有时,深入底层原理,亲自体验其核心库的工作方式,并围绕它构建一些东西,能让你在未来更深刻地体会到Llamafile设计的优雅之处。

总结

本节课中我们一起学习了Cosmopolitan库的基本用法。我们通过创建“Hello World”和“Marco Polo”两个C语言程序,实践了如何使用cosmocc编译器将它们构建成可在不同系统上运行的单一二进制文件。理解这个基础库是掌握Llamafile如何实现大型语言模型便携化的第一步。

6:使用 Cosmopolitan 构建短语生成器 🛠️

在本节课中,我们将学习如何使用 Cosmopolitan 可移植二进制框架来构建一个简单的、跨平台的短语生成器命令行工具。我们将了解其基本结构、编译过程以及跨平台部署的优势。


概述

Cosmopolitan 框架能帮助开发者构建可在多种操作系统(如 Windows、Linux、macOS)上运行的单一可执行文件,无需修改代码或重新编译。本节我们将利用它创建一个简单的短语生成器工具,作为理解其工作原理的入门示例。

上一节我们介绍了 Cosmopolitan 框架的基本概念,本节中我们来看看如何用它构建一个具体的工具。

代码结构与解析

首先,我们来看一下构建这个工具所需的 C 语言源代码。代码主要包含标准库头文件的引入、一个重复生成短语的函数以及解析命令行参数的主逻辑。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

以下是核心函数,它负责将指定短语重复输出指定的次数。

void repeat_phrase(int count, const char* phrase) {
    for (int i = 0; i < count; i++) {
        printf("%s\n", phrase);
    }
}

程序的主函数 main 负责处理命令行参数。它检查用户是否通过 -c--count 参数指定了重复次数,以及通过 -p--phrase 参数指定了要重复的短语。

int main(int argc, char* argv[]) {
    int count = 1; // 默认重复次数
    char* phrase = "Hello, World!"; // 默认短语

    // 解析命令行参数
    for (int i = 1; i < argc; i++) {
        if (strcmp(argv[i], "-c") == 0 || strcmp(argv[i], "--count") == 0) {
            if (i + 1 < argc) {
                count = atoi(argv[i + 1]); // 将字符串转换为整数
                i++; // 跳过下一个参数(数值部分)
            }
        } else if (strcmp(argv[i], "-p") == 0 || strcmp(argv[i], "--phrase") == 0) {
            if (i + 1 < argc) {
                phrase = argv[i + 1];
                i++; // 跳过下一个参数(短语部分)
            }
        }
    }

    // 调用函数生成短语
    repeat_phrase(count, phrase);
    return 0;
}

编译与构建

由于 Cosmopolitan 框架自带编译器,我们使用其提供的 cosmocc 命令进行编译。这个命令会生成一个单一的可移植二进制文件。

编译命令如下:

bin/cosmocc -o phrase_generator phrase_gen.c

执行此命令后,会生成名为 phrase_generator 的可执行文件。这个文件包含了程序运行所需的所有依赖,因此可以直接分发到不同平台运行。

运行示例

生成可执行文件后,我们可以通过命令行来使用它。以下是几个运行示例:

以下是该工具支持的命令行参数示例:

  • ./phrase_generator:使用默认参数(重复1次“Hello, World!”)运行。
  • ./phrase_generator -c 5:将默认短语重复输出5次。
  • ./phrase_generator -p "Cosmopolitan is cool!":将指定短语重复输出默认的1次。
  • ./phrase_generator --count 3 --phrase "Test Phrase":使用长参数名,将“Test Phrase”重复输出3次。

跨平台优势与应用场景

短语生成器虽然简单,但它清晰地展示了 Cosmopolitan 框架的核心价值:一次构建,处处运行。你只需要在一种系统上编译一次,生成的可执行文件就能在 Windows、Linux、macOS 等多种系统上直接运行,无需为每个平台单独编译。

这种特性对于需要广泛部署的工具尤其有用,例如:

  • 静态网站生成器
  • 系统管理脚本或工具
  • 大型语言模型(LLM)推理工具:这也正是 Llamafile 项目选择 Cosmopolitan 框架的原因,它极大地简化了在不同操作系统上分发和运行 LLM 应用的复杂性。

总结

本节课中我们一起学习了如何使用 Cosmopolitan 可移植二进制框架构建一个跨平台的短语生成器命令行工具。我们分析了其代码结构,演示了如何使用 cosmocc 编译器进行构建,并展示了其强大的跨平台运行能力。理解这个简单示例是掌握如何利用 Cosmopolitan 框架为更复杂的应用(如本地大型语言模型工具)构建可移植分发包的重要第一步。

7:开始使用 Llamafile 🚀

在本节课中,我们将学习如何使用 Llamafile 项目在本地运行大型语言模型。Llamafile 由 Mozilla 开发,它可能是运行本地 LLM 最简单的方式。我们将了解其结构、优势,并通过一个实际例子来演示如何操作。


项目概述

Llamafile 项目允许你通过单个文件分发和运行大型语言模型。其核心在于使用了 Cosmopolitan Libc 库,该库能将所有依赖打包成一个名为 llamafile 的可执行文件。

有趣的是,尽管名字叫 Llamafile,但它并不局限于特定的 LLM。例如,你可以下载支持图像识别的 LLaVA 模型,或者性能出色的 Mixtral 模型。


核心优势

上一节我们介绍了 Llamafile 的基本概念,本节中我们来看看使用它的主要好处。

以下是使用 Llamafile 的三大核心优势:

  1. 隐私保护:你的数据不会发送给任何第三方公司,完全在本地处理。
  2. 性能出色:由于无需网络请求,延迟极低,响应速度通常比调用外部 API 更快。
  3. 完全免费:利用你自己的硬件资源,无需支付 API 调用费用。

如何开始使用

了解了优势后,我们来看看具体如何操作。整个过程非常简单。

以下是开始使用 Llamafile 的步骤:

  1. 下载模型文件:从 Llamafile 官网选择你需要的模型。例如,Mixtral 模型是一个约 30GB、采用 Apache 2 许可证的文件。
  2. 运行模型:下载完成后,在终端中进入文件所在目录,执行命令 ./llamafile 即可启动。
  3. 进行交互:模型启动后,会提供一个本地交互界面(通常是一个 Web UI 或命令行),你可以直接输入问题进行对话。

此外,Llamafile 还提供了一个 Python API,其接口设计与 OpenAI 的 API 兼容。这意味着你可以轻松地将代码从使用商业闭源模型(如 GPT)迁移到使用这个本地开源模型上。

代码示例:使用兼容 OpenAI 的 API

# 假设 Llamafile 服务运行在本地 8080 端口
import openai
openai.api_base = "http://localhost:8080/v1"
openai.api_key = "not-needed"

response = openai.ChatCompletion.create(
    model="local-model",
    messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)

实际操作演示

让我们通过一个终端实例来看看它的实际效果。我已经提前下载好了 Mixtral 模型的 Llamafile。

启动命令非常简单:

./mixtral-8x7b-instruct-v0.1.Q5_K_M.llamafile

启动后,会运行一个本地的 Llama.cpp 服务。在交互界面中,我可以将对话机器人命名为 “AI”,然后向它提问。

例如,我输入:“写一个 Python 的 ‘Hello, World‘ 函数。”

模型会利用我 Mac 的 GPU 进行快速推理,并立即返回正确的代码:

def hello_world():
    print("Hello, World!")

hello_world()

我还可以继续让它编写更多函数,比如“写一个将两个数字相加的 Python 函数”。整个过程非常流畅。


总结

本节课中,我们一起学习了 Llamafile 这个强大的工具。我们了解到,运行自己的本地大语言模型其实非常直接简单。通过 Llamafile,你不仅能保障数据隐私、获得更快的响应速度,还能节省成本。如果你对本地 AI 感兴趣,强烈建议你访问 Llamafile 项目官网,亲自尝试一下。

8:监控本地系统指标 🖥️

在本节课中,我们将学习如何在使用Llamafile运行本地大型语言模型时,监控系统的各项性能指标。这对于评估模型运行效率、资源占用情况以及判断本地部署的可行性至关重要。

模型性能评估

上一节我们介绍了Llamafile的基本使用,本节中我们来看看如何评估其性能。首先,我们可以参考Elo评分来了解社区对该模型能力的普遍认知。

下图展示了该混合模型与商业模型的Elo评分对比,两者差距非常小。这表明,只要本地模型的性能足够好,就会有大量用户对本地运行模型产生兴趣。

实时监控系统指标

那么,本地模型的性能是否足够好呢?让我们直接查看Llamafile项目运行时的实时指标。

我现在已经在网页浏览器窗口中运行了Llamafile,并且旁边显示了所有实时监控指标。我们需要关注的关键指标包括:

  • GPU时间:模型推理过程中GPU的活跃时间。
  • CPU核心使用率:所有CPU核心的负载情况。
  • 特定GPU利用率:例如我使用的M2 Ultra芯片的GPU核心使用情况。

M2 Ultra拥有60个GPU核心。得益于Llamafile和Llama.cpp开发者的出色工作,在Mac操作系统上能够充分利用所有这些GPU核心。

通过示例观察资源占用

让我们通过一个具体操作来观察资源变化。如果我向下滚动并请求Llamafile执行一个Python函数,我们可以看到GPU使用率的变化。

我们将看到GPU使用率在此刻出现峰值。同时,我们也应该能看到相应的GPU活动。

事实上,我们可以看到这个.a1模型确实在调用GPU。我们再来运行一个示例,比如要求它:“给我一个Python递归函数的例子。”然后观察其表现。

模型输出了一个Python递归函数示例。同时,我们再次确认它确实在使用GPU。因此,其性能表现实际上非常出色。历史GPU数据图也显示它能够有效利用GPU资源。

本地与商业模型的思考

对于正在使用商业模型的用户而言,商业模型当然有其价值。但这无疑引出了一个长期问题:如果你可以下载一个性能足够好、表现惊人且完全免费的模型,为什么还要长期使用商业模型呢?

因此,当你在体验Llamafile,甚至考虑为大型语言模型签署商业协议之前,首先应该审视本地模型的真实性能。仔细观察各项系统指标,你会发现它的表现令人印象深刻。


本节课总结:我们一起学习了如何通过Llamafile的监控界面观察关键系统指标(如GPU时间、CPU和GPU利用率),并通过实际运行示例验证了本地模型能有效利用硬件资源(如M2 Ultra的60个GPU核心)。最后,我们对比了本地免费模型与商业模型的性价比,强调了在依赖商业方案前评估本地性能的重要性。

posted @ 2026-03-26 12:26  布客飞龙III  阅读(9)  评论(0)    收藏  举报