Skip to main content

A lightweight http client library for communicating with Nvidia Triton Inference Server (with Pyodide support in the browser)

Project description

Triton HTTP Client for Pyodide

A Pyodide python http client library and utilities for communicating with Triton Inference Server (based on tritonclient from NVIDIA).

This is a simplified implemetation of the triton client from NVIDIA, it works both in the browser with Pyodide Python or the native Python. It only implement the http client, and most of the API remains the similar but changed into async and with additional utility functions.

Installation

To use it in native CPython, you can install the package by running:

pip install pyotritonclient

For Pyodide-based Python environment, for example: JupyterLite or Pyodide console, you can install the client by running the following python code:

import micropip
micropip.install("pyotritonclient")

Usage

Basic example

To execute the model, we provide utility functions to make it much easier:

import numpy as np
from pyotritonclient import execute

# create fake input tensors
input0 = np.zeros([2, 349, 467], dtype='float32')
# run inference
results = await execute(inputs=[input0, {"diameter": 30}], server_url='https://ai.imjoy.io/triton', model_name='cellpose-python')

The above example assumes you are running the code in a jupyter notebook or an environment supports top-level await, if you are trying the example code in a normal python script, please wrap the code into an async function and run with asyncio as follows:

import asyncio
import numpy as np
from pyotritonclient import execute

async def run():
    results = await execute(inputs=[np.zeros([2, 349, 467], dtype='float32'), {"diameter": 30}], server_url='https://ai.imjoy.io/triton', model_name='cellpose-python')
    print(results)

loop = asyncio.get_event_loop()
loop.run_until_complete(run())

You can access the lower level api, see the test example.

You can also find the official client examples demonstrate how to use the package to issue request to triton inference server. However, please notice that you will need to change the http client code into async style. For example, instead of doing client.infer(...), you need to do await client.infer(...).

The http client code is forked from triton client git repo since commit b3005f9db154247a4c792633e54f25f35ccadff0.

Using the sequence executor with stateful models

To simplify the manipulation on stateful models with sequence, we also provide the SequenceExecutor to make it easier to run models in a sequence.

from pyotritonclient import SequenceExcutor


seq = SequenceExcutor(
  server_url='https://ai.imjoy.io/triton',
  model_name='cellpose-train',
  sequence_id=100
)
inputs = [
  image.astype('float32'),
  labels.astype('float32'),
  {"steps": 1, "resume": True}
]
for (image, labels, info) in train_samples:
  result = await seq.step(inputs)

result = await seq.end(inputs)

Note that above example called seq.end() by sending the last inputs again to end the sequence. If you want to specify the inputs for the execution, you can run result = await se.end(inputs).

For a small batch of data, you can also run it like this:

from pyotritonclient import SequenceExcutor

seq = SequenceExcutor(
  server_url='https://ai.imjoy.io/triton',
  model_name='cellpose-train',
  sequence_id=100
)

# a list of inputs
inputs_batch = [[
  image.astype('float32'),
  labels.astype('float32'),
  {"steps": 1, "resume": True}
] for (image, labels, _) in train_samples]

def on_step(i, result):
  """Function called on every step"""
  print(i)

results = await seq(inputs_batch, on_step=on_step)

Server setup

Since we access the server from the browser environment which typically has more security restrictions, it is important that the server is configured to enable browser access.

Please make sure you configured following aspects:

  • The server must provide HTTPS endpoints instead of HTTP
  • The server should send the following headers:
    • Access-Control-Allow-Headers: Inference-Header-Content-Length,Accept-Encoding,Content-Encoding,Access-Control-Allow-Headers
    • Access-Control-Expose-Headers: Inference-Header-Content-Length,Range,Origin,Content-Type
    • Access-Control-Allow-Methods: GET,HEAD,OPTIONS,PUT,POST
    • Access-Control-Allow-Origin: * (This is optional depending on whether you want to support CORS)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyotritonclient-0.1.35.tar.gz (22.1 kB view details)

Uploaded Source

Built Distribution

pyotritonclient-0.1.35-py3-none-any.whl (22.7 kB view details)

Uploaded Python 3

File details

Details for the file pyotritonclient-0.1.35.tar.gz.

File metadata

  • Download URL: pyotritonclient-0.1.35.tar.gz
  • Upload date:
  • Size: 22.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.6.3 pkginfo/1.8.2 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.6

File hashes

Hashes for pyotritonclient-0.1.35.tar.gz
Algorithm Hash digest
SHA256 767b8b31ce332ca772c16785851096b15d6dc401a7d9113d68e5c07c8b6bdf90
MD5 da5d20c631092d87beacf2960414c94c
BLAKE2b-256 29d7b20bd021a0f3f304c6b5dcc4e920fbeb96c9fa73fcc6afb47063ad0000b3

See more details on using hashes here.

File details

Details for the file pyotritonclient-0.1.35-py3-none-any.whl.

File metadata

  • Download URL: pyotritonclient-0.1.35-py3-none-any.whl
  • Upload date:
  • Size: 22.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.6.3 pkginfo/1.8.2 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.6

File hashes

Hashes for pyotritonclient-0.1.35-py3-none-any.whl
Algorithm Hash digest
SHA256 8d80ea50c5ca44fc6cfd2211067b99aeec006b908033d7835ac78a2e13ebeb3f
MD5 d9f5aac1b22f407df7a2fec2417921eb
BLAKE2b-256 94c7597c4c28f0ab081c9dfa60a609ca2a9dfe74f3d7e9b23caa30c69a6942c8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page