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

news2024/11/15 3:49:29

  

一、说明

   这里是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/1430859.html

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

相关文章

Go语言的100个错误使用场景(11-20)|项目组织和数据类型

前言 大家好,这里是白泽。 《Go语言的100个错误以及如何避免》 是最近朋友推荐我阅读的书籍,我初步浏览之后,大为惊喜。就像这书中第一章的标题说到的:“Go: Simple to learn but hard to master”,整本书通过分析100…

Channel事件管理类实现(模块三)

目录 类功能 类定义 类实现 类功能 因为涉及到后续一些实现&#xff0c;因此后续可能会进行修改 类定义 class Channel { private:uint32_t _events; // 当前需要监控的事件uint32_t _revents; // 当前连接触发的事件using EventCallback std::function<void()>;E…

自学Java的第58,59天

网络通信 网络通信三要素&#xff1a;ip地址&#xff0c;端口号&#xff0c;协议 ip地址 常用方法 写法 端口号 协议 UDP通信 快速入门 写法&#xff08;客户端&#xff09; &#xff08;服务端&#xff09; UDP通信 多发多收 TCP通信 写法&#xff08;客户端&#xff09; …

Node.js版本管理工具之_Volta

Node.js包管理工具之_Volta 文章目录 Node.js包管理工具之_Volta1. 官网1. 官网介绍2. 特点1. 快( Fast)2. 可靠(Reliable)3. 普遍( Universal) 2. 下载与安装1. 下载2. 安装3. 查看 3. 使用1. 查看已安装的工具包2. 安装指定的node版本3.切换项目中使用的版本 1. 官网 1. 官网…

网络协议梳理

1 引言 在计算机网络中要做到有条不紊地交换数据&#xff0c;就必须遵守一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。这里所说的同步不是狭义的&#xff08;即同频或同频同相&#xff09;而是广义的&#xff0c;即在一定的条件下应当发生什…

大数据本地环境搭建03-Spark搭建

需要提前部署好 Zookeeper/Hadoop/Hive 环境 1 Local模式 1.1 上传压缩包 下载链接 链接&#xff1a;https://pan.baidu.com/s/1rLq39ddxh7np7JKiuRAhDA?pwde20h 提取码&#xff1a;e20h 将spark-3.1.2-bin-hadoop3.2.tar.gz压缩包到node1下的/export/server目录 1.2 解压压…

镜舟科技客户成功团队负责人孟庆欢:湖仓一体将成为数据架构的新范式

大数据产业创新服务媒体 ——聚焦数据 改变商业 随着数字化的概念逐步深入不同领域企业的运营中&#xff0c;业务形态和数字化路径也越来越丰富。这也为企业数据处理、储存的方式提出了更多要求。对于企业&#xff0c;尤其是数据驱动型企业来说&#xff0c;需要强大的解决方案…

LNMP.

一.mysl配置 1.安装mysql yum install mysql-server -y 2.进入mysql配置文件目录 cd /etc/my.cnf.d3.编辑mysql配置文件 vim mysql-server.cnf 在[mysqld]中添加: character-set-serverutf84.启动mysql服务 systemctl start mysqld5.登入mysql mysql 6.创建数据库 cre…

153基于matlab的滚动轴承故障诊断

基于matlab的滚动轴承故障诊断&#xff0c;基于小波包分解&#xff0c;得到数据峭度值&#xff0c;以正常与故障数据峭度差值进行最大尺度重构&#xff0c;对重构信号进行包络谱分析。程序已调通&#xff0c;可直接运行。 153matlab 信号重构 包络谱分析 故障诊断 (xiaohongshu…

Macbook 安装金铲铲之战等 IOS 游戏

前言 Macbook 现在可以玩一下 IOS 系统上的游戏啦&#xff0c;以笔者的 M1 Pro 芯片为例 步骤 一、安装 PlayCover 推荐 Sonama 安装 Nightly 版本 官网地址&#xff1a; https://playcover.io/ Nightly: https://nightly.link/playcover/playcover/workflows/2.nightly_re…

基础小白快速入门python------Python程序设计结构,循环

循环在计算机中&#xff0c;是一个非常重要的概念&#xff0c;是某一块儿代码的不断重复运行&#xff0c;是一种逻辑思维 在编程中的体现&#xff0c;运用数学思维加代码结合加数据&#xff0c;就构成了一个循环。 在Python中&#xff0c;循环主要分为三大类 for循环 while循…

二维图像生成 3D 场景:nerfstudio 帮你简化流程 | 开源日报 No.164

nerfstudio-project/nerfstudio Stars: 7.7k License: Apache-2.0 nerfstudio 是一个友好的 NeRFs 协作工作室。 该项目旨在简化创建、训练和测试 NeRFs 的端到端流程&#xff0c;支持更模块化的 NeRFs 实现&#xff0c;并提供了简单的 API。 其主要功能和优势包括&#xff1…

ABAP 笔记--内表结构不一致,无法更新数据库MODIFY和UPDATE

目录 ABAP 笔记内表结构不一致&#xff0c;无法更新数据库MODIFY和UPDATE ABAP 笔记 内表结构不一致&#xff0c;无法更新数据库 MODIFY和UPDATE 如果是使用MODIFY或者UPDATE

【DDD】学习笔记-什么是模型

从领域驱动的战略设计进入战术设计&#xff0c;简单说来&#xff0c;就是跨过系统视角的限界上下文边界进入它的内部&#xff0c;从分层架构的逻辑分层进入到每一层的内部。在思考内部的设计细节时&#xff0c;首先需要思考的问题就是&#xff1a;什么是模型&#xff08;Model&…

Android 13.0 原生SystemUI下拉通知栏每条通知默认展开

1.前言 在13.0的系统rom原生开发中,在在对SystemUI下拉通知栏做定制的时候,在下拉状态栏的时候,通知栏中最后一条通知默认是收缩的 点击按钮 就会展开 原生系统systemui就是如此,为了更美观 所以要求最后一条通知也默认展开,显得更美观 最终效果图: 2.原生SystemUI下拉通…

Git使用命令大全

命令大全参考阮一峰的博客&#xff0c;根据自己的使用习惯作了调整。 Git常用命令 其他常用的命令 配置Git # 显示当前的Git配置 $ git config --list# 编辑Git配置文件 $ git config -e [--global]# 设置提交代码时的用户信息 $ git config [--global] user.name "[nam…

Multiuser Communication Aided by Movable Antenna

文章目录 II. SYSTEM MODEL AND PROBLEM FORMULATIONA. 通道模型B. Problem Formulation III. PROPOSED SOLUTION II. SYSTEM MODEL AND PROBLEM FORMULATION 如图1所示&#xff0c;BS配置了尺寸为 N N 1 N 2 NN_{1} \times N_{2} NN1​N2​ 的均匀平面阵列&#xff08;uni…

第二十五天| 216.组合总和III、17.电话号码的字母组合

Leetcode 216.组合总和III 题目链接&#xff1a;216 组合总和III 题干&#xff1a;找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#…

【Qt5小项目】接金币小游戏

代码量在250行左右&#xff0c; 需要源码的可以私信我。

蓝桥杯嵌入式第六届真题(完成)STM32G431

蓝桥杯嵌入式第六届真题&#xff08;完成&#xff09;STM32G431 题目部分 相关文件 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program b…