【训练篇】MLU370-M8 完成 qwen1.5-7b-chat-lora训练及推理

文章目录

  • 前言
  • 一、平台环境配置
  • 二、环境 or 模型准备
    • 1.模型下载
    • 2.环境准备
      • 2.1 modelscope
      • 2.2 transformers
      • 2.3 accelerate
      • 2.4 deepspeed
      • 2.5 peft
      • 2.6 环境代码修改
    • 3训练代码准备
    • 4 代码修改
  • 三,训练后推理验证
  • 四.推理效果展示
    • 1.微调前
    • 2.微调后


前言

本期我们采用魔塔的swift来完成qwen1.5-7b-chat的训练,除一些环境安装需要转换,其他的与N卡训练操作一致


一、平台环境配置

卡选择:MLU370-M8 *8
驱动:>5.10.22
镜像选择:pytroch2.1.0

在这里插入图片描述

二、环境 or 模型准备

1.模型下载

apt install git-lfs
git-lfs clone https://www.modelscope.cn/qwen/Qwen1.5-7B-Chat.git

2.环境准备

这里简单概述下哪些环境要进行转换,基本上需要在库中含有cuda字段的,都建议转换下,正常的工具库等直接pip install 即可。

2.1 modelscope

git clone https://github.com/modelscope/modelscope.git
cd modelscope_mlu/requirements && pip install -r framework.txt #安装依赖后开始安装modelsccope
pip install -e ./modelscope_mlu/

2.2 transformers

git clone -b v4.41.0 https://githubfast.com/huggingface/transformers.git
python /torch/src/catch/tools/torch_gpu2mlu/torch_gpu2mlu.py -i transformers/
pip install -e ./transformers_mlu/

2.3 accelerate

git clone https://githubfast.com/huggingface/accelerate.git
python /torch/src/catch/tools/torch_gpu2mlu/torch_gpu2mlu.py -i accelerate/
pip install -e ./accelerate_mlu/

2.4 deepspeed

链接:https://pan.baidu.com/s/1KTkd7SSwTc8vj-RM3Z0MYQ?pwd=gvyw
提取码:gvyw
直接pip install里面的whl文件即可

2.5 peft

git clone -b v0.11.0 https://githubfast.com/huggingface/peft.git
python /torch/src/catch/tools/torch_gpu2mlu/torch_gpu2mlu.py -i peft/
pip install -e ./peft_mlu/

2.6 环境代码修改

如果你Import deepspeed会报错,注释
在这里插入图片描述
peft_mlu/src/peft/utils/save_and_load.py

if use_safetensors:if hasattr(torch.backends, "mps") and (device == torch.device("mps")):adapters_weights = safe_load_file(filename, device="cpu")else:adapters_weights = safe_load_file(filename, device=device)
改成
if use_safetensors:if hasattr(torch.backends, "mps") and (device == torch.device("mps")):adapters_weights = safe_load_file(filename, device="cpu")else:adapters_weights = safe_load_file(filename, device="cpu")

3训练代码准备

下载训练代码

git clone https://github.com/modelscope/swift.git
python /torch/src/catch/tools/torch_gpu2mlu/torch_gpu2mlu.py -i swift/
pip install -e ./swift_mlu/

训练脚本【如果你是mlu3可以直接用这个脚本,如果你是cuda酌情小修改就能直接用了】

export CNCL_MEM_POOL_MULTI_CLIQUE_ENABLE=1
export CNCL_MLU_DIRECT_LEVEL=1
export CNCL_SLICE_SIZE=100000
export CNCL_MEM_POOL_ENABLE=0
export MLU_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
torchrun \--nproc_per_node=8 \--master_port 29500 \/workspace/volume/guojuncshi1/swift_mlu/examples/pytorch/llm/llm_sft.py \--model_id_or_path /workspace/volume/guojuncshi1/Qwen1.5-7B-Chat \--model_revision master \--sft_type lora \--tuner_backend peft \--template_type qwen \--dtype fp16 \--output_dir out/train/exp/weights \--ddp_backend cncl \--custom_train_dataset_path train.jsonl \--custom_val_dataset_path dev.jsonl \--train_dataset_sample -1 \--num_train_epochs 2 \--max_length 1024 \--check_dataset_strategy warning \--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 $(expr 16 / 8) \--max_grad_norm 0.5 \--warmup_ratio 0.03 \--eval_steps 100 \--save_steps 100 \--save_total_limit 2 \--logging_steps 10 \--use_flash_attn false 

