Ollama 自定义导入模型

文章目录

    • 一、从 GGUF 导入
      • 1.1 CCUF 介绍
      • 1.2 导入方式
    • 二、由模型直接导入
      • 2.1 模型下载
      • 2.2 使用 llama.cpp 进行转换
        • (1)克隆 llama.cpp 库到本地,并安装相关库
        • (2)环境验证
        • (3)执行转换程序
      • 2.3 使用llama.cpp进行模型量化
        • (1)创建Modelfile 文件
        • (2)使 用 `ollama create` 命令创建模型并量化
        • (3) 结果校验
    • 三、从 Pytorch 或 Safetensors 导入
    • 四、上传模型到huggingface

使用 Modelfile 在Ollama 自定义导入模型,包含三种方式,分别是1.从 GGUF 导入 2.从 Pytorch 或 Safetensors 导入,3由模型直接导入.

一、从 GGUF 导入

1.1 CCUF 介绍

GGUF (GPT-Generated Unified Format) 是一种文件格式,用于保存经过微调的语言模型,旨在帮助用于用于在不同的平台和环境之间共享和导入模型。

支持多种量化格式,可以有效的减少模型文件的大小

1.2 导入方式

(1)下载.gguf 文件

以qwen0.5b 模型为示例,下载链接为:

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

(2)在gguf 文件所在目录新建 ‘Modelfile’ 文件,并写入

FROM ./Qwen2-0.5B.Q3_K_M.gguf

其中Modelfile 为文件名,无后缀,可以根据实际情况进行更改。

(3)在ollama 中创建模型

ollama create mymodel -f Modelfile  #mymodel为模型名,Modelfile 为第二个步骤中创建的文件 ,-f 参数用于指定从文件中进行创建

(4)检查模型导入是否成功

ollama list

以下为正常导入的结果

$ ollama list
NAME                ID              SIZE      MODIFIED     
mymodel:latest      3c4ac1ac3829    355 MB    46 hours ago  

二、由模型直接导入

2.1 模型下载

以从 HuggingFace 下载 Model为例,首先需要用户个人的 ACCESS_TOKEN,然后使用脚本进行下载。

(1)ACCESS_TOKEN获取

登陆huggingface官网,并进行注册。ACCESS_TOKEN获取链接为:

https://huggingface.co/settings/tokens

通过点击Create new token 进行token的创建。如图所示

在这里插入图片描述

(2)使用 huggingface_hubsnapshot_download 下载模型

以Qwen-0.5b 模型为例,首先下载安装包

pip install huggingface_hub

下载脚本如下

from huggingface_hub import snapshot_download

model_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>")

需要注意虚拟环境的python版本>3.8。

下载后模型的模型为

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         2025/2/12     18:17           1519 .gitattributes
-a----         2025/2/12     18:17            661 config.json
-a----         2025/2/12     18:17            138 generation_config.json
-a----         2025/2/12     18:17           7281 LICENSE
-a----         2025/2/12     18:17        1671839 merges.txt
-a----         2025/2/12     11:02     1239173352 model.safetensors
-a----         2025/2/12     18:17           2773 README.md
-a----         2025/2/12     18:17        7028015 tokenizer.json
-a----         2025/2/12     18:17           1289 tokenizer_config.json
-a----         2025/2/12     18:17        2776833 vocab.json

2.2 使用 llama.cpp 进行转换

llama.cpp 是 GGML 主要作者基于最早的 llama 的 c/c++ 版本开发的,目的就是希望用 CPU 来推理各种 LLM。

(1)克隆 llama.cpp 库到本地,并安装相关库
git clone https://github.com/ggerganov/llama.cpp.git

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

cd llama.cpp
pip install -r requirements.txt
(2)环境验证
python convert_hf_to_gguf.py -h

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

$ python convert_hf_to_gguf.py -h
usage: convert_hf_to_gguf.py [-h] [--vocab-only] [--outfile OUTFILE] [--outtype {f32,f16,bf16,q8_0,tq1_0,tq2_0,auto}] [--bigendian] [--use-temp-file] [--no-lazy] [--model-name MODEL_NAME] [--verbose] [--split-max-tensors SPLIT_MAX_TENSORS]
                             [--split-max-size SPLIT_MAX_SIZE] [--dry-run] [--no-tensor-first-split] [--metadata METADATA] [--print-supported-models]
                             [model]

