文章目录
- 前言
- 一、平台环境配置
- 二、环境 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.微调后
这款简约的牛仔外套,采用了破洞元素的设计,让原本单调的牛仔外套瞬间变得时髦有型。衣身点缀了精致的白色刺绣,更显精致与细腻。