欢迎光临
我们一直在努力

ollama如何运行safetensor

简介:Ollama与SafeTensors的兼容性挑战

Ollama是一个强大的本地化LLM运行环境,极大地简化了模型部署。然而,Ollama主要依赖于GGUF (GPT-GEnerated Unified Format) 格式的模型,该格式是llama.cpp生态系统的核心,专为高效的CPU和GPU混合推理而设计。

SafeTensors是Hugging Face生态系统中流行的模型权重序列化格式,它解决了传统PyTorch Pickle文件潜在的安全问题,并提供更快的加载速度。虽然许多大模型(如Llama 3, Mistral)都以SafeTensors格式发布,但Ollama不能直接加载这些文件。

要让Ollama运行SafeTensors模型,我们必须遵循一个关键的中间步骤:将SafeTensors模型转换为GGUF格式

本文将详细介绍这一转换过程,并提供实操性的代码示例。

先决条件

你需要准备以下工具和环境:

  1. Python环境:推荐使用3.10+。
  2. Ollama:已安装并运行。
  3. Hugging Face库:用于下载和处理模型权重。
  4. llama.cpp工具链:用于执行实际的GGUF转换和量化。

1
2
3
4
5
6
7
8
9
10
11
# 1. 安装必要的Python库
pip install torch transformers accelerate safetensors

# 2. 克隆并编译llama.cpp (用于获取转换脚本)
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make

# 3. 安装llama.cpp的Python依赖
pip install -r requirements.txt
cd ..

步骤一:准备SafeTensors模型权重

假设我们使用一个小型模型,例如TinyLlama/TinyLlama-1.1B-Chat-v1.0(通常以SafeTensors发布)。我们将使用Hugging Face的transformers库将其下载到本地目录。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import os
from transformers import AutoModelForCausalLM, AutoTokenizer

MODEL_ID = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
LOCAL_MODEL_PATH = "./tinyllama_safetensors_weights"

# 确保目录存在
os.makedirs(LOCAL_MODEL_PATH, exist_ok=True)

print(f"Downloading model {MODEL_ID}...")

tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
model = AutoModelForCausalLM.from_pretrained(MODEL_ID, torch_dtype=torch.float16)

# 保存为标准的PyTorch/HF格式(如果原始下载已经是SafeTensors,此步确保所有必要文件到位)
tokenizer.save_pretrained(LOCAL_MODEL_PATH)
model.save_pretrained(LOCAL_MODEL_PATH, safe_serialization=True)

print(f"Model weights saved to: {LOCAL_MODEL_PATH}")

步骤二:转换为GGUF格式(FP16/FP32)

接下来,我们使用llama.cpp/convert.py脚本将Hugging Face格式的权重转换为GGUF格式。这一步会生成一个全精度(FP16或FP32)的GGUF文件。

确保你在llama.cpp目录的父目录执行以下操作:


1
2
3
4
5
6
7
8
9
10
11
# 假设LOCAL_MODEL_PATH = ./tinyllama_safetensors_weights
PYTHON_MODEL_PATH=./tinyllama_safetensors_weights
GGUF_OUTPUT_FP16=./tinyllama-fp16.gguf

# 运行转换脚本
python llama.cpp/convert.py \
    $PYTHON_MODEL_PATH \
    --outfile $GGUF_OUTPUT_FP16 \
    --outtype f16

echo "Conversion to FP16 GGUF complete: $GGUF_OUTPUT_FP16"

步骤三:量化GGUF模型

虽然FP16 GGUF可以直接运行,但在边缘设备上,量化(Quantization)是提升速度和减少内存占用的关键。最常用和推荐的量化等级是Q4_K_M

我们将使用llama.cpp/quantize二进制文件进行量化。


1
2
3
4
5
6
7
8
INPUT_GGUF=./tinyllama-fp16.gguf
QUANTIZED_GGUF=./tinyllama-q4km.gguf
QUANTIZATION_METHOD=Q4_K_M

# 执行量化操作
./llama.cpp/quantize $INPUT_GGUF $QUANTIZED_GGUF $QUANTIZATION_METHOD

echo "Quantization complete. Final model: $QUANTIZED_GGUF"

步骤四:在Ollama中创建和运行模型

Ollama通过Modelfile来管理自定义模型。我们需要创建一个简单的Modelfile,指向我们刚刚生成的GGUF文件。

创建一个名为Modelfile的文件:


1
2
3
4
5
6
7
cat > Modelfile <<EOF
# Modelfile for TinyLlama Q4_K_M
FROM ./tinyllama-q4km.gguf
PARAMETER stop "<|im_end|>"
PARAMETER temperature 0.8
SYSTEM "You are a friendly and concise AI assistant."
EOF

现在,使用ollama create命令将模型导入到Ollama中(命名为tinyllama-custom):


1
2
3
4
5
# 导入模型
ollama create tinyllama-custom -f ./Modelfile

# 运行模型
ollama run tinyllama-custom

你现在可以和这个基于SafeTensors转换而来的GGUF模型进行交互了。通过这种方式,所有Hugging Face上发布的SafeTensors模型都可以通过GGUF格式,在Ollama平台上获得极佳的推理性能。

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » ollama如何运行safetensor
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址