ollama注册自定义模型(safetensors)
-
需要全程开启ollama
nohup ollama serve > ollama.log 2>&1 &
-
需要注意,尽管手动下载的GGUF格式模型权重是阿里官方发布的模型权重,但仍然会偶尔出现和ollama不兼容,导致胡言乱语的情况出现。如果希望使用ollama进行推理,优先建议使用ollama pull命令下载ollama官方的GGUF格式。
-
由于 Ollama 仅支持 GGUF 格式的模型,需将
.safetensors
转换为.gguf
格式 -
以DeepSeek-R1-1.5B为例子
下载模型(safetensors)
-
先从huggingface上下载基座模型,以DeepSeek-R1-1.5B为例子
创建文件夹统一存放
Huggingface
下载的模型cd /root/lanyun-tmp mkdir Hugging-Face
配置镜像源
vim ~/.bashrc
填入以下两个,以修改HuggingFace 的镜像源 、模型保存的默认
export HF_ENDPOINT=https://hf-mirror.com
export HF_HOME=/root/lanyun-tmp/Hugging-Face重新加载,查看环境变量是否生效
source ~/.bashrcecho $HF_ENDPOINT echo $HF_HOME
安装 HuggingFace 官方下载工具
pip install -U huggingface_hub
执行下载模型的命令,以下载 deepseekr1-1.5b为例
https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
复制全名
deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
执行下载命令
huggingface-cli download --resume-download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
安装llama.cpp
-
下载 llama.cpp
https://github.com/ggml-org/llama.cpp
cd /root/lanyun-tmpgit clone https://github.com/ggml-org/llama.cpp.git
安装依赖
cd /root/lanyun-tmp/llama.cpp pip install -r requirements.txt
查看转换safetensors 到gguf格式的py文件输入参数
python convert_hf_to_gguf.py -h
重点关注下面的这三个就行了
转换safetensors为gguf
-
开始转换,从huggingface上下载的DeepSeek-R1-1.5B 是BF16,转换为F32
先创建个文件夹存放转换后的模型
mkdir -p /root/lanyun-tmp/deepseek_r1_1.5b_hf_to_gguf
因为路径太长了,所以用临时的环境变量代替下
需要转换的模型地址:model_path
保存的路径:output_path
转换的dtype:f32
export model_path=/root/lanyun-tmp/Hugging-Face/hub/models--deepseek-ai--DeepSeek-R1-Distill-Qwen-1.5B/snapshots/ad9f0ae0864d7fbcd1cd905e3c6c5b069cc8b562export output_path=/root/lanyun-tmp/deepseek_r1_1.5b_hf_to_gguf/DeepSeek-R1-1.5B.ggufecho $model_path echo $output_path
运行下面代码的开始转换
python convert_hf_to_gguf.py $model_path --outfile $output_path --outtype f32
注册并使用模型
-
现在开始注册gguf格式
ollama list
cd /root/lanyun-tmp/deepseek_r1_1.5b_hf_to_gguf
vim Modelfile
填入下面内容```text
FROM ./DeepSeek-R1-1.5B.gguf
TEMPLATE """{{- if .System }}{{ .System }}{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1}}
{{- if eq .Role "user" }}<|User|>{{ .Content }}
{{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}{{- if not $last }}<|end▁of▁sentence|>{{- end }}
{{- end }}
{{- if and $last (ne .Role "assistant") }}<|Assistant|>{{- end }}
{{- end }}"""
PARAMETER stop "<|begin▁of▁sentence|>"
PARAMETER stop "<|end▁of▁sentence|>"
PARAMETER stop "<|User|>"
PARAMETER stop "<|Assistant|>"
将模型注册到ollama
ollama create my_ds_1.5b -f Modelfile
等待注册成功
-
使用
ollama run my_ds_1.5b
显存占用大概7G