AWS Trainium & Inferentia 文件
CLIP
並獲得增強的文件體驗
開始使用
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.encode
和PreTrainedTokenizer.__call__
。什麼是輸入 ID? - attention_mask (
torch.Tensor | None
, 形狀為(batch_size, sequence_length)
) — 用於避免對填充 token 索引執行注意力操作的掩碼。掩碼值選擇在[0, 1]
中:- 1 表示 未被掩蓋 的 token,
- 0 表示 被掩蓋 的 token。什麼是注意力掩碼?
- 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()