广州英文网站建设/今日国际新闻大事件

广州英文网站建设,今日国际新闻大事件,本地网站做哪方面吸引人,阿里云WordPress应用php升级unsloth微调QwQ32B(4bit) GPU: 3090 24G unsloth安装部署 pip 安装 pip install unsloth --index https://pypi.mirrors.usrc.edu.cn/simplesource /etc/network_turbopip install --force-reinstall --no-cache-dir --no-deps githttps://github.com/unslothai/unsloth.git​…

unsloth微调QwQ32B(4bit)

GPU: 3090 24G

unsloth安装部署

  • pip 安装

    pip install unsloth --index https://pypi.mirrors.usrc.edu.cn/simple
    
    source /etc/network_turbopip install --force-reinstall --no-cache-dir --no-deps git+https://github.com/unslothai/unsloth.git
    

    image-20250318225453359


注册Wandb以监控模型微调过程

  • wandb地址

    https://wandb.ai/site

    image-20250322235532991

  • 登录

    下载

    pip install wandb
    

    使用api-key登录

    wandb login
    

  • 使用官网示例看一看

    备注:

    1. 需要联网
    2. 需要将key改为自己的
    3. entity需要提前设立
    import random
    import wandbwandb.login(key="api-key")# Start a new wandb run to track this script.
    run = wandb.init(# Set the wandb entity where your project will be logged (generally your team name).entity="qinchihongye-pa",# Set the wandb project where this run will be logged.project="project_test",# Track hyperparameters and run metadata.config={"learning_rate": 0.02,"architecture": "CNN","dataset": "CIFAR-100","epochs": 10,},
    )# Simulate training.
    epochs = 10
    offset = random.random() / 5
    for epoch in range(2, epochs):acc = 1 - 2**-epoch - random.random() / epoch - offsetloss = 2**-epoch + random.random() / epoch + offset# Log metrics to wandb.run.log({"acc": acc, "loss": loss})# Finish the run and upload any remaining data.
    run.finish()
    

    image-20250323001331600

    image-20250323001400324


下载QwQ32B量化模型

  • huggingface地址(unsloth量化的4bit,比Q4_K_M量化的损失精度更小)

    https://huggingface.co/unsloth/QwQ-32B-unsloth-bnb-4bit

    复制名称

    unsloth/QwQ-32B-unsloth-bnb-4bit

  • 假设当前目录为

    /root/lanyun-tmp

  • 创建文件夹统一存放Huggingface下载的模型

    mkdir Hugging-Face 
    mkdir -p Hugging-Face/QwQ-32B-unsloth-bnb-4bit
    
  • 配置镜像源

    vim ~/.bashrc
    

    填入以下两个,以修改HuggingFace 的镜像源 、模型保存的默认

    export HF_ENDPOINT=https://hf-mirror.com
    export HF_HOME=/root/lanyun-tmp/Hugging-Face

    重新加载,查看环境变量是否生效

    source ~/.bashrcecho $HF_ENDPOINT
    echo $HF_HOME
    
  • 安装 HuggingFace 官方下载工具

    pip install -U huggingface_hub
    
  • 执行下载模型的命令

    huggingface-cli download --resume-download unsloth/QwQ-32B-unsloth-bnb-4bit --local-dir  /root/lanyun-tmp/Hugging-Face/QwQ-32B-unsloth-bnb-4bitHugging-Face/QwQ-32B-unsloth-bnb-4bit
    

    或者使用python下载

    from huggingface_hub import snapshot_download
    snapshot_download(repo_id = "unsloth/QwQ-32B-unsloth-bnb-4bit",local_dir = "/root/lanyun-tmp/Hugging-Face/QwQ-32B-unsloth-bnb-4bit",
    )
    

transformers库调用示例

  • 代码

    from transformers import AutoModelForCausalLM, AutoTokenizermodel_name = "/root/lanyun-tmp/Hugging-Face/QwQ-32B-unsloth-bnb-4bit"model = AutoModelForCausalLM.from_pretrained(model_name,torch_dtype="auto",device_map="cuda:0",
    )
    tokenizer = AutoTokenizer.from_pretrained(model_name)prompt = "你好"
    messages = [{"role": "user", "content": prompt}
    ]
    text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True
    )model_inputs = tokenizer([text], return_tensors="pt").to(model.device)generated_ids = model.generate(**model_inputs,max_new_tokens=32768
    )generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
    ]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
    print(response)
    

    image-20250319224154469

  • 显存占用:23G左右。

    image-20250319224423863


