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

news2024/11/15 11:03:17

前文: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.coloradmin.cn/o/2093363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32:TIM定时中断配置的最全库函数讲解笔记

声明&#xff1a;本博客为哔哩哔哩up主江协科技 “STM32入门教程”的听课笔记&#xff0c;仅供学习、参考使用&#xff0c;不得用作其他用途&#xff0c;违者必究。如有版权问题&#xff0c;请联系作者修改。 目录 一、综述 二、TIM库 初始化 2.1、TIM_DeInit 恢复缺省值 …

经典文献阅读之--ParkingE2E(基于摄像头的端到端停车网络:从图像到规划)

0. 简介 自动泊车是智能驾驶领域的一项关键任务。传统泊车算法通常采用基于规则的方案来实现。然而&#xff0c;由于算法设计的复杂性&#xff0c;这些方法在复杂的泊车场景中效果欠佳。相比之下&#xff0c;基于神经网络的方法往往比基于规则的方法更加直观且功能多样。通过收…

中国的铁路订票系统在世界上属于什么水平?

每到节假日&#xff0c;中国的铁路订票系统总会成为人们热议的焦点。无论是“抢票大战”还是“秒杀特价票”&#xff0c;这一系统似乎总是牵动着亿万乘客的心。那么&#xff0c;中国的铁路订票系统到底有多强大&#xff1f;在全球范围内&#xff0c;它处于什么水平&#xff1f;…

Java_ElasticSearch(ES)——分布式搜索引擎

介绍&#xff1a; Elasticsearch是一个开源的分布式搜索和分析引擎&#xff0c;最初由Elastic公司开发。它构建在Apache Lucene搜索引擎库之上&#xff0c;提供了一个强大的全文搜索和分析引擎&#xff0c; 它结合kibana、Logstash、Beats&#xff0c;是一整套技术栈&#xff0…

C语言——简单的do while循环找100~999之间的水仙花数(所有的三位水仙花数)

这道题的关键是如何把这个三位数的个位、十位、百位表示出来 这里用到了 / &#xff08;整除&#xff09;和 % &#xff08;取余&#xff09;这两个运算符 #include<stdio.h> int main() { int num 100; do { int a; int b; int …

手把手教你:用sentence-transformers库进行文本嵌入

在 Python 中使用 sentence-transformers 库进行实操&#xff0c;你可以按照以下步骤进行&#xff1a; 1. 安装 sentence-transformers 库 首先&#xff0c;确保你已经安装了 sentence-transformers。如果没有&#xff0c;可以通过 pip 安装&#xff1a; pip install sentenc…

图像去噪评论:从经典到最先进的方法

系列文章目录 文章目录 系列文章目录前言摘要1 引言1.1.噪声抑制 2. 空间域过滤2.1.局部滤波器2.2.非局部滤波器 3.变换域滤波3.1.阈值3.1.1. 通用阈值3.1.2. VISUShrink3.1.3.SURE收缩3.1.4.BayesShrink3.1.5.概率收缩3.1.6.SURELET3.1.7.Neigh Shrink Sure&#xff08;NSS&am…

十一头像红旗怎么弄的?3个方法轻松教会你!

国庆佳节渐行渐至&#xff0c;朋友圈里早已掀起了一股更换国庆主题头像的热潮&#xff01;那些五彩斑斓、光彩夺目的渐变国旗头像&#xff0c;既美观又富有节日气氛。如果你也想加入这个行列&#xff0c;那么如何动手制作呢&#xff1f;别担心&#xff0c;接下来我将为你介绍三…

求解组合优化问题的具有递归特征的无监督图神经网络

文章目录 ABSTRACT1 Introduction2 Related Work3 QRF-GNN方法4 数值实验4.1 MAX-CUTABSTRACT 介绍了一种名为QRF-GNN的新型算法,有效解决具有二次无约束二进制优化(QUBO)表述的组合问题。依赖无监督学习,从最小化的QUBO放松导出的损失函数。该架构的关键组成部分是中间GNN…

服务端之Node的QQ邮件发送功能、授权码申请流程、邮箱、createTransport、sendMail

