Qwen2 -微调 Qwen2

Qwen2 -微调 Qwen2

Qwen2 -微调 Qwen2

·

阅读时间:7 分钟  ·  2024 年 6 月 8 日

17

1

阿里云最新系列语言模型由于性能提升和安全功能增强,于周五推出后迅速跃居开源 LLM 排行榜首位。

Qwen2 系列包括各种基础语言模型和指令调整语言模型,大小从 0.5 到 720 亿个参数,以及混合专家 (MoE) 模型。

这些更新的功能使其在协作人工智能平台 Hugging Face 的 Open LLM Leaderboard 上占据首位,可用于商业或研究活动。

www.zeeklog.com  - Qwen2 -微调 Qwen2

中国电商巨头阿里巴巴在中国人工智能领域占有重要地位。今天,阿里巴巴发布了最新的人工智能模型 Qwen2,该模型被认为是目前最好的开源模型之一。

Qwen2 由阿里云开发,代表了该公司统一千文(Qwen)模型系列的下一阶段,该系列包括统一千文 LLM(Qwen)、视觉 AI 模型 Qwen-VL 和 Qwen-Audio。

Qwen 模型系列已针对不同行业和领域的多语言数据进行了预训练,其中 Qwen-72B 是该系列中最强大的模型。该模型已针对惊人的 3 万亿个 token 数据进行了训练。相比之下,Meta 最强大的 Llama-2 变体基于 2 万亿个 token 构建。与此同时,Llama-3 目前正在处理 15 万亿个 token。

模型详细信息

Qwen2 是一系列语言模型,包括各种大小的解码器模型。阿里巴巴已针对每种大小发布了基础语言模型和对齐聊天模型。这些模型基于 Transformer 架构构建,具有 SwiGLU 激活、注意 QKV 偏差、组查询注意、滑动窗口注意和全注意的混合等功能。此外,阿里巴巴还开发了一种增强的标记器,可适应多种自然语言和代码。

  • 型号尺寸:Qwen2–0.5B、Qwen2–1.5B、Qwen2–7B、Qwen2–57B-A14B 和 Qwen2–72B;
  • 除了英语和中文之外,还使用了 27 种语言的数据进行训练;
  • 各项基准测试中取得优异成绩;
  • 增强编码和数学能力;
  • 使用 Qwen2-7B 将上下文长度支持扩展到 128K 个标记
  • Instruct 和 Qwen2–72B-Instruct。

模型信息

Qwen2 系列由 5 种尺寸的基础和指令调整模型组成:Qwen2–0.5B、Qwen2–1.5B、Qwen2–7B、Qwen2–57B-A14B 和 Qwen2–72B。下表详细介绍了这些模型的基本信息:

www.zeeklog.com  - Qwen2 -微调 Qwen2

表现

对比评估显示,大规模模型(70B+参数)相比Qwen1.5有显著的性能提升。本研究重点评估大规模模型Qwen2–72B的性能,从自然语言理解、知识获取、编码能力、数学能力、多语言能力等多个方面对Qwen2–72B与前沿开放模型进行比较。得益于精心挑选的数据集和精湛的训练技巧,Qwen2–72B在与Llama-3–70B等顶级模型的对决中展现出优异的表现,尤其在参数较少的情况下,其性能表现优于上一代Qwen1.5–110B。

www.zeeklog.com  - Qwen2 -微调 Qwen2
<span style="background-color:#f9f9f9"><span style="color:#242424">从 transformers 导入 AutoModelForCausalLM、AutoTokenizer 
device = <span style="color:#c41a16">"cuda" </span> <span style="color:#007400"># 将模型加载到的设备</span>

model = AutoModelForCausalLM.from_pretrained( <span style="color:#c41a16">"Qwen/Qwen1.5-7B-Chat"</span> , device_map= <span style="color:#c41a16">"auto"</span> ) 
tokenizer = AutoTokenizer.from_pretrained( <span style="color:#c41a16">"Qwen/Qwen1.5-7B-Chat"</span> ) 

prompt = <span style="color:#c41a16">"请简单介绍一下大型语言模型。"</span>

消息 = [{ <span style="color:#c41a16">“角色”</span>:<span style="color:#c41a16">“用户”</span>,<span style="color:#c41a16">“内容”</span>:提示}]

文本 = tokenizer.apply_chat_template(消息,tokenize = False,add_generation_prompt = True)

model_inputs = tokenizer([text],return_tensors = <span style="color:#c41a16">“pt”</span>)。到(设备)

generated_ids = model.generate(model_inputs.input_ids,max_new_tokens = 512,do_sample = True)

