46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
import numpy as np
|
|
import pytest
|
|
import torch
|
|
from PIL import Image
|
|
import habana_frameworks.torch
|
|
|
|
import clip
|
|
|
|
|
|
@pytest.mark.parametrize("model_name", clip.available_models())
|
|
def test_consistency(model_name):
|
|
device = "cpu"
|
|
jit_model, transform = clip.load(model_name, device=device, jit=True)
|
|
py_model, _ = clip.load(model_name, device=device, jit=False)
|
|
|
|
image = transform(Image.open("CLIP.png")).unsqueeze(0).to(device)
|
|
text = clip.tokenize(["a diagram", "a dog", "a cat"]).to(device)
|
|
|
|
with torch.no_grad():
|
|
logits_per_image, _ = jit_model(image, text)
|
|
jit_probs = logits_per_image.softmax(dim=-1).cpu().numpy()
|
|
|
|
logits_per_image, _ = py_model(image, text)
|
|
py_probs = logits_per_image.softmax(dim=-1).cpu().numpy()
|
|
|
|
assert np.allclose(jit_probs, py_probs, atol=0.01, rtol=0.1)
|
|
|
|
|
|
@pytest.mark.parametrize("model_name", clip.available_models())
|
|
def test_hpu_support(model_name):
|
|
devices = ["hpu", "cpu"]
|
|
all_probs = []
|
|
for device in devices:
|
|
print(f"=== Testing {model_name} on {device} ===")
|
|
model, transform = clip.load(model_name, device=device, jit=False)
|
|
|
|
image = transform(Image.open("CLIP.png")).unsqueeze(0).to(device)
|
|
text = clip.tokenize(["a diagram", "a dog", "a cat"]).to(device)
|
|
|
|
with torch.no_grad():
|
|
logits_per_image, _ = model(image, text)
|
|
probs = logits_per_image.softmax(dim=-1).cpu().numpy()
|
|
all_probs.append(probs)
|
|
|
|
assert np.allclose(all_probs[0], all_probs[1], atol=0.01, rtol=0.1)
|