MENU 前言邮箱授权码的申请流程Node连续发送邮件失败的原因 前言 1、代码段的主要功能是通过nodemailer模块从一个QQ邮箱发送电子邮件。 2、代码段实现从QQ邮箱1283077926qq.com发送一封邮件到2506562048qq.com&#xff0c;邮件主题为“微信公众号推广”&#xff0c;正文为“亲…

Docker私有镜像仓库Harbor安装并推拉镜像

1.环境信息 前置要求&#xff1a; linux&#xff1a;Oracle Linux Server release 7.9 docker&#xff1a;26.1.4 安装&#xff1a; docker-compose: Docker Compose version v2.29.2 harbor&#xff1a;v2.11.1 2.下载安装说明 docker-compose下载&#xff1a; https://githu…

Vue(八) localStorage、组件的自定义事件、Todo案例修改

文章目录 一、浏览器本地存储1. 相关API2. Todo案例中的应用 二、组件的自定义事件1. 回顾props传值方式2. 绑定自定义事件&#xff08;1&#xff09;方式一&#xff1a;v-on或&#xff08;2&#xff09;方式二&#xff1a; ref 3. 解绑自定义事件4. 注意点总结 三、Todo案例采…

【机器学习】在 scikit-learn 中,有哪些特征编码方法?分布详细举例列出

一、在scikit-learn中&#xff0c;有多种特征编码方法可以用来处理分类数据&#xff0c;以下是一些常见的编码方法及其示例&#xff1a; One-Hot Encoding (独热编码): 使用 OneHotEncoder 类将分类特征转换为二进制向量。例如&#xff0c;对于颜色特征 [red, blue, green]&…

day01项目概述、环境搭建

1 软件开发整体介绍 软件开发流程 角色分工 软件环境 2 苍穹外卖项目介绍 项目介绍 产品原型 技术选型 3 开发环境搭建 前端环境搭建 注意&#xff1a; - Nginx目录必须放在没有中文的目录中才能正常运行 - 当前Nginx的配置文件中已经配置了反向代理&#xff0c;通过此配置…

面试SQL题的水到底有多深?一文带你揭晓

不谋万世者&#xff0c;不足谋一时&#xff1b;不谋全局者&#xff0c;不足谋一域 目录 0 面试现状 1 面试SQL题目的难度及特点 1.1 题目场景化 1.2 题目算法化 1.3 方法多元化 2 破局之道 3 总结 数字化建设通关指南 主要内容&#xff1a; &#xff08;1&#xff09;SQL进阶实…

ChatTTS 长音频合成和本地部署2种方式,让你的“儿童绘本”发声的实战教程(文末有福利)

接上文&#xff08;GLM-4-Flash 大模型 API 免费了&#xff0c;手把手构建“儿童绘本”应用实战&#xff08;附源码&#xff09;&#xff09;&#xff0c;老牛同学通过 GLM-4-Flash 文生文和 CogView-3 文生图大模型&#xff0c;和大家一起编写了一个图文并茂的儿童绘本应用&am…

Claude3.5 Sonnet模型评测(附使用方法)

随着模型的发展&#xff0c;之前大家常用的鉴别模型能力的测试已经有很多过时现象&#xff0c;比如经典的喝水测试&#xff0c;目前国内的先进模型也已经可以答对&#xff0c;我们需要更复杂的问题来测试模型能力&#xff0c;最近有研究人员发现&#xff0c;大模型不会比较浮点…

操作符详细解析

操作符详解 文章目录 操作符详解1.操作符分类2.算数操作符3.移位操作符3.1整型二进制的表示3.1.1整数二进制的种类3.1.2二进制原码反码补码的表示 3.2移位运算符使用规则3.2.1正数的左移运算符 3.2.2负数的左移运算符3.2.3右移操作符3.2.3.1右移运算符的两种形式&#xff1a;3.…

使用WSL在Windows上安装Linux

文章目录 环境步骤参考 注&#xff1a;WSL是“Windows Subsystem for Linux”的缩写&#xff0c;即“适用于 Linux 的 Windows 子系统”&#xff0c;说白了就是在Windows系统里直接使用Linux&#xff0c;而不需要VMWare等虚拟软件。 环境 Windows 11 家庭中文版 步骤 首先&…

DORIS - DORIS简介

前言 本博文基于DORIS的2.1.5版本。apache-doris-2.1.5-bin-x64.tar.gz 是什么&#xff1f; DORIS官网 Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以高效、简单、统一的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的…