Skip to main content

MindSpore is a new open source deep learning training/inference framework that could be used for mobile, edge and cloud scenarios.

Project description

MindSpore Logo

PyPI - Python Version PyPI Downloads DockerHub LICENSE Slack PRs Welcome

查看中文

What Is MindSpore

MindSpore is a new open source deep learning training/inference framework that could be used for mobile, edge and cloud scenarios. MindSpore is designed to provide development experience with friendly design and efficient execution for the data scientists and algorithmic engineers, native support for Ascend AI processor, and software hardware co-optimization. At the meantime MindSpore as a global AI open source community, aims to further advance the development and enrichment of the AI software/hardware application ecosystem.

MindSpore Architecture

For more details please check out our Architecture Guide.

Automatic Differentiation

Currently, there are two automatic differentiation techniques in mainstream deep learning frameworks:

  • Operator Overloading (OO): Overloading the basic operators of the programming language to encapsulate their gradient rules. Record the operation trajectory of the network during forward execution in an operator overloaded manner, then apply the chain rule to the dynamically generated data flow graph to implement automatic differentiation.
  • Source Transformation (ST): This technology is evolving from the functional programming framework and performs automatic differential transformation on the intermediate expression (the expression form of the program during the compilation process) in the form of just-in-time compilation (JIT), supporting complex control flow scenarios, higher-order functions and closures.

PyTorch used OO. Compared to ST, OO generates gradient graph in runtime, so it does not need to take function call and control flow into consideration, which makes it easier to develop. However, OO can not perform gradient graph optimization in compilation time and the control flow has to be unfolded in runtime, so it is difficult to achieve extreme optimization in performance.

MindSpore implemented automatic differentiation based on ST. On the one hand, it supports automatic differentiation of automatic control flow, so it is quite convenient to build models like PyTorch. On the other hand, MindSpore can perform static compilation optimization on neural networks to achieve great performance.

Automatic Differentiation

The implementation of MindSpore automatic differentiation can be understood as the symbolic differentiation of the program itself. Because MindSpore IR is a functional intermediate expression, it has an intuitive correspondence with the composite function in basic algebra. The derivation formula of the composite function composed of arbitrary basic functions can be derived. Each primitive operation in MindSpore IR can correspond to the basic functions in basic algebra, which can build more complex flow control.

Automatic Parallel

The goal of MindSpore automatic parallel is to build a training method that combines data parallelism, model parallelism, and hybrid parallelism. It can automatically select a least cost model splitting strategy to achieve automatic distributed parallel training.

Automatic Parallel

At present, MindSpore uses a fine-grained parallel strategy of splitting operators, that is, each operator in the figure is split into a cluster to complete parallel operations. The splitting strategy during this period may be very complicated, but as a developer advocating Pythonic, you don't need to care about the underlying implementation, as long as the top-level API compute is efficient.

Installation

Pip mode method installation

MindSpore offers build options across multiple backends:

Hardware Platform Operating System Status
Ascend910 Ubuntu-x86 ✔️
Ubuntu-aarch64 ✔️
EulerOS-aarch64 ✔️
CentOS-x86 ✔️
CentOS-aarch64 ✔️
GPU CUDA 10.1 Ubuntu-x86 ✔️
CPU Ubuntu-x86 ✔️
Ubuntu-aarch64 ✔️
Windows-x86 ✔️

For installation using pip, take CPU and Ubuntu-x86 build version as an example:

  1. Download whl from MindSpore download page, and install the package.

    pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.2.0-rc1/MindSpore/cpu/ubuntu_x86/mindspore-1.2.0rc1-cp37-cp37m-linux_x86_64.whl
    
  2. Run the following command to verify the install.

    import numpy as np
    import mindspore.context as context
    import mindspore.nn as nn
    from mindspore import Tensor
    from mindspore.ops import operations as P
    
    context.set_context(mode=context.GRAPH_MODE, device_target="CPU")
    
    class Mul(nn.Cell):
        def __init__(self):
            super(Mul, self).__init__()
            self.mul = P.Mul()
    
        def construct(self, x, y):
            return self.mul(x, y)
    
    x = Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32))
    y = Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32))
    
    mul = Mul()
    print(mul(x, y))
    
    [ 4. 10. 18.]
    

Use pip mode method to install MindSpore in different environments. Refer to the following documents.

Source code compilation installation

Use the source code compilation method to install MindSpore in different environments. Refer to the following documents.

Docker Image

MindSpore docker image is hosted on Docker Hub, currently the containerized build options are supported as follows:

Hardware Platform Docker Image Repository Tag Description
CPU mindspore/mindspore-cpu x.y.z Production environment with pre-installed MindSpore x.y.z CPU release.
devel Development environment provided to build MindSpore (with CPU backend) from the source, refer to https://www.mindspore.cn/install/en for installation details.
runtime Runtime environment provided to install MindSpore binary package with CPU backend.
GPU mindspore/mindspore-gpu x.y.z Production environment with pre-installed MindSpore x.y.z GPU release.
devel Development environment provided to build MindSpore (with GPU CUDA10.1 backend) from the source, refer to https://www.mindspore.cn/install/en for installation details.
runtime Runtime environment provided to install MindSpore binary package with GPU CUDA10.1 backend.

NOTICE: For GPU devel docker image, it's NOT suggested to directly install the whl package after building from the source, instead we strongly RECOMMEND you transfer and install the whl package inside GPU runtime docker image.

  • CPU

    For CPU backend, you can directly pull and run the latest stable image using the below command:

    docker pull mindspore/mindspore-cpu:1.1.0
    docker run -it mindspore/mindspore-cpu:1.1.0 /bin/bash
    
  • GPU

    For GPU backend, please make sure the nvidia-container-toolkit has been installed in advance, here are some install guidelines for Ubuntu users:

    DISTRIBUTION=$(. /etc/os-release; echo $ID$VERSION_ID)
    curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
    curl -s -L https://nvidia.github.io/nvidia-docker/$DISTRIBUTION/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list
    
    sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-docker2
    sudo systemctl restart docker
    

    Then edit the file daemon.json:

    $ vim /etc/docker/daemon.json
    {
        "runtimes": {
            "nvidia": {
                "path": "nvidia-container-runtime",
                "runtimeArgs": []
            }
        }
    }
    

    Restart docker again:

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    Then you can pull and run the latest stable image using the below command:

    docker pull mindspore/mindspore-gpu:1.1.0
    docker run -it -v /dev/shm:/dev/shm --runtime=nvidia --privileged=true mindspore/mindspore-gpu:1.1.0 /bin/bash
    

    To test if the docker image works, please execute the python code below and check the output:

    import numpy as np
    import mindspore.context as context
    from mindspore import Tensor
    from mindspore.ops import functional as F
    
    context.set_context(mode=context.PYNATIVE_MODE, device_target="GPU")
    
    x = Tensor(np.ones([1,3,3,4]).astype(np.float32))
    y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
    print(F.tensor_add(x, y))
    
    [[[ 2.  2.  2.  2.],
    [ 2.  2.  2.  2.],
    [ 2.  2.  2.  2.]],
    
    [[ 2.  2.  2.  2.],
    [ 2.  2.  2.  2.],
    [ 2.  2.  2.  2.]],
    
    [[ 2.  2.  2.  2.],
    [ 2.  2.  2.  2.],
    [ 2.  2.  2.  2.]]]
    

If you want to learn more about the building process of MindSpore docker images, please check out docker repo for the details.

Quickstart

See the Quick Start to implement the image classification.

Docs

More details about installation guide, tutorials and APIs, please see the User Documentation.

Community

Governance

Check out how MindSpore Open Governance works.

Communication

Contributing

Welcome contributions. See our Contributor Wiki for more details.

Maintenance phases

Project stable branches will be in one of the following states:

State Time frame Summary
Planning 1 - 3 months Features are under planning.
Development 3 months Features are under development.
Maintained 6 - 12 months All bugfixes are appropriate. Releases produced.
Unmaintained 0 - 3 months All bugfixes are appropriate. No Maintainers and No Releases produced.
End Of Life (EOL) N/A Branch no longer accepting changes.

Maintenance status

Branch Status Initial Release Date Next Phase EOL Date
r2.2 Maintained 2023-10-18 Unmaintained
2024-10-18 estimated
r2.1 Maintained 2023-07-29 Unmaintained
2024-07-29 estimated
r2.0 Maintained 2023-06-15 Unmaintained
2024-06-15 estimated
r1.10 End Of Life 2023-02-02 2024-02-02
r1.9 End Of Life 2022-10-26 2023-10-26
r1.8 End Of Life 2022-07-29 2023-07-29
r1.7 End Of Life 2022-04-29 2023-04-29
r1.6 End Of Life 2022-01-29 2023-01-29
r1.5 End Of Life 2021-10-15 2022-10-15
r1.4 End Of Life 2021-08-15 2022-08-15
r1.3 End Of Life 2021-07-15 2022-07-15
r1.2 End Of Life 2021-04-15 2022-04-29
r1.1 End Of Life 2020-12-31 2021-09-30
r1.0 End Of Life 2020-09-24 2021-07-30
r0.7 End Of Life 2020-08-31 2021-02-28
r0.6 End Of Life 2020-07-31 2020-12-30
r0.5 End Of Life 2020-06-30 2021-06-30
r0.3 End Of Life 2020-05-31 2020-09-30
r0.2 End Of Life 2020-04-30 2020-08-31
r0.1 End Of Life 2020-03-28 2020-06-30