train.jsonl是服装数据集
数据集样例:

{"instruction": "类型#上衣*材质#牛仔布*颜色#白色*风格#简约*图案#刺绣*衣样式#外套*衣款式#破洞", "input": "", "output": "简约而不简单的牛仔外套,白色的衣身十分百搭。衣身多处有做旧破洞设计,打破单调乏味,增加一丝造型看点。衣身后背处有趣味刺绣装饰,丰富层次感,彰显别样时尚。"}
{"instruction": "类型#裙*材质#针织*颜色#纯色*风格#复古*风格#文艺*风格#简约*图案#格子*图案#纯色*图案#复古*裙型#背带裙*裙长#连衣裙*裙领型#半高领", "input": "", "output": "这款BRAND针织两件套连衣裙,简约的纯色半高领针织上衣,修饰着颈部线,尽显优雅气质。同时搭配叠穿起一条背带式的复古格纹裙,整体散发着一股怀旧的时髦魅力,很是文艺范。"}
{"instruction": "类型#上衣*风格#嘻哈*图案#卡通*图案#印花*图案#撞色*衣样式#卫衣*衣款式#连帽", "input": "", "output": "嘻哈玩转童年,随时<UNK>,没错,出街还是要靠卫衣来装酷哦!时尚个性的连帽设计,率性有范还防风保暖。还有胸前撞色的卡通印花设计,靓丽抢眼更富有趣味性,加上前幅大容量又时尚美观的袋鼠兜,简直就是孩子耍帅装酷必备的利器。"}
{"instruction": "类型#裤*风格#英伦*风格#简约", "input": "", "output": "裤子是简约大方的版型设计,带来一种极简主义风格而且不乏舒适优雅感,是衣橱必不可少的一件百搭单品。标志性的logo可以体现出一股子浓郁的英伦风情,轻而易举带来独一无二的<UNK>体验。"}
{"instruction": "类型#裙*裙下摆#弧形*裙腰型#高腰*裙长#半身裙*裙款式#不规则*裙款式#收腰", "input": "", "output": "这款来自梵凯的半身裙富有十足的设计感,采用了别致的不规则设计,凸显出时尚前卫的格调,再搭配俏皮的高腰设计,收腰提臀的同时还勾勒出优美迷人的身材曲线,而且还帮你拉长腿部比例,释放出优雅娇俏的小女人味。并且独特的弧形下摆还富有流畅的线条美,一颦一动间展现出灵动柔美的气质。"}

4 代码修改

修改1:为了直接让模型选择我们下载的模型进行训练
/workspace/volume/guojuncshi1/swift_mlu/swift/llm/utils/model.py #根据模糊路径修改你自己的代码

 qwen1half_7b_chat = 'qwen1half-7b-chat' 改成你自己的模型路径@register_model(ModelType.qwen1half_7b_chat,'qwen/Qwen1.5-7B-Chat',改成你自己的模型路径LoRATM.llama,TemplateType.qwen,support_flash_attn=True,support_vllm=True,requires=['transformers>=4.37'],hf_model_id='Qwen/Qwen1.5-7B-Chat')

直接run起来
在这里插入图片描述

三,训练后推理验证

将路径改成你自己的路径

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
import torch_mlu
device = "mlu" # the device to load the model onto
peft_model = "/workspace/volume/guojuncshi1/Qwen1.5-7B-Chat/v6-20240627-173047/checkpoint-6500"#换成你训练的模型
model = AutoModelForCausalLM.from_pretrained("/workspace/volume/guojuncshi1/Qwen1.5-7B-Chat",device_map="auto"
)
model.load_adapter(peft_model)
model.to(torch.device("mlu"))
tokenizer = AutoTokenizer.from_pretrained("/workspace/volume/guojuncshi1/Qwen1.5-7B-Chat")prompt = "类型#上衣*材质#牛仔布*颜色#白色*风格#简约*图案#刺绣*衣样式#外套*衣款式#破洞"
messages = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512
)
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)

四.推理效果展示

问题:类型#上衣材质#牛仔布颜色#白色风格#简约图案#刺绣衣样式#外套衣款式#破洞

1.微调前

