首页 > 其他分享 >[本科项目实训] Hugging Face Transformers 模型部署与微调

[本科项目实训] Hugging Face Transformers 模型部署与微调

时间:2024-06-24 12:42:46浏览次数:16  
标签:trainer metrics Transformers args Hugging Face checkpoint train model

Transformers

Hugging Face Transformer提供了模型的加载、推理、微调接口,使用该库可以轻松完成自然语言模型的部署微调工作,其有继承自AutoClass的四个最为常见的接口,且调用方式均为AutoClass.from_pretrain("model_name")

  • AutoTokenizer: 用于文本分词
  • AutoFeatureExtractor: 用于特征提取
  • AutoProcessor: 用于数据处理
  • AutoModel: 用于加载模型

例如使用ChatGLM系列的模型,模型调用有chatstream_chat两个接口,一个最为简洁的DEMO为:

# load
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().cuda()
model.eval()

'''
init ...
'''

# contact method1
response, history = model.chat(tokenizer, query, history=history)
return response

# OR contact method2
for response, history in model.stream_chat(tokenizer, query, history=history):
	yield response

P-Tuning v2 DEMO

首先来看main.py中的核心训练代码:

checkpoint = None
if training_args.resume_from_checkpoint is not None:
	checkpoint = training_args.resume_from_checkpoint
# elif last_checkpoint is not None:
#     checkpoint = last_checkpoint
model.gradient_checkpointing_enable()
model.enable_input_require_grads()
train_result = trainer.train(resume_from_checkpoint=checkpoint)
# trainer.save_model()  # Saves the tokenizer too for easy upload

metrics = train_result.metrics
max_train_samples = (
	data_args.max_train_samples if data_args.max_train_samples is not None else len(train_dataset)
)
metrics["train_samples"] = min(max_train_samples, len(train_dataset))

trainer.log_metrics("train", metrics)
trainer.save_metrics("train", metrics)
trainer.save_state()

可以看到,其核心是封装好的trainer

from trainer_seq2seq import Seq2SeqTrainer

trainer = Seq2SeqTrainer(
        model=model,
        args=training_args,
        train_dataset=train_dataset if training_args.do_train else None,
        eval_dataset=eval_dataset if training_args.do_eval else None,
        tokenizer=tokenizer,
        data_collator=data_collator,
        compute_metrics=compute_metrics if training_args.predict_with_generate else None,
        save_prefixencoder=model_args.pre_seq_len is not None
)

阅读trainer_seq2seq可以看到:

from trainer import Trainer

class Seq2SeqTrainer(Trainer):
    def evaluate(
        return super().evaluate(
        	eval_dataset, 
        	ignore_keys=ignore_keys, 
        	metric_key_prefix=metric_key_prefix
        )
        
    def predict(
        return super().predict(
        	test_dataset, 
        	ignore_keys=ignore_keys, 
        	metric_key_prefix=metric_key_prefix
        )

    def prediction_step(
        return (loss, generated_tokens, labels)

    def _pad_tensors_to_max_len(self, tensor, max_length):
        return padded_tensor

其最终继承自transformers库,并修改了部分函数用于当前任务的额外需求,比如说预测。

参考资料

[1] Hugging Face快速入门(重点讲解模型(Transformers)和数据集部分(Datasets))_huggingface-CSDN博客

[2] ChatGLM-6B/ptuning at main · THUDM/ChatGLM-6B · GitHub

标签:trainer,metrics,Transformers,args,Hugging,Face,checkpoint,train,model
From: https://www.cnblogs.com/yichengliu0219/p/18264216

相关文章

  • huggingface官网下载并处理ImageNet2012数据集
    文章目录一、下载imagenet2012数据集二、转换imagenet数据集格式ImageNet数据集可以直接从ImageNet官方网站获取数据,但通常需要注册并遵守使用协议。另外,由于数据集较大,往往下载需要花费大量的时间空间,而通过huggingface下载数据集的方法不仅速度相对较快,而且能够直......
  • [本科项目实训] HuggingFace简介与Git lfs模型下载
    HuggingFace[1]HuggingFace是一个人工智能领域尤其是自然语言处理领域的开源平台,包含数据集、模型、文档、解决方案等内容的分享。由于LLM的参数量较大,往往将参数文件托管到该平台并使用transformers[3]库进行模型调用。模型下载由于项目要求模型本地运行,因而需要下载模......
  • 大模型基本概念学习 - Checkpoint、PyTorch、 TensorFlow、Transformers、ModelScope
    文章目录前言一、checkpoint二、TensorFlow1.简介2.主要特点3.示例代码三、PyTorch1.简介2.主要特点3.示例代码四、TensorFlow和PyTorch区别五、Transformers六、Transformers通过配置或自动检测来决定使用PyTorch或TensorFlow1.自动检测2.通过环境变量配......
  • Transformers是SSMs:通过结构化状态空间对偶性的广义模型和高效算法(一)
    文章目录摘要1、引言2、背景与概述2.1、结构化状态空间模型2.2、注意力机制2.3、结构化矩阵2.4、概述:结构化状态空间对偶性2.5、符号3、状态空间模型是结构化矩阵3.1、状态空间模型的矩阵变换形式3.2、半可分离矩阵3.2.1、顺序半可分离(SSS)表示3.2.2、1-半可分矩阵:标量SS......
  • Transformers--4-37-中文文档-四十五-
    Transformers4.37中文文档(四十五)原文:huggingface.co/docs/transformersOWL-ViT原文:huggingface.co/docs/transformers/v4.37.2/en/model_doc/owlvit概述OWL-ViT(VisionTransformerforOpen-WorldLocalization)是由MatthiasMinderer、AlexeyGritsenko、AustinSton......
  • Transformers--4-37-中文文档-四十四-
    Transformers4.37中文文档(四十四)原文:huggingface.co/docs/transformersLayoutLMv3原文链接:huggingface.co/docs/transformers/v4.37.2/en/model_doc/layoutlmv3概述LayoutLMv3模型由YupanHuang、TengchaoLv、LeiCui、YutongLu、FuruWei在LayoutLMv3:Pre-trai......
  • Transformers--4-37-中文文档-四十三-
    Transformers4.37中文文档(四十三)原文:huggingface.co/docs/transformersGIT原始文本:huggingface.co/docs/transformers/v4.37.2/en/model_doc/git概述GIT模型是由JianfengWang、ZhengyuanYang、XiaoweiHu、LinjieLi、KevinLin、ZheGan、ZichengLiu、CeLiu、L......
  • Transformers--4-37-中文文档-一-
    Transformers4.37中文文档(一)原文:huggingface.co/docs/transformers开始吧......
  • Transformers--4-37-中文文档-五-
    Transformers4.37中文文档(五)原文:huggingface.co/docs/transformers贡献贡献给......
  • Transformers--4-37-中文文档-四十一-
    Transformers4.37中文文档(四十一)原文:huggingface.co/docs/transformersAltCLIP原文链接:huggingface.co/docs/transformers/v4.37.2/en/model_doc/altclip概述AltCLIP模型是由陈忠志、刘光、张博文、叶福龙、杨庆红、吴乐德在AltCLIP:AlteringtheLanguageEncoder......