Convert a huggingface model to a GGML compatible file

positional arguments:
  model                 directory containing model file

options:
  -h, --help            show this help message and exit
  --vocab-only          extract only the vocab
  --outfile OUTFILE     path to write to; default: based on input. {ftype} will be replaced by the outtype.
  --outtype {f32,f16,bf16,q8_0,tq1_0,tq2_0,auto}
                        output format - use f32 for float32, f16 for float16, bf16 for bfloat16, q8_0 for Q8_0, tq1_0 or tq2_0 for ternary, and auto for the highest-fidelity 16-bit float type depending on the first loaded tensor type
  --bigendian           model is executed on big endian machine
  --use-temp-file       use the tempfile library while processing (helpful when running out of memory, process killed)
  --no-lazy             use more RAM by computing all outputs before writing (use in case lazy evaluation is broken)
  --model-name MODEL_NAME
                        name of the model
  --verbose             increase output verbosity
  --split-max-tensors SPLIT_MAX_TENSORS
                        max tensors in each split
  --split-max-size SPLIT_MAX_SIZE
                        max size per split N(M|G)
  --dry-run             only print out a split plan and exit, without writing any new files
  --no-tensor-first-split
                        do not add tensors to the first split (disabled by default)
  --metadata METADATA   Specify the path for an authorship metadata override file
  --print-supported-models
                        Print the supported models
(3)执行转换程序

将刚刚从 HuggingFace 下载的模型转换为 GGUF 格式,具体使用以下脚本:

python convert_hf_to_gguf.py ../Qwen-0.5b --outfile TestQwen_instruct_0.5b.gguf --outtype f16

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

出现Model successfully exported to ..即说明转换成功,部分运行日志如下:

You are a helpful assistant<|im_end|>
' }}{% endif %}{{'<|im_start|>' + message['role'] + '
' + message['content'] + '<|im_end|>' + '
'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant
' }}{% endif %}
INFO:hf-to-gguf:Set model quantization version
INFO:gguf.gguf_writer:Writing the following files:
INFO:gguf.gguf_writer:TestQwen_instruct_0.5b.gguf: n_tensors = 291, total_size = 1.2G
Writing: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.24G/1.24G [00:03<00:00, 409Mbyte/s]
INFO:hf-to-gguf:Model successfully exported to TestQwen_instruct_0.5b.gguf

2.3 使用llama.cpp进行模型量化

模型量化的主要目的是减少模型的大小和计算成本,尽可能保持模型的准确性,其目标是使模型能够在资源有限的设备上运行,例如CPU或者移动设备。步骤如下

(1)创建Modelfile 文件

创建 Modelfile 文件并写入以下内容.

FROM ./TestQwen_instruct_0.5b.gguf
(2)使 用 ollama create 命令创建模型并量化

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

ollama create -q Q4_K_M mymodel3 -f ./Modelfile

运行日志如下

$ ollama create -q Q4_K_M Qwen_instruct_05b_Q4 -f ./Modelfile
gathering model components 
copying file sha256:6847f0eb96c0d6e33f885abfd7e763bb4d95d278b489833d598718dcb3690c27 100% 
parsing GGUF 
quantizing F16 model to Q4_K_M 
using existing layer sha256:e22e98740aac6978d9aa4c13d8fbc48231eca7182379b98d8ce9a2eca893c0c5 
using autodetected template chatml 
using existing layer sha256:f02dd72bb2423204352eabc5637b44d79d17f109fdb510a7c51455892aa2d216 
writing manifest 
success
(3) 结果校验
$ ollama list
NAME                           ID              SIZE      MODIFIED           
Qwen_instruct_05b_Q4:latest    579ca029b3b3    407 MB    About a minute ago

三、从 Pytorch 或 Safetensors 导入

Safetensors 是一种用于存储深度学习模型权重的文件格式,它旨在解决安全性、效率和易用性方面的问题。

