轻松玩转开源大语言模型bloom(四)

news2024/11/26 18:20:37

前言

前几篇都围绕着语言模型的decoding strategy来讲述,今天将进入进阶篇,在解码策略效果有限和提示词修改也无法满意的情况下如何提升模型的效果呢?这时我们需要对大语言模型进行fine-tune,即微调。一般我们用的大语言模型都是别人在通用的大数据集上训练过后的,或者已经在特殊领域微调过的,所以可能不适合我们当前所需要模型生成的内容。
本篇将以bloom-1b1模型为例,使用xturing库进行微调,由于微调是特别吃显存的,手里没有大显存卡的可以像我一样使用google的colab服务,保证16GiB及以上的显存。
可以通过命令行里输nvidia-smi查看,如下图所示有40960的MiB,也就是40个Gib。
在这里插入图片描述

数据集准备

在这里插入图片描述
首先要准备一个json文件,里面是一个大list,包含了很多dict,字典的格式是{“instruction”:xxx,“input”:“”,“output”:xxx},instruction表示问题或者指导语,input表示输入,有的时候数学问题需要告诉变量数值,output表示输出,也即文字生成内容。

本例中用的是自己挖掘的中文问题回答数据集,在前一篇文章里有写,感兴趣的自己尝试,这里就不放出来了,而且因为封锁的很严,本例中只挖取了其中500多条问答内容,作为微调的示例。

准备好了json之后,先pip安装datasets库,然后通过如下的代码生成格式数据集:

import json

from datasets import Dataset, DatasetDict

def preprocess_alpaca_json_data(alpaca_dataset_path: str):
    alpaca_data = json.load(open(alpaca_dataset_path))
    instructions = []
    inputs = []
    outputs = []

    for data in alpaca_data:
        instructions.append(data["instruction"])
        inputs.append(data["input"])
        outputs.append(data["output"])

    data_dict = {
        "train": {"instruction": instructions, "text": inputs, "target": outputs}
    }

    dataset = DatasetDict()
    # using your `Dict` object
    for k, v in data_dict.items():
        dataset[k] = Dataset.from_dict(v)

    dataset.save_to_disk(str("./alpaca_data"))
preprocess_alpaca_json_data('你的数据集.json')

调用函数生成完毕后会生成一个文件夹,内容如图所示:
在这里插入图片描述

代码

首先如果是在colab里运行,请先保证正确的运行时:
在这里插入图片描述
选择gpu-标准或者高级。每小时都会消耗计算单元,我这里是因为上个月开了colab的会员,所以有100个计算单元,普通没会员的用户大概只能用标准白嫖。

然后安装必要的库,这里推荐不用colab的也在linux下运行,除非你对Windows下VS的编译足够自信

!pip install accelerate
!pip install xturing --upgrade

接下来就是顺风顺水的运行代码:

from xturing.datasets.instruction_dataset import InstructionDataset
from xturing.models.base import BaseModel

instruction_dataset = InstructionDataset("/content/alpaca_data")
model = BaseModel.create("bloom_lora")

刚生成的文件夹路径填进去,然后.create方法里填bloom_lora,默认是bloom_1b1模型,用lora加速训练。

# Finetuned the model
model.finetune(dataset=instruction_dataset)

开始训练,默认是三轮,本例数据集大概用了六分钟就微调好了。
在这里插入图片描述
训练完了之后尝试生成,先改下generation_config,也就是解码策略:

generation_config = model.generation_config()
generation_config.top_k = 50
generation_config.do_sample = True
generation_config.top_p = 0.8
generation_config.max_new_tokens=512

拿今天的热搜问题试试:

# Once the model has been finetuned, you can start doing inferences
output = model.generate(texts=["第一视角进入风暴中心,是种什么体验?"])
print("Generated output by the model: {}".format(output))

结果如下:

登陆后第一时间发现风有多狂,能感觉空气怎么突然就凉爽了。
在云层中翻滚,能感受到海面下风的肆虐,云层下也有很多小冰块在打滚。风会从上向下刮,就像是在刮雪一样,刮的特别猛烈,在云层下翻滚。 
风暴中心,是风暴的终点,是整个风暴的中心,风向是逆着往复,风向逆着风向,风暴中心就会变成云层,然后刮的特别快,在云层下翻滚,最后消失。 
风暴中心,是风暴的最顶端,风向是顺着往复,风向顺着风向,风暴中心就会变成云层,然后刮的特别快,在云层下翻滚,最后消失。

同样的问题使用一样的配置代码对比默认模型生成效果
在这里插入图片描述

一视角进入风暴中心,是种什么体验? 
影片中,马特所在的直升机,在进入风暴中心之前,需要先从高空中观察四周环境。
在空中,除了气象台、直升机、救援队伍,还有各种各样的设备,包括直升机吊舱、直升机降落伞、直升机加油机、直升机导航仪等。
这些设备中,最为核心的部分就是直升机吊舱,
因为直升机吊舱可以搭载直升机和飞机,直升机吊舱的重量相当于一架直升机的载荷,因此可以搭载更多直升机。

