whystea5
加载模型及量化
from modelscope import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_dir, trust_remote_code=True).quantize(4).half().cuda()
构造数据集
#id,attention,label
from datasets import load_dataset
#构造input_id attention_mask labels
def process_dataset(data):
max_len=256
input_ids,attention_mask,labels=[],[],[]
instruction=tokenizer(f"user:{data['instruction']}Assistant",add_special_token=False])
response=tokenizer(f"user:{data['response']}Assistant",add_special_token=False])
input_ids=instruction['input_ids']+response['input_ids']
attention_mask=instruction['attention_mask']+response['attention_mask']
labels=[-100]len*(instruction['input_ids'])+response['input_ids']
if len(input_ids)>max_len:
input_ids=input_ids[:max_len]
attention_mask=attention_mask[:max_len]
labels=labels[:max_len]
return {
'input_ids':input_ids,
'attention_mask':attention_mask,
'labels':labels
}
dataset=load_dataset('json',data_files='',split='train')
dataset=dataset.map(process_dataset,remove_columns=dataset.column_name)
dataset=dataset.shuffle()
微调
from peft import (LoraConfig,get_peft_model,TaskType)
from transformers import TrainingArguments,Trainer,DataCollatorForSeq2Seq
#加载lora配置
config=LoraConfig(task_type=TaskType.CAUSAL_LM,r=8,target_modules="all-linear")
#模型+配置
model=get_peft_model(model,config)
#训练配置
train_args=TrainingArguments(output_dir='checkpoints/qlora',run_name='',
per_device_train_batch_size=10,num_train_epochs=6,save_steps=6,report_to="none"
,optim="paged_adamw_32bit")
#训练
trainer=Trainer(model=model,args=train_args,train_dataset=dataset,data_collator=DataCollatorForSeq2Seq((tokenizer=_tokenizer,padding=True)))
trainer.train()
合并
from transformers import pipeline, AutoModelForSeq2SeqLM
from peft import PeftModel
#加载预训练模型+微调
model = AutoModelForCausalLM.from_pretrained(model_dir, trust_remote_code=True).quantize(4).half().cuda()
#modelid参数指定微调配置的ID
peft_ model = PeftModel.from_pretrained(model= model, model_id="checkpoints/qlora/checkpoint-188")
#合并
peft model= peft model.merge and unload()
#保存
peft model.save pretrained("myqwen2-0.5b")
使用
#pipeline
model = AutoModelForCausalLM.from_pretrained("myqwen2-0.5b",, trust_remote_code=True).quantize(4).half().cuda()
pipe = pipeline("text-generation", model= model, tokenizer= tokenizer)
pipe(f"user:你是谁?Assistant:")
labelme2yolo --json_dir="" --val_size=0.2 --test_size=0 --output_format="bbox"
train
parser.add_argument("--weights", type=str, default=ROOT / "pretrain/yolov5s.pt", help="initial weights path")
#修改class
parser.add_argument("--cfg", type=str, default="models/yolov5s.yaml", help="model.yaml path")
parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="dataset.yaml path")
parser.add_argument("--epochs", type=int, default=10, help="total training epochs")
parser.add_argument("--batch-size", type=int, default=4, help="total batch size for all GPUs, -1 for autobatch")
parser.add_argument("--device", default="0", help="cuda device, i.e. 0 or 0,1,2,3 or cpu")
detect.py
parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "runs/train/exp2/weights/best.pt", help="model path or triton URL")
parser.add_argument("--source", type=str, default=ROOT / "data/images", help="file/dir/URL/glob/screen/0(webcam)")
#data 主要提供标签作用
parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="(optional) dataset.yaml path")
parser.add_argument("--conf-thres", type=float, default=0.25, help="confidence threshold")
parser.add_argument("--iou-thres", type=float, default=0.45, help="NMS IoU threshold")
parser.add_argument("--device", default="0", help="cuda device, i.e. 0 or 0,1,2,3 or cpu")
val.py
parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="dataset.yaml path")
parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "runs/train/exp2/weights/best.pt", help="model path(s)")
parser.add_argument("--batch-size", type=int, default=32, help="batch size")
parser.add_argument("--conf-thres", type=float, default=0.6, help="confidence threshold")
parser.add_argument("--iou-thres", type=float, default=0.6, help="NMS IoU threshold")
parser.add_argument("--device", default='0', help="cuda device, i.e. 0 or 0,1,2,3 or cpu")
export.py
parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="dataset.yaml path")
parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "runs/train/exp2/weights/best.pt", help="model.pt path(s)")
parser.add_argument("--device", default="0", help="cuda device, i.e. 0 or 0,1,2,3 or cpu")
default=["onnx"],
1.labelme
2.labelme2yolo
train.py
weight -预训练
data -yaml-
cfg -yaml-class个数
python val.py --weight .oonx --ddn