如果正在导入的模型是以下架构之一,则可以通过 Modelfile 直接导入 Ollama。

  • LlamaForCausalLM
  • MistralForCausalLM
  • GemmaForCausalLM

以llama-3-8b-bnb-4bit 为例,下载代码如下所示

from huggingface_hub import snapshot_download

model_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>,请参照部分2
  use_auth_token="<YOUR_ACCESS_TOKEN>")

转换步骤为

(1)根目录下创建 Modelfile 文件,内容如下:

FROM ./llama-3-8b-bnb-4bit

(2)在 Ollama 中创建模型

ollama create mymodel2 -f Modelfile

四、上传模型到huggingface

代码如下

from huggingface_hub import HfApi
import os

api = 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)

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

上传后可以在网页上查看,效果如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/968878.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

J6 X8B/X3C切换HDR各帧图像

1、OV手册上的切换命令 寄存器为Ox5074 各帧切换&#xff1a; 2、地平线control tool实现切换命令 默认HDR模式出图&#xff1a; HCG出图&#xff1a; LCG出图 SPD出图 VS出图

GESP5级语法知识(十一):高精度算法(一)

高精度加法&#xff1a; #include<iostream> #include<string> #include<algorithm> using namespace std; const int N501;//高精度数的最长长度 //c[]a[]b[]:高精度加法方案一&#xff1a;对应位相加&#xff0c;同时处理进位 void h_add_1(int a[],int b…

【Git版本控制器】:第二弹——工作区,暂存区,版本库,

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ 相关笔记&#xff1a; https://blog.csdn.net/djd…

Transformer 模型介绍(一)——综述

Transformer 是一种完全基于注意力机制的神经网络模型&#xff0c;首次在2017年的论文《Attention Is All You Need》中提出。该模型最初用于机器翻译任务&#xff0c;并在特定任务中表现优于谷歌的其他神经网络机器翻译模型。Transformer 也是 Seq2Seq&#xff08;序列到序列&…

【Linux】多线程 -> 从线程概念到线程控制

线程概念 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行&#xff0c;本质是在进程地址空间内运行。在Linux系统中&#xff0c;在CPU眼…

.NET Web-静态文件访问目录浏览

一、Web根目录访问 创建wwwroot文件夹app.UseStaticFiles(); // 启⽤静态⽂件中间件url/路径 进行访问 二、Web根目录之外的文件 app.UseStaticFiles(new StaticFileOptions {FileProvider new PhysicalFileProvider(Path.Combine(builder.Environment.ContentRootPath,&qu…

cap1:TensorRT是什么?

文章目录 1、什么是 TensorRT&#xff1f;2、TensorRT 的优势3、TensorRT 加速 PyTorch 模型的基本流程3.1 训练模型和保存模型3.2 导出模型3.3 转换为 TensorRT 引擎3.4 加载与推理 4、基础环境配置4.1 安装nvidia驱动4.2 安装CUDA4.3 安装cuDNN 在软件工程领域&#xff0c;部…

JVM——堆的回收:引用计数发和可达性分析法、五种对象引用

目录 引用计数法和可达性分析法 引用计数法&#xff1a; 可达性分析算法&#xff1a; 五种对象引用 软引用&#xff1a; 弱引用&#xff1a; 引用计数法和可达性分析法 引用计数法&#xff1a; 引用计数法会为每个对象维护一个引用计数器&#xff0c;当对象被引用时加1&…

云计算实训室解决方案(2025年最新版)

一、中高职及本科院校在云计算专业建设中面临的挑战 随着大数据、信息安全、人工智能等新兴信息技术产业的快速发展&#xff0c;相关领域人才需求激增&#xff0c;许多本科及职业院校纷纷开设云计算及相关专业方向。 然而&#xff0c;大多数院校在专业建设过程中面临以下困难&…

C语言第18节:自定义类型——联合和枚举

1. 联合体 C语言中的联合体&#xff08;Union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同类型的数据。不同于结构体&#xff08;struct&#xff09;&#xff0c;结构体的成员各自占有独立的内存空间&#xff0c;而联合体的所有成员共享同一块内存区域…

