|
前言最近,阿里发布了Qwen2的系列模型,包括0.5B,1.5B,7B,57B-A14B和72B,中英文效果都很好。因为模型太新,目前还没有GGUF版本可以下载,于是转下GGUF,并分享转换教程。什么是GGUF?GGUF格式的全名为(GPT-GeneratedUnifiedFormat),提到GGUF就不得不提到它的前身GGML(GPT-GeneratedModelLanguage)。GGML是专门为了机器学习设计的张量库,最早可以追溯到2022/10。其目的是为了有一个单文件共享的格式,并且易于在不同架构的GPU和CPU上进行推理。但在后续的开发中,遇到了灵活性不足、相容性及难以维护的问题。为什么要转换GGUF格式在传统的DeepLearningModel开发中大多使用PyTorch来进行开发,但因为在部署时会面临相依Lirbrary太多、版本管理的问题于才有了GGML、GGMF、GGJT等格式,而在开源社群不停的迭代后GGUF就诞生了。GGUF实际上是基于GGJT的格式进行优化的,并解决了GGML当初面临的问题,包括:可扩展性:轻松为GGML架构下的工具添加新功能,或者向GGUF模型添加新Feature,不会破坏与现有模型的兼容性。对mmap(内存映射)的兼容性:该模型可以使用mmap进行加载(原理解析可见参考),实现快速载入和存储。(从GGJT开始导入,可参考GitHub)易于使用:模型可以使用少量代码轻松加载和存储,无需依赖的Library,同时对于不同编程语言支持程度也高。模型信息完整:加载模型所需的所有信息都包含在模型文件中,不需要额外编写设置文件。有利于模型量化:GGUF支持模型量化(4位、8位、F16),在GPU变得越来越昂贵的情况下,节省vRAM成本也非常重要。动手来转档、量化和上传整个转档的步骤如下:从HuggingFace下载Model使用llama.cpp来进行转档使用llama.cpp来进行量化模型将转换和量化后的GGUF模型上传到HuggingfaceRepo可以参考llama.cpp作者写的教程:Tutorial:HowtoconvertHuggingFacemodeltoGGUFformat从HuggingFace下载Model最直觉是用gitclone来下载模型,但是因为LLM每个一部分都按GB来计算,避免出现OOMError的情况,简单用Python写一个download.py比较简单。pipinstallhuggingface_hub1新增download.py,写入:fromhuggingface_hubimportsnapshot_downloadmodel_id="Qwen/Qwen2-0.5B-Instruct"snapshot_download(repo_id=model_id,local_dir="qwen2_0.5b_instruct",local_dir_use_symlinks=False,revision="main")1234运行下载:接下来,把刚刚从HuggingFace下载的Model转换成GGUF格式。开始转换hf模型为gguf需要用llama.cpp仓库的convert_hf_to_gguf.py脚本来转换。gitclonehttps://github.com/ggerganov/llama.cpp.gitpipinstall-rllama.cpp/requirements.txtpythonllama.cpp/convert_hf_to_gguf.py-h123执行转换:#如果不量化,保留模型的效果pythonllama.cpp/convert_hf_to_gguf.py./qwen2_0.5b_instruct--outtypef16--verbose--outfileqwen2_0.5b_instruct_f16.gguf#如果需要量化(加速并有损效果),直接执行下面脚本就可以pythonllama.cpp/convert_hf_to_gguf.py./qwen2_0.5b_instruct--outtypeq8_0--verbose--outfileqwen2_0.5b_instruct_q8_0.gguf1234这里--outtype是输出类型,代表含义:q2_k:特定张量(Tensor)采用较高的精度设置,而其他的则保持基础级别。q3_k_l、q3_k_m、q3_k_s:这些变体在不同张量上使用不同级别的精度,从而达到性能和效率的平衡。q4_0:这是最初的量化方案,使用4位精度。q4_1和q4_k_m、q4_k_s:这些提供了不同程度的准确性和推理速度,适合需要平衡资源使用的场景。q5_0、q5_1、q5_k_m、q5_k_s:这些版本在保证更高准确度的同时,会使用更多的资源并且推理速度较慢。q6_k和q8_0:这些提供了最高的精度,但是因为高资源消耗和慢速度,可能不适合所有用户。fp16和f32:不量化,保留原始精度。使用ollama运行gguf转换好的GGUF模型可以使用以下的工具来运行:ollama(推荐):简化AI模型的本地部署与使用llama.cpp:GGUF的源项目。提供CLI和Server选项。text-generation-webui:最广泛使用的网络界面,具有许多功能和强大的扩展。支持GPU加速。GPT4All:一个免费且开源的本地运行图形用户界面,支持Windows、Linux和macOS,并支持GPU加速。LMStudio:一个易于使用且功能强大的本地图形用户界面,适用于Windows和macOS(Silicon),支持GPU加速。llama-cpp-python:支持GPU加速、LangChain和OpenAI兼容API服务器的Python库。candle:一个使用Rust编写的机器学习框架,具有GPU支持和易于使用的特点,适合追求性能的开发者。可以使用ollamaModelfile,基于gguf模型文件快速部署并运行模型。安装ollamaurl-fsSLhttps://ollama.com/install.sh|sh1启动ollama服务nohupollamaserve&1创建ModelFile复制模型路径,创建名为“ModelFile”的meta文件,内容如下:FROM/mnt/workspace/qwen2-0.5b-instruct-q8_0.gguf#setthetemperatureto0.7[higherismorecreative,lowerismorecoherent]PARAMETERtemperature0.7PARAMETERtop_p0.8PARAMETERrepeat_penalty1.05TEMPLATE"""{{if.System}}system{{.System}}{{end}}{{if.Prompt}}user{{.Prompt}}{{end}}assistant{{.Response}}"""#setthesystemmessageSYSTEM"""Youareahelpfulassistant."""12345678910111213141516创建自定义模型使用ollamacreate命令创建自定义模型ollamacreateqwen2_0.5b_instruct--file./ModelFile1运行模型:ollamarunqwen2_0.5b_instruct测试自定义模型,使用终端与您的自定义模型聊天,以确保其行为符合预期。验证它是否根据自定义的系统提示和模板做出响应。Reference什么是GGUF和GGML?GGUF与GGML:为什么GGUF是更好的文件格式
|
|