Skip to main content

Model Serving made Efficient in the Cloud

Project description

MOSEC

discord invitation link PyPI version Python Version PyPi Downloads License Check status

Model Serving made Efficient in the Cloud.

Introduction

Mosec is a high-performance and flexible model serving framework for building ML model-enabled backend and microservices. It bridges the gap between any machine learning models you just trained and the efficient online service API.

  • Highly performant: web layer and task coordination built with Rust 🦀, which offers blazing speed in addition to efficient CPU utilization powered by async I/O
  • Ease of use: user interface purely in Python 🐍, by which users can serve their models in an ML framework-agnostic manner using the same code as they do for offline testing
  • Dynamic batching: aggregate requests from different users for batched inference and distribute results back
  • Pipelined stages: spawn multiple processes for pipelined stages to handle CPU/GPU/IO mixed workloads
  • Cloud friendly: designed to run in the cloud, with the model warmup, graceful shutdown, and Prometheus monitoring metrics, easily managed by Kubernetes or any container orchestration systems
  • Do one thing well: focus on the online serving part, users can pay attention to the model optimization and business logic

Installation

Mosec requires Python 3.7 or above. Install the latest PyPI package with:

pip install -U mosec

Usage

We demonstrate how Mosec can help you easily host a pre-trained stable diffusion model as a service. You need to install diffusers and transformers as prerequisites:

pip install --upgrade diffusers[torch] transformers

Write the server

Firstly, we import the libraries and set up a basic logger to better observe what happens.

from io import BytesIO
from typing import List

import torch  # type: ignore
from diffusers import StableDiffusionPipeline  # type: ignore

from mosec import Server, Worker, get_logger
from mosec.mixin import MsgpackMixin

logger = get_logger()

Then, we build an API for clients to query a text prompt and obtain an image based on the stable-diffusion-v1-5 model in just 3 steps.

  1. Define your service as a class which inherits mosec.Worker. Here we also inherit MsgpackMixin to employ the msgpack serialization format(a).

  2. Inside the __init__ method, initialize your model and put it onto the corresponding device. Optionally you can assign self.example with some data to warm up(b) the model. Note that the data should be compatible with your handler's input format, which we detail next.

  3. Override the forward method to write your service handler(c), with the signature forward(self, data: Any | List[Any]) -> Any | List[Any]. Receiving/returning a single item or a tuple depends on whether dynamic batching(d) is configured.

class StableDiffusion(MsgpackMixin, Worker):
    def __init__(self):
        self.pipe = StableDiffusionPipeline.from_pretrained(
            "runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16
        )
        device = "cuda" if torch.cuda.is_available() else "cpu"
        self.pipe = self.pipe.to(device)
        self.example = ["useless example prompt"] * 4  # warmup (bs=4)

    def forward(self, data: List[str]) -> List[memoryview]:
        logger.debug("generate images for %s", data)
        res = self.pipe(data)
        logger.debug("NSFW: %s", res[1])
        images = []
        for img in res[0]:
            dummy_file = BytesIO()
            img.save(dummy_file, format="JPEG")
            images.append(dummy_file.getbuffer())
        return images

Note

(a) In this example we return an image in the binary format, which JSON does not support (unless encoded with base64 that makes it longer). Hence, msgpack suits our need better. If we do not inherit MsgpackMixin, JSON will be used by default. In other words, the protocol of the service request/response can either be msgpack or JSON.

(b) Warm-up usually helps to allocate GPU memory in advance. If the warm-up example is specified, the service will only be ready after the example is forwarded through the handler. However, if no example is given, the first request's latency is expected to be longer. The example should be set as a single item or a tuple depending on what forward expects to receive. Moreover, in the case where you want to warm up with multiple different examples, you may set multi_examples (demo here).

(c) This example shows a single-stage service, where the StableDiffusion worker directly takes in client's prompt request and responds the image. Thus the forward can be considered as a complete service handler. However, we can also design a multi-stage service with workers doing different jobs (e.g., downloading images, forward model, post-processing) in a pipeline. In this case, the whole pipeline is considered as the service handler, with the first worker taking in the request and the last worker sending out the response. The data flow between workers is done by inter-process communication.

(d) Since dynamic batching is enabled in this example, the forward method will wishfully receive a list of string, e.g., ['a cute cat playing with a red ball', 'a man sitting in front of a computer', ...], aggregated from different clients for batch inference, improving the system throughput.

