大模型之二十一-小语言模型塞道开启

当前提到大语言模型,大家想到的都是动辄百亿规模以上参数量的模型,13B、70B都是稀疏平常入门级的,但是目前从模型层面来看,模型参数量的规模两极分化已经来临,早期各大公司为了效果怼上去,采取了简单粗暴的方法,那就是训练数据越多越好,模型越大越好,事实也确实证明这么发展的路子是对的,撇开医疗、法律等行业应用,但就模型层面多模态的趋势已经非常明显,这属于巨头企业、政府的菜,绝大部分公司还是围绕开源的10B左右做行业应用。模型规模层面接下来的另一个趋势是“小”,往“小”参数了的方向发展。
这一方向的践行者是微软和谷歌,从Phi-1开始,到这个月在Huggingface上发布的Phi-2,都显示着微软在这一方面的信心,从目前的结果来看,国内会有一批公司跟风,尤其是硬件公司也会跟风,就好比15年左右智能音箱刚出来的时候一样,一批硬件公司会涌入这里,包括手机、手表、pc等移动设备。

小语言模型赛道已经开启

Google于12月初发布了Gemini模型,相比我8月份的博客《大语言模型之五 谷歌Gemini》,谷歌不仅仅是给了对标OPenAI的大模型,还给了Gemini Nano小模型,该模型参数量分为1.8B(Nano-1)和3.25B(Nano-2),分别针对低内存和高内存移动设备,采用4bit量化部署。相比而言,微软早在6月份就发布了13亿参数Phi-1的模型,该模型以 Transformer 架构为基础,微软团队使用了包括来自网络的“教科书等级”数据和以 GPT-3.5 经过处理的“逻辑严密的内容”, 8 个英伟达 A100 GPU,在短短 4 天内完成训练。在测试中,phi-1 实现了最先进的Python编码性能。这更加坚定了微软的小模型路线,重点扩展常识推理和语言理解的Phi-1.5也应运而生,Google之后,12月微软再度发布27亿参数具有“杰出”推理和语言理解能力的Phi-2 。
在这里插入图片描述

Phi-1.5开源地址:https://huggingface.co/microsoft/phi-1_5
Phi-1开源地址:https://huggingface.co/microsoft/phi-1
Phi-1.5论文地址:https://arxiv.org/abs/2309.05463
Phi-2开源地址:https://huggingface.co/microsoft/phi-2

那么,为什么像微软和谷歌有了大模型,还希望为客户提供更小但计算效率更高的语言模型呢?原因有很多,但也许最重要的是时间和资金成本。成本是训练和运行LLM时最重要的痛点之一。例如,定制OpenAI的GPT-4模型定价从2300万美元开始,训练可能需要几个月的时间,并且需要数十亿的训练token。虽然还没有证实训练GPT-4的费用是多少,但它的前身GPT-3的费用可能超过400万美元,此外ChatGPT每天的运行费用可能高达70万美元。

传言GPT-4已在25,000个Nvidia A100 GPU上进行了90-100天的训练,但Phi-2仅用了14天就在96个A100 GPU上完成了训练。

尽管Phi-2没有达到GPT-4的性能水平,但它已经成功地在多个基准测试中超越了更大的模型。在BBH、常识推理、语言理解(仅Llama)、数学和编码等领域优于Mistral-7B和Llama-2等模型。它还在多个基准测试上优于Gemini Nano 2,包括BBH、BoolQ、MBPP和MMLU。

感谢微软、感谢Google开辟新战场。又能给国内创造就业了,国内大批公司将会在这个方向投入了。

微软如何训练的

在Phi-2的例子中,微软认为SLM成功的关键驱动因素之一是其训练数据的质量。输入模型的数据质量越好,其整体性能就越好。

在Phi-2中,微软使用了1.4T超高质量“教科书质量”训练数据,该数据集结合了合成数据集来训练模型常识推理和一般知识(科学、日常活动、心理理论),然后根据教育价值和内容质量进行过滤的网络上数据扩充之前的数据。

Phi-2和Phi-1.5一样采用了24层的Transformer架构,每个头的维度为64,并使用了旋转嵌入等技术来提升模型性能。

Phi-2没有通过强化学习或微调进行对齐,因此有可能通过这些措施进一步提高其性能。从微软发表的观点来看,如果低参数模型在精心策划的高质量数据集上进行训练,它们可以与大参数模型竞争。

fine-tune

import os
from dataclasses import dataclass, field
from typing import Optional

