【Transformer(04/10) 】 Hugging Face手册-推理管道

news2024/11/15 21:54:49

  

一、说明

   这里是Hugging Face手册第四部分,如何使用推理管道;即使您没有特定模式的经验或不熟悉模型背后的底层代码,您仍然可以使用它们通过 pipeline ()进行推理!

二、推理管道

   pipeline ()可以轻松使用Hub中的任何模型来推理任何语言、计算机视觉、语音和多模式任务。即使您没有特定模式的经验或不熟悉模型背后的底层代码,您仍然可以使用它们通过 pipeline ()进行推理!本教程将教您:

  • 使用pipeline()进行推理。
  • 使用特定的分词器或模型。
  • 将pipeline()用于音频、视觉和多模式任务。

2.1 管道使用

   虽然每个任务都有一个关联的 pipeline(),但使用包含所有特定于任务的管道的通用 pipeline() 抽象更简单。 pipeline() 自动加载默认模型和能够推理任务的预处理类。我们以使用 pipeline() 进行自动语音识别 (ASR) 或语音转文本为例。

   首先创建 pipeline() 并指定推理任务:

from transformers import pipeline
transcriber = pipeline(task="automatic-speech-recognition")

   将您的输入传递给 pipeline()。在语音识别的情况下,这是一个音频输入文件:

transcriber("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac")
{'text': 'I HAVE A DREAM BUT ONE DAY THIS NATION WILL RISE UP LIVE UP THE TRUE MEANING OF ITS TREES'}

   不是你想要的结果吗?查看 Hub 上下载次数最多的一些自动语音识别模型,看看是否可以获得更好的转录。

   让我们尝试一下 OpenAI 的 Whisper large-v2 模型。 Whisper 比 Wav2Vec2 晚 2 年发布,并接受了近 10 倍的数据训练。因此,它在大多数下游基准测试中击败了 Wav2Vec2。它还具有预测标点符号和大小写的额外好处,而这两者都是不可能的
Wav2Vec2。

   让我们在这里尝试一下,看看它的表现如何:

transcriber = pipeline(model="openai/whisper-large-v2")
transcriber("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac")
{'text': ' I have a dream that one day this nation will rise up and live out the true meaning of its creed.'}

   现在这个结果看起来更准确了!有关 Wav2Vec2 与 Whisper 的深入比较,请参阅音频变压器课程。我们非常鼓励您查看该中心,了解不同语言的模型、您所在领域的专业模型等等。您可以直接从 Hub 上的浏览​​器查看并比较模型结果,看看它是否比其他模型更适合或处理极端情况。如果您没有找到适合您的用例的模型,您可以随时开始训练自己的模型!

   如果您有多个输入,您可以将输入作为列表传递:

transcriber(
    [
        "https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac",
        "https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/1.flac",
    ]
)

   管道非常适合实验,因为从一种模型切换到另一种模型是微不足道的;然而,有一些方法可以针对比实验更大的工作负载来优化它们。请参阅以下文档的指南,深入了解迭代整个数据集或在网络服务器中使用管道:

  • Using pipelines on a dataset
  • Using pipelines for a webserver

2.2 参数

   pipeline()支持很多参数;有些是特定于任务的,有些是所有管道通用的。一般来说,您可以在任何地方指定参数:

transcriber = pipeline(model="openai/whisper-large-v2", my_parameter=1)

out = transcriber(...)  # This will use `my_parameter=1`.
out = transcriber(..., my_parameter=2)  # This will override and use `my_parameter=2`.
out = transcriber(...)  # This will go back to using `my_parameter=1`.

   我们来看看 3 个重要的:

2.2.1 设备

   如果使用 device=n,管道会自动将模型放在指定的设备上。无论您使用的是 PyTorch 还是 Tensorflow,这都有效。

transcriber = pipeline(model="openai/whisper-large-v2", device=0)

   如果模型对于单个 GPU 来说太大,并且您使用的是 PyTorch,则可以设置 device_map=“auto” 以自动确定如何加载和存储模型权重。使用 device_map 参数需要 Accelerate 包:

pip install --upgrade accelerate

以下代码自动跨设备加载和存储模型权重:

transcriber = pipeline(model="openai/whisper-large-v2", device_map="auto")

   请注意,如果传递了 device_map=“auto”,则在实例化管道时无需添加参数 device=device,因为您可能会遇到一些意外行为!

2.2.2 批量大小

   默认情况下,管道不会批量推理,原因请参见此处。原因是批处理不一定更快,在某些情况下实际上可能会相当慢。

   但如果它适用于您的用例,您可以使用:

transcriber = pipeline(model="openai/whisper-large-v2", device=0, batch_size=2)
audio_filenames = [f"https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/{i}.flac" for i in range(1, 5)]
texts = transcriber(audio_filenames)

   这会在提供的 4 个音频文件上运行管道,但它会将它们以 2 个批次的形式传递给模型(位于 GPU 上,批处理更有可能提供帮助),而不需要您提供任何进一步的代码。输出应该始终与您在没有批处理的情况下收到的输出相匹配。它只是帮助您提高管道速度的一种方法。

   管道还可以减轻批处理的一些复杂性,因为对于某些管道,单个项目(如长音频文件)需要分成多个部分才能由模型处理。管道为您执行此块批处理。

2.2.3 任务特定参数

   所有任务都提供特定于任务的参数,这些参数提供额外的灵活性和选项来帮助您完成工作。例如,    transformers.AutomaticSpeechRecognitionPipeline.call()方法有一个return_timestamps参数,这听起来很有希望为视频添加字幕:

transcriber = pipeline(model="openai/whisper-large-v2", return_timestamps=True)
transcriber("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac")
{'text': ' I have a dream that one day this nation will rise up and live out the true meaning of its creed.', 'chunks': [{'timestamp': (0.0, 11.88), 'text': ' I have a dream that one day this nation will rise up and live out the true meaning of its'}, {'timestamp': (11.88, 12.38), 'text': ' creed.'}]}

   正如您所看到的,该模型推断了文本,并在各个句子发音时输出。

   每个任务都有许多可用参数,因此请查看每个任务的 API 参考,看看您可以修改哪些内容!例如,AutomaticSpeechRecognitionPipeline 有一个 chunk_length_s 参数,该参数有助于处理模型通常无法自行处理的超长音频文件(例如,为整个电影或长达一小时的视频添加字幕):