可以发现默认模型的中文全在谈直升飞机偏离主题了。。。效果提升明显。

再换个句子生成看看微调后的效果:
在这里插入图片描述

但已经对它的价值产生了足够的怀疑。
首先,我们无法证明谷歌Pixel手机和Android平板电脑的性能有多强。
第二,由于谷歌没有在手机上开发过操作系统,因此谷歌无法从Android平板电脑获得与谷歌Pixel类似的安全性能,即使谷歌Pixel手机使用安卓系统,但Android平板电脑的设备也可能使用非谷歌Android设备,例如,Windows系统。在Android平板电脑上,Android设备运行的是非谷歌Android设备。
第三,谷歌Android平板电脑的电池是无法在谷歌Android平板电脑上长期使用的。

默认模型:

虽然我还没有实际体验到产品,所以不敢给一个准确的答案。
但是从实际体验来说,这款产品确实是十分不错的,我个人觉得颜值和外观设计都是十分不错的,而且售价也确实是不错。
不过我还是建议大家在购买前先了解下这款产品的信息。</s>

从上面可以看出微调确实有效果,那么我该如何保存生成的模型呢?其实在目录下已经有了saved_model的文件夹,只要把它拖到谷歌硬盘里打包下载下来就行了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551598.html

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

相关文章

chatgpt赋能Python-python5个数从小到大排序

Python中的5个数从小到大排序 在Python中&#xff0c;排序是一个常见的操作。我们经常需要对一组数据进行排序&#xff0c;以便更方便地对数据进行分析和处理。在本文中&#xff0c;我们将探讨Python中如何排序5个数&#xff0c;具体来说&#xff0c;是从小到大排序。 介绍 …

chatgpt赋能Python-python5__3

Python5%-3: 介绍和结论 什么是Python5%-3 Python5%-3是在Python 3语言版本中增加的一个新特性&#xff0c;它是Python语言中对移动开发的支持扩展&#xff0c;这个特性被称为Python5%-3。 具体来说&#xff0c;Python5%-3允许开发者能够更方便地创建移动应用程序&#xff0…

大脑MRI去噪技术研究进展

导读 磁共振(MR)图像诊断的准确性取决于图像的质量&#xff0c;而图像质量下降的主要原因是由于噪声和伪影。噪声是由成像环境错误或传输系统失真所引起的。因此&#xff0c;去噪方法对提高图像质量起着重要作用。然而&#xff0c;在去噪和保留结构细节之间需要权衡。现有的大…

【Linux】Linux 下的权限(初)

d1 目录下有目录dir&#xff0c;和一个普通文件 test.c 重点看到文件的各种权限&#xff0c;拆分清晰地理解&#xff08;重&#xff09; 观察到权限和文件类型一坨除了第一列的文件类型其他的都是文件相关的权限&#xff0c;而且是三个三个分开 为什么分开呢&#xff1f;是因为…

【leetcode】456. 132 模式 单调栈出栈特性

看题意是要在数组中找到一个大于左右元素波峰。 一开始看数据量是 10e5&#xff0c;还以为是 nlogn算法。没想到居然是个 n 的单调栈。 这道题利用了递减单调栈出栈的特性, 出栈元素 k、栈中某一个特定元素 j 满足 nums[j] > nums[k]&#xff0c;如果从数组后面向前遍历的…

什么是uni-app?为什么要学习uni-app?

文章目录 前言 一、什么是uni-app框架&#xff1f; 二、为什么要学&#xff1f; 三、uni-app开发的适用场景是什么&#xff1f; 总结 前言 随着前端技术的不断发展进步&#xff0c;跨端开发成为了程序猿不得不面临的一个难题&#xff0c;uni-app的出现解决了程序猿不断重复…

《Java 核心技术面试》课程笔记(十)

如何保证集合是线程安全的? 典型回答 Java 提供了不同层⾯的线程安全支持。 在传统集合框架内部&#xff0c;除了 Hashtable 等同步容器&#xff0c;还提供了所谓的同步包装器&#xff08;Synchronized Wrapper&#xff09;&#xff0c;我们可以调用 Collections 工具类提供…

16款ChatGPT工具,太炸裂了,收藏!

1.ChatGPT for google 一个浏览器插件&#xff0c;可搭配现有的搜索引擎来使用。 最大化搜索效率&#xff0c;对搜索体验的提升相当离谱&#xff1a; 安装完插件后&#xff0c;在搜索引擎搜索任何问题&#xff0c;都能获取两份答案。 左边是谷歌抓取的全网资源&#xff0c;右…

完美解决:“因为计算机丢失VCRUNTIME140_1.dll”

