safetensors -> ollama ,模型转化 + 模型量化详细步骤

这里是视频 模型转化 + 模型量化(从 safetensors 到 ollama)这里有详细的步骤哦 的笔记,记录了如何将 huggingface 上 NousResearch/Hermes-2-Pro-Llama-3-8B 模型转化为 gguf 格式、模型量化并在 ollama 中使用。请结合视频一起食用。

下载和安装 ollama

wget https://github.com/ollama/ollama/releases/download/v0.1.47/ollama-linux-amd64
install ollama-linux-amd64 /usr/local/bin/ollama
ollama -v

启动 ollama

OLLAMA_MODELS=/root/autodl-tmp ollama serve

这里修改了 OLLAMA_MODELS/root/autodl-tmp ,这样 ollama 会从这个目录下加载模型。

下载 llama3:8b 模型,查看 modelfile

ollama pull llama3:8b

可以通过命令查看这个模型的 modelfile

ollama show llama3:8b --modelfile

ollama 的每个模型都有一个 modelfile ,详细的信息可以在官方文档查看。

通过命令可以看到 llama3:8b 这个 modelfile 包含了四个部分:

  1. FROM 指向了下载的 gguf 模型文件
  2. TEMPLATE 制定了这个模型的对话模板
  3. PRAMETER 对模型的一些参数进行设置
  4. LICENSE 定义了这个模型的许可证信息

这次将要转换的模型是 NousResearch/Hermes-2-Pro-Llama-3-8B ,是基于 llama3:8b 微调而来,其 modelfile 的内容会非常的相似。

从 huggingface 下载 NousResearch/Hermes-2-Pro-Llama-3-8B

pip install huggingface_hub
source /etc/network_turbo # !!在 autodl 才需要,开启学术加速
huggingface-cli download \
    --repo-type model NousResearch/Hermes-2-Pro-Llama-3-8B \
    --local-dir ./autodl-tmp/models \
    --local-dir-use-symlinks False

这里我把模型下载到了 autodl-tmp/models 目录下。

下载和安装 llama.cpp

模型的格式转化和模型量化需要使用 llama.cpp 完成。

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j # 注意,这里我并没有增加 gpu 的支持,因为这次我只用 llama.cpp 进行模型转化和量化,不用它做推理

由于模型转化使用的是一个 python 脚本,还需要安装其依赖:

pip install -r requirements.txt

模型转换

首先将 safetensors 转换为 gguf 格式:

python convert-hf-to-gguf.py /root/autodl-tmp/models --outtype f16
  • 第一个参数指向下载模型的目录
  • 第二个参数 outtype 指定了模型的格式,这里是 f16,也就是 float16

转化好的模型会默认保存在 /root/autodl-tmp/models 目录下 ggml-model-f16.gguf

然后撰写一个 Modelfile 文件:

FROM /root/autodl-tmp/models/ggml-model-f16.gguf

这里的 FROM 指向了转化好的模型文件,可以看到这里我并没有提供其他的参数。

然后使用 ollama 命令创建一个新的模型:

ollama create arkohut/hermes-2-pro-llama-3-8b:fp16 -f Modelfile

命令执行完成后,可以通过命令 ollama ls 查看模型是否创建成功:

ollama ls

然后可以测试下:

ollama run arkohut/hermes-2-pro-llama-3-8b:fp16 \
    'tell me why sky is blue' \
    --verbose

可以看到模型正常运行了。

模型量化

下一步使用 llama.cpp 下的 llama-quantize 执行模型量化:

./llama-quantize \
    /root/autodl-tmp/models/ggml-model-f16.gguf \
    /root/autodl-tmp/models/hermes-2-pro-llama-3-8b-q4_0.gguf \
    q4_0

这里我将模型量化为 q4_0,也就是 int4 的版本。

然后再回到 Modelfile 这里,修改 FROM 的文件路径到新生成的 gguf 文件:

FROM /root/autodl-tmp/models/hermes-2-pro-llama-3-8b-q4_0.gguf

然后使用 ollama 命令创建一个新的模型:

ollama create arkohut/hermes-2-pro-llama-3-8b:q4_0 -f Modelfile

然后可以测试下:

ollama run arkohut/hermes-2-pro-llama-3-8b:q4_0 \
    'tell me why sky is blue' \
    --verbose

可以看到,相比 fp16 的版本,单个请求的执行速度快了一些。

### Ollama SafeTensors介绍 SafeTensors 是一种专为高效和安全存储机器学习模型的张量数据而设计的格式[^1]。这种格式不仅提高了存储效率,还增强了数据的安全性。通过采用数据压缩和加密技术,SafeTensors 能够有效减少模型文件大小并保护敏感信息。 Ollama 平台支持导入多种架构的 SafeTensors 模型,其中包括 LlamaForCausalLM、MistralForCausalLM 和 GemmaForCausalLM 等不同类型的因果语言模型。然而,在某些情况下,使用 SafeTensors 格式的模型可能会遇到性能上的挑战;例如 llama-chinese-8b 在 ollama 环境中的推理速度相对较慢[^2]。 ### 使用方法 为了在 Ollama 中利用 SafeTensors 文件,通常需要经历以下几个过程: #### 模型转换与量化 当希望将现有的模型转化SafeTensors 格式时,需遵循特定的操作流程来完成这一转变,并可选地应用量化以进一步优化资源消耗。具体步骤如下所示[^3]: ```bash # 假设已经安装了必要的工具包 python convert_model.py original_model_path safetensors_output_path ``` 接着可以通过命令行执行量化操作: ```bash quantize_model.sh safetensors_input_path quantized_safetensors_output_path q4_0 ``` 这里 `q4_0` 表示使用的量化级别。 #### 测试已部署模型 一旦完成了上述准备工作之后,则可以在终端里输入类似下面这样的指令来进行简单的功能验证: ```bash ollama run arkohut/hermes-2-pro-llama-3-8b:q4_0 "tell me why sky is blue" --verbose ``` 这条语句会调用指定版本 (`arkohut/hermes-2-pro-llama-3-8b`) 的预训练模型,并向其发送一段自然语言查询请求 ("why the sky is blue") 来获取解释性的回复。 需要注意的是,在实际操作过程中有可能遭遇一些错误提示,比如尝试加载 `.safetensors` 类型的数据集时遇到了 JSON 解析失败的情况(`json: cannot unmarshal array into Go struct field Params.eos_token_id of type int`)[^4]。这可能是由于配置参数不匹配或其他兼容性问题引起的,建议仔细检查相关设置或查阅官方文档寻求解决方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值