swift自定义数据集微调Qwen-7B大模型,转换模型后使用ollama跑起来

ops/2024/10/11 7:29:21/

前文:swift微调Qwen-7B大模型-CSDN博客

我详细介绍了swift如何进行微调,但数据集均来自魔搭社区,如何想训练自定义数据集,实际上也很简单。

一、自定义数据集微调

export MKL_THREADING_LAYER=GNU \ 
CUDA_VISIBLE_DEVICES=0,1,2,3 \
NPROC_PER_NODE=4 \
swift sft --model_type qwen2-7b-instruct \--model_id_or_path /root/.cache/modelscope/hub/qwen/Qwen2-7B-Instruct \--sft_type lora \--dtype AUTO \--dataset AI-ModelScope/alpaca-gpt4-data-zh#200 \--self_cognition_sample 3000 \--model_name 阿盛 Master Coder \--model_author 盛世芳华 LLM_ROME \--num_train_epochs 1 \--lora_rank 8 \--lora_alpha 32 \--lora_dropout_p 0.05 \--lora_target_modules ALL \--gradient_checkpointing true \--batch_size 1 \--weight_decay 0.1 \--learning_rate 1e-4 \--gradient_accumulation_steps 16 \--output_dir output

微调时,只需指定--dataset为本地csv文件路径即可,csv文件的格式如下:

instruction是问题,input大概能理解为问题背景,output为答案,数据集准备好以后就可以直接进行训练。 

参考:ms-swift/docs/source/LLM/自定义与拓展.md at main · modelscope/ms-swift (github.com)

前文在训练时很慢,原因是就用了一张卡,多卡训练时一定要记着加上:

export MKL_THREADING_LAYER=GNU \ 
CUDA_VISIBLE_DEVICES=0,1,2,3 \
NPROC_PER_NODE=4

二、推理

CUDA_VISIBLE_DEVICES=0,1,2,3 swift infer --ckpt_dir output/qwen2-7b-instruct/v2-20240826-101129/checkpoint-48

常识用CLI推理,问问它:“贝贝是谁”,可以正确回答出我的答案,说明微调生效。

三、合并Lora

CUDA_VISIBLE_DEVICES=0,1,2,3 swift export --ckpt_dir output/qwen2-7b-instruct/v2-20240826-101129/checkpoint-48 --merge_lora true

执行后,生成./output/qwen2-7b-instruct/v2-20240826-101129/checkpoint-48-merged目录

包含了模型文件。

四、安装ollama

大模型的朋友都认识ollama,它的好处不言而喻,想要把合并后的模型跑在ollama中,就需要将模型转换为ollama需要的模型格式。

curl -fsSL https://ollama.com/install.sh | sh

安装成功后,启动ollama服务

ollama serve

五、下载ollama、llm源码

之所以需要下载ollama的源码,是因为需要源码编译来进行模型的转换。

git clone https://github.com/ollama/ollama.git
cd ollama
git submodule init
git submodule update llm/llama.cpp

5.1安装环境依赖

python -m venv llm/llama.cpp/.venv
source llm/llama.cpp/.venv/bin/activate
pip install -r llm/llama.cpp/requirements.txt

5.2构建量化工具

cd llm/llama.cpp/
make

可参考:llama.cpp/docs/build.md at 1e6f6554aa11fa10160a5fda689e736c3c34169f · ggerganov/llama.cpp (github.com)

编译成功后,会在目录下看到很多工具:

如果编译时报错,请先安装:

apt install cmake
apt install ccache

六、模型转化

用convert-hf-to-gguf.py 转换模型:

python ../ollama/llm/llama.cpp/convert_hf_to_gguf.py output/qwen2-7b-instruct/v2-20240826-101129/checkpoint-48-merged --outtype f16 --outfile converted.bin

其中output/qwen2-7b-instruct/v2-20240826-101129/checkpoint-48-merged就是lora合并后的文件夹路径,--outtype f16是不损失精度,--outfile converted.bin是转换后的文件名。

结束后,得到了converted.bin文件,大小14.2G

七、模型量化

一个7b的模型,12.4G还是有点大,使用模型量化工具进行量化,这里我使用4比特量化。

../ollama/llm/llama.cpp/llama-quantize converted.bin quantized.bin q4_0

最终得到quantized.bin,文件大小4.1G。

八、构建ollama

ollama包可以理解为Dockfile,创建Modelfile文件,文件内容:

