Image-Text-to-Text
Transformers
Safetensors
English
idefics2
multimodal
vision
text-generation-inference
Instructions to use huz-relay/idefics2-8b-ocr with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use huz-relay/idefics2-8b-ocr with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="huz-relay/idefics2-8b-ocr")# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("huz-relay/idefics2-8b-ocr") model = AutoModelForMultimodalLM.from_pretrained("huz-relay/idefics2-8b-ocr", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use huz-relay/idefics2-8b-ocr with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "huz-relay/idefics2-8b-ocr" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "huz-relay/idefics2-8b-ocr", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/huz-relay/idefics2-8b-ocr
- SGLang
How to use huz-relay/idefics2-8b-ocr with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "huz-relay/idefics2-8b-ocr" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "huz-relay/idefics2-8b-ocr", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "huz-relay/idefics2-8b-ocr" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "huz-relay/idefics2-8b-ocr", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use huz-relay/idefics2-8b-ocr with Docker Model Runner:
docker model run hf.co/huz-relay/idefics2-8b-ocr
Download handler.py from huz-relay/idefics2-8b-ocr: direct link, hf CLI and curl.
- Browser
- Download file 3.04 kB
-
https://huggingface.co/huz-relay/idefics2-8b-ocr/resolve/main/handler.py
- Command line
-
hf download hf://huz-relay/idefics2-8b-ocr/handler.py
-
curl -L -o handler.py https://huggingface.co/huz-relay/idefics2-8b-ocr/resolve/main/handler.py
3.04 kB
| from typing import Any, Dict, List | |
| from transformers import Idefics2Processor, Idefics2ForConditionalGeneration | |
| import torch | |
| import logging | |
| from PIL import Image | |
| import requests | |
| class EndpointHandler: | |
| def __init__(self, path=""): | |
| # Preload all the elements you are going to need at inference. | |
| self.logger = logging.getLogger() | |
| self.logger.addHandler(logging.StreamHandler()) | |
| self.device = "cuda" if torch.cuda.is_available() else "cpu" | |
| self.processor = Idefics2Processor.from_pretrained(path) | |
| self.model = Idefics2ForConditionalGeneration.from_pretrained(path) | |
| self.model.to(self.device) | |
| self.logger.info("Initialisation finished!") | |
| def __call__(self, data: Dict[str, Any]) -> List[Dict[str, Any]]: | |
| """ | |
| data args: | |
| inputs (:obj: `str` | `PIL.Image` | `np.array`) | |
| kwargs | |
| Return: | |
| A :obj:`list` | `dict`: will be serialized and returned | |
| """ | |
| """image = data.pop("inputs", data) | |
| self.logger.info("image") | |
| # process image | |
| inputs = self.processor(images=image, return_tensors="pt").to(self.device) | |
| self.logger.info("inputs") | |
| self.logger.info(f"{inputs.input_ids}") | |
| generated_ids = self.model.generate(**inputs) | |
| self.logger.info("generated") | |
| # run prediction | |
| generated_text = self.processor.batch_decode( | |
| generated_ids, skip_special_tokens=True | |
| ) | |
| self.logger.info("decoded")""" | |
| url_2 = "http://images.cocodataset.org/val2017/000000219578.jpg" | |
| image_1 = data.pop("inputs", data) | |
| image_2 = Image.open(requests.get(url_2, stream=True).raw) | |
| images = [image_1, image_2] | |
| messages = [ | |
| { | |
| "role": "user", | |
| "content": [ | |
| { | |
| "type": "text", | |
| "text": "What’s the difference between these two images?", | |
| }, | |
| {"type": "image"}, | |
| {"type": "image"}, | |
| ], | |
| } | |
| ] | |
| self.model.to(self.device) | |
| # at inference time, one needs to pass `add_generation_prompt=True` in order to make sure the model completes the prompt | |
| text = self.processor.apply_chat_template(messages, add_generation_prompt=True) | |
| self.logger.info(text) | |
| # 'User: What’s the difference between these two images?<image><image><end_of_utterance>\nAssistant:' | |
| inputs = self.processor(images=images, text=text, return_tensors="pt").to( | |
| self.device | |
| ) | |
| self.logger.info("inputs") | |
| generated_text = self.model.generate(**inputs, max_new_tokens=500) | |
| self.logger.info("generated") | |
| generated_text = self.processor.batch_decode( | |
| generated_text, skip_special_tokens=True | |
| )[0] | |
| self.logger.info(f"Generated text: {generated_text}") | |
| # decode output | |
| return generated_text | |