模型部署系列(四)ollama部署自定义模型
本文最后更新于 2025-04-13,文章内容可能已经过时。
Tutorial: How to convert HuggingFace model to GGUF format · ggml-org/llama.cpp · Discussion #2948
将 HuggingFace 模型转换为 GGUF 及使用 ollama 运行 —— 以 Qwen2-0.5B 为例_huggingface gguf-CSDN博客
Safetensors与GGUF格式
Safetensors
和`GGUF`(Generalized Gated Unit File)格式都是用于存储深度学习模型权重和参数的文件格式,但它们在设计和用途上有所不同。
Safetensors格式
Safetensors
是一种相对较新的文件格式,它旨在提供一种安全、高效的方式来存储和传输深度学习模型的权重。这种格式通常用于确保模型权重在存储和加载过程中的完整性和安全性,防止数据损坏或篡改。
特点:
- 安全性:设计时考虑了数据的完整性和安全性,可能包括数据校验和加密等特性。
- 兼容性:可能支持多种深度学习框架,如PyTorch、TensorFlow等。
- 效率:优化了存储和加载速度,以适应大规模模型的需求。
GGUF格式
GGUF
格式是一种更通用的文件格式,它支持存储各种类型的数据,包括但不限于深度学习模型的权重。这种格式的设计初衷是为了提供一种灵活的方式来处理和存储复杂的数据结构。
特点:
- 通用性:支持多种类型的数据,不仅限于深度学习模型的权重。
- 灵活性:可以自定义数据结构,适应不同的应用场景。
- 扩展性:支持数据的扩展和更新,适合动态变化的数据环境。
比较
- 安全性:`Safetensors`可能更侧重于数据的安全性和完整性,而`GGUF`则更侧重于数据的通用性和灵活性。
- 用途:`Safetensors`可能更适合专门用于深度学习模型的权重存储,而`GGUF`则可能用于更广泛的数据存储需求。
- 性能:两者都旨在提供高效的数据存储和加载机制,但具体的性能可能取决于实现细节和使用场景。
在选择使用哪种格式时,需要根据具体的应用场景和需求来决定。例如,如果主要关注模型权重的安全存储和传输,`Safetensors`可能是一个更好的选择。如果需要处理更复杂的数据结构或需要更高的灵活性,`GGUF`可能更合适。
量化是什么
模型量化(Model Quantization)是深度学习领域中一种模型优化技术,它通过减少模型中权重和激活值的位宽来降低模型的大小和提高推理速度,同时尽量保持模型的精度。
在深度学习模型中,权重和激活值通常以32位浮点数(FP32)格式存储。模型量化将这些浮点数转换为低位宽的表示,如8位整数(INT8)或更低位宽的格式。这样做可以带来以下好处:
1. 减少模型大小:量化后的模型由于位宽减少,模型文件的大小显著减小,便于存储和传输。
2. 提高推理速度:低位宽的操作通常比浮点运算更快,特别是在支持INT8指令的硬件上,如一些专用的AI加速器或现代CPU。
3. 降低功耗:在移动设备或嵌入式设备上,减少计算量可以降低能耗,延长电池寿命。
4. 部署灵活性:量化模型更适合部署在资源受限的环境中,如智能手机、物联网设备或其他嵌入式系统。
模型量化的过程通常包括以下几个步骤:
- 训练后量化(Post-Training Quantization, PTQ):在模型训练完成后,对模型进行量化。这种方法简单易行,但可能会有精度损失。
- 量化感知训练(Quantization-Aware Training, QAT):在模型训练过程中就考虑量化的影响,通过模拟量化来训练模型,以减少最终量化后的精度损失。
- 校准(Calibration):在量化前,通过使用一组代表性数据来确定量化参数,如量化范围和缩放因子。
- 转换(Conversion):将浮点模型转换为量化模型,这通常涉及到修改模型的权重和激活函数。
模型量化是实现模型部署在资源受限设备上的关键技术之一,它在保持模型性能的同时,显著降低了模型的资源消耗。
下载模型
modelscope download --model Qwen/Qwen2.5-Omni-7B --local_dir ./Omini
使用llama.cpp执行转换
拉取代码
git clone https://github.com/ggerganov/llama.cpp.git
pip install -r llama.cpp/requirements.txt
python llama.cpp/convert_hf_to_gguf.py -h
执行转换
# 如果不量化,保留模型的效果
python llama.cpp/convert_hf_to_gguf.py ./Omini --outtype f16 --verbose --outfile qwen_omini_7b_f16.gguf
# 如果需要量化(加速并有损效果),直接执行下面脚本就可以
python llama.cpp/convert_hf_to_gguf.py ./Omini --outtype q8_0 --verbose --outfile qwen_omini_7b_q8_0.gguf
- 感谢你赐予我前进的力量