generated_ids = [output_ids [len(input_ids):] for input_ids,output_ids in zip(model_inputs.input_ids,generated_ids)]

响应 = tokenizer.batch_decode(generated_ids,skip_special_tokens = True)[0]</span></span>

Qwen2Config

<span style="background-color:#f9f9f9"><span style="color:#242424">(vocab_size = <span style="color:#1c00cf">151936</span> hidden_​​size = <span style="color:#1c00cf">4096i</span> ntermied_size = <span style="color:#1c00cf">22016</span> num_hidden_​​layers = <span style="color:#1c00cf">32</span> num_attention_heads = <span style="color:#1c00cf">32</span> num_key_value_heads = <span style="color:#1c00cf">32</span> hidden_​​act = <span style="color:#c41a16">'silu'</span> max_position_embeddings = <span style="color:#1c00cf">32768i</span> nitializer_range = <span style="color:#1c00cf">0.02</span> rms_norm_eps = <span style="color:#1c00cf">1e-06</span> use_cache = Truetie_word_embeddings = Falserope_theta = <span style="color:#1c00cf">10000.0</span> use_sliding_window = Falsesliding_window = <span style="color:#1c00cf">4096</span> max_window_layers = <span style="color:#1c00cf">28tention_dropout</span> = <span style="color:#1c00cf">0.0</span> **kwargs)</span></span>