这款牛仔外套是简约风格的不二之选。整体以白色为主调,展现出干净利落的气息,无论春夏秋冬都能轻松驾驭。设计上,它巧妙融入了刺绣元素,精致而不浮夸,为纯色的外套增添了一抹艺术感,提升了整体层次感。外套采用了破洞的设计,打破常规的单调,透出一丝叛逆与不羁,符合现代年轻人追求个性的特点。这种细节处理不仅增加了服装的时尚感,也彰显出你的独特品味。无论是搭配休闲裤还是裙子,都能展现出别样的街头风格,是一款非常有型的单品。

2.微调后

这款简约的牛仔外套,采用了破洞元素的设计,让原本单调的牛仔外套瞬间变得时髦有型。衣身点缀了精致的白色刺绣,更显精致与细腻。

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

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

相关文章

【高考志愿】医学

目录 一、明确职业定位与兴趣 二、选择大学与专业 三、考虑身体条件 四、了解录取规则 五、考虑选科与成绩 六、注意志愿填报策略 七、关注就业前景 八、资深医生的建议 高考志愿填报学医时&#xff0c;考生需要综合考虑多个因素&#xff0c;确保自己能够做出明智的选择…

short s1 = 1; s1 = s1 + 1;有错吗

这个问题涉及到Java中的数据类型转换和赋值操作&#xff0c;是一个常见的面试题&#xff0c;用于考察应聘者对Java语言基础知识的掌握程度。 技术难点 数据类型转换&#xff1a;在Java中&#xff0c;基本数据类型之间的运算需要遵循类型转换规则。特别是当较小的数据类型&…

URLSearchParams: 浏览器中的查询字符串处理利器

一、 概述 在Web开发中&#xff0c;处理URL的查询字符串是一个常见任务。URLSearchParams API 提供了一种简单而强大的方法来处理Web URL的查询参数。它是一个内置的浏览器API&#xff0c;允许你以名称/值对的形式轻松地创建、读取、更新和删除查询参数。 二、URLSearchParam…

PostgreSQL的系统视图pg_stat_wal_receiver

PostgreSQL的系统视图pg_stat_wal_receiver 在 PostgreSQL 中&#xff0c;pg_stat_wal_receiver 视图提供了关于 WAL&#xff08;Write-Ahead Logging&#xff09;接收进程的统计信息。WAL 接收器是 PostgreSQL 集群中流复制的一部分&#xff0c;它在从节点中工作&#xff0c;…

distance delayed sound

distance delayed sound 在本章中&#xff0c;我们将讨论在游戏音频中使用距离延迟的重要性。我们将首先通过一个常见的例子——闪电和雷鸣&#xff0c;来展示这种重要性并解释距离延迟音频的基础知识。我们将讨论计算速度、距离和时间的数学和方程式&#xff0c;以确定距离延迟…

数据倾斜优化:Hive性能提升的核心

文章目录 1. 定义2. 数据倾斜2.1 Map2.2 Join2.3 Reduce 3. 写在最后 1. 定义 数据倾斜&#xff0c;也称为Data Skew&#xff0c;是在分布式计算环境中&#xff0c;由于数据分布不均匀导致某些任务处理的数据量远大于其他任务&#xff0c;从而形成性能瓶颈的现象。这种情况在H…

PotPlayer安装及高分辨率设置

第1步&#xff1a; 下载安装PotPlayer软件 PotPlayer链接&#xff1a;https://pan.baidu.com/s/1hW168dJrLBonUnpLI6F3qQ 提取码&#xff1a;z8xd 第2步&#xff1a; 下载插件&#xff0c;选择系统对应的位数进行运行&#xff0c;该文件不能删除&#xff0c;删除后将失效。 …

【强化学习的数学原理】课程笔记--2(贝尔曼最优公式,值迭代与策略迭代)

目录 贝尔曼最优公式最优 Policy求解贝尔曼最优公式求解最大 State Value v ∗ v^* v∗根据 v ∗ v^* v∗ 求解贪婪形式的最佳 Policy π ∗ \pi^* π∗一些证明过程 一些影响 π ∗ \pi^* π∗ 的因素如何让 π ∗ \pi^* π∗ 不 “绕弯路” γ \gamma γ 的影响reward 的…

2024/6/30周报

文章目录 摘要ABSTRACT文献阅读题目问题本文贡献方法LSTMTCN模型总体架构 实验实验结果 深度学习TCN-LSTM代码运行结果 总结 摘要 本周阅读了一篇关于TCN和LSTM进行光伏功率预测的文章&#xff0c;本文提出了一种利用LSTM-TCN预测光伏功率的新模型。它由长短期记忆和时间卷积网…

