huggingface optimum安装教程及其使用
  Wv2PRSlQRjkP 2023年11月02日 56 0

huggingface optimum安装教程及其使用_huggingface

huggingface

HuggingFace是一个高速发展的社区,包括Meta、Google、Microsoft、Amazon在内的超过5000家组织机构在为HuggingFace开源社区贡献代码、数据集和模型。目前包括模型236,291个,数据集44,810个。刚开始大多数的模型和数据集是NLP方向的,但图像和语音的功能模型正在快速更新中。

huggingface optimum安装教程及其使用_Transformers_02

Transformers

Hugging Face出品的Transformers提供了一系列的 API 和工具,可以说是自然语言处理领域中当下最常用的包之一,它实现了大量的主流预训练模型架构,并提供了对应的与训练好的模型文件,使用者可以轻松下载和训练 SOTA 预训练模型,支持 PyTorch、TensorFlow 和 JAX,并支持框架之间的互操作。模型还可以导出为 ONNX 和 TorchScript 等格式,以方便在生产环境中部署。

借助Transformers工具包,可以非常方便的调用主流预训练模型解决实际的下游任务,如文本分类、文本匹配、命名实体识别、阅读理解、文本生成、文本摘要等。

文档地址: https://hf.co/docs/transformers

huggingface optimum安装教程及其使用_Optimum_03

Optimum

Optimum 是 huggingface transformers 的扩展,它提供了一组性能优化工具,可以在特定的目标硬件上以最高效率训练和运行模型。

文档地址:https://hf.co/docs/optimum

huggingface optimum安装教程及其使用_Optimum_04

安装

Optimum 可以按照以下方式安装:

python -m pip install optimum

如果要使用 Optimum 的加速器特定功能,可以根据下表安装所需的依赖项:

Accelerator

Installation

ONNX runtime

pip install --upgrade-strategy eager install optimum[onnxruntime]

Intel Neural Compressor (INC)

pip install --upgrade-strategy eager optimum[neural-compressor]

Intel OpenVINO

pip install --upgrade-strategy eager optimum[openvino,nncf]

Habana Gaudi Processor (HPU)

pip install --upgrade-strategy eager optimum[habana]

FuriosaAI

pip install --upgrade-strategy eager optimum[furiosa]

如果想安装最新版(源码安装),使用如下命令:

python -m pip install git+https://github.com/huggingface/optimum.git

如果源码安装需要指定硬件,使用如下命令:

python -m pip install optimum[onnxruntime]@git+https://github.com/huggingface/optimum.git

将Transformer模型导出为onnx:

可以使用ORTModelForXXX 加载transformers 模型,注意如果模型来至于Transformers,需要加上from_transformers=true

from optimum.onnxruntime import ORTModelForSequenceClassification
from transformers import AutoTokenizer

model_checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
save_directory = "tmp/onnx/"
# Load a model from transformers and export it to ONNX
ort_model = ORTModelForSequenceClassification.from_pretrained(model_checkpoint, from_transformers=True)
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
# Save the onnx model and tokenizer
ort_model.save_pretrained(save_directory)
tokenizer.save_pretrained(save_directory)

保存为ONNX后,可以继续通过ORTModelForXXX来加载模型,然后使用pipeline来运行任务。

from optimum.onnxruntime import ORTModelForSequenceClassification
from transformers import pipeline, AutoTokenizer
model = ORTModelForSequenceClassification.from_pretrained(save_directory, file_name="model_quantized.onnx")
tokenizer = AutoTokenizer.from_pretrained(save_directory)
cls_pipeline = pipeline("text-classification", model=model, tokenizer=tokenizer)
results = cls_pipeline("I love burritos!")

ONNX模型优化

通过ORTOptimizer 可以优化模型,OptimizationConfig 配置优化参数,可以导出onnx模型,并优化Grpah,进行fp16等优化。

from optimum.onnxruntime import ORTOptimizer, ORTModelForSequenceClassification
from optimum.onnxruntime.configuration import OptimizationConfig

model_id = "distilbert-base-uncased-finetuned-sst-2-english"
save_dir = "/tmp/outputs"

model = ORTModelForSequenceClassification.from_pretrained(model_id, from_transformers=True)

optimizer = ORTOptimizer.from_pretrained(model)

optimization_config = OptimizationConfig(
    optimization_level=2,
    optimize_with_onnxruntime_only=False,
    optimize_for_gpu=False,
)

optimizer.optimize(save_dir=save_dir, optimization_config=optimization_config)

OptimizationConfig :

  • optimization_level 优化等级
  • optimize_for_gpu 是否面向GPU优化
  • fp16 是否转换为半精度,配置后可以减小模型体积

Pipeline使用

在pipeline中使用,只需要accelerator="ort"可。

from optimum.pipelines import pipeline
classifier = pipeline(task="text-classification", accelerator="ort")
classifier("I like you. I love you.")

[{'label': 'POSITIVE', 'score': 0.9998838901519775}]

当然,我们还可以使用上面optimize后的模型。

from transformers import AutoTokenizer
from optimum.onnxruntime import ORTModelForQuestionAnswering
from optimum.pipelines import pipeline

tokenizer = AutoTokenizer.from_pretrained("optimum/roberta-base-squad2")
# Loading already converted and optimized ORT checkpoint for inference
model = ORTModelForQuestionAnswering.from_pretrained("optimum/roberta-base-squad2")

onnx_qa = pipeline("question-answering", model=model, tokenizer=tokenizer)
question = "What's my name?"
context = "My name is Philipp and I live in Nuremberg."

pred = onnx_qa(question=question, context=context)


你好

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

Wv2PRSlQRjkP