Hugging Face系列2:详细剖析Hugging Face网站资源——实战六类开源库trans ...

打印 上一主题 下一主题

主题 546|帖子 546|积分 1638

前言

本系列文章旨在全面体系的先容Hugging Face,让小白也能纯熟利用Hugging Face上的各种开源资源,并上手创建自己的第一个Space App,在本地加载Hugging Face管线练习自己的第一个模子,并利用模子生成采样数据,同时详细办理部署中出现的各种问题。后续文章会分别先容采样器及其加快、体现分类器引导扩散模子、CLIP多模态图像引导生成、DDMI反转及控制类大模子ControlNet等,根据反馈环境大概再增加最底层的逻辑公式和从零开始练习LLM等,让您从原理到实践彻底搞懂扩散模子和大语言模子。欢迎点赞评论、收藏和关注。
本系列文章如下:

  • 《详细剖析Hugging Face网站资源——models/datasets/spaces》:Hugging Face最重要的三大件models/datasets/spaces解说及实战;
  • 《详细剖析Hugging Face网站资源——实战六类开源库transformers/diffusers/datasets/PEFT/accelerate/optimum》:Hugging Face开源了一系列的开源库,让开发者收益良多,包括transformers/diffusers/datasets/PEFT/accelerate/optimum;
  • 《详细剖析Hugging Face网站资源——Gradio/Course》:Gradio是Hugging Face发布的一个浅易的webui开发框架,同时Hugging Face还公布了一系列的学习课程。
  • 《从0到1:利用Hugging Face管线加载Diffusion模子生成第一张图像》:在本地加载Hugging Face管线练习自己的第一个模子,并利用模子生成采样数据,同时详细办理部署中出现的各种问题。
本篇摘要

本篇主要先容Hugging Face。Hugging Face是一个人工智能的开源社区,是相关从业者协作和交流的平台。它的核心产品是Hugging Face Hub,这是一个基于Git进行版本管理的存储库,停止2024年5月,已托管了65万个模子、14.5万个数据集以及超过17万个Space应用。另外,Hugging Face还开源了一系列的呆板学习库如Transformers、Datasets和Diffusers等,以及界面演示工具Gradio。此外,Hugging Face设计开发了许多学习资源,好比与NLP(大语言模子)、扩散模子及深度强化学习等相关课程。末了先容一些供各人交流学习的平台。为了更有趣,本篇先容了大量有趣的Spaces应用,好比换装IDM-VTON、灯光特效IC-Light、LLM性能排行Artificial Analysis LLM Performance Leaderboard和自己部署的文生图模子stable-diffusion-xl-base-1.0、对图片精细化的stable-diffusion-xl-refiner-1.0等。只要读者认真按着文章利用,上述利用都可自己实现。下面临以上内容逐一先容。
2. Hugging Face开源库

除了Hugging Face Hub提供的models、datasets和spaces,Hugging Face还在GitHub上开源了一系列的呆板学习库和工具。在GitHub的Hugging Face组织页面,其置顶了一些开源代码仓库,包括transformers、diffusers、datasets、peft、accelerate以及optimum,如下图所示。本篇逐一详细先容并给出对应的实战用例,方便读者更直观的明白和应用。

2.1 transformers

2.1.1 简介

transformers 提供了数以千计的可实验不同任务的SOTA1预练习模子,这些任务包括(1)支持 100 多种语言的文天职类、信息抽取、问答、摘要、翻译、文本生成的文本任务;(2)用于图像分类,目的检测和分割等图像任务;(3)用于语音辨认和音频分类等音频任务。Transformer模子还可以在几种模式的组合上实验任务,比方表格问答、光学字符辨认、从扫描文档中提取信息、视频分类和视觉问答等。
Transformers 提供了便于快速下载和利用的API,让你可以将预练习模子在给定文本、数据集上微调后,通过 model hub 与社区共享;同时,每个定义的 Python 模块均完全独立,方便修改和快速研究实验。Transformers 支持三个最热门的深度学习库: Jax, PyTorch 以及 TensorFlow——并与之无缝整合。你可以直接利用一个框架练习你的模子然后用另一个加载和推理,以支持框架之间的互利用。模子还可以导出成ONNX和TorchScript等格式,以方便在生产环境中部署。
用户可以通过transformers直接测试和利用model hub中的大部门模子,以节省练习时间和资源,降低资本。
2.1.2 实战

