|
import torch |
|
from transformers import AutoProcessor, Llama4ForConditionalGeneration |
|
import time |
|
import os |
|
from huggingface_hub import login |
|
import requests |
|
from PIL import Image |
|
from io import BytesIO |
|
|
|
|
|
import sys |
|
print(f"Python version: {sys.version}") |
|
print(f"PyTorch version: {torch.__version__}") |
|
import transformers |
|
print(f"Transformers version: {transformers.__version__}") |
|
|
|
|
|
token = os.environ.get("HUGGINGFACE_TOKEN", "") |
|
if token: |
|
print(f"Token found: {token[:5]}...") |
|
else: |
|
print("No token found in environment variables!") |
|
|
|
|
|
try: |
|
login(token=token) |
|
print("Successfully logged in to Hugging Face Hub") |
|
except Exception as e: |
|
print(f"Error logging in: {e}") |
|
|
|
|
|
def test_text_generation(): |
|
print("\n=== Testing Text Generation ===") |
|
try: |
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
|
|
model_id = "meta-llama/Llama-4-8B-Instruct" |
|
|
|
print(f"Loading tokenizer from {model_id}...") |
|
tokenizer = AutoTokenizer.from_pretrained(model_id, token=token) |
|
|
|
print(f"Loading model from {model_id}...") |
|
model = AutoModelForCausalLM.from_pretrained( |
|
model_id, |
|
token=token, |
|
torch_dtype=torch.bfloat16, |
|
device_map="auto" |
|
) |
|
|
|
print("Model and tokenizer loaded successfully!") |
|
|
|
|
|
prompt = "Write a short poem about artificial intelligence." |
|
|
|
print(f"Generating text for prompt: '{prompt}'") |
|
inputs = tokenizer(prompt, return_tensors="pt").to(model.device) |
|
|
|
start_time = time.time() |
|
outputs = model.generate(**inputs, max_new_tokens=100) |
|
end_time = time.time() |
|
|
|
result = tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
|
|
print(f"Generation completed in {end_time - start_time:.2f} seconds") |
|
print(f"Result: {result}") |
|
return True |
|
except Exception as e: |
|
print(f"Error in text generation test: {e}") |
|
import traceback |
|
print(traceback.format_exc()) |
|
return False |
|
|
|
|
|
def test_image_text_generation(): |
|
print("\n=== Testing Image-Text Generation ===") |
|
try: |
|
model_id = "meta-llama/Llama-4-Scout-8B-16E-Instruct" |
|
|
|
print(f"Loading processor from {model_id}...") |
|
processor = AutoProcessor.from_pretrained(model_id, token=token) |
|
|
|
print(f"Loading model from {model_id}...") |
|
model = Llama4ForConditionalGeneration.from_pretrained( |
|
model_id, |
|
token=token, |
|
torch_dtype=torch.bfloat16, |
|
device_map="auto" |
|
) |
|
|
|
print("Model and processor loaded successfully!") |
|
|
|
|
|
print("Loading test image...") |
|
response = requests.get("https://huggingface.co/datasets/huggingface/documentation-images/resolve/0052a70beed5bf71b92610a43a52df6d286cd5f3/diffusers/rabbit.jpg") |
|
img = Image.open(BytesIO(response.content)) |
|
print(f"Image loaded: {img.size}") |
|
|
|
|
|
prompt = "Describe this image in two sentences." |
|
|
|
print(f"Creating messages with prompt: '{prompt}'") |
|
messages = [ |
|
{ |
|
"role": "user", |
|
"content": [ |
|
{"type": "image", "url": "data:image/jpeg;base64," + BytesIO(response.content).getvalue().hex()}, |
|
{"type": "text", "text": prompt}, |
|
] |
|
}, |
|
] |
|
|
|
print("Applying chat template...") |
|
inputs = processor.apply_chat_template( |
|
messages, |
|
add_generation_prompt=True, |
|
tokenize=True, |
|
return_dict=True, |
|
return_tensors="pt", |
|
).to(model.device) |
|
|
|
print("Generating response...") |
|
start_time = time.time() |
|
outputs = model.generate(**inputs, max_new_tokens=100) |
|
end_time = time.time() |
|
|
|
result = processor.batch_decode(outputs[:, inputs["input_ids"].shape[-1]:])[0] |
|
|
|
print(f"Generation completed in {end_time - start_time:.2f} seconds") |
|
print(f"Result: {result}") |
|
return True |
|
except Exception as e: |
|
print(f"Error in image-text generation test: {e}") |
|
import traceback |
|
print(traceback.format_exc()) |
|
return False |
|
|
|
if __name__ == "__main__": |
|
print("Starting Llama 4 tests...") |
|
|
|
|
|
text_success = test_text_generation() |
|
|
|
|
|
if text_success: |
|
image_text_success = test_image_text_generation() |
|
else: |
|
print("Skipping image-text test due to text test failure") |
|
image_text_success = False |
|
|
|
|
|
print("\n=== Test Summary ===") |
|
print(f"Text Generation Test: {'SUCCESS' if text_success else 'FAILED'}") |
|
print(f"Image-Text Generation Test: {'SUCCESS' if image_text_success else 'FAILED'}") |
|
|
|
if text_success and image_text_success: |
|
print("\nAll tests passed! Your Llama 4 Scout setup is working correctly.") |
|
else: |
|
print("\nSome tests failed. Please check the error messages above.") |