深度学习框架探秘|PyTorch:AI 开发的灵动画笔

前一篇文章我们学习了深度学习框架——TensorFlow&#xff08;深度学习框架探秘&#xff5c;TensorFlow&#xff1a;AI 世界的万能钥匙&#xff09;。在人工智能领域&#xff0c;还有一个深度学习框架——PyTorch&#xff0c;以其独特的魅力吸引着众多开发者和研究者。它就像一…

springcloud集成gateway

本篇文章只介绍gateway模块的搭建步骤&#xff0c;并无gateway详细介绍 gateway详解请查看&#xff1a;SpringCloudGateway官方文档详解 前置处理 父模块中已指定版本 不知道如何选择版本看这篇&#xff1a; 手把手教你梳理springcloud与springboot与springcloudalibaba的版本…

计算机网络(1)基础篇

目录 1.TCP/IP 网络模型 2.键入网址--->网页显示 2.1 生成HTTP数据包 2.2 DNS服务器进行域名与IP转换 2.3 建立TCP连接 2.4 生成IP头部和MAC头部 2.5 网卡、交换机、路由器 3 Linux系统收发网络包 1.TCP/IP 网络模型 首先&#xff0c;为什么要有 TCP/IP 网络模型&a…

PyInstaller在Linux环境下的打包艺术

PyInstaller是一款强大的工具&#xff0c;能够将Python应用程序及其所有依赖项打包成独立的可执行文件&#xff0c;支持Windows、macOS和Linux等多个平台。在Linux环境下&#xff0c;PyInstaller打包的可执行文件具有独特的特点和优势。本文将详细介绍PyInstaller在Linux环境下…

寒假2.12

题解 web&#xff1a;XYCTF2024-牢牢记住&#xff0c;逝者为大 打开环境&#xff0c;是源代码 看到了熟悉的preg_match函数 代码解析&#xff1a; 输入的cmd长度不能超过13&#xff0c;可以使用GET[‘cmd’]躲避长度限制 使用正则表达式过滤的一系列关键字 遍历get数组&…

如何构建有效的人工智能代理

目录 什么是 AI 代理? 何时应使用 AI 代理? 人工智能代理的构建模块 构建 AI 代理的常用方法 1. 提示链接(分步说明) 2.路由(将任务发送到正确的地方) 3.并行处理(同时做多件事) 4. 协调者和工作者 AI(团队合作) 5. 评估器和优化器(修复错误) 如何让人工…

华为云+硅基流动使用Chatbox接入DeepSeek-R1满血版671B

华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 硅基流动 1.1 注册登录 1.2 实名认证 1.3 创建API密钥 1.4 客户端工具 OllamaChatboxCherry StudioAnythingLLM 资源包下载&#xff1a; AI聊天本地客户端 接入Chatbox客户端 点击设置 选择SiliconFloW API 粘贴1.3创…

mysql读写分离与proxysql的结合

上一篇文章介绍了mysql如何设置成主从复制模式&#xff0c;而主从复制的目的&#xff0c;是为了读写分离。 读写分离&#xff0c;拿spring boot项目来说&#xff0c;可以有2种方式&#xff1a; 1&#xff09;设置2个数据源&#xff0c;读和写分开使用 2&#xff09;使用中间件…

吊舱响应波段详解!

一、响应波段技术 可见光波段&#xff1a;通过高分辨率相机捕捉地面或空中目标的清晰图像&#xff0c;适用于白天或光照条件良好的环境下进行观测。 红外波段&#xff1a;利用红外辐射探测目标的温度分布&#xff0c;实现夜间或恶劣天气条件下的隐蔽目标发现。红外波段通常分…

AI驱动的直播带货电商APP开发:个性化推荐、智能剪辑与互动玩法

时下&#xff0c;个性化推荐、智能剪辑、互动玩法等AI技术的应用&#xff0c;使得直播电商平台能够精准触达用户、提升观看体验、提高转化率。对于希望在直播电商领域占据一席之地的企业来说&#xff0c;开发一款AI驱动的直播带货APP&#xff0c;已经成为提升竞争力的关键。 一…