ollama 使用自定义大模型

本文介绍如何在Windows系统下将Safetensors模型转换为OLLAMA可用的自定义模型,包括下载源码、安装依赖、合并及量化模型等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

一、下载源码

1.下载ollama源码

2.下载llama.cpp源码

3.复制项目文件

二、安装python依赖

三、合并模型文件

1.以Chinese-Mistral-7B-Instruct-v0.1为例,将4个safetensors文件合并为一个模型文件

2.下载Chinese-Mistral-7B-Instruct-v0.1模型

2.1下载模型

2.2合并文件

2.3合并过程

四、量化模型

1.安装cmake和编译器

2.开始编译

3.量化模型

五、制作ollama使用的模型

1.创建Modelfile 文件

2.创建模型

3.运行模型


前言

使用ollama+open-webui可以轻松部署本地大模型,但是通过ollama下载的模型都是别人制作好的。我的模型部署思路是大模型为底座+lora微调,实现真正的个人大模型,后续将分享自己的lora微调经验和ollama调用lora。本文主要介绍如何在windows系统下将Safetensors 模型制作成ollama使用的自定义模型,linux系统自定义模型制作方法可直接按照官方文档执行。ollama官方文档提供了如何将GGUF,Pytorch或Safetensors 文件制作为自定义模型的方法。官方文档https://github.com/ollama/ollama/blob/main/docs/import.md

一、下载源码

1.下载ollama源码

https://github.com/ollama/ollama/tree/main

2.下载llama.cpp源码

https://github.com/ggerganov/llama.cpp

下载解压缩后,形成2个项目的文件

3.复制项目文件

3.1以ollama为主项目,用pycharm打开ollama文件夹,显示如下:

3.2将之前下载的llama.cpp项目文件夹复制到图上的llama.cpp位置。鼠标选中llm文件夹,按ctral+v即粘贴至llama.cpp文件夹。效果如下所示:

二、安装python依赖

打开终端,确保自己的路径如下所示。养成良好习惯,创建一个虚拟环境,然后再执行pip安装命令,确保不与电脑上的其他项目环境发生冲突。

pip install ./llm/llama.cpp/requirements.txt

三、合并模型文件

1.以Chinese-Mistral-7B-Instruct-v0.1为例,将4个safetensors文件合并为一个模型文件

2.下载Chinese-Mistral-7B-Instruct-v0.1模型

2.1下载模型

模型可以在https://huggingface.co/,或者huggingface镜像网站https://hf-mirror.com/,或者魔搭社区进行下载,我用魔搭社区的python脚本进行下载,下载速度直接拉满,执行前需要先运行pip install modelscope 。

from modelscope import snapshot_download

#模型存放路径
model_path = r'D:\huggingface'
#模型名字
name = 'itpossible/Chinese-Mistral-7B-Instruct-v0.1'
model_dir = snapshot_download(name, cache_dir=model_path, revision='master')

2.2合并文件

# python llm/llama.cpp/convert.py 刚才下载好的模型文件地址 --outtype f16 --outfile 保存的文件名.bin

python llm/llama.cpp/convert.py D:\huggingface\itpossible\Chinese-Mistral-7B-Instruct-v0___1 --outtype f16 --outfile D:\huggingface\itpossible\converted.bin

llama.cpp项目有变动,新下载的llama.cpp源码中已经没有convert.py这个脚本了,现在使用convert_hf_to_gguf.py脚本来进行模型的合并操作。下面是官方发布的变动说明。

2.3合并过程

合并后产生的文件converted.bin大小约14G

四、量化模型

1.安装cmake和编译器

接下来,需要将14G的bin文件量化为4G左右。这个步骤需要编译文件,使用cmake工具来编译。传送门——cmake安装教程。同时,还需要安装编译器,我用visual studio安装的C++编译器。传送门——vs使用教程

验证cmake是否安装成功,下图表示安装成功。

2.开始编译

在 llm/llama.cpp文件夹下开始编译

# 进入到llm/llama.cpp目录
cd llm/llama.cpp

#创建build文件夹
mkdir build

#进入build
cd build

# 构建
cmake ..
cmake --build . --config Release

编译过程需要一些,耐心等待一下。编译后生成的quantization.exe就是我们需要用到的工具。

3.量化模型

# bin/Release/quantize.exe 之前合并的14G大小文件.bin 量化后的文件.bin 量化大小
bin/Release/quantize.exe D:\huggingface\itpossible\converted.bin D:\huggingface\itpossible\quantized.bin q4_0

官方文档提供了多种量化格式,常用的就是q4_0。

量化过程如下:

压缩量化完成后,生成一个新的文件quantized.bin,大约4G。之前14G的源文件可以删除了。

五、制作ollama使用的模型

需要将quantized.bin文件制作为ollama可以使用的模型

1.创建Modelfile 文件

创建一个test.Modelfile 文件,添加的内容如下

FROM D:\huggingface\itpossible\quantized.bin
TEMPLATE "[INST] {{ .Prompt }} [/INST]"

2.创建模型

2.1指定生成的模型路径

设置模型文件保存位置,打开系统环境变量配置,添加一个环境变量OLLAMA_MODELS=D:\huggingface\ollama(自己指定任意一个文件夹路径),然后点确定。

2.2打开一个CMD终端

# ollama create 模型名字 -f Modelfile文件路径
ollama create panda -f C:\Users\Administrator\Desktop\ollama\test.Modelfile

2.3创建过程

2.4生成的模型

3.运行模型

ollama run panda

### 自定义模型Ollama框架中的集成 为了在Ollama框架中引入自定义模型进行问答,可以遵循特定的流程和配置方法。这不仅涉及模型本身的准备,还包括环境设置以及与现有系统的无缝对接。 #### 准备工作 确保开发环境中已安装必要的依赖库和支持工具。对于基于Python的应用程序来说,通常会涉及到`transformers`库和其他辅助包的安装[^1]: ```bash pip install transformers torch datasets ``` #### 加载并调整预训练模型 利用Hugging Face提供的`AutoPeftModel`类加载预训练的语言模型,并对其进行微调以适应具体的问答任务需求。通过查看 `AutoPeftModel` API文档可以获得更详细的指导信息: ```python from transformers import AutoTokenizer, AutoPeftModelForQuestionAnswering tokenizer = AutoTokenizer.from_pretrained("bert-base-cased") model = AutoPeftModelForQuestionAnswering.from_pretrained("path/to/custom/model") ``` #### 构建推理服务接口 为了让定制化的QA系统能够被其他组件或外部请求访问到,建议构建RESTful风格的服务端点。这里可以通过LangServe简化这一过程,它支持快速创建可用于生产的API部署方案[^3]: ```python import uvicorn from fastapi import FastAPI from pydantic import BaseModel from typing import List app = FastAPI() class Question(BaseModel): text: str @app.post("/predict/") async def predict(question: Question): inputs = tokenizer.encode_plus( question.text, return_tensors="pt" ) outputs = model(**inputs) start_scores = outputs.start_logits end_scores = outputs.end_logits answer_start = torch.argmax(start_scores) # 获取最有可能的起始位置 answer_end = torch.argmax(end_scores) + 1 # 获取最有可能结束的位置 (+1是因为索引是从0开始) answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs["input_ids"][0][answer_start:answer_end])) return {"answer": answer} if __name__ == "__main__": uvicorn.run(app, host='0.0.0.0', port=8000) ``` 此代码片段展示了如何使用FastAPI搭建一个简单的HTTP服务器来处理来自客户端的问题输入,并返回由自定义模型预测得出的答案。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值