vllm启动示例

  • 启动

    cd /root/lanyun-tmp/Hugging-Facevllm serve ./QwQ-32B-unsloth-bnb-4bit \
    --quantization bitsandbytes \
    --load-format bitsandbytes \
    --max-model-len 500 \
    --port 8081
    
  • 调用代码

    from openai import OpenAI
    import openaiopenai.api_key = '1111111' # 这里随便填一个
    openai.base_url = 'http://127.0.0.1:8081/v1'def get_completion(prompt, model="QwQ-32B"):client = OpenAI(api_key=openai.api_key,base_url=openai.base_url)messages = [{"role": "user", "content": prompt}]response = client.chat.completions.create(model=model,messages=messages,stream=False)return response.choices[0].message.contentprompt = '你好,请幽默的介绍下你自己,不少于300字'
    get_completion(prompt, model="./QwQ-32B-unsloth-bnb-4bit")
    

cot数据集

  • FreedomIntelligence/medical-o1-reasoning-SFT

    https://huggingface.co/datasets/FreedomIntelligence/medical-o1-reasoning-SFT

  • 英文数据集下载

    from datasets import load_dataset
    import rich# Login using e.g. `huggingface-cli login` to access this dataset
    ds = load_dataset("FreedomIntelligence/medical-o1-reasoning-SFT", "en")rich.print(ds['train'][0])
    

    image-20250322102329936

  • 中文数据集下载

    from datasets import load_dataset
    import rich# Login using e.g. `huggingface-cli login` to access this dataset
    ds = load_dataset("FreedomIntelligence/medical-o1-reasoning-SFT", "zh")rich.print(ds['train'][0])
    

    image-20250322102403774

  • 下载完成后会看到在HuggingFace目录下的datasets目录中有刚刚下载的数据

    ll /root/lanyun-tmp/Hugging-Face/datasets/
    

    image-20250322102756924


unsloth加载QwQ32b模型

  • unsloth支持直接加载模型并推理,先加载模型

    from unsloth import FastLanguageModelmax_seq_length = 2048
    dtype = None
    load_in_4bit = True # 4bitmodel,tokenizer = FastLanguageModel.from_pretrained(model_name = "/root/lanyun-tmp/Hugging-Face/QwQ-32B-unsloth-bnb-4bit/",max_seq_length = max_seq_length,dtype = dtype,load_in_4bit = load_in_4bit,
    )
    

    image-20250323002404635

    显存占用22G左右

    image-20250323002435203

  • 推理

    # 将模型调整为推理模式
    FastLanguageModel.for_inference(model)def QwQ32b_infer(question):# prompt模板prompt_style_chat = """请写出一个恰当的回来来完成当前对话任务。### Instruction:你是一名助人为乐的助手。### Question:{}### Response:<think>{}"""# [prompt_style_chat.format(question,"")]inputs = tokenizer([prompt_style_chat.format(question, "")],return_tensors="pt").to("cuda")outputs = model.generate(input_ids = inputs.input_ids,max_new_tokens=2048,use_cache=True,)response = tokenizer.batch_decode(outputs)return response[0].split("### Response:")[1]question = "证明根号2是无理数"
    response = QwQ32b_infer(question)
    

    image-20250323003010238


