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()