transcriber = pipeline(model="openai/whisper-large-v2", chunk_length_s=30, return_timestamps=True)
transcriber("https://huggingface.co/datasets/sanchit-gandhi/librispeech_long/resolve/main/audio.wav")
{'text': " Chapter 16. I might have told you of the beginning of this liaison in a few lines, but I wanted you to see every step by which we came.  I, too, agree to whatever Marguerite wished, Marguerite to be unable to live apart from me. It was the day after the evening...

   如果您找不到真正能帮助您的参数,请随时请求!

2.3 在数据集上使用管道

   该管道还可以对大型数据集运行推理。我们建议执行此操作的最简单方法是使用迭代器:

def data():
    for i in range(1000):
        yield f"My example {i}"


pipe = pipeline(model="gpt2", device=0)
generated_characters = 0
for out in pipe(data()):
    generated_characters += len(out[0]["generated_text"])

   迭代器 data() 生成每个结果,管道自动识别输入是可迭代的,并将开始获取数据,同时继续在 GPU 上处理数据(这在幕后使用 DataLoader)。这很重要,因为您不必为整个数据集分配内存,并且可以尽快为 GPU 提供数据。

   由于批处理可以加快速度,因此尝试调整这里的batch_size参数可能会很有用。

   迭代数据集的最简单方法是从数据集中加载一个数据集:

# KeyDataset is a util that will just output the item we're interested in.
from transformers.pipelines.pt_utils import KeyDataset
from datasets import load_dataset

pipe = pipeline(model="hf-internal-testing/tiny-random-wav2vec2", device=0)
dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation[:10]")

for out in pipe(KeyDataset(dataset, "audio")):
    print(out)

2.4将管道用于网络服务器

   创建推理引擎是一个复杂的主题,值得单独专门讨论一章。

2.4.1 视觉管线

   使用 pipeline() 执行视觉任务实际上是相同的。

   指定您的任务并将图像传递给分类器。该图像可以是链接、本地路径或 base64 编码的图像。例如,下面显示的是什么品种的猫?

from transformers import pipeline

vision_classifier = pipeline(model="google/vit-base-patch16-224")
preds = vision_classifier(
    images="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
)
preds = [{"score": round(pred["score"], 4), "label": pred["label"]} for pred in preds]
preds

[{‘score’: 0.4335, ‘label’: ‘lynx, catamount’}, {‘score’: 0.0348, ‘label’: ‘cougar, puma, catamount, mountain lion, painter, panther, Felis concolor’}, {‘score’: 0.0324, ‘label’: ‘snow leopard, ounce, Panthera uncia’}, {‘score’: 0.0239, ‘label’: ‘Egyptian cat’}, {‘score’: 0.0229, ‘label’: ‘tiger cat’}]

2.4.2 文本管道

   使用 pipeline() 执行 NLP 任务实际上是相同的。

from transformers import pipeline

# This model is a `zero-shot-classification` model.
# It will classify text, except you are free to choose any label you might imagine
classifier = pipeline(model="facebook/bart-large-mnli")
classifier(
    "I have a problem with my iphone that needs to be resolved asap!!",
    candidate_labels=["urgent", "not urgent", "phone", "tablet", "computer"],
)

三、多式联运管道

   pipeline ()支持不止一种模式。例如,视觉问答(VQA)任务结合了文本和图像。请随意使用您喜欢的任何图像链接以及您想询问的有关该图像的问题。该图像可以是图像的 URL 或本地路径。

   例如,如果您使用此发票图像:
在这里插入图片描述

from transformers import pipeline

vqa = pipeline(model="impira/layoutlm-document-qa")
vqa(
    image="https://huggingface.co/spaces/impira/docquery/resolve/2359223c1837a7587402bda0f2643382a6eefeab/invoice.png",
    question="What is the invoice number?",
)

[{ ‘分数’ : 0.42515 , ‘答案’ : ‘us-001’ , ‘开始’ : 16 , ‘结束’ : 16 }]

   pytesseract要运行上面的示例,除了 Transformers 之外,您还需要安装:

sudo apt install -y tesseract-ocr
pip install pytesseract

四、在具有 加速功能的大型模型上使用管道:

   pipeline您可以使用 🤗轻松在大型模型上运行accelerate!首先确保您已经安装accelerate了pip install accelerate.

   首先使用加载您的模型device_map=“auto”!我们将facebook/opt-1.3b在我们的示例中使用。

# pip install accelerate
import torch
from transformers import pipeline

pipe = pipeline(model="facebook/opt-1.3b", torch_dtype=torch.bfloat16, device_map="auto")
output = pipe("This is a cool example!", do_sample=True, top_p=0.95)

   如果您安装bitsandbytes并添加参数load_in_8bit=True,您还可以传递8位加载模型

# pip install accelerate bitsandbytes
import torch
from transformers import pipeline

pipe = pipeline(model="facebook/opt-1.3b", device_map="auto", model_kwargs={"load_in_8bit": True})
output = pipe("This is a cool example!", do_sample=True, top_p=0.95)

   请注意,您可以将检查点替换为任何支持大型模型加载的 Hugging Face 模型,例如 BLOOM!

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

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

相关文章

第三百一十三回

文章目录 1. 概念介绍2. 实现方法2.1 obscureText属性2.2 decoration属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现倒计时功能"相关的内容,本章回中将介绍如何实现密码输入框.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍…

实例分割论文阅读之:《Mask Transfiner for High-Quality Instance Segmentation》

1.摘要 两阶段和基于查询的实例分割方法取得了显著的效果。然而,它们的分段掩模仍然非常粗糙。在本文中,我们提出了一种高质量和高效的实例分割Mask Transfiner。我们的Mask Transfiner不是在规则的密集张量上操作,而是将图像区域分解并表示…

【Django】ORM关系映射

关系映射 在关系型数据库中,通常不会把所有数据都放在同一张表中,不易于扩展,常见的关系映射有: 一对一映射,如一个身份证对应一个人。 一对多映射,如一个班级可以有多个学生。 多对多映射,如…

基于SpringBoot和PostGIS的震中影响范围可视化实践

目录 前言 一、基础数据 1、地震基础信息 2、全国行政村 二、Java后台服务设计 1、实体类设计 2、Mapper类设计 3、控制器设计 三、前端展示 1、初始化图例 2、震中位置及影响范围标记 3、行政村点查询及标记 总结 前言 地震等自然灾害目前还是依然不能进行准确的预…

解密 ARMS 持续剖析:如何用一个全新视角洞察应用的性能瓶颈?

作者:饶子昊、杨龙 应用复杂度提升,根因定位困难重重 随着软件技术发展迭代,很多企业软件系统也逐步从单体应用向云原生微服务架构演进,一方面让应用实现高并发、易扩展、开发敏捷度高等效果,但另外一方面也让软件应…

每日一练:LeeCode-112、路径总和【二叉树+DFS+回溯】

本文是力扣LeeCode-112、路径总和 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有…

【闲来看源码】分析一下`ArrayUtils.contains()`这个方法的实现

【闲来看源码】分析一下ArrayUtils.contains()这个方法的实现 大家先来看源码 PreAuthorize("ss.hasPermi(system:user:remove)")Log(title "用户管理", businessType BusinessType.DELETE)DeleteMapping("/{userIds}")public AjaxResult remo…

flink反压及解决思路和实操

1. 反压原因 反压其实就是 task 处理不过来,算子的 sub-task 需要处理的数据量 > 能够处理的数据量,比如: 当前某个 sub-task 只能处理 1w qps 的数据,但实际上到来 2w qps 的数据,但是实际只能处理 1w 条&#…

制作离线版element ui文档

链接:https://pan.baidu.com/s/1k5bsCK9WUlZobhFBLItw1g?pwdgeyk 提取码:geyk --来自百度网盘超级会员V4的分享 https://github.com/ElemeFE/element 克隆官方代码 使用nvm切换node版本,推荐使用14.0.0 http://doc.xutongbao.top/doc/#/zh…

田忌赛马 - 华为OD统一考试

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C 题目描述 给定两个只包含数字的数组a,b,调整数组a里面数字的顺序,使得尽可能多的a[i] > b[i]。 数组a和b中的数字各不相同。输出所有可以达到最优结果的a数…

Mac M1使用PD虚拟机运行win10弹出“内部版本已过期立即安装新的windows内部版本”

一、问题 内部版本已过期立即安装新的windows内部版本 二、解决 1、如图所示打开zh-CN目录 C:\windows\system32\zh-CN找到licensingui.exe文件 将该文件重命名为licensingui_bak.exe 2、修改完成效果如下 (1)但操作中发现,需要TrustedIns…

使用阿里云一键部署 幻兽帕鲁服务器 菜鸟教程 一键快速部署

本文通过介绍如何 从购买阿里云服务器(windows系统)、到一键傻瓜式快速部署、再到连接到帕鲁服务器,简介明了,易上手,没相关专业知识的游戏玩家也能一键傻瓜式搭建服务器环境。 背景:最近很火爆的游戏《幻…

HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-任务管理

目录 一、任务管理1.1、任务状态1.2、任务基本概念1.3、任务管理使用说明1.4、任务开发流程1.5、任务管理接口 一、任务管理 从系统角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源,并独立于其它任务运行。 O…

设计模式巡礼:多板适配案例解析与深度重构

theme: cyanosis 月黑风高,好兄弟发给我一个重构需求,咨询我的意见。 一、 场景分析 开发的产品是需要运行到不同的定制Android板子,不同板子有对应的不同SDK提供的API,目前的业务端,业务流程基本是确定的&#xff0…

LLM大语言模型(六):RAG模式下基于PostgreSQL pgvector插件实现vector向量相似性检索

目录 HightLightMac上安装PostgreSQLDBever图形界面管理端创建DB 使用向量检索vector相似度计算近似近邻索引HNSW近似近邻索引示例 HightLight 使用PostgreSQL来存储和检索vector,在数据规模非庞大的情况下,简单高效。 可以和在线业务共用一套DB&#…

国产航顺HK32F030M: 超声波测距模块串口通信数据接收与处理

参考代码 /************************************************************************************************** * file usart_async_tx_no_int_rx_rxneint.c * brief 异步串口通信例程, 通过查询TXE标志发送数据,通过RXNE中断接收数据,当中断接收到数据后会将 * …

使用yolo训练自己的模型

YOLO(You Only Look Once)是一种用于目标检测的深度学习模型,旨在实时检测图像或视频中的多个对象。与传统的目标检测方法不同,YOLO一次性处理整个图像,而不是通过滑动窗口或区域提议进行多次检测。这种方法使得YOLO在…

2023年全国职业院校技能大赛软件测试赛题第3套

2023年全国职业院校技能大赛 软件测试赛题第3套 赛项名称: 软件测试 英文名称: Software Testing 赛项编号: GZ034 归属产业: 电子与信息大类 …

微信小程序新手入门教程四:样式设计

WXSS (WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式,决定了 WXML 的组件会怎么显示。 WXSS 具有 CSS 大部分特性,同时为了更适合开发微信小程序,WXSS 对 CSS 进行了扩充以及修改。与 CSS 相比,WXSS …

GPT帮别人画,就是不帮我画,我很急怎么办?

今天分享如何让GPT更听话,分享来自林杰陪伴群中的群友“友人”,分享的非常棒,是AI绘画中的高手! AI也需要奖励 虽然说AI距离完全的自主思考还有很长很长的路要走,但是各种实验表明,当我们在与AI对话时&am…