如何借助 Ollama 在 M1 Mac 上运行 Mistral-7B [译]

作者:

想在你的 Macbook 上尝试运行 Mistral 7B 吗?这篇教程将一步步指导你如何做到!

随着小型大语言模型 (LLM) 的能力逐渐增强,把它们应用到边缘设备上的想法也越来越可行。本教程将重点介绍如何在 Mac 设备,包括搭载 M 系列处理器的 Mac 上,本地部署 Mistral 7B 模型。我还会教你如何在本地使用定制的 Mistral 7B 适配器!为了更加简便高效,我们会借助 Ollama 和 llama.cpp 仓库来实现这一目标!

Ollama

Ollama 是一个多功能且易于使用的平台,它能让你轻松地在本地配置和运行大语言模型。该平台支持 macOS、Windows 和 Linux 等多种操作系统,并可在 Docker 环境中运行。

Ollama 提供了一系列预构建的开源模型,如 Neural Chat、Starling、Mistral 以及各种版本的 Llama,这些模型有着不同的参数和规模,能满足各种需求和系统配置。

此外,Ollama 还提供了一个简洁的命令行界面,你可以通过它创建、获取、删除、复制和运行模型。它支持多行输入和将提示作为参数传递。对于偏好编程方式的用户,Ollama 还提供了 REST API,方便将其集成到不同的应用和服务中。无论你是开发人员还是对本地部署大语言模型感兴趣的爱好者,Ollama 都是你的理想选择。

我们将使用 Mistral 7B 模型,它几乎兼容所有 M1 Mac;但如果你的机器只有 8GB RAM,虽然运行起来会稍显缓慢,但好消息是它依然能运行!

步骤 1: 在 Mac 上安装

在 macOS 系统上安装 Ollama 是一个简单的过程。首先,访问 Ollama 的网站,在下载部分找到 macOS 版本的专用链接。点击 '下载' 按钮,安装包将下载到您的电脑中。

下载完毕后,打开文件,按照屏幕上的指示完成安装,通常包括将 Ollama 应用拖到“应用程序”文件夹。安装后,您可以从“应用程序”文件夹或通过 Spotlight 搜索来启动 Ollama。

运行基本 Mistral 模型

要在 Ollama 上运行基本的 Mistral 模型,请先打开 Ollama 应用,然后打开终端。输入命令 ollama run mistral 并按回车。此命令会下载并启动 Mistral 模型,Ollama 负责设置和运行过程。

模型运行后,您可以直接在终端与之交互,试验其功能或根据需要测试不同的查询和输入。

使用 /bye 命令可以结束对话。

创建定制 Mistral 模型

假设您已使用 Lora 或 QLoRA 微调了 Mistral 模型,并获取了适配器权重。如果您还未这样做,可以查看我的其他教程获取更多信息。

要在 Ollama 中使用这些适配器,需将适配器转换为 GGML 格式。进入 llama.cpp 目录(教程仓库的一部分),在此目录运行脚本,将适配器转换为 GGML 格式。使用命令 python convert-lora-to-ggml.py /path/to/your/lora/adapter,其中路径指向存有 Lora 适配器(通常名为 adapter.bin 和 config.bin)的目录。

python convert-lora-to-ggml.py /path_to_your_adapter

创建模型文件

首先,你需要创建一个 Ollama 模型文件。这个文件有点像 Dockerfile,但它是为大语言模型(LLM)设计的。开始时,使用 FROM 关键字来指定基础模型,比如写 FROM mistral:latest,这表示你将使用 Mistral 模型的最新版。接着,用 ADAPTER 关键字指定适配器,并提供你的 GGML 适配器模型的二进制文件路径。以下是我的模型文件示例:

FROM mistral:latest
ADAPTER /Users/brettyoung/Desktop/IMPORTANT/mistral-7b-alpacapython10kCheckpoints/checkpoint-150/ggml-adapter-model.bin

模型的创建

在准备好模型文件之后,你可以通过 ollama create 命令来创建你的个性化模型。在命令后面跟上你想要的模型名和模型文件的路径,例如 ollama create custom_mistral -f ./Modelfile

ollama create custom_mistral -f ./Modelfile

最终,使用 ollama run custom_mistral 命令来启动并运行你的自定义模型。完成这些步骤后,你就可以开始与你专门定制的 Mistral 模型互动了。

ollama run custom_mistral

在 Python 中使用 Mistral 模型

要在 Python 中使用 Ollama,我们需要创建一个称为 Ollama 本地 API 的简单函数。当我们在系统上运行应用时,这个 API 会自动运行。虽然这个 API 通常通过 curl 命令调用,但我们将编写一个自定义的 Python 函数来实现编程方式的调用。下面是这个脚本的内容:

import subprocess
import json
def generate_response(prompt):
curl_command = f"""curl -s http://localhost:11434/api/generate -d '{{"model": "custom_mistral", "prompt":"{prompt}"}}'"""
process = subprocess.Popen(curl_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
full_response = ""
while True:
output_line = process.stdout.readline()
if not output_line and process.poll() is not None:
break
if output_line:
try:
response_data = json.loads(output_line.strip())
full_response += response_data.get("response", "")
except json.JSONDecodeError:
return "Invalid response format", 500
return full_response
def get_user_input_and_generate():
prompt = input("Enter a prompt: ")
response = generate_response(prompt)
print("Response:", response)
if __name__ == '__main__':
get_user_input_and_generate()

这个脚本利用 Python 的 subprocess 和 Popen 来执行 curl 命令。这种方式使得脚本能够在一个独立的进程中运行 curl 命令,并捕获它的输出。脚本会逐行读取这些输出,将其解析成 JSON 格式,并将各个响应串联起来。

需要注意的是,由于 Ollama 本地 API 会分多次输出结果,而不是一次性生成完整响应,因此生成函数相对复杂。以下是我们的 Python 脚本实际执行的命令,它指定了使用的模型和输入的提示!

curl_command = f"""curl -s http://localhost:11434/api/generate -d '{{"model": "custom_mistral", "prompt":"{prompt}"}}'"""

while 循环会持续从进程的输出中读取数据,直到没有更多数据为止(即进程执行完毕)。如果 JSON 解码失败(意味着响应的格式不符合预期),函数会返回错误信息。

通过这个脚本,您可以向定制的 Mistral 模型发送提示并获取生成的回应。只需简单地调用 generate_response 函数并输入您想要的提示即可。脚本的主体部分(位于 if name == 'main': 下方)是用来测试这一功能的:它会引导用户输入一个提示,然后调用 generate_response 函数处理这个提示,并将模型的回应打印出来。下面是使用上述脚本的一个实际例子!

结语

希望这篇教程能成为您将 AI 技术轻松应用于日常生活的起点。不论您是一名开发者,希望将尖端 AI 功能融入您的应用,还是一名热衷于探索语言模型新领域的爱好者,本地大语言模型(LLM)都能在各种场合发挥巨大作用!

如果您有任何疑问,欢迎留言交流。同时,也欢迎访问我们的 Github 仓库,了解更多信息点击这里