Task02:Ollama 自定义导入模型

ops/2025/2/12 7:32:05/
2月13日-14日Task02:Ollama 自定义导入模型[Ollama自定义导入模型](https://datawhalechina.github.io/handy-ollama/#/C3/1. 自定义导入模型)截止时间 02月15日03:00

llama_httpsdatawhalechinagithubiohandyollamaC31_idollama_4">[Ollama 自定义导入模型](https://datawhalechina.github.io/handy-ollama/#/C3/1. 自定义导入模型?id=ollama-自定义导入模型)

llamaC31_id_6">[简介](https://datawhalechina.github.io/handy-ollama/#/C3/1. 自定义导入模型?id=简介)

本节学习如何使用 Modelfile 来自定义导入模型,主要分为以下几个部分:

  1. 从 GGUF 导入
  2. 从 Pytorch 或 Safetensors 导入
  3. 由模型直接导入
  4. 自定义 Prompt

llamaC31_idgguf_15">[一、从 GGUF 导入](https://datawhalechina.github.io/handy-ollama/#/C3/1. 自定义导入模型?id=一、从-gguf-导入)

GGUF (GPT-Generated Unified Format) 是一种文件格式,用于保存经过微调的语言模型。这种格式旨在帮助用户方便地在不同的平台和环境之间共享和导入模型。它支持多种量化格式,可以有效减少模型文件的大小。

它的前身是 GGML(GPT-Generated Model Language),是专门为了机器学习而设计的 Tensor 库,目的是为了有一个单文件的格式,并且易在不同架构的 CPU 以及 GPU 上可以推理,但后续由于开发遇到了灵活性不足、相容性及难以维护的问题。

Ollama 支持从 GGUF 文件导入模型,通过以下步骤来实现:

  1. 下载 .gguf 文件

下载链接:https://huggingface.co/RichardErkhov/Qwen_-_Qwen2-0.5B-gguf/resolve/main/Qwen2-0.5B.Q3_K_M.gguf?download=true

为了演示的方便,我们选用了 Qwen2-0.5B 模型。下载后复制到第一部分的根目录下

  1. 新建创建 Modelfile 文件
FROM ./Qwen2-0.5B.Q3_K_M.ggufCopy to clipboardErrorCopied
  1. 在 Ollama 中创建模型
ollama create mymodel -f ModelfileCopy to clipboardErrorCopied
  1. 终端内运行模型(实测在 notebook 中运行不出来,最好在终端运行)
ollama run mymodelCopy to clipboardErrorCopied

alt text

llamaC31_idpytorchsafetensors_49">[二、从 Pytorch 或 Safetensors 导入](https://datawhalechina.github.io/handy-ollama/#/C3/1. 自定义导入模型?id=二、从-pytorch-或-safetensors-导入)

Safetensors 是一种用于存储深度学习模型权重的文件格式,它旨在解决安全性、效率和易用性方面的问题。目前这部分功能还有待社区成员开发,目前文档资源有限。

如果正在导入的模型是以下架构之一,则可以通过 Modelfile 直接导入 Ollama。当然,你也可以将 safetensors 文件转换为 gguf 文件,再进行处理,转换过程可以参考第三部分。

有关 safetensors 以及 GGUF 更详细的信息可以参考这个链接进行学习 https://www.linkedin.com/pulse/llama-3-safetensors-vs-gguf-talles-carvalho-jjcqf

  • LlamaForCausalLM
  • MistralForCausalLM
  • GemmaForCausalLM

由于这部分内容社区还在不断优化中,因此,这里提供的示例代码和流程仅供参考,并不保证能成功运行。详情请参考官方文档。

  1. 下载 llama-3 模型
!pip install huggingface_hubCopy to clipboardErrorCopied
# 下载模型
from huggingface_hub import snapshot_downloadmodel_id = "unsloth/llama-3-8b-bnb-4bit"
snapshot_download(repo_id=model_id, local_dir="llama-3-8b-bnb-4bit",local_dir_use_symlinks=False,revision="main",# 怎么获取<YOUR_ACCESS_TOKEN>,请参照部分3use_auth_token="<YOUR_ACCESS_TOKEN>")Copy to clipboardErrorCopied
  1. 根目录下创建 Modelfile 文件,内容如下:
FROM ./llama-3-8b-bnb-4bitCopy to clipboardErrorCopied
  1. 在 Ollama 中创建模型
ollama create mymodel2 -f ModelfileCopy to clipboardErrorCopied
  1. 运行模型
ollama run mymodel2Copy to clipboardErrorCopied

llamaC31_id_98">[三、由模型直接导入](https://datawhalechina.github.io/handy-ollama/#/C3/1. 自定义导入模型?id=三、由模型直接导入)

正常来说,我们在 HuggingFace 接触到的模型文件非常之多,庆幸的是,hf 提供了非常便捷的 API 来下载和处理这些模型,像上面那样直接下载受限于网络环境,速度非常慢,这一小段我们来使用脚本以及 hf 来完成。

llama.cpp 是 GGUF 的开源项目,提供 CLI 和 Server 功能。

对于不能通过 Ollama 直接转换的架构,我们可以使用 llama.cpp 进行量化,并将其转换为 GGUF 格式,再按照第一种方式进行导入。 我们整个转换的过程分为以下几步:

  1. 从 huggingface 上下载 model;
  2. 使用 llama.cpp 来进行转化;
  3. 使用 llama.cpp 来进行模型量化;
  4. 运行并上传模型。

llamaC31_id_31huggingfacemodel_111">[3.1 从 HuggingFace 下载 Model](https://datawhalechina.github.io/handy-ollama/#/C3/1. 自定义导入模型?id=_31-从-huggingface-下载-model)

最直觉的下载方式是通过git clone或者链接来下载,但是因为llm每部分都按GB计算,避免出现 OOM Error(Out of memory),我们可以使用 Python 写一个简单的 download.py。

首先应该去hf拿到用户个人的 ACCESS_TOKEN,打开 huggingface 个人设置页面。

alt text

alt text

alt text

至此,我们就拿到了一个 ACCESS_TOKEN ,接下来我们使用 huggingface_hubsnapshot_download 下载模型,我们这里选择的还是 Qwen-0.5b。

!pip install huggingface_hubCopy to clipboardErrorCopied
from huggingface_hub import snapshot_downloadmodel_id = "Qwen/Qwen1.5-0.5B" # hugginFace's model name
snapshot_download(repo_id=model_id, local_dir="Qwen-0.5b",local_dir_use_symlinks=False,revision="main",use_auth_token="<YOUR_ACCESS_TOKEN>")Copy to clipboardErrorCopied

我们cd到第三部分的目录下执行,下载时间可能会很长,耐心等待。

llamacpp_httpsdatawhalechinagithubiohandyollamaC31_id_32llamacpp_140">[3.2 使用 llama.cpp 进行转换](https://datawhalechina.github.io/handy-ollama/#/C3/1. 自定义导入模型?id=_32-使用-llamacpp-进行转换)

llama.cpp 是 GGML 主要作者基于最早的 llama 的 c/c++ 版本开发的,目的就是希望用 CPU 来推理各种 LLM,在社群的不断努力下现在已经支持大多数主流模型,甚至包括多模态模型。

首先我们克隆 llama.cpp 库到本地,与下载的模型放在同一目录下:

git clone https://github.com/ggerganov/llama.cpp.gitCopy to clipboardErrorCopied

由于使用 llama.cpp 转换模型的流程基于 python 开发,需要安装相关的库,推荐使用 conda 或 venv 新建一个环境。

cd llama.cpp
pip install -r requirements.txt
python convert_hf_to_gguf.py -hCopy to clipboardErrorCopied

如果显示以下内容,说明转换程序已经准备好了。

alt text

接下来,我们把刚刚从 HuggingFace 下载的模型转换为 GGUF 格式,具体使用以下脚本:

python convert_hf_to_gguf.py ../Qwen-0.5b --outfile Qwen_instruct_0.5b.gguf --outtype f16Copy to clipboardErrorCopied

alt text

可以看到 llama.cpp 目录下多了一个 Qwen_instruct_0.5b.gguf 文件,这个过程只需要几秒钟。

为了节省推理时的开销,我们将模型量化,接下来我们开始量化实操。

llamacpphttpsdatawhalechinagithubiohandyollamaC31_id_33llamacpp_174">[3.3 使用llama.cpp进行模型量化](https://datawhalechina.github.io/handy-ollama/#/C3/1. 自定义导入模型?id=_33-使用llamacpp进行模型量化)

模型量化是一种技术,将高精度的浮点数模型转换为低精度模型,模型量化的主要目的是减少模型的大小和计算成本,尽可能保持模型的准确性,其目标是使模型能够在资源有限的设备上运行,例如CPU或者移动设备。

同样的,我们先创建 Modelfile 文件,再使 用 ollama create 命令来从 gguf 文件中创建我们的模型,不过与第一步稍有不同的是,我们添加了量化逻辑,只需要在执行 ollama create 是添加一个参数即可。

首先把上一步拿到的 Qwen_instruct_0.5b.gguf 移动至第三部分的根目录下,再创建 Modelfile 文件编写以下内容.

FROM ./Qwen_instruct_0.5b.ggufCopy to clipboardErrorCopied

终端运行创建和量化脚本。

# 第三部分根目录下
ollama create -q Q4_K_M mymodel3 -f ./ModelfileCopy to clipboardErrorCopied

alt text

到此,我们的模型就量化并创建完成了,接下来我们就可以运行模型了。

llamaC31_id_34_197">[3.4 运行并上传模型](https://datawhalechina.github.io/handy-ollama/#/C3/1. 自定义导入模型?id=_34-运行并上传模型)

使用 gguf 运行模型的步骤详见第一部分,这里不再赘述。

果本地保存的模型文件太占用空间,可以上传 gguf 模型到 huggingface 的自己的 repo 中,同步骤一的思想,我们可以写一个 upload 的逻辑。

Tip

如果想完成上传,你的 HF_ACCESS_TOKEN 权限必须要为 write,并且要修改你的 model_id,your_hf_name 指的是你 huggingface 账号名称。

from huggingface_hub import HfApi
import osapi = HfApi()
HF_ACCESS_TOKEN = "<YOUR_HF_WRITE_ACCESS_TOKEN>"
#TODO 这里需要设置你的model_id
#例如 model_id = "little1d/QWEN-0.5b"
model_id = "your_hf_name/QWEN-0.5b"api.create_repo(model_id,exist_ok=True,repo_type="model", # 上傳格式為模型use_auth_token=HF_ACCESS_TOKEN,
)
# upload the model to the hub
# upload model name includes the Bailong-instruct-7B in same folder
for file in os.listdir():if file.endswith(".gguf"):model_name = file.lower()api.upload_file(repo_id=model_id,path_in_repo=model_name,path_or_fileobj=f"{os.getcwd()}/{file}",repo_type="model", # 上傳格式為模型use_auth_token=HF_ACCESS_TOKE)Copy to clipboardErrorCopied

alt text

上传完成后就可以在自己的 hf 仓库中看到啦!

llamaC31_idprompt_241">[四、自定义 Prompt](https://datawhalechina.github.io/handy-ollama/#/C3/1. 自定义导入模型?id=四、自定义-prompt)

Ollama 支持自定 义Prompt,可以让模型生成更符合用户需求的文本。

自定义 Prompt 的步骤如下:

  1. 根目录下创建一个 Modelfile 文件
FROM llama3.1
# sets the temperature to 1 [higher is more creative, lower is more coherent]
PARAMETER temperature 1
# sets the context window size to 4096, this controls how many tokens the LLM can use as context to generate the next token
PARAMETER num_ctx 4096# sets a custom system message to specify the behavior of the chat assistant
SYSTEM You are Mario from super mario bros, acting as an assistant.Copy to clipboardErrorCopied
  1. 创建模型
ollama create mymodel -f ./ModelfileCopy to clipboardErrorCopied

alt text

创建模型的时间可能稍微会久一点,和 pull 一个模型的时间差不多,请耐心等待。

alt text

再次运行 ollama list 查看已有的模型,可以看到 mymodel 已经正确创建了。

alt text

  1. 运行模型
ollama run mymodelCopy to clipboardErrorCopied

alt text

可以看到,我们的小羊驼 🦙 已经变成了 Mario!自定义 Prompt 成功!😘😘

llamaC31_id_286">[参考链接](https://datawhalechina.github.io/handy-ollama/#/C3/1. 自定义导入模型?id=参考链接)

  • https://www.linkedin.com/pulse/llama-3-safetensors-vs-gguf-talles-carvalho-jjcqf
  • https://www.sysgeek.cn/ollama-on-windows
  • https://ollama.com/blog/openai-compatibility

python包的安装

更新 apt 包索引

首先,尝试更新你的 apt 包索引,这有时能解决一些下载问题:

sudo apt update
  1. 安装 **python3-venv**

运行以下命令来安装缺少的 python3-venv 包:

sudo apt install python3.10-venv

这将安装创建虚拟环境所需要的工具。

  1. 重新创建虚拟环境

安装完 python3-venv 后,重新执行你之前的虚拟环境创建命令:

python3 -m venv ldd_huggingface_hub_env
  1. 激活虚拟环境

创建成功后,使用以下命令来激活虚拟环境:

source ldd_huggingface_hub_env/bin/activate
  1. 安装 **huggingface_hub**

进入虚拟环境后,你可以安装所需的库:

pip install huggingface_hub
  1. 运行脚本

安装完依赖后,运行你的 Python 脚本:

python download_model.py

删除模型

llama_remove__358">1. 使用 **ollama remove** 命令

Ollama 提供了 ollama remove 命令来删除本地模型。例如,要删除名为 qwen:0.5b 的模型,可以执行:

ollama remove qwen:0.5b

如果模型没有版本号,可以直接执行:

ollama remove qwen

2. 手动删除模型文件

如果 ollama remove 无法成功删除模型,您可以手动删除存储模型的文件夹。Ollama 的模型默认存储在:

  • Linux/macOS: ~/.ollama/models
  • Windows: C:\Users\your_username\.ollama\models

可以使用以下命令手动删除:

rm -rf ~/.ollama/models/qwen*

或者:

rm -rf ~/.ollama/models/*`模型名称`*

然后运行 ollama list 确保模型已被删除。


http://www.ppmy.cn/ops/157720.html

相关文章

Vue项目能进行哪些性能优化?

一、前言 在新公司开发项目的时候&#xff0c;我发现总结了一个问题就是&#xff0c;当我开发完某个需求。但是当测试完开发完产品验收的时候可能会从性能方面验收的时候会出现一些你意想不到的结果。为此我整理一下项目中优化可以从哪些方面来入手。首先可以从三个方面来进行…

C++ 顺序表

顺序表的操作有以下&#xff1a; 1 顺序表的元素插入 给定一个索引和元素&#xff0c;这个位置往后的元素位置都要往后移动一次&#xff0c;元素插入的步骤有以下几步 &#xff08;1&#xff09;判断插入的位置是否合法&#xff0c;如果不合法则抛出异常 &#xff08;2&…

SVN 版本回退

SVN 版本回退 引言 Subversion&#xff08;简称SVN&#xff09;是一款广泛使用的版本控制系统&#xff0c;它允许开发团队在项目开发过程中跟踪源代码的修改历史。在软件开发过程中&#xff0c;版本回退是一项重要的操作&#xff0c;它可以帮助开发人员恢复到某个特定的代码版…

如何查看Ubuntu24.04系统,显卡是什么型号,适配的驱动是什么?

在Ubuntu 24.04系统中&#xff0c;查看显卡型号和适配的驱动程序可以通过以下步骤完成&#xff1a; 查看显卡型号 要确定您的计算机上安装了什么显卡&#xff0c;您可以使用几种不同的命令。最常用的命令之一是lspci&#xff0c;它能够列出所有PCI设备的信息。为了专门找到NV…

环信EaseCallKit信令详解

EaseCallKit 是一套基于环信 IM 和声网音视频结合开发的音视频 UI 库&#xff0c;实现了一对一语音和视频通话以及多人音视频通话的功能。基于 EaseCallKit 可以快速实现通用音视频功能。 下面讲解用IM做信令的过程和效果示意 &#xff08;一&#xff09;演示样例&#xff08…

大语言模型多代理协作(MACNET)

大语言模型多代理协作(MACNET) Scaling Large-Language-Model-based Multi-Agent Collaboration 提出多智能体协作网络(MACNET),以探究多智能体协作中增加智能体数量是否存在类似神经缩放定律的规律。研究发现了小世界协作现象和协作缩放定律,为LLM系统资源预测和优化…

9.混合推荐系统的高级应用

接下来我们将学习混合推荐系统的高级应用。混合推荐系统&#xff08;Hybrid Recommender System&#xff09;通过结合多种推荐算法&#xff0c;可以利用不同算法的优势&#xff0c;提升推荐效果和用户满意度。在这一课中&#xff0c;我们将介绍以下内容&#xff1a; 混合推荐系…

微服务中如何使用openfeign上传文件

继上一篇文章讲了springboot上传文件的各种基本操作&#xff0c;但我们在实际的开发中可能会单独的开发一个文件服务来管理我们的真实的文件&#xff0c;然后将我们的文件信息和业务的数据存放在一起。那么在微服务中如何使用openfeign上传文件呢&#xff1f; 首先需要搭建一套…