AWS Trainium & Inferentia 文件

CLIP

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

CLIP

概述

CLIP 模型由 Alec Radford、Jong Wook Kim、Chris Hallacy、Aditya Ramesh、Gabriel Goh、Sandhini Agarwal、Girish Sastry、Amanda Askell、Pamela Mishkin、Jack Clark、Gretchen Krueger 和 Ilya Sutskever 在 《Learning Transferable Visual Models From Natural Language Supervision》中提出。CLIP(Contrastive Language-Image Pre-Training,對比語言-影像預訓練)是一種在各種(影像,文字)對上訓練的神經網路。它可以根據自然語言指令,在給定影像的情況下預測最相關的文字片段,而無需直接最佳化該任務,類似於 GPT-2 和 GPT-3 的零樣本能力。

匯出到 Neuron

要在 Neuron 裝置上部署 🤗 Transformers 模型,您首先需要編譯模型並將其匯出為推理的序列化格式。下面有兩種編譯模型的方法,您可以選擇最適合您需求的方法。這裡我們以 feature-extraction 為例。

選項 1:CLI

您可以使用 Optimum 命令列介面匯出模型,如下所示:

optimum-cli export neuron --model openai/clip-vit-base-patch32 --task feature-extraction --text_batch_size 2 --sequence_length 77 --image_batch_size 1 --num_channels 3 --width 224 --height 224 clip_feature_extraction_neuronx/

執行 optimum-cli export neuron --help 以顯示所有命令列選項及其描述。

選項 2:Python API

from optimum.neuron import NeuronCLIPModel

input_shapes = {"text_batch_size": 2, "sequence_length": 77, "image_batch_size": 1, "num_channels": 3, "width": 224, "height": 224}
compiler_args = {"auto_cast": "matmul", "auto_cast_type": "bf16"}
neuron_model = NeuronCLIPModel.from_pretrained(
    "openai/clip-vit-base-patch32",
    export=True,
    **input_shapes,
    **compiler_args,
)
# Save locally
neuron_model.save_pretrained("clip_feature_extraction_neuronx/")

# Upload to the HuggingFace Hub
neuron_model.push_to_hub(
    "clip_feature_extraction_neuronx/", repository_id="optimum/clip-vit-base-patch32-neuronx"  # Replace with your HF Hub repo id
)

NeuronCLIPModel

class optimum.neuron.NeuronCLIPModel

< >

( model: ScriptModule config: PretrainedConfig model_save_dir: str | pathlib.Path | tempfile.TemporaryDirectory | None = None model_file_name: str | None = None preprocessors: list | None = None neuron_config: NeuronDefaultConfig | None = None **kwargs )

引數

  • 配置 (transformers.PretrainedConfig) — PretrainedConfig 是模型配置類,包含模型的所有引數。使用配置檔案初始化時,不會載入與模型相關的權重,僅載入配置。請檢視 optimum.neuron.modeling.NeuronTracedModel.from_pretrained 方法以載入模型權重。
  • 模型 (torch.jit._script.ScriptModule) — torch.jit._script.ScriptModule 是包含由 neuron(x) 編譯器編譯的嵌入式 NEFF(Neuron 可執行檔案格式)的 TorchScript 模組。

純粹的 CLIP 模型,頂部沒有任何特定的頭部,用於“特徵提取”任務。

此模型繼承自 ~neuron.modeling.NeuronTracedModel。請檢視超類文件以瞭解庫為其所有模型實現的通用方法(例如下載或儲存)。

前向傳播

< >

( input_ids: Tensor pixel_values: Tensor attention_mask: Tensor **kwargs )

引數

  • input_ids (torch.Tensor, 形狀為 (batch_size, sequence_length)) — 詞彙表中輸入序列 token 的索引。索引可以透過 AutoTokenizer 獲取。有關詳細資訊,請參見 PreTrainedTokenizer.encodePreTrainedTokenizer.__call__什麼是輸入 ID?
  • attention_mask (torch.Tensor | None, 形狀為 (batch_size, sequence_length)) — 用於避免對填充 token 索引執行注意力操作的掩碼。掩碼值選擇在 [0, 1] 中:
  • pixel_values (torch.Tensor | None, 形狀為 (batch_size, num_channels, height, width)) — 當前批次中影像對應的畫素值。畫素值可以透過 AutoImageProcessor 從編碼影像中獲取。

NeuronCLIPModel 的前向方法會覆蓋 __call__ 特殊方法。它只接受編譯步驟中跟蹤的輸入。推理過程中提供的任何額外輸入都將被忽略。要包含額外輸入,請重新編譯模型並指定這些輸入。

示例

>>> from transformers import AutoProcessor
>>> from optimum.neuron import NeuronCLIPModel

>>> processor = AutoProcessor.from_pretrained("optimum/clip-vit-base-patch32-neuronx")
>>> model = NeuronCLIPModel.from_pretrained("optimum/clip-vit-base-patch32-neuronx")

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True)

>>> outputs = model(**inputs)
>>> logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
>>> probs = logits_per_image.softmax(dim=1)

NeuronCLIPForImageClassification

class optimum.neuron.NeuronCLIPForImageClassification

< >

( model: ScriptModule config: PretrainedConfig model_save_dir: str | pathlib.Path | tempfile.TemporaryDirectory | None = None model_file_name: str | None = None preprocessors: list | None = None neuron_config: NeuronDefaultConfig | None = None **kwargs )

引數

  • 配置 (transformers.PretrainedConfig) — PretrainedConfig 是模型配置類,包含模型的所有引數。使用配置檔案初始化時,不會載入與模型相關的權重,僅載入配置。請檢視 optimum.neuron.modeling.NeuronTracedModel.from_pretrained 方法以載入模型權重。
  • 模型 (torch.jit._script.ScriptModule) — torch.jit._script.ScriptModule 是包含由 neuron(x) 編譯器編譯的嵌入式 NEFF(Neuron 可執行檔案格式)的 TorchScript 模組。

CLIP 視覺編碼器,頂部帶有影像分類頭(在補丁 token 的池化最終隱藏狀態之上新增一個線性層),例如用於 ImageNet。

此模型繼承自 ~neuron.modeling.NeuronTracedModel。請檢視超類文件以瞭解庫為其所有模型實現的通用方法(例如下載或儲存)。

前向傳播

< >

( pixel_values: Tensor **kwargs )

引數

  • pixel_values (torch.Tensor | None, 形狀為 (batch_size, num_channels, height, width),預設為 None) — 當前批次中影像對應的畫素值。畫素值可以透過 AutoImageProcessor 從編碼影像中獲取。

NeuronCLIPForImageClassification 的前向方法會覆蓋 __call__ 特殊方法。它只接受編譯步驟中跟蹤的輸入。推理過程中提供的任何額外輸入都將被忽略。要包含額外輸入,請重新編譯模型並指定這些輸入。

示例

>>> import requests
>>> from PIL import Image
>>> from optimum.neuron import NeuronCLIPForImageClassification
>>> from transformers import AutoImageProcessor

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)

>>> preprocessor = AutoImageProcessor.from_pretrained("optimum/clip-vit-base-patch32-image-classification-neuronx")
>>> model = NeuronCLIPForImageClassification.from_pretrained("optimum/clip-vit-base-patch32-image-classification-neuronx")

>>> inputs = preprocessor(images=image, return_tensors="pt")

>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> predicted_label = logits.argmax(-1).item()

© . This site is unofficial and not affiliated with Hugging Face, Inc.