Hugging Face提供pipeline API以便在给定的输入(文本、图像、音频等)上利用模子。模子练习期间,管道用预练习模子实现预处置惩罚。
在利用任何库之前,需要先安装:
  1. # upgrade参数保证安装最新版
  2. pip install --upgrade XXX
复制代码
下面看三个例子。
1. 文天职类

利用pipeline实现文天职类:
  1. >>> from transformers import pipeline
  2. # Allocate a pipeline for sentiment-analysis. The second line of code downloads and caches the pretrained model used by the pipeline, while the third evaluates it on the given text.
  3. >>> classifier = pipeline('sentiment-analysis')
  4. >>> classifier('We are very happy to introduce pipeline to the transformers repository.')
  5. [{'label': 'POSITIVE', 'score': 0.9996980428695679}]
复制代码
2. 图像辨认

利用pipeline实现图像辨认:
  1. >>> import requests
  2. >>> from PIL import Image
  3. >>> from transformers import pipeline
  4. # Download an image with cute cats
  5. >>> url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/coco_sample.png"
  6. >>> image_data = requests.get(url, stream=True).raw
  7. >>> image = Image.open(image_data)
  8. # Allocate a pipeline for object detection
  9. >>> object_detector = pipeline('object-detection')
  10. >>> object_detector(image)
  11. [{'score': 0.9982201457023621,
  12.   'label': 'remote',
  13.   'box': {'xmin': 40, 'ymin': 70, 'xmax': 175, 'ymax': 117}},
  14. {'score': 0.9960021376609802,
  15.   'label': 'remote',
  16.   'box': {'xmin': 333, 'ymin': 72, 'xmax': 368, 'ymax': 187}},
  17. {'score': 0.9954745173454285,
  18.   'label': 'couch',
  19.   'box': {'xmin': 0, 'ymin': 1, 'xmax': 639, 'ymax': 473}},
  20. {'score': 0.9988006353378296,
  21.   'label': 'cat',
  22.   'box': {'xmin': 13, 'ymin': 52, 'xmax': 314, 'ymax': 470}},
  23. {'score': 0.9986783862113953,
  24.   'label': 'cat',
  25.   'box': {'xmin': 345, 'ymin': 23, 'xmax': 640, 'ymax': 368}}]
复制代码
3. 在Pytorch和TensorFlow中利用pipeline

代码如下:
  1. >>> from transformers import AutoTokenizer, AutoModel
  2. >>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")
  3. >>> model = AutoModel.from_pretrained("google-bert/bert-base-uncased")
  4. # pytorch uses pt and tensorflow uses tf
  5. >>> inputs = tokenizer("Hello world!", return_tensors="pt")
  6. >>> outputs = model(**inputs)
复制代码
代码解释:tokenizer负责为预练习模子预处置惩罚字符串,而且可指定返回张量格式,然后传入model作练习,产生终极输出。示例代码演示了怎样在PyTorch或TensorFlow框架中利用模子,并在新数据集上利用练习API快速微调预处置惩罚模子。
2.2 diffusers

2.2.1 简介

diffusers是SOTA预练习扩散模子的首选库,可用于生成图像、音频,甚至分子的3D结构。diffusers是一个模块化工具箱,既可支持简单的推明白决方案,也支持练习自己的扩散模子。diffusers库设计注重可用性而非性能,简单而非浅易,可定制化而非抽象。
diffusers提供三个核心组件:1)开始辈的扩散管道diffusion pipelines,只需几行代码即可进行推理;2)可互换噪声调理器noise schedulers,可用于调治推理过程中模子生成中的扩散速度和输出质量;3)预练习模子pretrained models可用作构建块,并与调理器相联合,以创建自己的端到端扩散体系。
2.2.2 实战

