通过多进程技术,现在两个模型都被加载到了内存中。所以,如果我现在想运行 DeepSeek 推理,它会继续之前那个故事。(音乐声)我们现在有四个不同的模型在同时运行。哦,嘿,这太棒了。而且我仍然让分布式计算在同一时间运行着。

大家好,今天的节目我们要把我们的电脑变成一个本地 AI 超级计算机,让它同时运行多个模型。我们会将它们进行批处理组合、执行分布式计算,并从我们的系统中榨取最大的性能。我们将解释诸如多进程、批处理、分布式计算、多线程推理等所有这类高级功能,甚至包括确定性能力。

如果你希望每次都能得到完全相同的响应,而不想听到那种“哇哦,这个 AI 在想什么?它在做什么?”的疑惑声,那么这就是我们要深入探讨的内容。我这里有一个 Inferser 实例,上面加载了 DeepSeek Fast V4。在推理控制界面中,我启用了一个引擎。我要说明一下实际的多进程机制:我将只启用批处理功能,并且我在左侧打开了两个窗口。

目前我只开启了批处理模式,然后我让它写一个故事。我们的速度大约在每秒 25 个令牌左右,或者稍微少一点,是每秒 24 个令牌。接下来我要引入第二个推理任务,我们将同时一起运行这两个推理。此时每个任务的速率大约是每秒 18 个令牌,差不多就是这个水平。

因此,我们将吞吐量从大约每秒 25 个令牌提升到了每秒 36 个令牌,同时我们还在生成两个不同的内容。现在,如果你想要确定性能力,那么批处理并不是你的解决方案。因为批处理方式的工作原理是:我们不再使用确定性的随机数生成器逐个令牌进行推理,而是开始将我们的提示词填充并组合在一起以适配矩阵结构。

这样我们就可以一次性或成组地将它们通过模型进行处理。因此,由于浮点运算的存在,你会得到略微不同的变化结果,因为始终存在精度损失。我们现在开始会得到不同的响应。虽然这两个响应都是 100% 准确的,它们完全没问题。比如,“老人的手就像地图”这句话出现了。它正在生成中。“老人的手就是地图。”

但在推理过程中,它开始发生变化了。因为我们获得了略微不同的随机数,加上精度损失的影响,导致我们以不同的方式遍历决策树。所以,如果你查看这里的推理控制选项,有一个叫做“种子”的设置。使用种子的话,实际上有 1800 亿亿(quintillion)种不同的选择可供做出,这会让它以略微不同的方式遍历那棵树。

每一种可能性都是如此 probable(可能)。这就是为什么当你看到那些基准测试时,他们称之为“刷榜”(bench maxing),因为他们会多次运行基准测试,然后挑选出最好的结果。嗯,那些“坏家伙”就是这么做的。好吧,你知道的,你为自己的模型感到自豪,你想为它获得最好的响应效果。

所以,如果我们看这里使用批处理的情况,我们仍然保持着不错的吞吐量。在结束时是每秒 20 个令牌。一个是 20,另一个也是 20,还有一个是每秒 15 个令牌。它们仍然保持 100% 准确,只是经过了树的不同遍历路径。因此,我们得出了不同的响应结果。

现在,如果你想要确定性,还有另一个功能可以使用,那就是多进程(multiprocessing)。所以在右边这里,我仍然有“写一个故事”的任务,但我启用了多进程并禁用了批处理。因此,使用多进程时,它可以通过拥有多个进程来工作,这样你可以同时运行不同的模型;或者你可以在同一个进程中运行多线程,从而只让模型在内存中加载一次。

所以我将在这里开始写一个故事,然后我会引入第二个任务。而不是将其作为批处理运行,我们实际上是在同一进程中作为独立的实例来运行它们,这样我们就无需重复占用内存。所以,我可以看到如果我输入 inferencer(推理器),只有一个实例被保留着,因为内存中只加载了一个模型。

从速度上看,我们大约是每秒 11.5 个令牌。所以它比批处理慢一些,因为 GPU 的利用率没有那么高。它只是在逐个进行处理。但请看确定性效果:我们得到了“老人的手就是地图”。接着是“老人的手就是地图,长达 50 年。”然后是“时钟很旧了”。接着又是“时钟很旧了”。

所以现在,我们同时得到了两个确定性的响应。你失去了一些从批处理中获得的性能优势,但你获得了多进程带来的确定性。此外,多进程的另一个好处是你可以同时运行多个模型。例如,如果我(吸鼻子声)在这里加载 STEEP Step 3.7 Flash with Vision inference。