Release Notes

The release notes, see our RELEASE.

License

Apache License 2.0

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

mindspore_dev-2.3.0.dev20240526-cp39-none-any.whl (244.8 MB view details)

Uploaded CPython 3.9

mindspore_dev-2.3.0.dev20240526-cp39-cp39-macosx_11_0_arm64.whl (165.7 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

mindspore_dev-2.3.0.dev20240526-cp39-cp39-macosx_10_15_x86_64.whl (181.0 MB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

mindspore_dev-2.3.0.dev20240526-cp38-none-any.whl (244.8 MB view details)

Uploaded CPython 3.8

mindspore_dev-2.3.0.dev20240526-cp38-cp38-macosx_11_0_arm64.whl (165.7 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

mindspore_dev-2.3.0.dev20240526-cp38-cp38-macosx_10_15_x86_64.whl (181.0 MB view details)

Uploaded CPython 3.8 macOS 10.15+ x86-64

mindspore_dev-2.3.0.dev20240526-cp37-none-any.whl (244.6 MB view details)

Uploaded CPython 3.7

mindspore_dev-2.3.0.dev20240526-cp37-cp37m-macosx_10_15_x86_64.whl (180.9 MB view details)

Uploaded CPython 3.7m macOS 10.15+ x86-64

File details

Details for the file mindspore_dev-2.3.0.dev20240526-cp39-none-any.whl.

File metadata

  • Download URL: mindspore_dev-2.3.0.dev20240526-cp39-none-any.whl
  • Upload date:
  • Size: 244.8 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.1

File hashes

Hashes for mindspore_dev-2.3.0.dev20240526-cp39-none-any.whl
Algorithm Hash digest
SHA256 35756822299851db7e85a6098e9828320d5dbbb3c8976d15eefaf998b9d6d24b
MD5 614fd7763bbd40a4e9d2881570fa0171
BLAKE2b-256 6050b77f7e5f50cb36d86d26569910eb19f8239a8f1ae7a53529aab239788dbd

See more details on using hashes here.

File details

Details for the file mindspore_dev-2.3.0.dev20240526-cp39-cp39-manylinux1_x86_64.whl.

File metadata

  • Download URL: mindspore_dev-2.3.0.dev20240526-cp39-cp39-manylinux1_x86_64.whl
  • Upload date:
  • Size: 847.7 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.1

File hashes

Hashes for mindspore_dev-2.3.0.dev20240526-cp39-cp39-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 13477fb9738f0def67f7d340e615e25e19ae573b22510417c0d16a4a6a1cc28b
MD5 a04a6a4ed6cbe115ab926b4bb9506bd4
BLAKE2b-256 d7b96561abd28153c4f5239d70498f22aff01cbda2648a1807ec2a2e462a7eed

See more details on using hashes here.

File details

Details for the file mindspore_dev-2.3.0.dev20240526-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: mindspore_dev-2.3.0.dev20240526-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 165.7 MB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.1

File hashes

Hashes for mindspore_dev-2.3.0.dev20240526-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f8f384fcc009d7601536d1b7081ba0e073b8058b0c6584a84e7a01d47761fc60
MD5 9bc42d36c16f31384b2d0e8a9e9abaea
BLAKE2b-256 8e33eedef22f5cc268fbbfcba711fce80e518fdf1f14e72fd0a807d50de5a28c

See more details on using hashes here.

File details

Details for the file mindspore_dev-2.3.0.dev20240526-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: mindspore_dev-2.3.0.dev20240526-cp39-cp39-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 181.0 MB
  • Tags: CPython 3.9, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.1

File hashes

Hashes for mindspore_dev-2.3.0.dev20240526-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 2127736e41a591ebfd1138055b5e170feab6964b23b6006bd186f9884ae00627
MD5 54abccb790a47e4e1058c4b43b541aca
BLAKE2b-256 1ad3d5b12c4e40ec7df0ce3ff8057fce9d6bb4633483bc9b471a03bf9d0594ca

See more details on using hashes here.

File details

Details for the file mindspore_dev-2.3.0.dev20240526-cp38-none-any.whl.

File metadata

  • Download URL: mindspore_dev-2.3.0.dev20240526-cp38-none-any.whl
  • Upload date:
  • Size: 244.8 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.1

File hashes

Hashes for mindspore_dev-2.3.0.dev20240526-cp38-none-any.whl
Algorithm Hash digest
SHA256 1133ba166d56cce66d32dacad0e4296615d212157d53fc5ba913cbbee87124f9
MD5 80ce4d5814cf3dfd78dc4d6b80c55b8f
BLAKE2b-256 b634e70b76e61d3f50857e00f947ef4a9816afc4e9dd08bb67cd6b01a3f383e9

See more details on using hashes here.

File details

Details for the file mindspore_dev-2.3.0.dev20240526-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: mindspore_dev-2.3.0.dev20240526-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 847.7 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.1

File hashes

Hashes for mindspore_dev-2.3.0.dev20240526-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 8f665e1c76298e29adf2cc7cca1bdcb4d0290c00e9a34901d91750d072e35e65
MD5 9b3318aca7f3a2324644c72e8d1c07bf
BLAKE2b-256 89b32c97a54152a591a8e2a13f138bd9c26bc2838f69ab97be7c410753abf370

See more details on using hashes here.

File details

Details for the file mindspore_dev-2.3.0.dev20240526-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: mindspore_dev-2.3.0.dev20240526-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 165.7 MB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.1

File hashes

Hashes for mindspore_dev-2.3.0.dev20240526-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8ef2cb9ffb81af48ed3bf52190537383ca90d277ef60ddfe8dca921511757754
MD5 36b08abf29d718e63c25d59731a91207
BLAKE2b-256 316096aa05387e3608ffb2e0e5529ec6c8c1cfd693028c349352b118abd11369

See more details on using hashes here.

File details

Details for the file mindspore_dev-2.3.0.dev20240526-cp38-cp38-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: mindspore_dev-2.3.0.dev20240526-cp38-cp38-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 181.0 MB
  • Tags: CPython 3.8, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.1

File hashes

Hashes for mindspore_dev-2.3.0.dev20240526-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 2daa0a5a46a802023cca7e3438fb69913ccfa6854f9b6062da7e862b46918e25
MD5 591c1016df518fb0b88a4d82bd08b0c0
BLAKE2b-256 5a07dd776f286e0433b2e66bd8cf6a61c7a095f350696213bab6832c65635fe2

See more details on using hashes here.

File details

Details for the file mindspore_dev-2.3.0.dev20240526-cp37-none-any.whl.

File metadata

  • Download URL: mindspore_dev-2.3.0.dev20240526-cp37-none-any.whl
  • Upload date:
  • Size: 244.6 MB
  • Tags: CPython 3.7
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.1

File hashes

Hashes for mindspore_dev-2.3.0.dev20240526-cp37-none-any.whl
Algorithm Hash digest
SHA256 043d4c1e59440785ad0d422088cef6f1cb309bc44d4ecdbfc97ca9cd0158cd04
MD5 0ceb96a46dc91b4105f950ffde123c68
BLAKE2b-256 2ffc26e3ad4804f61661766f0fdf091f51a9df4c0093b3330ea830551a8d2bdd

See more details on using hashes here.

File details

Details for the file mindspore_dev-2.3.0.dev20240526-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: mindspore_dev-2.3.0.dev20240526-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 847.5 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.1

File hashes

Hashes for mindspore_dev-2.3.0.dev20240526-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3c52b612b4cc82c38bb91ff539c30e2e1b825efaa43c0bb315999b8ef7d8b01b
MD5 868196ae1fc03c7260bd013bd376596a
BLAKE2b-256 d1ddac5d13d3eb4f16411de4b893af4b6383aa19776b0359a1a06270618e388f

See more details on using hashes here.

File details

Details for the file mindspore_dev-2.3.0.dev20240526-cp37-cp37m-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: mindspore_dev-2.3.0.dev20240526-cp37-cp37m-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 180.9 MB
  • Tags: CPython 3.7m, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.1

File hashes

Hashes for mindspore_dev-2.3.0.dev20240526-cp37-cp37m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 f3c67c4c2f8a5ef93e4108269dbe43f62156b2d6062b11fbc9691533c6ca6ff1
MD5 ab5630a6f5cdb542d94ef552239f77f6
BLAKE2b-256 9ed098bc2ef0c4a55a6d3e60e5e7fb59404e5d543937c9f492e3c1cb828f8afc

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