import torch
from datasets import load_dataset
from datasets import load_from_disk
from peft import LoraConfig
from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig,
    HfArgumentParser,
    AutoTokenizer,
    TrainingArguments,
)
from tqdm.notebook import tqdm

from trl import SFTTrainer
from huggingface_hub import interpreter_login

interpreter_login()

compute_dtype = getattr(torch, "float16")
bnb_config = BitsAndBytesConfig(
        load_in_4bit=True,
        bnb_4bit_quant_type='nf4',
        bnb_4bit_compute_dtype='float16',
        bnb_4bit_use_double_quant=False,
    )
device_map = {"": 0}

#Download model
model = AutoModelForCausalLM.from_pretrained(
        "microsoft/phi-2", 
        quantization_config=bnb_config, 
        device_map=device_map,
        trust_remote_code=True,
        use_auth_token=True
    )

model.config.pretraining_tp = 1 
peft_config = LoraConfig(
    lora_alpha=16,
    lora_dropout=0.1,
    r=32,
    target_modules=['lm_head.linear', 'transformer.embd.wte'], # is this correct?
    bias="none",
    task_type="CAUSAL_LM", 
)

tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-2", trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token

training_arguments = TrainingArguments(
    output_dir="./results",
    per_device_train_batch_size=1,
    gradient_accumulation_steps=4,
    optim="paged_adamw_32bit",
    save_steps=500, #CHANGE THIS IF YOU WANT IT TO SAVE LESS OFTEN. I WOULDN'T SAVE MORE OFTEN BECAUSE OF SPACE
    logging_steps=10,
    learning_rate=2e-4,
    fp16=False,
    bf16=True,
    max_grad_norm=.3,
    max_steps=10000,
    warmup_ratio=.03,
    group_by_length=True,
    lr_scheduler_type="constant",
)

model.config.use_cache = False

dataset = load_dataset("json", data_files="your_dataset.json", split="train")

trainer = SFTTrainer(
    model=model,
    train_dataset=dataset,
    peft_config=peft_config,
    dataset_text_field="text",
    max_seq_length=2048,
    tokenizer=tokenizer,
    args=training_arguments,
    packing=False,
)

trainer.train()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hive执行计划

Hive提供了explain命令来展示一个查询的执行计划,这个执行计划对于我们了解底层原理,Hive 调优,排查数据倾斜等很有帮助。 使用语法如下: explain query;在 hive cli 中输入以下命令(hive 2.3.7): explain select s…

Flink系列之:背压下的检查点

Flink系列之:背压下的检查点 一、Checkpointing under backpressure二、缓冲区 Debloating三、非对齐 Checkpoints四、对齐 Checkpoint 的超时五、限制六、故障排除 一、Checkpointing under backpressure 通常情况下,对齐 Checkpoint 的时长主要受 Che…

使用Pycharm一键将.ui文件生成.py文件配置教程、一键打开QTDesigner教程

2df3621a-7ffd-4f18-9735-b86464b83a5b 前言 我痛恨所有将白嫖归为理所应当的猪🐖。 教程 打开pycharm之后,依次点击File->Settings->Tools->External Tools,进入如下界面: 1、配置快捷打开Qt Designer 点击号&…