参数

  • vocab_size(int可选,默认为 151936)— Qwen2 模型的词汇量。定义调用inputs_ids时传递的可以表示的不同标记的数量
  • hidden_​​size (int可选,默认为 4096)— 隐藏表示的维度。
  • middle_size(int可选,默认为 22016)— MLP 表示的维度。
  • num_hidden_​​layers(int可选,默认为 32)— Transformer 编码器中的隐藏层的数量。
  • num_attention_heads(int可选,默认为 32)— Transformer 编码器中每个注意层的注意头的数量。
  • num_key_value_heads(int可选,默认为 32)— 这是应用于实现分组查询注意的 key_value 头的数量。如果为num_key_value_heads=num_attention_heads,则模型将使用多头注意 (MHA),如果为num_key_value_heads=1 the model will use Multi Query Attention (MQA) otherwise GQA is used. When converting a multi-head checkpoint to a GQA checkpoint, each group key and value head should be constructed by meanpooling all the original heads within that group. For more details checkout [this paper](https://arxiv.org/pdf/2305.13245.pdf). If it is not specified, will default to 32`。
  • hidden_​​act (strfunction可选,默认为"silu")——解码器中的非线性激活函数(函数或字符串)。
  • max_position_embeddings(int可选,默认为 32768)——此模型可能使用的最大序列长度。
  • initializer_range(float可选,默认为 0.02)— 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • rms_norm_eps (float可选,默认为 1e-06)— rms 标准化层使用的 epsilon。
  • use_cache ( bool可选,默认为True) — 模型是否应返回最后的键/值注意(并非所有模型都使用)。仅在 时相关config.is_decoder=True
  • tie_word_embeddings (bool可选,默认为False) - 模型的输入和输出词嵌入是否应该绑定。
  • rope_theta(float可选,默认为 10000.0)— RoPE 嵌入的基准周期。
  • use_sliding_window(bool可选,默认为False)—是否使用滑动窗口注意力。
  • slider_window(int可选,默认为 4096)— 滑动窗口注意 (SWA) 窗口大小。如果未指定,则默认为4096
  • max_window_layers(int可选,默认为 28)— 使用 SWA(滑动窗口注意力)的层数。底层使用 SWA,顶层使用完全注意力。
  • tention_dropout (float可选,默认为 0.0)— 注意概率的丢失率。

Ollama — Qwen2

<span style="background-color:#f9f9f9"><span style="color:#242424">ollama serve 
<span style="color:#007400"># 你需要在使用 ollama 时保持此服务运行</span></span></span>

要提取模型检查点并运行模型,请使用该ollama run命令。您可以通过在 后添加后缀来指定模型大小qwen2,例如:0.5b:1.5b:7b:72b

<span style="background-color:#f9f9f9"><span style="color:#242424">ollama run qwen2:7b 
#要退出,请输入“/bye”并按 ENTER</span></span>

您还可以通过其与 OpenAI 兼容的 API 访问 ollama 服务。请注意,您需要 (1)ollama serve在使用该 API 时保持运行,以及 (2)ollama run qwen2:7b在使用此 API 之前执行以确保模型检查点已准备就绪。

<span style="background-color:#f9f9f9"><span style="color:#242424"><span style="color:#aa0d91">从</span>openai<span style="color:#aa0d91">导入</span>OpenAI
客户端 = OpenAI( 
    base_url= <span style="color:#c41a16">'http://localhost:11434/v1/'</span> , 
    api_key= <span style="color:#c41a16">'ollama'</span> ,   <span style="color:#007400"># 需要但被忽略</span>
) 
chat_completion = client.chat.completions.create( 
    messages=[ 
        { 
            <span style="color:#c41a16">'role'</span> : <span style="color:#c41a16">'user'</span> , 
            <span style="color:#c41a16">'content'</span> : <span style="color:#c41a16">'说这是一个测试'</span> , 
        } 
    ], 
    model= <span style="color:#c41a16">'qwen2:7b'</span> , 
)</span></span>

使用 Alpaca 数据集对 Qwen 2 进行微调

以下代码使用 Alpaca 数据集对 Qwen2–0.5B 语言模型进行微调。语言模型对于文本生成、摘要和问答等自然语言处理任务非常有效。

先决条件:所需的软件包和库包括 Unsloth、Xformers (Flash Attention)、trl、peft、accelerate、bitsandbytes、transformers 和 datasets。此代码旨在在 Google Colab 或兼容环境中运行。

步骤 1:安装依赖项

<span style="background-color:#f9f9f9"><span style="color:#242424">!pip install <span style="color:#c41a16">"unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"</span>
 !pip install --no <span style="color:#aa0d91">-deps</span> xformers <span style="color:#c41a16">"trl<0.9.0"</span> peft 加速 bitsandbytes</span></span>

步骤 2:加载模型和标记器

<span style="background-color:#f9f9f9"><span style="color:#242424">从 unsloth<span style="color:#aa0d91">导入</span>FastLanguageModel
<span style="color:#aa0d91">导入</span> <span style="color:#5c2699">torch </span>
<span style="color:#3f6e74">max_seq_length </span> =  <span style="color:#1c00cf">2048</span>
 dtype = <span style="color:#5c2699">None </span>
<span style="color:#3f6e74">load_in_4bit </span> =  <span style="color:#5c2699">True </span>
<span style="color:#3f6e74">fourbit_models </span> = [ 
    <span style="color:#c41a16">"unsloth/Qwen2-0.5b-bnb-4bit"</span> , 
] 
model, tokenizer = FastLanguageModel.from_pretrained( 
    model_name = <span style="color:#c41a16">"unsloth/Qwen2-0.5B"</span> , 
    max_seq_length = max_seq_length, 
    dtype = dtype, 
    load_in_4bit = load_in_4bit, 
)</span></span>

FastLanguageModel.from_pretrained() 函数加载 Qwen2–0.5B 模型及其 tokenizer。参数 max_seq_length、dtype 和 load_in_4bit 用于配置模型。

步骤 3:应用 PEFT(参数有效微调)

<span style="background-color:#f9f9f9"><span style="color:#242424">模型 = FastLanguageModel.get_peft_model(
    模型, 
    r = <span style="color:#1c00cf">16</span> , 
    target_modules = [ <span style="color:#c41a16">“q_proj”</span> “ <span style="color:#c41a16">k_proj” </span><span style="color:#c41a16">“v_proj </span><span style="color:#c41a16">” “o_proj”</span> “ 
                      <span style="color:#c41a16">gate_proj”</span> “ <span style="color:#c41a16">up_proj”</span> “ <span style="color:#c41a16">down_proj”</span> ,], lora_alpha 
    = <span style="color:#1c00cf">16</span> , 
    lora_dropout = <span style="color:#1c00cf">0</span> ,
    偏见 = <span style="color:#c41a16">“无”</span> , 
    use_gradient_checkpointing = “ <span style="color:#c41a16">unsloth”</span> , 
    random_state = <span style="color:#1c00cf">3407</span> , 
    use_rslora = <span style="color:#aa0d91">False</span> , 
    loftq_config = <span style="color:#aa0d91">None</span> , 
)</span></span>

FastLanguageModel.get_peft_model() 函数用于将 PEFT 应用于加载的模型。各种参数(例如 r、target_modules、lora_alpha、lora_dropout、bias、use_gradient_checkpointing、random_state、use_rslora 和 loftq_config)用于配置 PEFT 过程。

步骤 4:定义羊驼提示

<span style="background-color:#f9f9f9"><span style="color:#242424">alpaca_prompt = <span style="color:#c41a16">"""下面是描述任务的指令,与提供进一步上下文的输入配对。编写适当完成请求的响应。
### 指令:
{} 
### 输入:
{} 
### 响应:
{}"""</span>
 EOS_TOKEN = tokenizer.eos_token <span style="color:#007400"># 必须添加 EOS_TOKEN </span>
<span style="color:#aa0d91">def </span> formatting_prompts_func ( <span style="color:#5c2699">examples</span> ): 
    instructions = examples[ <span style="color:#c41a16">"instruction"</span> ] 
    input = examples[ <span style="color:#c41a16">"input"</span> ] 
    output = examples[ <span style="color:#c41a16">"output"</span> ] 
    texts = [] 
    <span style="color:#aa0d91">for</span> instructions, <span style="color:#5c2699">input</span> , output <span style="color:#aa0d91">in </span> <span style="color:#5c2699">zip</span> (instructions, input, output): 
        text = alpaca_prompt.format (instruction, <span style="color:#5c2699">input</span> , output) + EOS_TOKEN         texts.append(text) <span style="color:#aa0d91">return</span> { <span style="color:#c41a16">"text"</span> : texts, <span style="color:#5c2699">}</span>

    </span></span>

alpaca_prompt 变量是格式化输入数据的模板。EOS_TOKEN 和 formatting_prompts_func() 函数用于准备训练数据。

步骤5:加载并预处理数据集

<span style="background-color:#f9f9f9"><span style="color:#242424"><span style="color:#aa0d91">从</span>数据集<span style="color:#aa0d91">导入</span>load_dataset
数据集 = load_dataset( <span style="color:#c41a16">"yahma/alpaca-cleaned"</span> , split = <span style="color:#c41a16">"train"</span> )
数据集 = 数据集.map <span style="color:#5c2699">(</span> formatting_prompts_func, batched = <span style="color:#aa0d91">True</span> ,)</span></span>

使用 Hugging Face 数据集库中的 load_dataset() 函数加载 Alpaca 数据集。使用 map() 函数将 formatting_prompts_func() 函数应用于数据集。

步骤 6:设置训练配置

<span style="background-color:#f9f9f9"><span style="color:#242424"><span style="color:#aa0d91">从</span>trl<span style="color:#aa0d91">导入</span>SFTTrainer
<span style="color:#aa0d91">从</span>transformers<span style="color:#aa0d91">导入</span>TrainingArguments
<span style="color:#aa0d91">从</span>unsloth<span style="color:#aa0d91">导入</span>is_bfloat16_supported 
trainer = SFTTrainer( 
    model = model, 
    tokenizer = tokenizer, 
    train_dataset = dataset, 
    dataset_text_field = <span style="color:#c41a16">"text"</span> , 
    max_seq_length = max_seq_length, 
    dataset_num_proc = <span style="color:#1c00cf">2</span> , 
    args = TrainingArguments( 
        per_device_train_batch_size = <span style="color:#1c00cf">2</span> , 
        gradient_accumulation_steps = <span style="color:#1c00cf">8</span> , 
        <span style="color:#007400"># 使用 num_train_epochs = 1, warmup_ratio 进行完整训练运行!</span>
         warmup_steps = <span style="color:#1c00cf">20</span> , 
        max_steps = <span style="color:#1c00cf">120</span> , 
        learning_rate = <span style="color:#1c00cf">5e-5</span> , 
        fp16 = <span style="color:#aa0d91">not</span> is_bfloat16_supported(), 
        bf16 = is_bfloat16_supported(), 
        logstash_steps = <span style="color:#1c00cf">1</span> , 
        optim = <span style="color:#c41a16">"adamw_8bit"</span> , 
        weight_decay = <span style="color:#1c00cf">0.01</span>,
        lr_scheduler_type = <span style="color:#c41a16">“线性”</span>,
        种子= <span style="color:#1c00cf">3407</span>,
        output_dir = <span style="color:#c41a16">“输出”</span>,
    ),
)</span></span>

trl 库中的 SFTTrainer 类用于训练语言模型。TrainingArguments 用于配置各种参数,例如批处理大小、梯度累积步骤、预热步骤、最大步骤、学习率、混合精度设置、记录步骤、优化器、权重衰减、学习率调度程序和种子。

步骤 7:训练模型

<span style="background-color:#f9f9f9"><span style="color:#242424"><span style="color:#836c28">训练师统计</span>= 训练师.train()</span></span>

调用 trainer.train() 函数启动训练过程。trainer_stats 变量存储训练统计数据。

经过微调的模型可用于各种自然语言处理任务,例如文本生成、摘要和问答。

Read more

60个“特征工程”计算函数(Python代码)

60个“特征工程”计算函数(Python代码)

转自:coggle数据科学 近期一些朋友询问我关于如何做特征工程的问题,有没有什么适合初学者的有效操作。 特征工程的问题往往需要具体问题具体分析,当然也有一些暴力的策略,可以在竞赛初赛前期可以带来较大提升,而很多竞赛往往依赖这些信息就可以拿到非常好的效果,剩余的则需要结合业务逻辑以及很多其他的技巧,此处我们将平时用得最多的聚合操作罗列在下方。 最近刚好看到一篇文章汇总了非常多的聚合函数,就摘录在下方,供许多初入竞赛的朋友参考。 聚合特征汇总 pandas自带的聚合函数 * 其它重要聚合函数 其它重要聚合函数&分类分别如下。 def median(x):     return np.median(x) def variation_coefficient(x):     mean = np.mean(x)     if mean != 0:         return np.std(x) / mean     else:         return np.nan def variance(x):     return

By Ne0inhk
90w,确实可以封神了!

90w,确实可以封神了!

要说24年一定最热的技术,还得是AIGC! 前段时间阿里旗下的开源项目,登上GitHub热榜! AI大热,如今ChatGPT的优异表现,必然会出现各种细分场景应用的工具软件,和大量岗位项目! 山雨欲来风满楼,强人工智能的出现,所有科技公司已经开始巨量扩招此领域的人才。算法的岗位,近三个月已经增长68%!这件事在HR届也是相当震撼的。 目前各行各业都不景气的市场,人工智能岗位却一直保持常青!甚至同属AI边缘岗都比其他岗薪资高40%! 与此同时,AI算法岗上岸也不简单,竞争激烈,好公司核心岗位不用说,谁都想去。 所以事实就是,想要上岸,门槛也逐渐变高,项目经历、实习经历都很重要,越早明白这个道理就越能提前建立起自己的优势。 但我在b站逛知识区的时候,经常看到有些同学,因为一些客观原因导致无法参加实习,这种情况下,如果你想提升背景,增加项目经历的话,可以试试这个《CV/NLP 算法工程师培养计划》。 目前已经有上千位同学通过该计划拿到offer了,最新一期学员就业薪资最高能拿到78K!年薪94w! 优势就是有BAT大厂讲师带领,手把手带做AI真实企业项目(包含CV、NLP等

By Ne0inhk
再见nohup!试试这个神器,Python Supervisor!

再见nohup!试试这个神器,Python Supervisor!

👇我的小册 45章教程:() ,原价299,限时特价2杯咖啡,满100人涨10元。 作者丨Ais137 https://juejin.cn/post/7354406980784373798 1. 概述 Supervisor 是一个 C/S 架构的进程监控与管理工具,本文主要介绍其基本用法和部分高级特性,用于解决部署持久化进程的稳定性问题。 2. 问题场景 在实际的工作中,往往会有部署持久化进程的需求,比如接口服务进程,又或者是消费者进程等。这类进程通常是作为后台进程持久化运行的。 一般的部署方法是通过 nohup cmd & 命令来部署。但是这种方式有个弊端是在某些情况下无法保证目标进程的稳定性运行,有的时候 nohup 运行的后台任务会因为未知原因中断,从而导致服务或者消费中断,进而影响项目的正常运行。 为了解决上述问题,通过引入 Supervisor 来部署持久化进程,提高系统运行的稳定性。 3. Supervisor 简介 Supervisor is a client/

By Ne0inhk
第一本给程序员看的AI Agent图书上市了!

第一本给程序员看的AI Agent图书上市了!

AI Agent火爆到什么程度? OpenAI创始人奥特曼预测,未来各行各业,每一个人都可以拥有一个AI Agent;比尔·盖茨在2023年层预言:AI Agent将彻底改变人机交互方式,并颠覆整个软件行业;吴恩达教授在AI Ascent 2024演讲中高赞:AI Agent是一个令人兴奋的趋势,所有从事AI开发的人都应该关注。而国内的各科技巨头也纷纷布局AI Agent平台,如:钉钉的AI PaaS、百度智能云千帆大模型平台等等。 Agent 是未来最重要的智能化工具。对于程序员来说,是时候将目光转向大模型的应用开发了,率先抢占AI的下一个风口AI Agent。 小异带来一本新书《大模型应用开发 动手做 AI Agent》,这本书由《GPT图解》的作者黄佳老师创作,从0到1手把手教你做AI Agent。现在下单享受5折特惠! ▼点击下方,即可5折起购书 有这样一本秘籍在手,程序员们这下放心了吧,让我们先来揭开 Agent 的神秘面纱。 AI Agent 面面观

By Ne0inhk