杜克大学本地大模型-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的基本步骤:
- 下载文件:从提供的链接下载所需的Llamafile可执行文件。
- 直接运行:在终端或命令行中,像运行普通程序一样执行该文件。
例如,我们下载了一个名为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”程序的步骤:
- 创建一个名为
hello.c的C语言源文件。 - 在文件中写入以下代码:
#include <stdio.h> int main() { printf("Hello World\n"); return 0; } - 使用Cosmopolitan编译器进行编译。命令格式为:
这条命令会生成一个名为./bin/cosmocc -o hello hello.chello的便携式二进制文件。 - 运行生成的二进制文件:
你将在终端看到输出:“Hello World”。./hello
通过这个简单的例子,我们看到了使用Cosmopolitan构建和运行一个基础程序是多么直接。
进阶示例:Marco Polo程序
上一节我们介绍了如何编译一个基础程序,本节中我们来看看一个稍微复杂一点的例子,它包含一些简单的逻辑判断。
我们将创建一个名为marco_polo.c的程序,它根据输入参数做出不同响应。
以下是创建“Marco Polo”程序的步骤:
- 创建一个名为
marco_polo.c的C语言源文件。 - 在文件中写入以下代码:
这段代码检查用户是否输入了参数“Marco”。如果是,则回复“Polo”;否则,显示用法说明。#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; } - 使用Cosmopolitan编译器编译该程序:
./bin/cosmocc -o marco_polo marco_polo.c - 运行程序并测试不同情况:
- 输入正确参数:
输出应为:“Polo”。./marco_polo Marco - 输入错误或没有参数:
输出应为用法提示,例如:“Usage: ./marco_polo Marco”。./marco_polo
- 输入正确参数:
这个例子展示了如何构建一个包含条件逻辑的便携式程序。

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 的三大核心优势:
- 隐私保护:你的数据不会发送给任何第三方公司,完全在本地处理。
- 性能出色:由于无需网络请求,延迟极低,响应速度通常比调用外部 API 更快。
- 完全免费:利用你自己的硬件资源,无需支付 API 调用费用。
如何开始使用
了解了优势后,我们来看看具体如何操作。整个过程非常简单。
以下是开始使用 Llamafile 的步骤:
- 下载模型文件:从 Llamafile 官网选择你需要的模型。例如,Mixtral 模型是一个约 30GB、采用 Apache 2 许可证的文件。
- 运行模型:下载完成后,在终端中进入文件所在目录,执行命令
./llamafile即可启动。 - 进行交互:模型启动后,会提供一个本地交互界面(通常是一个 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核心)。最后,我们对比了本地免费模型与商业模型的性价比,强调了在依赖商业方案前评估本地性能的重要性。

浙公网安备 33010602011771号