OLlama模型转换和量化
使用Ollama 对语言模型进行转换和量化(PyTorch 和 Safetensors)
主要链接:
-
Ollama: https://github.com/ollama/ollama/blob/main/docs/import.md
-
Llama.cpp: https://github.com/ggerganov/llama.cpp/
Ollama 使用了 llama.cpp 这个库,所以更多的文档要查看 llama.cpp 的文档
1. 准备
Ollama 文档中的环境配置教程 其实 很简单,即创建好一个Python 环境用于 Lama.cpp
git clone [email protected]:ollama/ollama.git ollama
cd ollama
conda create -n ollama python=3.9
conda activate ollama
pip install -r llm/llama.cpp/requirements.txt
make -C llm/llama.cpp quantize
2. 开始转换
这里以 联通Llama3 8B 模型为例子,我下载它花了很大的功夫,导致我下载失败出错好几遍,最好还是手动下载并检查哈希值才成功下载下来。
联通Llama3 8B:https://huggingface.co/UnicomLLM/Unichat-llama3-Chinese-8B
他这里主要使用了 llama.cpp llama.cpp/convert.py
这个脚本,这个脚本的作用是将 Llama 的模型转化为 GGML 文件。
这里需要注意的是,这里相对于官方默认的参数添加了
--vocab-type bpe
,llama.cpp/issues/6775 可以找到相关问题的讨论
3. 量化
量化是为了减小模型,但是会减低性能,非必须
4. 创建Modelfile
创建一个 Modelfile 文件用来转换成 ollama 模型
FROM converted.bin
#TEMPLATE "[INST] {{ .Prompt }} [/INST]"
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
PARAMETER num_keep 24
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
这只是个比较基础的配置文件,实际上部分模型对参数比较敏感,必须补充全参数才可以工作的很好。
5. 生成模型
下面可以将自己制作的模型发布到 ollam 社区