实战包括管线、模子和调理器。
1. 管线

利用diffusers生成输出非常容易,如文生图,可利用from_pretrained方法加载预练习的扩散模子stable-diffusion:
  1. from diffusers import DiffusionPipeline
  2. import torch
  3. pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
  4. pipeline.to("cuda")
  5. pipeline("An image of a squirrel in Picasso style").images[0]
复制代码
2. 模子和调理器

还可以深入研究预练习模子和噪声调理器的工具箱,构建自己的扩散体系:
  1. from diffusers import DDPMScheduler, UNet2DModel
  2. from PIL import Image
  3. import torch
  4. scheduler = DDPMScheduler.from_pretrained("google/ddpm-cat-256")
  5. model = UNet2DModel.from_pretrained("google/ddpm-cat-256").to("cuda")
  6. scheduler.set_timesteps(50)
  7. sample_size = model.config.sample_size
  8. noise = torch.randn((1, 3, sample_size, sample_size), device="cuda")
  9. input = noise
  10. for t in scheduler.timesteps:
  11.     with torch.no_grad():
  12.         noisy_residual = model(input, t).sample
  13.         prev_noisy_sample = scheduler.step(noisy_residual, t, input).prev_sample
  14.         input = prev_noisy_sample
  15. image = (input / 2 + 0.5).clamp(0, 1)
  16. image = image.cpu().permute(0, 2, 3, 1).numpy()[0]
  17. image = Image.fromarray((image * 255).round().astype("uint8"))
  18. image
复制代码
2.3 datasets

2.3.1 简介

datasets是一个轻量级库,旨在让社区轻松添加和共享新的数据集,它提供两个主要功能:

  • 可用于众多公共数据集的dataloaders:可一行代码下载和预处置惩罚HuggingFace Datasets Hub提供的任意数据集,包括图像数据集、音频数据集、467种语言/方言的文本数据集等。示比方squad_dataset=load_dataset(“squad”)。
  • 高效的数据预处置惩罚:可简单、快速和可复制的预处置惩罚众多公共数据集及本地的CSV、JSON、text、PNG、JPEG、WAV、MP3、Parquet等格式数据。示比方processed_dataset=dataset.map(process_example)。
此外,datasets还有许多其他有趣的功能:

  • 适配于大型数据集:datasets将用户从RAM内存限制中解放出来,所有数据集都利用高效的零序列化资本后端(Apache Arrow)进行内存映射。
  • 智能缓存:重复处置惩罚数据无需等候。
  • 支持轻量快速透明的Python API,Python API还具有多处置惩罚器、缓存及内存映射等特性。
  • 内置支持与NumPy、pandas、PyTorch、TensorFlow 2和JAX进行互利用。
  • 原生支持音频和图像数据。
  • 支持启用流模式以节省磁盘空间,可快速开启对数据集进行迭代。
需要指出的是,HuggingFace Datasets源于良好的TensorFlow数据集的一个分支,两者差别主要是HuggingFace Datasets动态加载python脚本而不是在库中提供、后端序列化基于Apache Arrow而不是TF Records、面向用户的datasets对象(封装了一个内存映射的Arrow表缓存)基于与框架无关的由tf.data的方法激发的数据集类而不是基于tf.data.Dataset。
2.3.2 实战

datasets的API以函数datasets.load_dataset(dataset_name, **kwargs)为中心,该函数用于实例化数据集。
加载文本数据集的示例:
[code]from datasets import load_dataset

# Print all the available datasets
from huggingface_hub import list_datasets
print([dataset.id for dataset in list_datasets()])

# Load a dataset and print the first example in the training set
squad_dataset = load_dataset('squad')
print(squad_dataset['train'][0])

# Process the dataset - add a column with the length of the context texts
dataset_with_length = squad_dataset.map(lambda x: {"length": len(x["context"])})

# Process the dataset - tokenize the context texts (using a tokenizer from the

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表