Skip to content

Latest commit

 

History

History
109 lines (76 loc) · 4.09 KB

pipelines.mdx

File metadata and controls

109 lines (76 loc) · 4.09 KB

Ryzen Inference pipelines

The pipelines are a great and easy way to use models for inference. These pipelines are objects that abstract most of the complex code from the library, offering a simple API dedicated to several tasks.

Currently the supported tasks are:

The pipeline abstraction

The pipeline abstraction is a wrapper around all the available pipelines for specific tasks. The pipeline() function automatically loads a default model and tokenizer/feature-extractor capable of performing inference for your task.

  1. Start by creating a pipeline by specifying an inference task:
>>> from optimum.amd.ryzenai import pipeline

>>> detector = pipeline("object-detection")
  1. Pass your input text/image to the [~pipelines.pipeline] function:
>>> import requests
>>> from PIL import Image

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)

>>> detector(image)  # doctest: +IGNORE_RESULT
[   {   'box': {'xmax': 325, 'xmin': 2, 'ymax': 465, 'ymin': 50},
        'label': 15.0,
        'score': 0.7081549763679504},
    {   'box': {'xmax': 630, 'xmin': 347, 'ymax': 381, 'ymin': 16},
        'label': 15.0,
        'score': 0.6494212746620178},
    {   'box': {'xmax': 369, 'xmin': 335, 'ymax': 187, 'ymin': 76},
        'label': 65.0,
        'score': 0.6064183115959167},
    {   'box': {'xmax': 645, 'xmin': 2, 'ymax': 475, 'ymin': 4},
        'label': 57.0,
        'score': 0.599224865436554},
    {   'box': {'xmax': 174, 'xmin': 40, 'ymax': 116, 'ymin': 73},
        'label': 65.0,
        'score': 0.408765971660614}]

Inference with RyzenAI models from the Hugging Face Hub

The [~ryzenai.pipelines.pipeline] function can load Ryzen AI supported models from the Hugging Face Hub. Once you have picked an appropriate model, you can create the [~ryzenai.pipelines.pipeline] by specifying the model repository:

>>> import requests
>>> from PIL import Image

>>> from optimum.amd.ryzenai import pipeline

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)

>>> # Hugging Face hub model-id with the quantized ONNX model
>>> model_id = "mohitsha/timm-resnet18-onnx-quantized-ryzen"

>>> pipe = pipeline("image-classification", model=model_id)
>>> print(pipe(image))

Using RyzenModelForXXX class

It is also possible to load the model with the RyzenModelForXXX class. For example, here is how you can load the [~ryzenai.RyzenModelForImageClassification] class for image classification:

>>> import requests
>>> from PIL import Image

>>> from optimum.amd.ryzenai import RyzenAIModelForImageClassification
>>> from optimum.amd.ryzenai import pipeline


>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)

>>> # Hugging Face hub model-id with the quantized ONNX model
>>> model_id = "mohitsha/timm-resnet18-onnx-quantized-ryzen"
>>> model = RyzenAIModelForImageClassification.from_pretrained(model_id)

>>> pipe = pipeline("image-classification", model=model)
>>> print(pipe(image))

Using model_type argument

For some models, model_type and/or image_preprocessor has to be provided in addition to the model_id for inference. For example, here is how you can run inference using yolox:

>>> import requests
>>> from PIL import Image

>>> from optimum.amd.ryzenai import pipeline

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)

>>> model_id = "amd/yolox-s"

>>> pipe = pipeline("object-detection", model=model_id, model_type="yolox")
>>> print(pipe(image))