Finally, we append the worker to the server to construct a single-stage workflow (multiple stages can be pipelined to further boost the throughput, see this example), and specify the number of processes we want it to run in parallel (num=1), and the maximum batch size (max_batch_size=4, the maximum number of requests dynamic batching will accumulate before timeout; timeout is defined with the flag --wait in milliseconds, meaning the longest time Mosec waits until sending the batch to the Worker).

if __name__ == "__main__":
    server = Server()
    # 1) `num` specify the number of processes that will be spawned to run in parallel.
    # 2) By configuring the `max_batch_size` with the value > 1, the input data in your
    # `forward` function will be a list (batch); otherwise, it's a single item.
    server.append_worker(StableDiffusion, num=1, max_batch_size=4, max_wait_time=10)
    server.run()

Run the server

The above snippets are merged in our example file. You may directly run at the project root level. We first have a look at the command line arguments (explanations here):

python examples/stable_diffusion/server.py --help

Then let's start the server with debug logs:

python examples/stable_diffusion/server.py --debug

And in another terminal, test it:

python examples/stable_diffusion/client.py --prompt "a cute cat playing with a red ball" --output cat.jpg --port 8000

You will get an image named "cat.jpg" in the current directory.

You can check the metrics:

curl http://127.0.0.1:8000/metrics

That's it! You have just hosted your stable-diffusion model as a service! 😉

Examples

More ready-to-use examples can be found in the Example section. It includes:

Configuration

  • Dynamic batching
    • max_batch_size is configured when you append_worker (make sure inference with the max value won't cause the out-of-memory in GPU).
    • --wait (default=10ms) is configured through CLI arguments (this usually should <= one batch inference duration).
    • If enabled, it will collect a batch either when it reaches the max_batch_size or the wait time.
  • Check the arguments doc.

Deployment

  • This may require some shared memory, remember to set the --shm-size flag if you are using docker.
  • This service doesn't require Gunicorn or NGINX, but you can certainly use the ingress controller. BTW, it should be the PID 1 process in the container since it controls multiple processes.
  • Remember to collect the metrics.
    • mosec_service_batch_size_bucket shows the batch size distribution.
    • mosec_service_batch_duration_second_bucket shows the duration of dynamic batching for each connection in each stage (starts from receiving the first task).
    • mosec_service_process_duration_second_bucket shows the duration of processing for each connection in each stage (including the IPC time but excluding the mosec_service_batch_duration_second_bucket).
    • mosec_service_remaining_task shows the number of currently processing tasks.
    • mosec_service_throughput shows the service throughput.
  • Stop the service with SIGINT or SIGTERM since it has the graceful shutdown logic.

Adopters

Here are some of the companies and individual users that are using Mosec:

  • MOSS: An open sourced conversational language model like ChatGPT.
  • TensorChord: A platform for building and deploying AI models.

Citation

If you find this software useful for your research, please consider citing

@software{yang2021mosec,
  title = {{MOSEC: Model Serving made Efficient in the Cloud}},
  author = {Yang, Keming and Liu, Zichen and Cheng, Philip},
  url = {https://github.com/mosecorg/mosec},
  year = {2021}
}

Contributing

We welcome any kind of contribution. Please give us feedback by raising issues or discussing on Discord. You could also directly contribute your code and pull request!

To start develop, you can use envd to create an isolated and clean Python & Rust environment. Check the envd-docs or build.envd for more information.

Qualitative Comparison*

Batcher Pipeline Parallel I/O Format(1) Framework(2) Backend Activity
TF Serving Limited(a) Heavily TF C++
Triton Limited Multiple C++
MMS Limited Heavily MX Java
BentoML Limited(b) Multiple Python
Streamer Customizable Agnostic Python
Flask(3) Customizable Agnostic Python
Mosec Customizable Agnostic Rust

*As accessed on 08 Oct 2021. By no means is this comparison showing that other frameworks are inferior, but rather it is used to illustrate the trade-off. The information is not guaranteed to be absolutely accurate. Please let us know if you find anything that may be incorrect.

(1): Data format of the service's request and response. "Limited" in the sense that the framework has pre-defined requirements on the format. (2): Supported machine learning frameworks. "Heavily" means the serving framework is designed towards a specific ML framework. Thus it is hard, if not impossible, to adapt to others. "Multiple" means the serving framework provides adaptation to several existing ML frameworks. "Agnostic" means the serving framework does not necessarily care about the ML framework. Hence it supports all ML frameworks (in Python). (3): Flask is a representative of general purpose web frameworks to host ML models.

Project details


Release history Release notifications | RSS feed

This version

0.6.5

Download files

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

Source Distribution

mosec-0.6.5.tar.gz (65.0 kB view details)

Uploaded Source

Built Distributions

mosec-0.6.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

mosec-0.6.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded PyPy macOS 10.9+ x86-64

mosec-0.6.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

mosec-0.6.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded PyPy macOS 10.9+ x86-64

mosec-0.6.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

mosec-0.6.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded PyPy macOS 10.9+ x86-64

mosec-0.6.5-cp311-cp311-musllinux_1_1_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

mosec-0.6.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

mosec-0.6.5-cp311-cp311-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

mosec-0.6.5-cp310-cp310-musllinux_1_1_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

mosec-0.6.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

mosec-0.6.5-cp310-cp310-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

mosec-0.6.5-cp39-cp39-musllinux_1_1_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

mosec-0.6.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

mosec-0.6.5-cp39-cp39-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

mosec-0.6.5-cp38-cp38-musllinux_1_1_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

mosec-0.6.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

mosec-0.6.5-cp38-cp38-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

mosec-0.6.5-cp37-cp37m-musllinux_1_1_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

mosec-0.6.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

mosec-0.6.5-cp37-cp37m-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

Details for the file mosec-0.6.5.tar.gz.

File metadata

  • Download URL: mosec-0.6.5.tar.gz
  • Upload date:
  • Size: 65.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for mosec-0.6.5.tar.gz
Algorithm Hash digest
SHA256 17fde46b5baadaafeb863435b0929f27082d113f88906829c8f30442bbadc700
MD5 af08343b97a4cfb16e028f600d5abab2
BLAKE2b-256 2b064aca09d625deeb6816785749f37fec426c7a952000ab9198332f1d4a769c

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8b52bffc71eeb66baa664be845574fa618b36c8662308ffdd3a2aa96720e9443
MD5 8f151968c1d2d0af8ba8b5d7223b478d
BLAKE2b-256 2dd5b5e931638ab9e64c352641a3eef37904e164845c55c88421b52324905f56

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f2305c238964fbbf360bc11e48f5992d4031126072e41751578e9b427698de72
MD5 9d52ea296474bc938d922b12c780b85b
BLAKE2b-256 85d8217b5eb7eaf8dd6bf9086b48da54c251cf3018f6d946e4b0d59e29a85e80

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2d2b49b1b3b5e4100f14798580a187c8e73358876899afbaa78a5175e5fa47b3
MD5 72113f94540c8421aed28ce2172eeb3c
BLAKE2b-256 98d562d2e3ce3bfc3495b307c6db218c090bbafbccafa0ad30127544723d560c

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d2c95e8328b77f938d9aaacd226dc82db4c3327dd40237cd410c904a3999d975
MD5 355060e00f152a4d4141545b72ddef23
BLAKE2b-256 a62d53641e42b8d651bab1693a41b57cd484b70ac0dfb414fb2d84f9d550a815

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 10799dc720378d8b05bfcaae47ab9b5c5a0146081412ef052bde3731e2df7267
MD5 5c892a22c3abe7de9e30650ac5922952
BLAKE2b-256 3c011a8c138820ba982df90447ea6bf2535ff411daad8e4e8ab5e447caabca39

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 57604300196419ba1a4235ad6342a5ae77d10838dbfbd613a79fe3fdd68bf240
MD5 ab823afc744dc23b1590767af8a7ac88
BLAKE2b-256 dfb5eece5e3dbb8485addc48e78eca95c15b0f74068404ebc007bbbdc549d2bb

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 70b762803d478d4d9cfe3402f5649bfa3253bbce5fa89f67012668aae540967f
MD5 dfdc5e857510feaa9565d8d7a78bb493
BLAKE2b-256 b506823796041febb98cd7e4eb25844a03cd6857df6d35fe441d03c151ed8da3

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 059b52e2cbb12a2ef62c96fba9b32219178c4588145860d46f42ca1502a64270
MD5 e627b29904df7186319252b56c187c55
BLAKE2b-256 4a533b9c90de242a8632ad4f6850dbbdff09bca588df616f63fa7bbbcd655b42

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 dfc2892ff8c6073ac678febf0f5fd1302d29fd26bdcd3b7904cc525682290ca2
MD5 5dfe1b0d46541077111a14cd92aa2bde
BLAKE2b-256 1c9a14116db894b1be2f8bd0d50f02a8390ad95558ed1d85f6d502cb2e829134

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 be5840c9c1051104ff722dac818363b7ebbb2253a4c69673633ace070e4d669f
MD5 14437eef7f0449512e50b164378f6643
BLAKE2b-256 ca328aaa172b02f3e09c22ff675bc2ff896690c329634fa47e9ca88e6df32549

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b9d71735db0981691b709357a9fd11d50c6c282e3d6da6243cb6f742d9c19e8e
MD5 ff7e5357ad97c846ca752dd4fabfe3f1
BLAKE2b-256 279fe9cd5c3db5a1d784927dc70850c1eccd06debd6f317406df6b101c541c54

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8fc2fdccdf9a7939b64141721334e9a41e14372f4c34b175b076729f79c6359b
MD5 effd1e2a83b8b71168cb4a38dc2e8ddb
BLAKE2b-256 3e5ff007e9227a1ee70a8a3a8c7ec75fbd815edfc8f15c921dcdac958cc490ec

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 26c8734c008b4f76db6da6e9973328c2733ae8439c740aff4aadcfec3bfca774
MD5 d3915a24e21dc759dd3820ecbcdde8fc
BLAKE2b-256 3d8d312d147a78c1783d9f5e325f5bf3342ab1f21d7d5626b759740828ffd795

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 685cfd6d6b4e61599d7465861954f9b3382b8a2f0da216ec92d0f1905b963779
MD5 8e9e701147f2be693669b16b810b4f52
BLAKE2b-256 7f555c037011aed7fb22dfa9174b2c24489c9fdb2e9606e0872419f1e90661cf

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cc8e1a490fffbea33d635bcf5d03c68c5352c2a8c1d482ea7f79c6c4b0dbfe89
MD5 6b7367f1f085e48875d2a52dc62bf240
BLAKE2b-256 7ae1b96d16dbe2915bf641a960447a8138b5ee9e71b255627653dc87776b8a5b

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 b454120ae0a3129320969467bd44603da0bf330973b7831b49d973c45b9c0232
MD5 c778d2d4bd6823f4ac81e4d47a113313
BLAKE2b-256 8b32f47856d5293b4eb62ab05b3b03ca9ef58ed6c11bda98cd11d5ee5f3fc155

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bff9e70c1477b8a51f82d73c9ecf2c195118a776875c9386a7dfdb77db2a351d
MD5 78a53a3d41db3311e2a6c682235af1fe
BLAKE2b-256 9576758c75878be2b980ed826512bb172bfe47f0dabcc1d055505aeb6e345ff6

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9b8f36b274bb3c91aafad91991b340a2118f0d8b7888525836593e650fe9a072
MD5 7bc73435f9c46b4ce3767523939fd474
BLAKE2b-256 1692868ddfbae05cbc00d6888c1c9242404c46a951e12106bd043175ad372e15

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 a5926fca8600100a9dfb735129643fa6a6f87d37f54be2c534256003bba98ea4
MD5 33f29622861531bc40c159bc9a4d25a2
BLAKE2b-256 174bce92df6f07da13f583e2319e35aac7bdd60b3f573cbaa781e55b9a819615

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 27bbbb184092a0fb6e032678269fb1be9bee94b90915dcc001a94b6877c47995
MD5 d791a3db014a2f41ec84b73123ceb0de
BLAKE2b-256 337ad6454d3bf86e80f39cf89cb95f8bf8ec2929dd11765a998b7711eaaccc88

See more details on using hashes here.

File details

Details for the file mosec-0.6.5-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for mosec-0.6.5-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1a6aeab4a947fc296fdf8261e3c8413ef1001461bd27f125e722024a86762103
MD5 ca4ed6e6c0ba17123f85e40478508962
BLAKE2b-256 de1209ba5dee3b7fed043e0d1ed8df9ed478d6f88fb5fea5b9af83612d7b9116

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