FROM quantized.bin# set the temperature to 0.7 [higher is more creative, lower is more coherent]
PARAMETER temperature 0.7
PARAMETER top_p 0.8
PARAMETER repeat_penalty 1.05
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ .Response }}<|im_end|>"""
# set the system message
SYSTEM """
You are a helpful assistant.
"""

最关键的就是第一句:FROM quantized.bin(文件名一定要和你量化后的文件名对的上)

九、构建部署包

ollama create test2 -f Modelfile

然后ollama看一下当前有哪些模型:

ollama list

test1是之前我创建的未经量化的模型,test2是量化后的。

十、运行模型

ollama run test2

速度很快,一切正常。

参考:

Ollama 构建自定义模型包 - 简书 (jianshu.com)

ollama 使用自定义大模型_ollama 自定义模型-CSDN博客

什么是Base模型?什么是chat模型?什么是instruct?什么是4Bit?_instruct模型和base模型的区别-CSDN博客 将 HuggingFace 模型转换为 GGUF 及使用 ollama 运行 —— 以 Qwen2-0.5B 为例_qwen2 gguf-CSDN博客

Ollama运行qwen2:7b 输出乱码_ollama run qwen2:7b-CSDN博客

ollama运行qwen2:7b一直输出大写字母G ·问题 #485 ·QwenLM/Qwen2 (github.com)

Ollama创建微调模型_ollama微调模型-CSDN博客

Ollama 导入模型指南 (zhihu.com)

基于SWIFT微调专属于自己的大模型 - 知乎 (zhihu.com)


http://www.ppmy.cn/ops/104746.html

相关文章

华为海思招聘-芯片与器件设计工程师-数字芯片方向- 机试题——(共九套)(每套四十题)

华为海思招聘-芯片与器件设计工程师-数字芯片方向- 机试题-题目分享——共九套&#xff08;每套四十题&#xff09; 岗位——芯片与器件设计工程师 岗位意向——数字芯片 真题题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&am…

小程序封装接口请求

1. 安装 wechat-http 包 npm install init -y npm install wechat-http2. 创建 `http.js` 文件 // utils/http.js import WechatHttp from wechat-http; import { handleBusinessError } from ./errorHandling; // 引入你自定义的业务错误处理函数// 初始化 WechatHttp 实例 …

Redis缓存的一些案例

1、【案例】缓存被击穿 缓存的key有过期策略&#xff0c;如果恰好在这个时间点对这个Key有大量的并发请求&#xff0c;这些请求发现缓存过期一般都会从后端DB回源数据并回设到缓存&#xff0c;这个时候大并发的请求可能会瞬间把后端DB压挂。 业界常用优化方案有两种&#xff…

NoSql数据库Redis集群

-----------------第一部分---------------- 一.关系型数据库和Nosql数据库 关系型数据库&#xff0c;是建立在关系模型基础上的数据库&#xff0c;借助于数学思维来处理数据库 中的数据主流的 MySQL、Oracle、MS SQL Server 和 DB2 都属于这类传统数据库 NoSQL 数据库&#x…

Linux:深入理解计算机软硬件体系和架构

一、硬件体系 首先我们要知道&#xff0c;我们最常见的计算机&#xff08;笔记本&#xff09;以及我们不常见的计算机&#xff08;服务器&#xff09;其实本质上都是一堆硬件的结合&#xff1a;cpu、网卡、显卡、内存、磁盘、显示器、键盘…… 但他们并不是毫无章法地放在一起&…

5G Tracking Refernece Signal--简称为TRS追踪参考信号

Tracking Refernece Signal–简称为TRS &#xff0c;追踪参考信号&#xff08;注意不是PTRS额&#xff01;&#xff09;&#xff0c;对PTRS感兴趣的可以参考如下文章&#xff1a; PTRS时间密度与频率密度 TRS在3GPP CSI-RS规范文本中以NZP CSI-RS的一个子类予以定义&#xff…

【数据结构 | 每日一题】图的概念辨析

图的概念辨析 考点分析&#xff1a;我们学习数据结构图的第一小节就是&#xff1a;图的基本概念&#xff0c;我们会发现图的概念非常多且有些概念之间又很像&#xff0c;而对于初学者来说&#xff0c;相比树的概念是不好理解的&#xff0c;很容易搞混&#xff0c;因此做了这么…

消息称华为纯血鸿蒙部分应用采用虚拟机方案

华为预计在11月发布正式版纯血鸿蒙&#xff0c;为了能够适配更多的App&#xff0c;官方也是有了新的解决方案。报道中提到&#xff0c;纯血鸿蒙设备对有些还没上架的应用会使用虚拟机方案过渡。据悉&#xff0c;华为的虚拟机方案作为过渡措施&#xff0c;首先能确保用户在鸿蒙系…