基于深度学习的森林火焰烟雾检测系统(含UI界面,yolov8、Python代码,数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov8 yolov8主要包含以下几种创新:         1. 添加注意力机制(SE、CBAM等)         2. 修改可变形卷积(DySnake-主干c…

gem5 RubyPort: mem_request_port作用与连接 simple-MI_example.py

简介 回答这个问题:RubyPort的口下,一共定义了六个口,分别是mem_request_port,mem_response_port,pio_request_port,pio_response_port,in_ports, interrupt_out_ports,他们分别有什…

YOLOv8改进 | 主干篇 | 利用MobileNetV2替换Backbone(轻量化网络结构)

一、本文介绍 本文给大家带来的改进机制是MobileNetV2,其是专为移动和嵌入式视觉应用设计的轻量化网络结构。其在MobilNetV1的基础上采用反转残差结构和线性瓶颈层。这种结构通过轻量级的深度卷积和线性卷积过滤特征,同时去除狭窄层中的非线性&#xff…

Circulation:室性早搏会增加不良心血管事件|UK Biobank周报(12.14)

欢迎报名2023年郑老师团队课程! 郑老师科研统计培训,包括临床数据、公共数据分析课程等,欢迎报名 英国生物银行(UK Biobank,UKB)是英国迄今以来规模最大的有关致病或预防疾病的基因和环境因子的信息资源库。…

【案例】图片预览

效果图 如何让图片放大,大多数的UI组件都带有这种功能,今天给大家介绍的这个插件除了放大之外,还可以旋转、移动、翻转、旋转、二次放大(全屏) 实现 npm i v-viewer -Smain.js 中引入 import viewerjs/dist/viewer.c…

java并发编程六 共享模型之内存

文章目录 Java 内存模型可见性解决方法 有序性解决方法 Java 内存模型 JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。 JMM 体现在以下几个方面 原子性 - 保证指令不会受到线程上…

前端ICON库

前端ICON库 1.mingcute mingcute 2.lordicon lordicon 3.字节iconpark(推荐) 字节iconpark 4.iconbuddy iconbuddy.app/ 5.商标寻找youicons 免费下载数百万个徽标以获得设计灵感 | YouIcons.com 还有一堆工具

黑盒测试中的完整性测试:确保系统的功能完整性

在软件开发过程中,为了保证系统的质量和可靠性,测试是一个不可或缺的环节。而黑盒测试作为常用的测试方法之一,以用户的角度出发,测试系统在不知道内部工作原理的情况下,对输入数据的处理和输出结果的正确性进行验证。…

如何直接使用别人的Python项目的虚拟环境

Cannot set up a python SDK at Python 3.10 (flaskTest) (2) (H:\WorkPlace\PyWorkPlace\flaskTest\flaskTest\venv\Scripts\python.exe). The SDK seems invalid 如何复制别人的虚拟环境 修改步骤 1. 修改pyvenv.cfg文件里的home和version 2. Scripts\activate以及Scripts\a…

助力工业产品质检,基于YOLOv8开发构建智能PCB电路板质检分析系统

AI助力工业质检智能生产制造已经有很多成功的实践应用了,在我们前面的系列博文中也有很多对应的实践,感兴趣的话可以自行移步阅读前面的博文即可: 《助力质量生产,基于目标检测模型MobileNetV2-YOLOv3-Lite实现PCB电路板缺陷检测…

【算法】算法题-20231221

这里写目录标题 一、830. 较大分组的位置二、657. 机器人能否返回原点三、771. 宝石与石头 一、830. 较大分组的位置 在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。 例如,在字符串 s "abbxxxxzyy"中&#xff0…

九、W5100S/W5500+RP2040之MicroPython开发<HTTPOneNET示例>

文章目录 1. 前言2. 平台操作流程2.1 创建设备2.2 创建数据流模板 3. WIZnet以太网芯片4. 示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 烧录验证 5. 注意事项6. 相关链接 1. 前言 在这个智能硬件和物联网时代,MicroPython和树莓派PICO正…

依托亚马逊云科技构建韧性应用

背景 现代业务系统受到越来越多的韧性相关的挑战,特别是客户要求他们的业务系统 724 不间断的运行。因此,韧性对于云的基础设施和应用系统有着至关重要的作用。 亚马逊云科技把韧性视为一项最基本的工作,为了让我们的业务系统能持续优雅地提供…

LLM之RAG实战(七)| 使用llama_index实现多模态RAG

一、多模态RAG OpenAI开发日上最令人兴奋的发布之一是GPT-4V API(https://platform.openai.com/docs/guides/vision)的发布。GPT-4V是一个多模态模型,可以接收文本/图像,并可以输出文本响应。最近还有一些其他的多模态模型&#x…

【大数据存储与处理】实验二 HBase 过滤器操作

实验二 HBase 过滤器操作 【实验目的】: 1.掌握使用 HBase 过滤器进行全表扫描。 【实验内容与要求】: 在 HBase 中,Get 和 Scan 操作都可以使用过滤器来设置输出的范围,类似于 SQL 里面 的 Where 查询条件。使用 show_filte…

中国自动驾驶行业:迈向无限可能

中国自动驾驶行业正在经历蓬勃发展,取得了令人瞩目的成果。这一行业在技术创新、政策支持和市场需求等方面展现出巨大潜力。本文将从技术创新、产业生态和前景发展等角度,探讨中国自动驾驶行业的现状和未来前景。 中国自动驾驶行业正处于一个令人瞩目的快…

Codeforces Round 638 (Div. 2)B. Phoenix and Beauty(思维构造)

B. Phoenix and Beauty 这道题目学到的东西: 从给出的数据范围观察,得到一些有用信息(峰哥教的)考虑无解的情况‘ 其实这题考虑怎么操作是比较难的,如果能想出来满足条件的结果就比较好了(我在说什么我自…