模型微调

  • 测试:使用微调数据集进行测试

    question_1 = "根据描述,一个1岁的孩子在夏季头皮出现多处小结节,长期不愈合,且现在疮大如梅,溃破流脓,口不收敛,头皮下有空洞,患处皮肤增厚。这种病症在中医中诊断为什么病?"question_2 = "一个生后8天的男婴因皮肤黄染伴发热和拒乳入院。体检发现其皮肤明显黄染,肝脾肿大和脐部少量渗液伴脐周红肿。在此情况下,哪种检查方法最有助于确诊感染病因?"response_1 = QwQ32b_infer(question_1)
    response_2 = QwQ32b_infer(question_2)print(response_1)
    print(response_2)
    

    image-20250323004511358

    image-20250323005528685

  • 加载并处理数据,选择训练集前500条进行最小可行性实验

    import os
    from datasets import load_dataset# 问答提示词模板
    train_prompt_style = """下面是描述任务的指令,与提供进一步上下文的输入配对。编写适当完成请求的响应。在回答之前,仔细思考问题,并创建逐步的思想链,以确保逻辑和准确的响应。### Instruction:
    您是一位在临床推理、诊断和治疗计划方面拥有先进知识的医学专家。请回答以下医学问题。 ### Question:
    {}### Response:
    <think>
    {}
    </think>
    {}"""# 文本生成结束的基本标记
    EOS_TOKEN = tokenizer.eos_token
    tokenizer.eos_token # '<|im_end|>'# 定义函数,对数据集进行修改
    def formatting_prompts_func(examples):inputs = examples["Question"]cots = examples["Complex_CoT"]outputs = examples["Response"]texts = []for input, cot, output in zip(inputs, cots, outputs):text = train_prompt_style.format(input, cot, output) + EOS_TOKENtexts.append(text)return {"text": texts,}# 先选择训练集前500条数据
    dataset = load_dataset("FreedomIntelligence/medical-o1-reasoning-SFT","zh", split = "train[0:500]",trust_remote_code=True)
    dataset = dataset.map(formatting_prompts_func, batched = True)import rich
    rich.print(dataset[0])
    rich.print(dataset[0]['text'])
    

    image-20250323010653554

  • 将模型设置为微调模式

                           
    # 将模型设置为微调模式
    model = FastLanguageModel.get_peft_model(model,r=4, # r=16 # 低秩矩阵的秩target_modules=["q_proj","k_proj","v_proj","o_proj","gate_proj","up_proj","down_proj",],lora_alpha=16,lora_dropout=0,  bias="none",  use_gradient_checkpointing="unsloth",  # True or "unsloth" for very long contextrandom_state=1024,use_rslora=False,  loftq_config=None,
    )
    

    image-20250323012425940

  • 创建训练器(有监督微调对象)

    from trl import SFTTrainer
    from transformers import TrainingArguments
    from unsloth import is_bfloat16_supportedtrainer = SFTTrainer(model=model, # 指定需要微调的预训练模型tokenizer=tokenizer, # 分词器train_dataset=dataset, # 训练数据dataset_text_field="text", # 指定数据集中那一列包含训练文本(在formatting_prompt_func里面指定)max_seq_length=max_seq_length, #最大序列长度,用于控制输入文本的最大token数量dataset_num_proc=2, # 数据加载的并行进程数args=TrainingArguments(per_device_train_batch_size=1, # 每个GPU/设备的戌年批量大小(较小值适合大模型)gradient_accumulation_steps=4, # 梯度累计步数,相当于batch_size=1*4=4# num_train_epochs = 1, # 如果设置了num_train_epochs,则max_steps失效warmup_steps=5, # 预热步数,初始阶段学习率较低,然后逐步升高max_steps=60,# 最大训练步数learning_rate=2e-4, # 学习率fp16=not is_bfloat16_supported(),  # 如果GPU不支持bfloat16,则使用fp16(16位浮点数)bf16=is_bfloat16_supported(), # 如果GPU支持bfloat16,则启用bf16(训练更稳定)logging_steps=10, # 每10步记录一次日志optim="adamw_8bit", # 使用adamw_8bit 8bit adamw优化器减少显存占用weight_decay=0.01, # 权重衰减 L2正则化,防止过拟合lr_scheduler_type="linear", # 学习率调整策略,线性衰减seed=1024, # 随机种子,保证实验结果可复现output_dir="/root/lanyun-tmp/outputs", # 训练结果的输出目录),
    )# 设置wandb(可选则)
    import wandb
    wandb.login(key="api-key")run = wandb.init(entity="qinchihongye-pa",project='QwQ-32B-4bit-FT')# 开始模型微调
    trainer_stats = trainer.train()trainer_status
    

    image-20250323155933809

    训练过程中的显存占用如上,训练过程如下

    image-20250323160147618

    点击wandb链接,查看训练过程中的损失函数,学习率,梯度等等的变化。

    image-20250323160324517

  • unsloth在微调结束后,会自动更新模型权重(在缓存中),因此无序手动合并集合直接调用微调后的模型

    FastLanguageModel.for_inference(model)new_response_1 = QwQ32b_infer(question_1)
    new_response_2 = QwQ32b_infer(question_2)new_response_1
    new_response_2
    

    image-20250323205055248

    image-20250323205114604

    可以看到第一个问题还是回答错了,第二个问题也如旧,可以考虑继续进行大规模微调,使用全部微调文件+多个epoch。

  • 模型合并

    此时本地保存的模型权重在/root/lanyun-tmp/outputs

    image-20250323205516739

    注意,unsloth中默认100步保存一个checkpoint,因为当前steps=60,所以只有一个checkpoint点。

    合并保存为safetensors

    model.save_pretrained_merged("/root/lanyun-tmp/QwQ-Medical-COT-Tiny", tokenizer, save_method = "merged_4bit_forced",#保存为4bit量化)# model.save_pretrained_merged("dir"
    #                              , tokenizer
    #                              , save_method = "merged_16bit",#保存为16bit
    #                             )
    

    合并为GGUF格式(需要量化,非常耗时)

    # model.save_pretrained_gguf("dir"
    #                            , tokenizer
    #                            , quantization_method = "q4_k_m"
    #                           )# model.save_pretrained_gguf("dir"
    #                            , tokenizer
    #                            , quantization_method = "q8_0"
    #                           )# model.save_pretrained_gguf("dir"
    #                            , tokenizer
    #                            , quantization_method = "f16"
    #                           )
    

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

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

相关文章

Dify 0.15.3 输入变量无法被重新赋值问题-解决方法

目录 一、问题描述 二、解决方法 2.1 原因 2.2 修改源码 2.3 重新打包 dify-api 镜像 2.4 修改 docker-compose.yaml 文件 2.5 重启启动镜像 一、问题描述 Dify 0.15.3 是一个比较稳定的版本&#xff0c;Dify 1.0 是一个大版本更新&#xff0c;目前还有很多 Bug。但是&a…

SQL Server查询计划操作符(7.3)——查询计划相关操作符(11)

7.3. 查询计划相关操作符 98&#xff09;Table Scan&#xff1a;该操作符从查询计划参数列确定的表中获取所有数据行。如果其参数列中出现WHERE:()谓词&#xff0c;则只返回满足该谓词的数据行。该操作符为逻辑操作符和物理操作符。该操作符具体如图7.3-98节点1所示。 图 7.3-…

数据库练习2

目录 1.向heros表中新增一列信息&#xff0c;添加一些约束&#xff0c;并尝试查询一些信息 2.课堂代码练习 插入语句 INSERT INTO 删除语句DELETE和TRUNCATE 更新语句UPDATE和replace 查询语句SELECT 条件查询 select语句中的特殊情况 ​​​查询排序 order by 分组查询…

资金管理策略思路

详细描述了完整交易策略的实现细节&#xff0c;主要包括输入参数、变量定义、趋势判断、入场与出场条件、止损与止盈设置等多个方面。 输入参数&#xff08;Input&#xff09;&#xff1a; EntryFrL (.6)&#xff1a;多头入场的前一日波动范围的倍数。 EntryFrS (.3)&#xff1…

数据模型,数据建模,组件,核心价值,使用,意义

数据模型 一组由符号,文本组成的集合, 用以准确表达信息景观, 达到有效交流,沟通的目的 数据建模 是发现,分析和确定数据需求的过程,是一种称为数据模型的精确形式表示和传递这些需求 数据模型的组件 实体, 关系, 属性和域 数据模型的核心价值 交流性 精确性 数据模型的…

解锁云原生后端开发新姿势:腾讯云大模型API实战攻略

目录 云原生后端与大模型融合的开篇之章​ 探秘云原生后端开发​ 云原生后端是什么​ 云原生后端架构核心要素​ 微服务架构​ 容器化技术​ 服务发现与配置管理​ Kubernetes 编排​ 走进腾讯云大模型知识引擎​ 引擎独特功能与优势​ DeepSeek - R1、V3 两款模型 …

【拒绝算法PUA】LeetCode 2116. 判断一个括号字符串是否有效

目录 系列文章目录 专题总结&#xff1a; C刷题技巧总结&#xff1a; 题目 2116. 判断一个括号字符串是否有效 难度 描述 解题方法1 系列文章目录 专题总结&#xff1a; 【拒绝算法PUA】0x00-位运算【拒绝算法PUA】0x01- 区间比较技巧【拒绝算法PUA】0x02- 区间合并技…

常见中间件漏洞攻略-Tomcat篇

一、 CVE-2017-12615-Tomcat put方法任意文件写入漏洞 第一步&#xff1a;开启靶场 第二步&#xff1a;在首页抓取数据包&#xff0c;并发送到重放器 第三步&#xff1a;先上传尝试一个1.txt进行测试 第四步&#xff1a;上传后门程序 第五步&#xff1a;使用哥斯拉连接 二、后…

【nodejs】爬虫路漫漫,关于nodejs的基操

一.下载安装nodejs 官网地址&#xff1a;Node.js — 在任何地方运行 JavaScript 二.下载安装vscode代码编辑器 官网地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 三.修改本地脚本策略 1&#xff0c;windowsi 打开电脑设置 2&#xff0c;输入powersh…

Java EE(16)——网络原理——TCP协议解析二

4.滑动窗口(效率机制) 上篇博客讲到的确认应答/超时重传/连接管理都是安全机制&#xff0c;但也会降低传输效率。滑动窗口就是在保证可靠传输的基础上&#xff0c;尽可能地提高传输效率。 根据确认应答机制&#xff0c;客户端每发送一个请求都需要收到服务器的确认应答报文后才…

从入门到精通【MySQL】 CRUD

文章目录 &#x1f4d5;1. Create 新增✏️1.1 单行数据全列插入✏️1.2 单行数据指定列插入✏️1.3 多行数据指定列插入 &#x1f4d5;2. Retrieve 检索✏️2.1 全列查询✏️2.2 指定列查询✏️2.3 查询字段为表达式✏️2.4 为查询结果指定别名✏️2.5 结果去重查询 &#x1f…

C++学习之云盘上传文件列表下载

1.上传打开文件操作 1. 注册 客户端 成功 {"code":"002"} 该用户已存在 {"code":"003"} 失败 {"code":"004"} 服务器 2. 登录 客户端 服务器 // url http: //127.0.0.1:80/reg // post 数据格式 …

详细解析格式化消息框的代码

书籍&#xff1a;《windows程序设计(第五版)》的开始 环境&#xff1a;visual studio 2022 内容&#xff1a;格式化消息框 说明&#xff1a;以下内容大部分来自腾讯元宝。 封装MessageBoxPrintf 在MessageBoxPrintf()中处理可变参数&#xff0c;通过va_list机制&#xff0c…

【SpringSecurity】详细核心类与过滤器流程讲解和封装通用组件实战

Spring Security 全面介绍 1. 什么是 Spring Security&#xff1f; Spring Security 是一个功能强大且高度可定制的认证和访问控制框架&#xff0c;是保护基于 Spring 的应用程序的标准工具。它是一个专注于为 Java 应用程序提供认证和授权的框架&#xff0c;实际上它是 Spri…

[入门]NUC13配置Ubuntu20.04详细步骤

文章目录 1. 安装Ubuntu20.041.1 制作系统启动盘1.1.1 下载镜像文件1.1.2 配置启动盘 1.2 安装内存条、硬盘1.3 安装系统 2. 网卡驱动配置2.1 关闭安全启动2.2 安装intel官方网卡驱动backport2.2.1 第四步可能会出现问题 2.3 ubuntu官方的驱动2.4 重启 3. 软件安装3.1 录屏软件…

(七)Reactor响应式编程框架

一、简介 Reactor 是运行在 JVM 上的编程框架&#xff0c;最大特点是完全非阻塞&#xff0c;能高效控制 “背压”&#xff0c;简单来说就是处理数据传输时速度不匹配的问题 。它能和 Java 8 里的一些功能直接搭配使用&#xff0c;像处理异步结果的 CompletableFuture、处理数据…

【Linux】Ubuntu 24.04 LTS 安装 OpenJDK 8

目录 通过 apt-get 直接安装 JDK 1. 更新 apt 软件源 2. 检查 JDK 是否已安装 3. 安装OpenJDK 4. 检查 JDK 是否成功安装 5. 设置 JAVA_HOME 环境变量 找到需要设置的 Java 路径 使用文本编辑器打开/etc/environment文件 添加 Java 安装路径 应用更改和验证配置 通过…

Linux系统管理与编程08:任务驱动综合应用

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 [环境] windows11、centos9.9.2207、zabbix6、MobaXterm、Internet环境 [要求] zabbix6.0安装环境&#xff1a;Lamp&#xff08;linux httpd mysql8.0 php&#xff09; [步骤] 3 …

数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(front=rear)-出队-入队-队尾满了,调整队列-获取队头元素

数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(frontrear)-出队-入队-队尾满了&#xff0c;调整队列-获取队头元素——完整可运行代码 #include <stdio.h>#define MAXSIZE 100 typedef int ElemType;typedef struct {ElemType data[MAXSIZE];int front;int…

基于LabVIEW的Windows平台高速闭环控制

在Windows系统下&#xff0c;通过LabVIEW实现高速闭环控制面临两大核心挑战&#xff1a;非实时操作系统的调度延迟与硬件接口的传输速度限制。以USB-6351&#xff08;NI USB-6351 DAQ卡&#xff09;为例&#xff0c;其理论采样率可达1.25 MS/s&#xff08;单通道&#xff09;&a…