Spaces:
Sleeping
Sleeping
| """Test the HuggingFace API.""" | |
| import math | |
| import os | |
| from subprocess import PIPE, Popen | |
| import numpy as np | |
| import pytest | |
| from manifest.api.models.huggingface import MODEL_REGISTRY, TextGenerationModel | |
| from manifest.api.models.sentence_transformer import SentenceTransformerModel | |
| NOCUDA = 0 | |
| try: | |
| p = Popen( | |
| [ | |
| "nvidia-smi", | |
| ( | |
| "--query-gpu=index,utilization.gpu,memory.total,memory.used," | |
| "memory.free,driver_version,name,gpu_serial,display_active," | |
| "display_mode" | |
| ), | |
| "--format=csv,noheader,nounits", | |
| ], | |
| stdout=PIPE, | |
| ) | |
| except OSError: | |
| NOCUDA = 1 | |
| MAXGPU = 0 | |
| if NOCUDA == 0: | |
| try: | |
| p = os.popen( # type: ignore | |
| "nvidia-smi --query-gpu=index --format=csv,noheader,nounits" | |
| ) | |
| i = p.read().split("\n") # type: ignore | |
| MAXGPU = int(i[-2]) + 1 | |
| except OSError: | |
| NOCUDA = 1 | |
| def test_load_non_registry_model() -> None: | |
| """Test load model not in registry.""" | |
| model_name = "NinedayWang/PolyCoder-160M" | |
| assert model_name not in MODEL_REGISTRY | |
| model = TextGenerationModel( | |
| model_name_or_path=model_name, model_type="text-generation" | |
| ) | |
| result = model.generate("Why is the sky green?", max_tokens=10) | |
| assert result is not None | |
| def test_gpt_generate() -> None: | |
| """Test pipeline generation from a gpt model.""" | |
| model = TextGenerationModel( | |
| model_name_or_path="gpt2", | |
| use_accelerate=False, | |
| use_parallelize=False, | |
| use_bitsandbytes=False, | |
| use_deepspeed=False, | |
| use_fp16=False, | |
| device=-1, | |
| ) | |
| inputs = "Why is the sky green?" | |
| result = model.generate(inputs, max_tokens=10) | |
| assert result is not None | |
| assert len(result) == 1 | |
| assert result[0][0] == "\n\nThe sky is green.\n\nThe" | |
| assert math.isclose(round(result[0][1], 3), -11.516) | |
| result = model.generate("Cats are", max_tokens=10) | |
| assert result is not None | |
| assert len(result) == 1 | |
| assert result[0][0] == " not the only ones who are being targeted by the" | |
| assert math.isclose(round(result[0][1], 3), -21.069) | |
| result = model.generate(inputs, max_tokens=5) | |
| assert result is not None | |
| assert len(result) == 1 | |
| assert result[0][0] == "\n\nThe sky is" | |
| assert math.isclose(round(result[0][1], 3), -6.046) | |
| # Truncate max length | |
| model.pipeline.max_length = 5 | |
| result = model.generate(inputs, max_tokens=2) | |
| assert result is not None | |
| assert len(result) == 1 | |
| assert result[0][0] == "\n\n" | |
| assert math.isclose(round(result[0][1], 3), -1.414) | |
| def test_encdec_generate() -> None: | |
| """Test pipeline generation from a gpt model.""" | |
| model = TextGenerationModel( | |
| model_name_or_path="google/t5-small-lm-adapt", | |
| use_accelerate=False, | |
| use_parallelize=False, | |
| use_bitsandbytes=False, | |
| use_deepspeed=False, | |
| use_fp16=False, | |
| device=-1, | |
| ) | |
| inputs = "Why is the sky green?" | |
| result = model.generate(inputs, max_tokens=10) | |
| assert result is not None | |
| assert len(result) == 1 | |
| assert result[0][0] == "What is the sky green? What is the sky" | |
| assert math.isclose(round(result[0][1], 3), -7.271) | |
| result = model.generate("Cats are", max_tokens=10) | |
| assert result is not None | |
| assert len(result) == 1 | |
| assert result[0][0] == "a great way to get out of the house" | |
| assert math.isclose(round(result[0][1], 3), -13.868) | |
| result = model.generate(inputs, max_tokens=5) | |
| assert result is not None | |
| assert len(result) == 1 | |
| assert result[0][0] == "What is the sky green" | |
| assert math.isclose(round(result[0][1], 3), -5.144) | |
| # Truncate max length | |
| model.pipeline.max_length = 5 | |
| result = model.generate(inputs, max_tokens=2) | |
| assert result is not None | |
| assert len(result) == 1 | |
| assert result[0][0] == "Is" | |
| assert math.isclose(round(result[0][1], 3), -4.233) | |
| def test_gpt_score() -> None: | |
| """Test pipeline generation from a gpt model.""" | |
| model = TextGenerationModel( | |
| model_name_or_path="gpt2", | |
| use_accelerate=False, | |
| use_parallelize=False, | |
| use_bitsandbytes=False, | |
| use_deepspeed=False, | |
| use_fp16=False, | |
| device=-1, | |
| ) | |
| inputs = ["Why is the sky green?", "Cats are butterflies"] | |
| result = model.score_sequence(inputs) | |
| assert result is not None | |
| assert len(result) == 2 | |
| assert math.isclose(round(result[0][0], 3), -46.71) | |
| assert math.isclose(round(result[1][0], 3), -12.752) | |
| assert isinstance(result[0][1], list) | |
| assert isinstance(result[1][1], list) | |
| def test_embed() -> None: | |
| """Test embedding pipeline.""" | |
| model = TextGenerationModel( | |
| model_name_or_path="gpt2", | |
| use_accelerate=False, | |
| use_parallelize=False, | |
| use_bitsandbytes=False, | |
| use_deepspeed=False, | |
| use_fp16=False, | |
| device=-1, | |
| ) | |
| inputs = ["Why is the sky green?", "Cats are butterflies"] | |
| embeddings = model.embed(inputs) | |
| assert isinstance(embeddings, np.ndarray) | |
| assert embeddings.shape == (2, 768) | |
| model2 = SentenceTransformerModel( | |
| model_name_or_path="all-mpnet-base-v2", | |
| use_accelerate=False, | |
| use_parallelize=False, | |
| use_bitsandbytes=False, | |
| use_deepspeed=False, | |
| use_fp16=False, | |
| device=-1, | |
| ) | |
| inputs = ["Why is the sky green?", "Cats are butterflies"] | |
| embeddings = model2.embed(inputs) | |
| assert isinstance(embeddings, np.ndarray) | |
| assert embeddings.shape == (2, 768) | |
| def test_batch_gpt_generate() -> None: | |
| """Test pipeline generation from a gpt model.""" | |
| model = TextGenerationModel( | |
| model_name_or_path="gpt2", | |
| use_accelerate=False, | |
| use_parallelize=False, | |
| use_bitsandbytes=False, | |
| use_deepspeed=False, | |
| use_fp16=False, | |
| device=-1, | |
| ) | |
| inputs = ["Why is the sky green?", "Cats are"] | |
| result = model.generate(inputs, max_tokens=10) | |
| assert result is not None | |
| assert len(result) == 2 | |
| assert result[0][0] == "\n\nThe sky is green.\n\nThe" | |
| assert math.isclose(round(result[0][1], 3), -11.516) | |
| assert result[1][0] == " not the only ones who are being targeted by the" | |
| assert math.isclose(round(result[1][1], 3), -21.069) | |
| result = model.generate(inputs, max_tokens=5) | |
| assert result is not None | |
| assert len(result) == 2 | |
| assert result[0][0] == "\n\nThe sky is" | |
| assert math.isclose(round(result[0][1], 2), -6.05) | |
| assert result[1][0] == " not the only ones who" | |
| assert math.isclose(round(result[1][1], 3), -9.978) | |
| # Truncate max length | |
| model.pipeline.max_length = 5 | |
| result = model.generate(inputs, max_tokens=2) | |
| assert result is not None | |
| assert len(result) == 2 | |
| assert result[0][0] == "\n\n" | |
| assert math.isclose(round(result[0][1], 3), -1.414) | |
| assert result[1][0] == " not the" | |
| assert math.isclose(round(result[1][1], 3), -6.246) | |
| def test_batch_encdec_generate() -> None: | |
| """Test pipeline generation from a gpt model.""" | |
| model = TextGenerationModel( | |
| model_name_or_path="google/t5-small-lm-adapt", | |
| use_accelerate=False, | |
| use_parallelize=False, | |
| use_bitsandbytes=False, | |
| use_deepspeed=False, | |
| use_fp16=False, | |
| device=-1, | |
| ) | |
| inputs = ["Why is the sky green?", "Cats are"] | |
| result = model.generate(inputs, max_tokens=10) | |
| assert result is not None | |
| assert len(result) == 2 | |
| assert result[0][0] == "What is the sky green? What is the sky" | |
| assert math.isclose(round(result[0][1], 3), -7.271) | |
| assert result[1][0] == "a great way to get out of the house" | |
| assert math.isclose(round(result[1][1], 3), -13.868) | |
| result = model.generate(inputs, max_tokens=5) | |
| assert result is not None | |
| assert len(result) == 2 | |
| assert result[0][0] == "What is the sky green" | |
| assert math.isclose(round(result[0][1], 3), -5.144) | |
| assert result[1][0] == "a great way to" | |
| assert math.isclose(round(result[1][1], 3), -6.353) | |
| # Truncate max length | |
| model.pipeline.max_length = 5 | |
| result = model.generate(inputs, max_tokens=2) | |
| assert result is not None | |
| assert len(result) == 2 | |
| assert result[0][0] == "Is" | |
| assert math.isclose(round(result[0][1], 3), -4.233) | |
| assert result[1][0] == "a" | |
| assert math.isclose(round(result[1][1], 3), -1.840) | |
| def test_gpt_deepspeed_generate() -> None: | |
| """Test deepspeed generation from a gpt model.""" | |
| model = TextGenerationModel( | |
| model_name_or_path="gpt2", | |
| use_accelerate=False, | |
| use_parallelize=False, | |
| use_bitsandbytes=False, | |
| use_deepspeed=True, | |
| use_fp16=False, | |
| device=0, | |
| ) | |
| inputs = "Why is the sky green?" | |
| result = model.generate(inputs, max_tokens=10) | |
| assert result is not None | |
| assert len(result) == 1 | |
| assert result[0][0] == "\n\nThe sky is green.\n\nThe" | |
| assert math.isclose(round(result[0][1], 3), -11.517) | |