我会说:“为我创建一个这个图像的 HTML 版 3D 体素模型。”我点击播放,现在它正在这里加载那个模型。我要进入活动监视器(Activity Monitor),我们可以看到它启动了一个第二实例的 infuser,这将是一个独立的进程,在内存中持有该模型自己的一块空间。

于是它开始响应了。我们的速度大约在每秒 29 到 30 个令牌之间。通过多进程,现在两个模型都被加载到了内存中。所以,如果我现在想运行一个 DeepSeek 推理,它会继续之前那个故事的处理速度是每秒 16 个令牌。STEEP 的速度降到了每秒 21 个令牌。

我们也可以在同时运行另一个 DeepSeek 推理。这个也在使用多进程,同时进行着。所以这里每个都是每秒 8 个令牌的速度,但我们总共仍然达到了每秒 22 个令牌。因为那个进程被拆分成了两个线程,而另一个进程仍然获得了 50%(的资源)。所以是 50%,25。

除了多进程,你还可以同时使用批处理。所以我将在这里同时启用批处理和多进程。让我先禁用那两个生成任务。而不是让两个独立的线程来处理那个推理,我要让它变成多进程模式。所以我点击播放并再次点击播放。

现在,它正在运行中,我们每个大约每秒 10 个令牌。这比之前的 8 提高了,所以多了额外的四个(令牌/秒)。但我们同时也还有 STEEP vision inference 在运行。所以我们正在创建这个图像的 3D 体素模型,同时处理 DeepSeek 的批任务。一切都和谐地运行着。

那么,在等待它完成的同时,让我给你展示一下它在本地系统上的运行情况。现在警告一下:我实际上并没有用 OBS 录制直播过这个,所以我是在演示时录制的屏幕。让我们看看当我们引入……

服务器模式以及当我们引入分布式计算时。在这里的左侧,我选择了 Gemma 模型,具体是 E4B 版本。我将对这只猫进行推理处理,同时也会并行地对另一只猫进行推理。系统正在将该模型加载到内存中。你可以看到,两个不同的推理实例正同时在进行处理。我还会继续对 GPT-OSS-20B 模型进行推理操作。因此,如果系统拥有足够的内存资源的话……

我们可以打开活动监视器来查看当前的状态。我们可以看到,整个系统总共正在使用 84 GiB 的内存。我们有两个推理实例在运行,每个大约占用 20 GiB 左右。系统已经将这些任务全部处理完毕了。此外,你还可以启用服务器模式。在“服务器”选项卡的设置中,如果你启动一个兼容 OpenAI 或 Llama API 的服务器……

只要确保启用了多进程、批处理等任何你需要的功能,你就可以同时开始提供这些模型的服务。我这里已经配置好了。这是 Llama 模型。我将同时对 Gemma 进行推理,并且同时运行 GPT 模型的推理任务。这样我们就有四个不同的模型在同时进行推理操作了。其中两个通过服务器 API 提供服务,另外两个则是独立的实例……

我仍然可以将它们组合在一起。我可以继续合并这两个任务,系统依然能够正常运行并生成故事内容。只要你有足够的内存空间,它就会持续不断地叠加更多任务。不过我想我可能将同时运行的推理数量限制在了八个以内。我可以随时修改这个上限,也可以将其调得更高一些,但这目前只是对系统实际运行状态的一种功能预览。

现在 Gemma 模型的推理速度达到了每秒八个令牌,GPT 模型则是每秒十一个令牌乘以二(因为有两个实例)。与此同时,我们的服务器 API 后台仍然在运行 Llama 模型。还有另一件事我们可以做,那就是使用分布式计算功能。通过分布式计算,我们允许利用多台计算机同时运行更大的模型……

这里有一个名为“集群”的功能,你可以定义一组要连接的计算机来组成一个大型网络。不过我打算直接进行连接。我将连接到我的服务器,只需在这里重新建立连接即可;或者在服务器选项中进入“连接”界面。我在我的 Mac Studio 上已经有一个正在运行的服务器实例,所以我将其连接了上来……

在列表中我们可以看到,有几款模型同时存在于我的 Mac Studio 和正在并行运行的 Mac Pro 上。我选择 Kimi K2.6,这是一个特别版本,使用的是 Q4_0 量化格式。这种量化的质量几乎达到了百分之九十九的原始精度。我之所以选择它,是因为它能够同时适配我的两套系统……