ThreadPoolExecutor基于ctl变量的声明周期管理

个人博客 ThreadPoolExecutor基于ctl变量的声明周期管理 | iwts’s blog 总集 想要完整了解下ThreadPoolExecutor&#xff1f;可以参考&#xff1a; 基于源码详解ThreadPoolExecutor实现原理 | iwts’s blog ctl字段的应用 线程池内部使用一个变量ctl维护两个值&#xff…

Vue异步DOM更新

Vue.js 是一个构建用户界面的渐进式框架&#xff0c;它采用了一种称为“响应式系统”的机制来跟踪数据的变化&#xff0c;并在数据变化时自动更新 DOM。然而&#xff0c;Vue 并不总是立即更新 DOM&#xff0c;而是会等待一个“tick”或“微任务”的完成&#xff0c;然后再进行批…

树莓派开发之文件传输

文章目录 一、简介使用U盘传输文件使用SD卡传输文件使用Xftp 7传输文件 二、 总结 一、简介 在树莓派开发中经常会用到文件传输&#xff0c;下面介绍几种树莓派文件传输的几种方法。 使用U盘传输文件 &#xff08;1&#xff09;复制所需传输文件到U盘 &#xff08;2&#…

C++:typeid4种cast转换

typeid typeid typeid是C标准库中提供的一种运算符&#xff0c;它用于获取类型的信息。它主要用于类型检查和动态类型识别。当你对一个变量或对象使用typeid运算符时&#xff0c;它会返回一个指向std::type_info类型的指针&#xff0c;这个信息包含了关于该类型名称、大小、基…

Pikachu靶场--Sql Inject

参考借鉴 pikachu靶场练习&#xff08;详细&#xff0c;完整&#xff0c;适合新手阅读&#xff09;-CSDN博客 数字型注入(post) 这种类型的SQL注入利用在用户输入处插入数值&#xff0c;而不是字符串。攻击者试图通过输入数字来修改SQL查询的逻辑&#xff0c;以执行恶意操作。…

如何在python中读取matlab输出的.mat文件

写在前面 经常会使用matlab处理数据&#xff0c;比如之前在进行空间滤波发现matlab自带的空间滤波函数。但是&#xff0c;由于后续使用python绘图更熟练一点&#xff0c;所以涉及到在python中读取matlab输出的文件&#xff0c;一般以.mat文件为主。下面测试了几种读取方式&…

jEasyUI 表单验证

jEasyUI 表单验证 jEasyUI 是一个基于 jQuery 的框架,用于创建交互式网页界面。它提供了一系列的组件,如布局、窗口、数据网格等,以及用于这些组件的皮肤和主题。在本文中,我们将重点讨论 jEasyUI 中的表单验证功能。 什么是表单验证? 表单验证是确保用户输入的数据符合…

Unity Shader 极坐标

Unity Shader 极坐标 前言项目简单极坐标极坐标变体之方形极坐标变体之圆形拉花 鸣谢 前言 极坐标记录 项目 简单极坐标 极坐标变体之方形 极坐标变体之圆形 拉花 鸣谢 【菲兹杂货铺】【Unity Shader教程】极坐标实现以及极坐标的两种变体

【87 backtrader期权策略】基于50ETF期权的covered-call-strategy

前段时间有读者希望能够实现一个期权策略的模板,这段时间通过akshare下载了期权的数据,并进行了清洗,写了一个最简单的期权策略,供大家参考。 策略逻辑: 这是151 trading strategies中的一个期权策略。 买入50ETF基金,手续费按照万分之二计算,一直持有卖出一个最远期的…

【实施】系统实施方案(软件方案Word)

软件实施方案 二、 项目介绍 三、 项目实施 四、 项目实施计划 五、 人员培训 六、 项目验收 七、 售后服务 八、 项目保障措施 软件开发全套资料获取&#xff1a;私信或者进主页获取。 软件产品&#xff0c;特别是行业解决方案软件产品不同于一般的商品&#xff0c;用户购买软…

Python教程--基本技能

】TOC 5.1 解析命令行参数 在Python中&#xff0c;解析命令行参数是一项常见的任务&#xff0c;尤其是在开发命令行工具或脚本时。Python标准库提供了argparse模块&#xff0c;它可以帮助你轻松地编写用户友好的命令行接口。下面是使用argparse模块解析命令行参数的基本步骤&…