VCRUNTIME140_1.dll是Microsoft Visual C Redistributable的一个组件&#xff0c;它包含了许多用于C编程的函数和类。如果你的系统缺少了这个文件&#xff0c;那么你可能会遇到“找不到VCRUNTIME140_1.dll无法继续执行代码”的错误提示。 方法1&#xff1a;直接复制VCRUNTIME…

python多进程与多线程

1 Python多线程 1.1 GIL 其他语言&#xff0c;CPU是多核时是支持多个线程同时执行。但在Python中&#xff0c;无论是单核还是多核&#xff0c;同时只能由一个线程在执行。其根源是GIL的存在。GIL的全称是Global Interpreter Lock(全局解释器锁)&#xff0c;来源是Python设计之…

[MySQL]事务的浅谈

欲买桂花同载酒 终不似 少年游 目录 1.MySQL为什么需要事务 2.MySQL对事务的支持 3.关于事务的操作 控制方式(对于单条SQL) 控制方式二(START TRANSACTION 或 BEGIN) 4.关于ACID 5.关于事务的隔离级别 5.1事务可能存在的问题 5.2事务隔离级别 5.3难点(RR 级别 …

Autosar RTE S/R接口implicit与Explicit的实现与区别

文章目录 前言接口的代码implicitIReadIWrite ExplicitReadWrite 区别与使用场景总结 前言 Autosar官方文档阅读起来比较费劲&#xff0c;一般从实际应用中来了解更多规范中的内容。本文介绍最常用的RTE S/R接口的implicit隐式与Explicit显式两种方式的实现与差别 接口的代码…

SSM + MySQL + Vue2.x + ElementU 图书管理系统(期末作业)

图书管理系统 项目介绍 &#x1f525; SSM MySQL Vue2.x ElementUI &#x1f525; 本项目使用 Idea 开发工具采用当前最火的Java Web前端框架开发&#xff0c;在保证质量的同时界面美观&#xff0c;交互友好&#xff0c;实在是期末大作业的首选项目。 软件架构 使用软…

HashMap源码详解

文章目录 简单介绍提出问题流程说明及验证put元素的流程怎样找到要存储的下标位置的?什么时候会扩容? 加载因子、阈值这些有什么含义?怎样扩容的?扩容的流程.链表可以转成红黑树, 那会从红黑树转成链表吗?什么时候会从链表转成红黑树 小总结 简单介绍 HashMap是Java中最最…

Metal入门学习:绘制纹理图片

一、编程指南PDF下载链接(中英文档&#xff09; 1、Metal编程指南PDF链接 https://github.com/dennie-lee/ios_tech_record/raw/main/Metal学习PDF/Metal 编程指南.pdf 2、Metal着色语言(Metal Shader Language:简称MSL)编程指南PDF链接 https://github.com/dennie-lee/ios_te…

Linux服务器丨重测序数据分析常用软件安装指南

重测序分析软件安装指南 重测序&#xff08;resequencing&#xff09;是指对已知基因组进行高通量测序&#xff0c;以检测个体或种群的遗传变异&#xff0c;从而研究基因组的结构和功能。与全基因组测序不同&#xff0c;重测序通常只对一部分基因组进行测序&#xff0c;例如外显…

【2023 雷泽杯 · Misc】我是签到题

一道图片隐写题 目录 一、题目 二、思路 1.010editor查看源码 2.检索头部关键字段 3.图片隐写——高度隐写 一、题目 看不到这个图片对吧&#xff0c;这就是题目原本的样子。 二、思路 1.010editor查看源码 很明显的rar特征&#xff0c;尝试将后缀改成rar后打开。 发…

《Java就业班体系结构.pdf》:从入门到精通,掌握Java开发的终极指南,成为熟练高级开发者!

Java开发的终极指南 第1阶段&#xff1a;JAVA开篇第2阶段&#xff1a;JAVA语言语法第3阶段&#xff1a;集成开发工具的使用第4阶段&#xff1a;面向对象第5阶段&#xff1a;JavaSE进阶学习第6阶段&#xff1a;数据库JDBC第7阶段&#xff1a;前端精讲第8阶段&#xff1a;JavaEE第…

RocketMQ的学习历程(4)----消息处理 (2)

1.消费者的两种消费模式 顺序消费模式&#xff08;Sequential Consumer Mode&#xff09;&#xff1a; 在顺序消费模式下&#xff0c;消息队列中的消息按照发送的顺序被消费者顺序消费。每个消息队列只会被一个消费者线程消费&#xff0c;确保消息的顺序性。这种模式适用于需要…

【Hadoop】三、数据仓库基础与Apache Hive入门

文章目录 三、数据仓库基础与Apache Hive入门1、数据仓库基本概念1.1、数据仓库概念1.2、场景案例&#xff1a;数据仓库为何而来1.3、数据仓库主要特征1.4、数据仓库主流开发语言--SQL 2、Apache Hive入门2.1、Apache Hive概述2.2、场景设计&#xff1a;如何模拟实现Hive功能2.…