点击分布式计算按钮后,系统将开始询问服务器是否空闲以建立连接。目前它是空闲的,因为你可以看到进度条正在加载状态中。这意味着在我的服务器端,之前那个 3D 体素猫的生成任务应该已经完成了。既然我们在这里,不妨看看它的效果如何……

哇塞,这太酷了!哦嘿,这也非常棒。我们成功生成了斑点狗和 DeepSeek 也在后台完成了它的处理任务。现在我这台电脑上正在运行 Kimi K2.6,我打算让它介绍一下自己。有一点你可能已经注意到了:如果我们查看当前运行的推理数量……

现在只剩下一个了,因为当它尝试加载 Kimi K2.6 时,系统提示需要大量内存。所以我不得不关闭了其他正在运行的推理任务。系统的处理逻辑是:如果后台有推理在运行,它会将其加入队列;当需要额外内存时,它会在空闲后关闭旧任务……

如果不需要额外的新内存空间,它就会直接添加新的推理实例,直到接近内存上限为止。这一切都是自动为你处理好的。当然,如果你愿意,我可以引入进度条来限制内存使用量;但 macOS 系统本身会检测内存状况……

一旦检测到内存不足,macOS 就会通知应用程序:“嘿,你的内存快用完了。”随后我的应用会检查所有不同的辅助进程并关闭那些不再需要的实例,以确保你不会导致内存溢出。所以这一切都是全自动处理的……

正如你所见,Kimi K2.6 正在我们的服务器上加载。一旦加载完成,它就会开始执行推理任务。但与此同时,如果你想要进行一些服务器 API 调用……由于我们启用了服务器的多进程功能,我可以继续请求加载更多模型。你可以看到实际上正在处理的是 Llama 模型……

这里还有一个也是 Llama,所以我现在有两个推理实例在运行,同时分布式计算也在并行执行。我们正在连接服务器并建立多个并发链接,同时也通过本地模型进行处理……

如果我们查看任务视图,可以看到目前有三个推理实例在同时运行。其中一个的速度达到了每秒 240 个令牌,我们可以看到内存中加载了三个本地模型:1、2、3。如果你愿意,可以随时弹出其中任何一个……

或者进入设置界面指定一个驱逐策略。我将其设置为五分钟后自动从内存中卸载模型。也就是说,五分钟之后这些进程就会全部消失,你需要重新将它们加载到内存中……

你可以将这个时间设置得更长或更短。可以看到系统目前运行得非常稳定,内存占用率相当高。让我请 Kimi 写一个故事吧,这样我们可以获得更长的推理过程……

我们可以看到内存使用量已经接近总上限了。目前使用了 1、2、3 GiB(注:此处原文数字可能指代具体数值,按原意保留)。因此,与其继续运行 Llama 模型……

我改为请求 GPT-OSS。在我的 curl 请求中,指定的模型是 GPT-OSS。但由于我正在运行分布式计算任务,GPT-OSS 无法装入当前内存……

系统会将其加入队列。它会提示:“嘿,我们现在无法运行它。”一旦 Kimi 完成它的任务……

系统就会做出决策,决定需要关闭哪个进程以腾出空间。我们可以看到它实际上已经关闭了 Kimi K2……

因此必须将其从内存中卸载,以便容纳所有的推理请求。但如果你愿意,你仍然可以运行 Llama、另一个 Llama 实例……

甚至可以同时进行少量的 Gemma 推理,并将 Kimi K2 重新加入队列以执行更多任务。系统会根据你的可用内存情况,智能地选择运行哪个模型……

并将其放置在队列中的合适位置。是的,正如你所见,我们在这里生成了一个视觉推理结果……

与此同时系统还在进行 DeepSeek Flash 的处理、排队分布式计算任务,并对不同模型执行多线程和多进程操作……

同时读取调查 API 模型,我们已将电脑变成了一只超级本地 AI 猛兽。所以,请告诉我你们对即将推出的 Inference 最新功能有什么看法?如果有任何建议的功能,请在下方评论区告诉我。希望你们觉得这个视频有用并享受了节目。

借助多进程技术,它现在能在内存中同时持有两个模型。所以,如果我现在想让你进行一次得体的推理,它会继续 [音乐] 接着那个故事。太好了!我们现在有四个不同的模型正在同时运行推理。哦,嘿!这太棒了。所以,我们的视觉电脑也在同一时间运行着。>> [音乐]